[
  {
    "path": ".claude/settings.json",
    "content": "{\n  \"permissions\": {\n    \"allow\": [\n      \"Bash(go build:*)\"\n    ]\n  }\n}\n"
  },
  {
    "path": ".github/workflows/glowby-release.yml",
    "content": "name: Release glowby\n\non:\n  push:\n    tags:\n      - 'v*'\n\npermissions:\n  contents: write\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        goos: [darwin, linux, windows]\n        goarch: [amd64, arm64]\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: actions/setup-go@v5\n        with:\n          go-version: '1.24'\n\n      - name: Build binary\n        env:\n          GOOS: ${{ matrix.goos }}\n          GOARCH: ${{ matrix.goarch }}\n          CGO_ENABLED: '0'\n        run: |\n          if [ -d oss/cli ]; then\n            CLI_DIR=\"oss/cli\"\n          else\n            CLI_DIR=\"cli\"\n          fi\n          TAG=\"${GITHUB_REF#refs/tags/}\"\n          SHA=\"$(git rev-parse --short HEAD)\"\n          DATE=\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n          EXT=\"\"\n          if [ \"${{ matrix.goos }}\" = \"windows\" ]; then EXT=\".exe\"; fi\n          cd \"${CLI_DIR}\"\n          go build \\\n            -ldflags \"-s -w -X main.version=${TAG} -X main.commit=${SHA} -X main.date=${DATE}\" \\\n            -o \"glowby-${{ matrix.goos }}-${{ matrix.goarch }}${EXT}\" \\\n            .\n\n      - name: Create archive\n        run: |\n          if [ -d oss/cli ]; then\n            CLI_DIR=\"oss/cli\"\n          else\n            CLI_DIR=\"cli\"\n          fi\n          cd \"${CLI_DIR}\"\n          BIN=\"glowby-${{ matrix.goos }}-${{ matrix.goarch }}\"\n          if [ \"${{ matrix.goos }}\" = \"windows\" ]; then\n            mv \"${BIN}.exe\" glowby.exe\n            zip \"${BIN}.zip\" glowby.exe\n          else\n            mv \"${BIN}\" glowby\n            tar czf \"${BIN}.tar.gz\" glowby\n          fi\n\n      - name: Upload artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: glowby-${{ matrix.goos }}-${{ matrix.goarch }}\n          path: |\n            oss/cli/glowby-*.tar.gz\n            oss/cli/glowby-*.zip\n            cli/glowby-*.tar.gz\n            cli/glowby-*.zip\n\n  release:\n    needs: build\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/download-artifact@v4\n        with:\n          path: artifacts\n          merge-multiple: true\n\n      - name: Create release\n        uses: softprops/action-gh-release@v2\n        with:\n          generate_release_notes: true\n          files: artifacts/*\n"
  },
  {
    "path": ".gitignore",
    "content": "# See https://www.dartlang.org/guides/libraries/private-files\n\n# Files and directories created by pub\n.dart_tool/\n.packages\nbuild/\n# If you're building an application, you may want to check-in your pubspec.lock\npubspec.lock\n\n# Directory created by dartdoc\n# If you don't generate documentation locally you can remove this line.\ndoc/api/\n\n# Avoid committing generated Javascript files:\n*.dart.js\n*.info.json      # Produced by the --dump-info flag.\n*.js             # When generated by dart2js. Don't specify *.js if your\n                 # project includes source files written in JavaScript.\n*.js_\n*.js.deps\n*.js.map\nchat/.DS_Store\n.DS_Store\n/presets/compose/.idea\npresets/swiftui/Custom.xcodeproj/xcuserdata/jacobilin.xcuserdatad/xcschemes/xcschememanagement.plist\npresets/swiftui/Custom.xcodeproj/project.xcworkspace/xcuserdata/jacobilin.xcuserdatad/UserInterfaceState.xcuserstate\n/docs/.react-router/\n/docs/.source/\n/docs/build/\n/docs/node_modules/\n.obsidian/workspace.json\n.obsidian/core-plugins.json\n.obsidian/appearance.json\n.obsidian/app.json\nproject.zip\n/web/node_modules\nUntitled.md\n/web/dist\nbackend/glowbom-backend\nbackend/assets/flux-comfyui-workflow.json\nbackend/assets/128.json\nbackend/assets/128-api.json\nbackend/assets/104.json\nbackend/node/local.ts\nbackend/package.json\n/backend/saved_audio\n/backend/saved_images\nbackend/veo-bridge.js\nbackend/veo-cli.js\ncli/glowby\nbackend/server\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# Workspace Instructions\n\n## Commit Messages\n- After making code changes, always suggest a one-line conventional commit message.\n- Prefer the format `type: summary`."
  },
  {
    "path": "CLI.md",
    "content": "# glowby CLI\n\nTerminal-first CLI for Glowby OSS. Starts the Go backend and web UI, opens the browser, and manages the full local dev workflow from one command.\n\n## Install\n\n### From GitHub Releases\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/glowbom/glowby/main/scripts/install.sh | sh\n```\n\nOr set a custom install directory:\n\n```sh\nGLOWBY_INSTALL_DIR=~/.local/bin curl -fsSL ... | sh\n```\n\n### Build from source\n\n```sh\ncd cli\ngo build -o glowby .\n```\n\n## Commands\n\n### `glowby code`\n\nStart the backend, web UI, and open the browser from a local Glowby checkout.\n\n```sh\nglowby code                    # Start Glowby from the current checkout\nglowby code /path/to/project   # Start Glowby and print a project path hint\n```\n\nWhat it does:\n1. Starts the Go backend (`go run .` in `backend/`)\n2. Runs `bun install` in `web/` if `node_modules/` is missing\n3. Reclaims ports `4569` and `4572` if they are already occupied by a previous Glowby run\n4. Starts the web dev server (`bun run dev` in `web/`)\n5. Waits for the web server to be ready, then opens the browser\n6. If a project path is given, prints the path so you can load it in the UI\n\nPress Ctrl+C to stop both servers.\n\n**Argument parsing:**\n- If a positional arg is given and it is an existing directory, it is treated as the project path\n- If it is not an existing directory, the command exits with an error\n\n**Finding the Glowby root:** The CLI looks for sibling `backend/` and `web/` directories relative to the binary location or the current working directory and its parent directories.\n\n### `glowby doctor`\n\nCheck that required tools are installed.\n\n```sh\nglowby doctor\n```\n\nChecks for: `go` (required), `bun` (required), `opencode` (required), and a local Glowby checkout with sibling `backend/` and `web/` directories. Returns exit code 1 if required dependencies are missing.\n\n### `glowby version`\n\n```sh\nglowby version\n```\n\nPrints version, commit hash, and build date. These are injected at build time via ldflags.\n\n## Local Development\n\n```sh\ncd cli\n\n# Build\ngo build -o glowby .\n\n# Build with version info\ngo build -ldflags \"-s -w \\\n  -X main.version=v0.1.0 \\\n  -X main.commit=$(git rev-parse --short HEAD) \\\n  -X main.date=$(date -u +%Y-%m-%dT%H:%M:%SZ)\" \\\n  -o glowby .\n\n# Run\n./glowby version\n./glowby doctor\n./glowby code\n\n# Vet\ngo vet ./...\n```\n\n## Releases\n\nReleases are built automatically by GitHub Actions when a tag matching `v*` is pushed.\n\n```sh\ngit tag v0.1.0\ngit push origin v0.1.0\n```\n\nThe workflow builds binaries for:\n- macOS (amd64, arm64)\n- Linux (amd64, arm64)\n- Windows (amd64, arm64)\n\nArchives are uploaded to the GitHub Release page.\n\n## Exit Codes\n\n| Code | Meaning |\n|------|---------|\n| 0 | Success |\n| 1 | Command or dependency failure |\n| 2 | Usage error (unknown command, bad args) |\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Glowbom, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Glowby OSS\n\n> We just launched Glowby OSS! [See the announcement](https://x.com/jacobilin/status/2035059308463833292)\n\n**Build anything locally.**\n\nGlowby helps you build production-ready software with coding agents. It is an open source coding agent workflow for real projects. It is built primarily for Glowbom projects, but the workflow can also work with other project structures.\n\n## What It Does\n\n- Make software projects and prototypes production-ready with coding agents\n- Run on local projects with ChatGPT login, API keys, or OpenCode config\n\n## Vision\n\nWe believe that you should own your code and data. Every line of code Glowby generates lives on your machine, in standard project files you can open with any editor. No vendor lock-in.\n\n## Install\n\nInstall the Glowby CLI:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/glowbom/glowby/main/scripts/install.sh | sudo sh\n```\n\nFor Windows, we recommend using WSL and running the install command inside Ubuntu.\n\nThen clone the repo and enter it:\n\n```bash\ngit clone https://github.com/glowbom/glowby.git\ncd glowby\n```\n\n## Quickstart\n\nGlowby needs these tools available on your `PATH`:\n\n- [Go](https://go.dev/)\n- [Bun](https://bun.sh/)\n- [OpenCode](https://opencode.ai/)\n\nRun the built-in environment check and launch Glowby:\n\n```bash\nglowby doctor\nglowby code\n```\n\nRun those commands from the Glowby repo root, where `backend/` and `web/` live side by side.\n\n## Security Defaults\n\n`glowby code` now hardens the local stack by default:\n\n- Glowby services bind to loopback (`127.0.0.1`) instead of all interfaces\n- the backend API requires a per-run bearer token\n- the OpenCode bridge runs with `OPENCODE_SERVER_PASSWORD`\n\nTo view the generated credentials for the current session, start Glowby with `glowby code --show-local-auth`.\n\nIf you launch the stack manually, set equivalent env vars yourself:\n\n```bash\nexport GLOWBY_BIND_HOST=127.0.0.1\nexport GLOWBY_SERVER_TOKEN=\"$(openssl rand -hex 32)\"\nexport OPENCODE_SERVER_PASSWORD=\"$(openssl rand -hex 32)\"\n```\n\nThen run the backend with those env vars, and start the web app with:\n\n```bash\nexport VITE_GLOWBY_SERVER_TOKEN=\"$GLOWBY_SERVER_TOKEN\"\n```\n\n## Start Using Glowby OSS\n\n1. Open `http://localhost:4572`\n2. Load a local project\n3. Choose how you want to run the agent:\n   - ChatGPT login\n   - API keys\n   - OpenCode config\n4. Start a refine run\n\n## Cost\n\nYou can build with Glowby for free. Run local AI models on your own computer or connect to free cloud models. If you want access to premium models, you can connect a paid account or your own API keys, but you do not need to.\n\n## Requirements And Setup\n\nIf `glowby doctor` reports missing tools, install them first and confirm they are available on your `PATH`:\n\n```bash\ngo version\nbun --version\nopencode --version\n```\n\nIf any command is not found, restart your terminal first. If it still does not work, add the tool's install location to your `PATH` or reinstall it using the tool's recommended installer.\n\nOn macOS, a common fix is to add the tool's bin directory to your shell profile (usually `~/.zshrc`) and then reload it:\n\n```bash\n# Common PATH fixes on macOS\necho 'export PATH=\"/usr/local/go/bin:$PATH\"' >> ~/.zshrc\necho 'export BUN_INSTALL=\"$HOME/.bun\"' >> ~/.zshrc\necho 'export PATH=\"$BUN_INSTALL/bin:$PATH\"' >> ~/.zshrc\n\n# Add the directory that contains the opencode binary\necho 'export PATH=\"/path/to/opencode/bin:$PATH\"' >> ~/.zshrc\n\nsource ~/.zshrc\n```\n\nIf you use Bash instead of zsh, update `~/.bash_profile` or `~/.bashrc` instead.\n\n### Manual fallback\n\nIf you prefer to launch the stack without the CLI, run the backend and web app separately:\n\n#### Backend\n\n```bash\ncd backend\ngo run .\n```\nThe backend runs on `http://localhost:4569`.\n\n#### Web app\n\n```bash\ncd web\nbun install\nbun run dev\n```\n\nThe web app runs on `http://localhost:4572`.\n\n## Using the Bundled Default Project\n\nThis repo includes a ready-to-use Glowbom default project in `project/`.\n\nYou can use `project/` as your main starting template without logging in to Glowbom.com or downloading a project export first. Just copy the folder, rename it if you want, and start customizing it locally.\n\nThe bundled project includes:\n\n- `project/prototype/` - reference design and assets\n- `project/apple/` - Apple app project\n- `project/android/` - Android app project\n- `project/web/` - web app project\n- `project/glowbom.json` - project manifest\n\nIf you only need some targets, remove the platform folders you do not want:\n\n- Delete `project/apple/` if you do not need Apple platforms\n- Delete `project/android/` if you do not need Android\n- Delete `project/web/` if you do not need web\n- Keep all of them if you want to build every platform in sync from one Glowbom project\n\n## Project Structure\n\n- `backend/` - Go backend\n- `project/` - bundled default Glowbom project template\n- `web/` - React + Vite web app\n- `legacy/` - older Glowby code kept for reference\n"
  },
  {
    "path": "backend/backend_info_page.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"html\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\nconst (\n\tglowbyRepositoryURL   = \"https://github.com/glowbom/glowby\"\n\tglowbomWebsiteURL     = \"https://glowbom.com\"\n\tcodexAppServerURL     = \"https://developers.openai.com/codex/app-server/\"\n\tglowbomDesktopPDFPath = \"docs/2026/Glowbom_Desktop_A_Sketch_to_Software_System.pdf\"\n)\n\ntype backendInfo struct {\n\tName                   string            `json:\"name\"`\n\tSummary                string            `json:\"summary\"`\n\tHowItWorks             string            `json:\"howItWorks\"`\n\tRuntimeURL             string            `json:\"runtimeURL\"`\n\tLinks                  []backendInfoLink `json:\"links\"`\n\tDrivers                []backendDriver   `json:\"drivers\"`\n\tProjectDescriptionURL  string            `json:\"projectDescriptionURL,omitempty\"`\n\tProjectDescriptionPath string            `json:\"projectDescriptionPath,omitempty\"`\n}\n\ntype backendInfoLink struct {\n\tLabel string `json:\"label\"`\n\tURL   string `json:\"url\"`\n}\n\ntype backendDriver struct {\n\tID          string `json:\"id\"`\n\tLabel       string `json:\"label\"`\n\tStatus      string `json:\"status\"` // available | planned\n\tDescription string `json:\"description\"`\n}\n\nfunc resolveGlowbomDesktopPDFPath() (string, bool) {\n\tcandidates := []string{\n\t\tfilepath.FromSlash(filepath.Join(\"..\", glowbomDesktopPDFPath)),\n\t\tfilepath.FromSlash(glowbomDesktopPDFPath),\n\t}\n\n\tfor _, candidate := range candidates {\n\t\tabs, err := filepath.Abs(candidate)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tinfo, err := os.Stat(abs)\n\t\tif err != nil || info.IsDir() {\n\t\t\tcontinue\n\t\t}\n\t\treturn abs, true\n\t}\n\n\treturn \"\", false\n}\n\nfunc resolveGlowbyPublicAssetPath(fileName string) (string, bool) {\n\tsafeName := strings.TrimSpace(fileName)\n\tif safeName == \"\" || strings.Contains(safeName, \"/\") || strings.Contains(safeName, \"\\\\\") {\n\t\treturn \"\", false\n\t}\n\n\tcandidates := []string{\n\t\tfilepath.FromSlash(filepath.Join(\"..\", \"website\", \"glowby-oss\", \"public\", safeName)),\n\t\tfilepath.FromSlash(filepath.Join(\"website\", \"glowby-oss\", \"public\", safeName)),\n\t}\n\n\tfor _, candidate := range candidates {\n\t\tabs, err := filepath.Abs(candidate)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tinfo, err := os.Stat(abs)\n\t\tif err != nil || info.IsDir() {\n\t\t\tcontinue\n\t\t}\n\t\treturn abs, true\n\t}\n\n\treturn \"\", false\n}\n\nfunc serveGlowbyPublicAsset(w http.ResponseWriter, r *http.Request, fileName string) {\n\tif r.Method != http.MethodGet && r.Method != http.MethodHead {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tassetPath, ok := resolveGlowbyPublicAssetPath(fileName)\n\tif !ok {\n\t\thttp.NotFound(w, r)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Cache-Control\", \"no-store\")\n\thttp.ServeFile(w, r, assetPath)\n}\n\nfunc glowbyFaviconHandler(w http.ResponseWriter, r *http.Request) {\n\tserveGlowbyPublicAsset(w, r, \"favicon.png\")\n}\n\nfunc glowbyLogoSVGHandler(w http.ResponseWriter, r *http.Request) {\n\tserveGlowbyPublicAsset(w, r, \"logo-svg.svg\")\n}\n\nfunc glowbyBackendInfoPayload() backendInfo {\n\tinfo := backendInfo{\n\t\tName:       \"Glowby\",\n\t\tSummary:    \"Choose a project folder and let Glowby finish the engineering work locally.\",\n\t\tHowItWorks: \"Glowby manages agent drivers for you, keeps context in one place, and streams every step while code is being improved.\",\n\t\tRuntimeURL: \"http://127.0.0.1:\" + getAgentPort(),\n\t\tLinks: []backendInfoLink{\n\t\t\t{Label: \"Glowby OSS repository\", URL: glowbyRepositoryURL},\n\t\t\t{Label: \"Glowbom website\", URL: glowbomWebsiteURL},\n\t\t\t{Label: \"Codex App Server\", URL: codexAppServerURL},\n\t\t\t{Label: \"Backend metadata (JSON)\", URL: \"/opencode/about\"},\n\t\t\t{Label: \"Backend health\", URL: \"/opencode/health\"},\n\t\t\t{Label: \"Auth status\", URL: \"/opencode/auth/status\"},\n\t\t},\n\t\tDrivers: []backendDriver{\n\t\t\t{\n\t\t\t\tID:          \"opencode\",\n\t\t\t\tLabel:       \"OpenCode\",\n\t\t\t\tStatus:      \"available\",\n\t\t\t\tDescription: \"Default driver today. Great for local refine runs and broad model/provider flexibility.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:          \"codex-app-server\",\n\t\t\t\tLabel:       \"Codex App Server\",\n\t\t\t\tStatus:      \"planned\",\n\t\t\t\tDescription: \"Next planned driver. You will be able to switch drivers without changing your project workflow.\",\n\t\t\t},\n\t\t},\n\t}\n\n\tif pdfPath, ok := resolveGlowbomDesktopPDFPath(); ok {\n\t\tinfo.ProjectDescriptionURL = \"/opencode/about/project-description\"\n\t\tinfo.ProjectDescriptionPath = pdfPath\n\t\tinfo.Links = append(info.Links, backendInfoLink{\n\t\t\tLabel: \"Glowbom Desktop system paper (PDF)\",\n\t\t\tURL:   info.ProjectDescriptionURL,\n\t\t})\n\t}\n\n\treturn info\n}\n\nfunc normalizedLinkHref(raw string) string {\n\thref := strings.TrimSpace(raw)\n\tif href == \"\" {\n\t\treturn \"#\"\n\t}\n\treturn href\n}\n\nfunc glowbyBackendHomeHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.URL.Path != \"/\" {\n\t\thttp.NotFound(w, r)\n\t\treturn\n\t}\n\n\tinfo := glowbyBackendInfoPayload()\n\tif strings.Contains(strings.ToLower(r.Header.Get(\"Accept\")), \"application/json\") {\n\t\tw.Header().Set(\"Content-Type\", \"application/json\")\n\t\t_ = json.NewEncoder(w).Encode(info)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Content-Type\", \"text/html; charset=utf-8\")\n\tw.Header().Set(\"Cache-Control\", \"no-store\")\n\n\tvar linksHTML strings.Builder\n\tfor _, link := range info.Links {\n\t\tlabel := html.EscapeString(strings.TrimSpace(link.Label))\n\t\thref := html.EscapeString(normalizedLinkHref(link.URL))\n\t\tif label == \"\" || href == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tlinksHTML.WriteString(fmt.Sprintf(`<li><a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">%s</a></li>`, href, label))\n\t}\n\n\tvar driversHTML strings.Builder\n\tfor _, driver := range info.Drivers {\n\t\tlabel := html.EscapeString(strings.TrimSpace(driver.Label))\n\t\tstatus := \"Planned\"\n\t\tif strings.EqualFold(strings.TrimSpace(driver.Status), \"available\") {\n\t\t\tstatus = \"Available\"\n\t\t}\n\t\tdescription := html.EscapeString(strings.TrimSpace(driver.Description))\n\t\tdriversHTML.WriteString(fmt.Sprintf(\n\t\t\t`<li><strong>%s</strong> <span class=\"chip\">%s</span><div class=\"driver-desc\">%s</div></li>`,\n\t\t\tlabel,\n\t\t\thtml.EscapeString(status),\n\t\t\tdescription,\n\t\t))\n\t}\n\n\tprojectPathLine := `<p class=\"meta\"><strong>Project description PDF:</strong> not found locally.</p>`\n\tif strings.TrimSpace(info.ProjectDescriptionPath) != \"\" {\n\t\tprojectPathLine = fmt.Sprintf(\n\t\t\t`<p class=\"meta\"><strong>Local PDF path:</strong> <code>%s</code></p>`,\n\t\t\thtml.EscapeString(info.ProjectDescriptionPath),\n\t\t)\n\t}\n\n\tpage := fmt.Sprintf(`<!doctype html>\n<html>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <title>%s</title>\n    <style>\n      :root {\n        color-scheme: light;\n        --bg: #fafafa;\n        --surface: #ffffff;\n        --surface-soft: #f3f8f6;\n        --text: #2b2b2b;\n        --muted: #5c5c5c;\n        --border: #dfe9e4;\n        --brand-green: #29de92;\n        --brand-cyan: #29ded3;\n      }\n      * { box-sizing: border-box; }\n      body {\n        margin: 0;\n        min-height: 100vh;\n        background: linear-gradient(180deg, #eaf0ef 0%%, #f1f4f3 32%%, #f8f8f8 100%%);\n        color: var(--text);\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;\n      }\n      .topbar {\n        height: 80px;\n        border-bottom: 1px solid #eef4f1;\n        background: #ffffff;\n      }\n      .topbar-inner {\n        max-width: 1420px;\n        height: 100%%;\n        margin: 0 auto;\n        padding: 0 22px;\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 18px;\n      }\n      .topbar-logo {\n        display: inline-flex;\n        align-items: center;\n      }\n      .topbar-logo img {\n        width: 118px;\n        height: 29px;\n        margin-top: 8px;\n      }\n      .topbar-links {\n        display: flex;\n        align-items: center;\n        gap: 22px;\n        margin-left: auto;\n        margin-right: 8px;\n      }\n      .topbar-links a {\n        color: var(--text);\n        text-decoration: none;\n        font-size: 16px;\n        font-weight: 400;\n      }\n      .topbar-links a:hover {\n        color: var(--brand-green);\n        text-decoration: underline;\n      }\n      .button {\n        border: none;\n        border-radius: 999px;\n        padding: 11px 18px;\n        background-image: radial-gradient(circle farthest-side at 0%% 0%%, var(--brand-green), var(--brand-cyan));\n        color: #ffffff;\n        font: inherit;\n        font-weight: 600;\n        text-decoration: none;\n      }\n      main {\n        width: min(1120px, 100%%);\n        margin: 0 auto;\n        padding: 24px 16px 34px;\n        display: grid;\n        gap: 12px;\n      }\n      .hero {\n        border: 1px solid #e2f0ea;\n        border-radius: 16px;\n        background: linear-gradient(140deg, rgba(255, 255, 255, 0.98) 0%%, rgba(238, 250, 244, 0.98) 100%%);\n        box-shadow: 0 18px 44px rgba(41, 222, 146, 0.14);\n        padding: 22px 22px;\n        display: grid;\n        gap: 8px;\n      }\n      .card {\n        border: 1px solid var(--border);\n        border-radius: 16px;\n        background: #ffffff;\n        box-shadow: 0 8px 22px rgba(43, 43, 43, 0.08);\n        padding: 16px;\n        display: grid;\n        gap: 8px;\n      }\n      h1 {\n        margin: 0 0 6px;\n        font-size: clamp(1.9rem, 1.15rem + 2.1vw, 2.7rem);\n        line-height: 1;\n      }\n      h2 {\n        margin: 0;\n        font-size: 1.08rem;\n      }\n      p {\n        margin: 0;\n        line-height: 1.5;\n      }\n      ol, ul {\n        margin: 0;\n        padding-left: 20px;\n        display: grid;\n        gap: 7px;\n      }\n      a {\n        color: #177e52;\n        text-decoration: none;\n        font-weight: 600;\n      }\n      a:hover { text-decoration: underline; }\n      .meta {\n        margin-top: 8px;\n        color: #5c5c5c;\n        font-size: 0.9rem;\n      }\n      code {\n        background: #f1f6f3;\n        border-radius: 6px;\n        padding: 2px 6px;\n      }\n      .chip {\n        display: inline-flex;\n        align-items: center;\n        border-radius: 999px;\n        border: 1px solid #bfe6d3;\n        background: #effbf5;\n        color: #157047;\n        font-size: 0.75rem;\n        font-weight: 700;\n        padding: 3px 9px;\n        margin-left: 6px;\n      }\n      .driver-desc {\n        color: var(--muted);\n        font-size: 0.9rem;\n        margin-top: 2px;\n      }\n      @media (max-width: 880px) {\n        .topbar {\n          height: 72px;\n        }\n        .topbar-inner {\n          padding: 0 12px;\n        }\n        .topbar-links {\n          display: none;\n        }\n        .button {\n          padding: 9px 13px;\n          font-size: 0.82rem;\n        }\n      }\n    </style>\n  </head>\n  <body>\n    <header class=\"topbar\">\n      <div class=\"topbar-inner\">\n        <a class=\"topbar-logo\" href=\"https://glowbom.com\" target=\"_blank\" rel=\"noreferrer\">\n          <img alt=\"Glowbom\" src=\"/logo-svg.svg\" />\n        </a>\n        <nav class=\"topbar-links\">\n          <a href=\"https://glowbom.com/glowby/\" target=\"_blank\" rel=\"noreferrer\">Glowby</a>\n          <a href=\"https://glowbom.com/desktop/\" target=\"_blank\" rel=\"noreferrer\">Desktop</a>\n          <a href=\"https://glowbom.com/terms.html\" target=\"_blank\" rel=\"noreferrer\">Terms</a>\n          <a href=\"https://glowbom.com/pricing/\" target=\"_blank\" rel=\"noreferrer\">Pricing</a>\n          <a href=\"https://glowbom.com/docs/\" target=\"_blank\" rel=\"noreferrer\">Docs</a>\n          <a href=\"https://glowbom.com/#case_studies\" target=\"_blank\" rel=\"noreferrer\">Apps</a>\n        </nav>\n        <a class=\"button\" href=\"https://glowbom.com/draw\" target=\"_blank\" rel=\"noreferrer\">Get Started for Free</a>\n      </div>\n    </header>\n\n    <main>\n      <section class=\"hero\">\n        <h1>%s</h1>\n        <p>%s</p>\n        <p class=\"meta\">%s</p>\n        <p class=\"meta\">OpenCode runtime: <code>%s</code></p>\n      </section>\n      <section class=\"card\">\n        <h2>How It Works</h2>\n        <ol>\n          <li>Open the Glowby web UI at <code>http://127.0.0.1:4572</code>.</li>\n          <li>Choose a local Glowbom project folder.</li>\n          <li>Pick an agent driver and run <code>/opencode/refine</code>.</li>\n          <li>Watch live logs, answer prompts, and open outputs in your IDE.</li>\n        </ol>\n      </section>\n      <section class=\"card\">\n        <h2>Agent Drivers</h2>\n        <ul>%s</ul>\n      </section>\n      <section class=\"card\">\n        <h2>Links</h2>\n        <ul>%s</ul>\n        %s\n      </section>\n    </main>\n  </body>\n</html>`,\n\t\thtml.EscapeString(info.Name),\n\t\thtml.EscapeString(info.Name),\n\t\thtml.EscapeString(info.Summary),\n\t\thtml.EscapeString(info.HowItWorks),\n\t\thtml.EscapeString(info.RuntimeURL),\n\t\tdriversHTML.String(),\n\t\tlinksHTML.String(),\n\t\tprojectPathLine,\n\t)\n\n\t_, _ = w.Write([]byte(page))\n}\n\nfunc openCodeAboutHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\t_ = json.NewEncoder(w).Encode(glowbyBackendInfoPayload())\n}\n\nfunc openCodeProjectDescriptionHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tpdfPath, ok := resolveGlowbomDesktopPDFPath()\n\tif !ok {\n\t\thttp.Error(w, \"Project description PDF not found\", http.StatusNotFound)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Cache-Control\", \"no-store\")\n\thttp.ServeFile(w, r, pdfPath)\n}\n"
  },
  {
    "path": "backend/claude_anthropic.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst claudeSonnetDefaultModel = \"claude-sonnet-4-6\"\nconst claudeOpusDefaultModel = \"claude-opus-4-6\"\n\nfunc isClaudeOpusModel(modelID string) bool {\n\treturn strings.HasPrefix(strings.ToLower(strings.TrimSpace(modelID)), \"claude-opus-\")\n}\n\nfunc claudeModelTokenRates(modelID string) (inputCostPer1M float64, outputCostPer1M float64) {\n\tif isClaudeOpusModel(modelID) {\n\t\treturn 5.0, 25.0\n\t}\n\treturn 3.0, 15.0\n}\n\n// callClaudeDrawToCodeApiFull handles draw-to-code using Claude API with native vision\nfunc callClaudeDrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey string) (*R1Response, error) {\n\treturn callClaudeDrawToCodeApiFullWithModel(imageBase64, userPrompt, template, imageSource, apiKey, claudeSonnetDefaultModel)\n}\n\n// callClaudeDrawToCodeApiFullWithModel handles draw-to-code with specific Claude model\nfunc callClaudeDrawToCodeApiFullWithModel(imageBase64, userPrompt, template, imageSource, apiKey, modelID string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Claude API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// 1) Build system prompt\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// 2) Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// 3) Construct multimodal message with image + text for Claude's native vision\n\t// Claude expects content array with image and text blocks\n\tuserContent := []interface{}{\n\t\tmap[string]interface{}{\n\t\t\t\"type\": \"image\",\n\t\t\t\"source\": map[string]interface{}{\n\t\t\t\t\"type\":       \"base64\",\n\t\t\t\t\"media_type\": \"image/jpeg\",\n\t\t\t\t\"data\":       imageBase64,\n\t\t\t},\n\t\t},\n\t\tmap[string]interface{}{\n\t\t\t\"type\": \"text\",\n\t\t\t\"text\": strings.Join([]string{\n\t\t\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\t\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t\t\t}, \"\\n\"),\n\t\t},\n\t}\n\n\t// 4) Call Claude API with vision support\n\tmessages := []map[string]interface{}{\n\t\t{\"role\": \"user\", \"content\": userContent},\n\t}\n\n\t// Use max tokens for draw-to-code (Claude Sonnet 4.6 supports up to 64k output tokens)\n\t// Use 32768 tokens (32K) with 4096 thinking budget for comprehensive HTML generation\n\taiResp, inputTokens, outputTokens, err := callClaudeAPIWithThinkingBudgetAndModel(messages, systemPrompt, apiKey, modelID, 32768, 4096)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 5) Calculate cost based on model\n\t// Sonnet 4.6: Input $3/1M, Output $15/1M\n\t// Opus 4.6: Input $5/1M, Output $25/1M\n\tinputCostPer1M, outputCostPer1M := claudeModelTokenRates(modelID)\n\tcost := (float64(inputTokens) / 1_000_000.0 * inputCostPer1M) + (float64(outputTokens) / 1_000_000.0 * outputCostPer1M)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callClaudeDrawToCodeStreaming handles draw-to-code with streaming for specified Claude model\nfunc callClaudeDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey, modelID string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no Claude API key provided\")\n\t}\n\n\t// Build system prompt (reuse existing logic)\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// Construct multimodal message with image + text for Claude's native vision\n\tuserContent := []interface{}{\n\t\tmap[string]interface{}{\n\t\t\t\"type\": \"image\",\n\t\t\t\"source\": map[string]interface{}{\n\t\t\t\t\"type\":       \"base64\",\n\t\t\t\t\"media_type\": \"image/jpeg\",\n\t\t\t\t\"data\":       imageBase64,\n\t\t\t},\n\t\t},\n\t\tmap[string]interface{}{\n\t\t\t\"type\": \"text\",\n\t\t\t\"text\": strings.Join([]string{\n\t\t\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\t\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t\t\t}, \"\\n\"),\n\t\t},\n\t}\n\n\tmessages := []map[string]interface{}{\n\t\t{\"role\": \"user\", \"content\": userContent},\n\t}\n\n\t// Call existing streaming function with 32K tokens and 4K thinking budget\n\treturn callClaudeAPIStreamingWithModel(w, messages, systemPrompt, apiKey, modelID, 32768)\n}\n\n// callClaudeApiGo handles normal chat using Claude API\nfunc callClaudeApiGo(prevMsgs []ChatMessage, newMsg, apiKey string) (*R1Response, error) {\n\treturn callClaudeApiGoWithModel(prevMsgs, newMsg, apiKey, claudeSonnetDefaultModel)\n}\n\n// callClaudeApiGoWithModel handles normal chat using a specific Claude model\nfunc callClaudeApiGoWithModel(prevMsgs []ChatMessage, newMsg, apiKey, modelID string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Claude API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// Gather system message\n\tsystemMsg := defaultSystemPrompt\n\tvar messages []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t} else if m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg,\n\t})\n\n\t// Call Claude API with increased output limit for comprehensive responses.\n\taiResp, inputTokens, outputTokens, err := callClaudeAPIWithThinkingBudgetAndModel(messages, systemMsg, apiKey, modelID, 8192, 2048)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Calculate cost based on selected model.\n\tinputCostPer1M, outputCostPer1M := claudeModelTokenRates(modelID)\n\tcost := (float64(inputTokens) / 1_000_000.0 * inputCostPer1M) + (float64(outputTokens) / 1_000_000.0 * outputCostPer1M)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callClaudeAPI makes the actual HTTP request to Anthropic API\nfunc callClaudeAPI(messages []map[string]interface{}, systemPrompt, apiKey string, maxTokens int) (string, int, int, error) {\n\treturn callClaudeAPIWithThinkingBudget(messages, systemPrompt, apiKey, maxTokens, 2048)\n}\n\n// callClaudeAPIWithThinkingBudget makes the actual HTTP request with custom thinking budget\nfunc callClaudeAPIWithThinkingBudget(messages []map[string]interface{}, systemPrompt, apiKey string, maxTokens int, thinkingBudget int) (string, int, int, error) {\n\treturn callClaudeAPIWithThinkingBudgetAndModel(messages, systemPrompt, apiKey, claudeSonnetDefaultModel, maxTokens, thinkingBudget)\n}\n\n// callClaudeAPIWithThinkingBudgetAndModel makes the actual HTTP request with custom thinking budget and model\nfunc callClaudeAPIWithThinkingBudgetAndModel(messages []map[string]interface{}, systemPrompt, apiKey, modelID string, maxTokens int, thinkingBudget int) (string, int, int, error) {\n\t// Thinking budget must be less than max_tokens\n\tif maxTokens <= thinkingBudget {\n\t\tthinkingBudget = maxTokens / 4 // Use quarter for thinking if max_tokens is small\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":      modelID,\n\t\t\"max_tokens\": maxTokens,\n\t\t\"messages\":   messages,\n\t\t\"system\":     systemPrompt,\n\t\t\"thinking\": map[string]interface{}{\n\t\t\t\"type\":          \"enabled\",\n\t\t\t\"budget_tokens\": thinkingBudget,\n\t\t},\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\tfmt.Printf(\"[DEBUG] Claude request body: %s\\n\", string(jsonBytes))\n\n\treq, err := http.NewRequest(\"POST\", \"https://api.anthropic.com/v1/messages\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\tfmt.Printf(\"[ERROR] Failed to create request: %v\\n\", err)\n\t\treturn \"\", 0, 0, err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"x-api-key\", apiKey)\n\treq.Header.Set(\"anthropic-version\", \"2023-06-01\")\n\n\tfmt.Println(\"[DEBUG] Calling Claude API...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tfmt.Printf(\"[DEBUG] Claude API responded with status: %v, error: %v\\n\", resp, err)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\terrMsg := fmt.Sprintf(\"Claude API error (%d): %s\", resp.StatusCode, string(b))\n\t\tfmt.Println(\"[ERROR]\", errMsg)\n\t\treturn \"\", 0, 0, fmt.Errorf(\"%s\", errMsg)\n\t}\n\n\t// Parse response\n\tbodyBytes, _ := io.ReadAll(resp.Body)\n\n\tvar claudeResp struct {\n\t\tContent []struct {\n\t\t\tType     string `json:\"type\"`\n\t\t\tText     string `json:\"text\"`\n\t\t\tThinking string `json:\"thinking\"` // For extended thinking blocks\n\t\t} `json:\"content\"`\n\t\tUsage struct {\n\t\t\tInputTokens  int `json:\"input_tokens\"`\n\t\t\tOutputTokens int `json:\"output_tokens\"`\n\t\t} `json:\"usage\"`\n\t}\n\n\tif err := json.Unmarshal(bodyBytes, &claudeResp); err != nil {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"failed to parse Claude response: %v\", err)\n\t}\n\n\t// Extract text from content blocks, including thinking blocks\n\tvar responseText strings.Builder\n\tvar thinkingText strings.Builder\n\n\tfor _, block := range claudeResp.Content {\n\t\tif block.Type == \"thinking\" && block.Thinking != \"\" {\n\t\t\tthinkingText.WriteString(block.Thinking)\n\t\t} else if block.Text != \"\" {\n\t\t\tresponseText.WriteString(block.Text)\n\t\t}\n\t}\n\n\t// Prepend thinking in <think> tags if present\n\tvar fullResponse strings.Builder\n\tif thinkingText.Len() > 0 {\n\t\tfullResponse.WriteString(\"<think>\")\n\t\tfullResponse.WriteString(thinkingText.String())\n\t\tfullResponse.WriteString(\"</think>\")\n\t}\n\tfullResponse.WriteString(responseText.String())\n\n\tfmt.Printf(\"[DEBUG] Claude response: %d input tokens, %d output tokens\\n\",\n\t\tclaudeResp.Usage.InputTokens, claudeResp.Usage.OutputTokens)\n\n\treturn fullResponse.String(),\n\t\tclaudeResp.Usage.InputTokens,\n\t\tclaudeResp.Usage.OutputTokens,\n\t\tnil\n}\n\n// getMagicEditTool returns the tool definition for magic_edit\nfunc getMagicEditTool() map[string]interface{} {\n\treturn map[string]interface{}{\n\t\t\"name\":        \"magic_edit\",\n\t\t\"description\": \"Trigger a visual code edit on the currently loaded project. Use this when the user asks you to make visual or code changes to their project (like changing colors, adding elements, modifying layouts, etc.).\",\n\t\t\"input_schema\": map[string]interface{}{\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": map[string]interface{}{\n\t\t\t\t\"edit_description\": map[string]interface{}{\n\t\t\t\t\t\"type\":        \"string\",\n\t\t\t\t\t\"description\": \"A clear, specific description of what changes to make to the code/design. Be detailed about colors, positions, sizes, etc.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"required\": []string{\"edit_description\"},\n\t\t},\n\t}\n}\n\n// callClaudeChatStreaming streams Claude response via SSE to the writer (for chat)\nfunc callClaudeChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey string) error {\n\treturn callClaudeChatStreamingWithModel(w, prevMsgs, newMsg, apiKey, claudeSonnetDefaultModel)\n}\n\n// callClaudeChatStreamingWithModel streams Claude response with specific model\nfunc callClaudeChatStreamingWithModel(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, modelID string) error {\n\treturn callClaudeChatStreamingWithModelAndTools(w, prevMsgs, newMsg, apiKey, modelID, nil)\n}\n\n// callClaudeChatStreamingWithModelAndTools streams Claude response with specific model and optional tools\nfunc callClaudeChatStreamingWithModelAndTools(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, modelID string, tools []map[string]interface{}) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no Claude API key provided\")\n\t}\n\n\t// Gather system message\n\tsystemMsg := defaultSystemPrompt\n\tvar messages []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t} else if m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg,\n\t})\n\n\t// Call streaming Claude API with increased output limit\n\treturn callClaudeAPIStreamingWithModelAndTools(w, messages, systemMsg, apiKey, modelID, 8192, tools)\n}\n\n// callClaudeAPIStreaming streams Claude responses via SSE directly to the HTTP response writer\nfunc callClaudeAPIStreaming(w http.ResponseWriter, messages []map[string]interface{}, systemPrompt, apiKey string, maxTokens int) error {\n\treturn callClaudeAPIStreamingWithModel(w, messages, systemPrompt, apiKey, claudeSonnetDefaultModel, maxTokens)\n}\n\n// callClaudeAPIStreamingWithModel streams Claude responses with specific model\nfunc callClaudeAPIStreamingWithModel(w http.ResponseWriter, messages []map[string]interface{}, systemPrompt, apiKey, modelID string, maxTokens int) error {\n\treturn callClaudeAPIStreamingWithModelAndTools(w, messages, systemPrompt, apiKey, modelID, maxTokens, nil)\n}\n\n// callClaudeAPIStreamingWithModelAndTools streams Claude responses with tools support\nfunc callClaudeAPIStreamingWithModelAndTools(w http.ResponseWriter, messages []map[string]interface{}, systemPrompt, apiKey, modelID string, maxTokens int, tools []map[string]interface{}) error {\n\t// Thinking budget must be less than max_tokens\n\tthinkingBudget := 2048\n\tif maxTokens <= thinkingBudget {\n\t\tthinkingBudget = maxTokens / 2 // Use half for thinking if max_tokens is small\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":      modelID,\n\t\t\"max_tokens\": maxTokens,\n\t\t\"messages\":   messages,\n\t\t\"system\":     systemPrompt,\n\t\t\"stream\":     true,\n\t\t\"thinking\": map[string]interface{}{\n\t\t\t\"type\":          \"enabled\",\n\t\t\t\"budget_tokens\": thinkingBudget,\n\t\t},\n\t}\n\n\t// Add tools if provided\n\tif len(tools) > 0 {\n\t\treqBody[\"tools\"] = tools\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.anthropic.com/v1/messages\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"x-api-key\", apiKey)\n\treq.Header.Set(\"anthropic-version\", \"2023-06-01\")\n\n\tfmt.Println(\"[DEBUG] Calling Claude API with streaming...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\terrMsg := fmt.Sprintf(\"Claude API error (%d): %s\", resp.StatusCode, string(b))\n\t\tfmt.Println(\"[ERROR]\", errMsg)\n\t\treturn fmt.Errorf(\"%s\", errMsg)\n\t}\n\n\tfmt.Println(\"[DEBUG] Claude API responded with status 200, starting to read stream...\")\n\n\t// Stream response chunks to client\n\tvar responseBuilder strings.Builder\n\tvar thinkingBuilder strings.Builder\n\tvar thinkingSent bool\n\tvar thinkingStart time.Time\n\tvar thinkingDurationSent bool\n\tvar inputTokens, outputTokens int\n\tvar currentThinkingStep strings.Builder\n\tvar currentStepTitleSent bool\n\tvar currentBlockType string\n\n\t// Tool use tracking\n\tvar currentToolId string\n\tvar currentToolName string\n\tvar currentToolInput strings.Builder\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[6:])\n\n\t\t\t\tvar event struct {\n\t\t\t\t\tType  string `json:\"type\"`\n\t\t\t\t\tIndex int    `json:\"index\"`\n\t\t\t\t\tDelta struct {\n\t\t\t\t\t\tType        string `json:\"type\"`\n\t\t\t\t\t\tText        string `json:\"text\"`\n\t\t\t\t\t\tThinking    string `json:\"thinking\"`     // For extended thinking deltas\n\t\t\t\t\t\tPartialJson string `json:\"partial_json\"` // For tool use JSON deltas\n\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\tContentBlock struct {\n\t\t\t\t\t\tType     string `json:\"type\"`\n\t\t\t\t\t\tText     string `json:\"text\"`\n\t\t\t\t\t\tThinking string `json:\"thinking\"`\n\t\t\t\t\t\tId       string `json:\"id\"`   // Tool use ID\n\t\t\t\t\t\tName     string `json:\"name\"` // Tool use name\n\t\t\t\t\t} `json:\"content_block\"`\n\t\t\t\t\tMessage struct {\n\t\t\t\t\t\tUsage struct {\n\t\t\t\t\t\t\tInputTokens  int `json:\"input_tokens\"`\n\t\t\t\t\t\t\tOutputTokens int `json:\"output_tokens\"`\n\t\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t\t} `json:\"message\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tOutputTokens int `json:\"output_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t\tError struct {\n\t\t\t\t\t\tType    string `json:\"type\"`\n\t\t\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\t\t} `json:\"error\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &event); e == nil {\n\t\t\t\t\t// Check for error events\n\t\t\t\t\tif event.Type == \"error\" || event.Error.Type != \"\" {\n\t\t\t\t\t\terrMsg := fmt.Sprintf(\"Claude streaming error: %s - %s\", event.Error.Type, event.Error.Message)\n\t\t\t\t\t\tfmt.Println(\"[ERROR]\", errMsg)\n\t\t\t\t\t\treturn fmt.Errorf(\"%s\", errMsg)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Debug: log event types\n\t\t\t\t\tif event.Type != \"\" {\n\t\t\t\t\t\tfmt.Printf(\"[Claude DEBUG] Event type: %s, block type: %s, index: %d\\n\", event.Type, event.ContentBlock.Type, event.Index)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle content_block_start - track what type of block we're in\n\t\t\t\t\tif event.Type == \"content_block_start\" {\n\t\t\t\t\t\tcurrentBlockType = event.ContentBlock.Type\n\n\t\t\t\t\t\tif currentBlockType == \"thinking\" {\n\t\t\t\t\t\t\tfmt.Printf(\"[Claude DEBUG] Starting thinking block (index %d)\\n\", event.Index)\n\t\t\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentThinkingStep.Reset()\n\t\t\t\t\t\t\tcurrentStepTitleSent = false\n\t\t\t\t\t\t} else if currentBlockType == \"tool_use\" {\n\t\t\t\t\t\t\t// Tool use block starting\n\t\t\t\t\t\t\tcurrentToolId = event.ContentBlock.Id\n\t\t\t\t\t\t\tcurrentToolName = event.ContentBlock.Name\n\t\t\t\t\t\t\tcurrentToolInput.Reset()\n\t\t\t\t\t\t\tfmt.Printf(\"[Claude DEBUG] Starting tool_use block: %s (id: %s)\\n\", currentToolName, currentToolId)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle content_block_stop - send tool_use event when tool block ends\n\t\t\t\t\tif event.Type == \"content_block_stop\" && currentBlockType == \"tool_use\" {\n\t\t\t\t\t\t// Parse the accumulated JSON input\n\t\t\t\t\t\tinputJSON := currentToolInput.String()\n\t\t\t\t\t\tfmt.Printf(\"[Claude] Tool use complete: %s, input: %s\\n\", currentToolName, inputJSON)\n\n\t\t\t\t\t\t// Send tool_use event to client\n\t\t\t\t\t\ttoolUseData := map[string]interface{}{\n\t\t\t\t\t\t\t\"tool_use\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\"id\":    currentToolId,\n\t\t\t\t\t\t\t\t\"name\":  currentToolName,\n\t\t\t\t\t\t\t\t\"input\": inputJSON,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttoolUseBytes, _ := json.Marshal(toolUseData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", toolUseBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Reset tool tracking\n\t\t\t\t\t\tcurrentToolId = \"\"\n\t\t\t\t\t\tcurrentToolName = \"\"\n\t\t\t\t\t\tcurrentToolInput.Reset()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle content_block_delta - process content based on current block type\n\t\t\t\t\tif event.Type == \"content_block_delta\" {\n\t\t\t\t\t\t// Handle tool_use input JSON deltas\n\t\t\t\t\t\tif currentBlockType == \"tool_use\" && event.Delta.PartialJson != \"\" {\n\t\t\t\t\t\t\tcurrentToolInput.WriteString(event.Delta.PartialJson)\n\t\t\t\t\t\t} else if currentBlockType == \"thinking\" && event.Delta.Thinking != \"\" {\n\t\t\t\t\t\t\t// Thinking content - use Delta.Thinking field, not Delta.Text!\n\t\t\t\t\t\t\tthinkingBuilder.WriteString(event.Delta.Thinking)\n\t\t\t\t\t\t\tcurrentThinkingStep.WriteString(event.Delta.Thinking)\n\n\t\t\t\t\t\t\t// Try to extract and send the title once we have a complete title\n\t\t\t\t\t\t\tif !currentStepTitleSent {\n\t\t\t\t\t\t\t\ttext := currentThinkingStep.String()\n\t\t\t\t\t\t\t\thasCompleteMarkdown := strings.HasPrefix(text, \"**\") && strings.Count(text, \"**\") >= 2\n\t\t\t\t\t\t\t\thasNewlineSeparation := strings.Count(text, \"\\n\") >= 2\n\n\t\t\t\t\t\t\t\tif hasCompleteMarkdown || hasNewlineSeparation {\n\t\t\t\t\t\t\t\t\tstepTitle := extractThinkingStepTitle(text)\n\t\t\t\t\t\t\t\t\tif stepTitle != \"\" {\n\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\tfmt.Printf(\"[Claude] Sending thinking step: %s\\n\", stepTitle)\n\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcurrentStepTitleSent = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if currentBlockType == \"text\" && event.Delta.Text != \"\" {\n\t\t\t\t\t\t\t// Text content (actual response)\n\t\t\t\t\t\t\t// Send complete thinking before first content chunk\n\t\t\t\t\t\t\tif !thinkingSent && thinkingBuilder.Len() > 0 {\n\t\t\t\t\t\t\t\t// Send the last thinking step if we haven't sent its title yet\n\t\t\t\t\t\t\t\tif !currentStepTitleSent && currentThinkingStep.Len() > 0 {\n\t\t\t\t\t\t\t\t\tstepTitle := extractThinkingStepTitle(currentThinkingStep.String())\n\t\t\t\t\t\t\t\t\tif stepTitle != \"\" {\n\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\tfmt.Printf(\"[Claude] Sending final thinking step: %s\\n\", stepTitle)\n\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcurrentStepTitleSent = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthinkingText := \"<think>\" + thinkingBuilder.String() + \"</think>\"\n\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\tfmt.Println(\"[Claude] Sent complete thinking to client\")\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthinkingSent = true\n\n\t\t\t\t\t\t\t\t// Send thinking duration\n\t\t\t\t\t\t\t\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\t\tduration := time.Since(thinkingStart).Seconds()\n\t\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\t\tfmt.Printf(\"[Claude] Sent thinking duration: %.1fs\\n\", duration)\n\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthinkingDurationSent = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresponseBuilder.WriteString(event.Delta.Text)\n\n\t\t\t\t\t\t\t// Send content chunk to client\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": event.Delta.Text}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from message_start\n\t\t\t\t\tif event.Type == \"message_start\" {\n\t\t\t\t\t\tinputTokens = event.Message.Usage.InputTokens\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from message_delta\n\t\t\t\t\tif event.Type == \"message_delta\" {\n\t\t\t\t\t\toutputTokens = event.Usage.OutputTokens\n\n\t\t\t\t\t\t// Calculate cost based on model\n\t\t\t\t\t\t// Sonnet 4.6: Input $3/1M, Output $15/1M\n\t\t\t\t\t\t// Opus 4.6: Input $5/1M, Output $25/1M\n\t\t\t\t\t\tinputCostPer1M, outputCostPer1M := claudeModelTokenRates(modelID)\n\t\t\t\t\t\tcost := (float64(inputTokens) / 1_000_000.0 * inputCostPer1M) + (float64(outputTokens) / 1_000_000.0 * outputCostPer1M)\n\n\t\t\t\t\t\t// Send done event with usage\n\t\t\t\t\t\tdoneData := map[string]interface{}{\n\t\t\t\t\t\t\t\"done\": true,\n\t\t\t\t\t\t\t\"tokenUsage\": map[string]int{\n\t\t\t\t\t\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\t\t\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\t\t\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"cost\": cost,\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoneBytes, _ := json.Marshal(doneData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfmt.Printf(\"[Claude] Stream complete: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\treturn nil\n}\n"
  },
  {
    "path": "backend/codex_chatgpt.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n)\n\n// buildCodexInput converts ChatMessage history + new user message into the\n// structured input array expected by chatgpt.com/backend-api/codex/responses.\n// User messages use {\"type\":\"input_text\"}, assistant messages use {\"type\":\"output_text\"}.\nfunc buildCodexInput(prevMsgs []ChatMessage, newMsg string) []interface{} {\n\tvar input []interface{}\n\tfor _, m := range prevMsgs {\n\t\tswitch m.Role {\n\t\tcase \"user\":\n\t\t\tinput = append(input, map[string]interface{}{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t{\"type\": \"input_text\", \"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\tcase \"assistant\":\n\t\t\tinput = append(input, map[string]interface{}{\n\t\t\t\t\"type\": \"message\",\n\t\t\t\t\"role\": \"assistant\",\n\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t{\"type\": \"output_text\", \"text\": m.Content, \"annotations\": []string{}},\n\t\t\t\t},\n\t\t\t\t\"status\": \"completed\",\n\t\t\t})\n\t\t}\n\t}\n\tinput = append(input, map[string]interface{}{\n\t\t\"role\": \"user\",\n\t\t\"content\": []map[string]interface{}{\n\t\t\t{\"type\": \"input_text\", \"text\": newMsg},\n\t\t},\n\t})\n\treturn input\n}\n\n// buildCodexRequestBody builds the standard request body for the Codex Responses API.\nfunc buildCodexRequestBody(instructions string, input []interface{}, reasoningEffort string, stream bool, modelID string) map[string]interface{} {\n\tresolvedModel := normalizeOpenAIModelID(modelID)\n\treturn map[string]interface{}{\n\t\t\"model\":        resolvedModel,\n\t\t\"store\":        false,\n\t\t\"stream\":       stream,\n\t\t\"instructions\": instructions,\n\t\t\"input\":        input,\n\t\t\"reasoning\": map[string]interface{}{\n\t\t\t\"effort\":  reasoningEffort,\n\t\t\t\"summary\": \"auto\",\n\t\t},\n\t\t\"text\": map[string]interface{}{\n\t\t\t\"verbosity\": \"medium\",\n\t\t},\n\t\t\"include\":             []string{\"reasoning.encrypted_content\"},\n\t\t\"tool_choice\":         \"auto\",\n\t\t\"parallel_tool_calls\": true,\n\t}\n}\n\n// callChatGPTCodexStreaming proxies a chat request through the ChatGPT backend\n// Codex Responses API, using the JWT access_token and chatgpt_account_id.\nfunc callChatGPTCodexStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, accessToken, accountID, modelID string) error {\n\tif accessToken == \"\" {\n\t\treturn fmt.Errorf(\"no ChatGPT access token provided\")\n\t}\n\tif accountID == \"\" {\n\t\treturn fmt.Errorf(\"no ChatGPT account ID provided\")\n\t}\n\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t\tbreak\n\t\t}\n\t}\n\n\tinput := buildCodexInput(prevMsgs, newMsg)\n\treqBody := buildCodexRequestBody(systemMsg, input, \"medium\", true, modelID)\n\n\treturn doChatGPTCodexRequest(w, reqBody, accessToken, accountID)\n}\n\n// callChatGPTCodexDrawToCodeStreaming handles draw-to-code via the ChatGPT backend\n// Codex Responses API.\nfunc callChatGPTCodexDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, accessToken, accountID, modelID string) error {\n\tif accessToken == \"\" {\n\t\treturn fmt.Errorf(\"no ChatGPT access token provided\")\n\t}\n\tif accountID == \"\" {\n\t\treturn fmt.Errorf(\"no ChatGPT account ID provided\")\n\t}\n\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\tuserMessage := detailedTask + \"\\n\\n[An image/screenshot was provided for reference. Generate the code based on the description above.]\"\n\tinput := []interface{}{\n\t\tmap[string]interface{}{\n\t\t\t\"role\": \"user\",\n\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t{\"type\": \"input_text\", \"text\": userMessage},\n\t\t\t},\n\t\t},\n\t}\n\n\treqBody := buildCodexRequestBody(systemPrompt, input, \"low\", true, modelID)\n\n\treturn doChatGPTCodexRequest(w, reqBody, accessToken, accountID)\n}\n\n// callChatGPTCodexNonStreaming makes a non-streaming call through the ChatGPT backend API.\nfunc callChatGPTCodexNonStreaming(prevMsgs []ChatMessage, newMsg, accessToken, accountID, modelID string) (*R1Response, error) {\n\tif accessToken == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No ChatGPT access token provided. Please re-login in AI Settings.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t\tbreak\n\t\t}\n\t}\n\n\tinput := buildCodexInput(prevMsgs, newMsg)\n\treqBody := buildCodexRequestBody(systemMsg, input, \"medium\", false, modelID)\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\",\n\t\t\"https://chatgpt.com/backend-api/codex/responses\",\n\t\tbytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsetChatGPTCodexHeaders(req, accessToken, accountID)\n\n\tfmt.Println(\"[CODEX] Calling ChatGPT Codex API (non-streaming)...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\treturn nil, fmt.Errorf(\"ChatGPT Codex API error (%d): %s\", resp.StatusCode, string(b))\n\t}\n\n\tb, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Parse Responses API format\n\tvar result struct {\n\t\tOutput []struct {\n\t\t\tContent []struct {\n\t\t\t\tText string `json:\"text\"`\n\t\t\t} `json:\"content\"`\n\t\t} `json:\"output\"`\n\t\tUsage struct {\n\t\t\tInputTokens  int `json:\"input_tokens\"`\n\t\t\tOutputTokens int `json:\"output_tokens\"`\n\t\t} `json:\"usage\"`\n\t}\n\n\tif err := json.Unmarshal(b, &result); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse Codex response: %v\", err)\n\t}\n\n\tvar text strings.Builder\n\tfor _, out := range result.Output {\n\t\tfor _, c := range out.Content {\n\t\t\ttext.WriteString(c.Text)\n\t\t}\n\t}\n\n\tcost := estimateOpenAITextCost(modelID, result.Usage.InputTokens, result.Usage.OutputTokens)\n\n\treturn &R1Response{\n\t\tAIResponse: text.String(),\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  result.Usage.InputTokens,\n\t\t\t\"outputTokens\": result.Usage.OutputTokens,\n\t\t\t\"totalTokens\":  result.Usage.InputTokens + result.Usage.OutputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// doChatGPTCodexRequest sends a streaming request to the ChatGPT backend Codex API\n// and proxies SSE events back to the client in the same format as gpt5_responses_api.go.\nfunc doChatGPTCodexRequest(w http.ResponseWriter, reqBody map[string]interface{}, accessToken, accountID string) error {\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\",\n\t\t\"https://chatgpt.com/backend-api/codex/responses\",\n\t\tbytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsetChatGPTCodexHeaders(req, accessToken, accountID)\n\n\tfmt.Println(\"[CODEX] Calling ChatGPT Codex API with streaming...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(b)\n\t\treturn fmt.Errorf(\"ChatGPT Codex API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\t// Parse and proxy SSE — same event format as Responses API\n\tvar responseBuilder strings.Builder\n\tvar reasoningBuilder strings.Builder\n\tvar reasoningSent bool\n\tvar reasoningStart time.Time\n\tvar reasoningDurationSent bool\n\tvar inputTokens, outputTokens, reasoningTokens int\n\tvar lastSummaryIndex int = -1\n\tvar currentThinkingStep strings.Builder\n\tvar currentStepTitleSent bool\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tType           string `json:\"type\"`\n\t\t\t\t\tSequenceNumber int    `json:\"sequence_number\"`\n\t\t\t\t\tSummaryIndex   int    `json:\"summary_index\"`\n\t\t\t\t\tDelta          string `json:\"delta\"`\n\t\t\t\t\tText           string `json:\"text\"`\n\t\t\t\t\tResponse       struct {\n\t\t\t\t\t\tUsage struct {\n\t\t\t\t\t\t\tInputTokens         int `json:\"input_tokens\"`\n\t\t\t\t\t\t\tOutputTokens        int `json:\"output_tokens\"`\n\t\t\t\t\t\t\tOutputTokensDetails struct {\n\t\t\t\t\t\t\t\tReasoningTokens int `json:\"reasoning_tokens\"`\n\t\t\t\t\t\t\t} `json:\"output_tokens_details\"`\n\t\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t\t} `json:\"response\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\t// Handle reasoning delta events\n\t\t\t\t\tif chunk.Type == \"response.reasoning_summary_text.delta\" {\n\t\t\t\t\t\tif reasoningStart.IsZero() {\n\t\t\t\t\t\t\treasoningStart = time.Now()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif chunk.Delta != \"\" {\n\t\t\t\t\t\t\tif chunk.SummaryIndex != lastSummaryIndex {\n\t\t\t\t\t\t\t\tif lastSummaryIndex != -1 {\n\t\t\t\t\t\t\t\t\treasoningBuilder.WriteString(\"\\n\\n\")\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentThinkingStep.Reset()\n\t\t\t\t\t\t\t\tcurrentStepTitleSent = false\n\t\t\t\t\t\t\t\tlastSummaryIndex = chunk.SummaryIndex\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treasoningBuilder.WriteString(chunk.Delta)\n\t\t\t\t\t\t\tcurrentThinkingStep.WriteString(chunk.Delta)\n\n\t\t\t\t\t\t\tif !currentStepTitleSent {\n\t\t\t\t\t\t\t\ttext := currentThinkingStep.String()\n\t\t\t\t\t\t\t\thasCompleteMarkdown := strings.HasPrefix(text, \"**\") && strings.Count(text, \"**\") >= 2\n\t\t\t\t\t\t\t\thasNewlineSeparation := strings.Count(text, \"\\n\") >= 2\n\n\t\t\t\t\t\t\t\tif hasCompleteMarkdown || hasNewlineSeparation {\n\t\t\t\t\t\t\t\t\tstepTitle := extractThinkingStepTitle(text)\n\t\t\t\t\t\t\t\t\tif stepTitle != \"\" {\n\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\tfmt.Printf(\"[CODEX] Sending thinking step: %s\\n\", stepTitle)\n\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcurrentStepTitleSent = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle output text delta events\n\t\t\t\t\tif chunk.Type == \"response.output_text.delta\" {\n\t\t\t\t\t\tif chunk.Delta != \"\" {\n\t\t\t\t\t\t\t// Send complete reasoning before first content chunk\n\t\t\t\t\t\t\tif !reasoningSent && reasoningBuilder.Len() > 0 {\n\t\t\t\t\t\t\t\tif !currentStepTitleSent && currentThinkingStep.Len() > 0 {\n\t\t\t\t\t\t\t\t\tstepTitle := extractThinkingStepTitle(currentThinkingStep.String())\n\t\t\t\t\t\t\t\t\tif stepTitle != \"\" {\n\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthinkingText := \"<think>\" + reasoningBuilder.String() + \"</think>\"\n\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\tfmt.Println(\"[CODEX] Sent complete reasoning chain to client\")\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treasoningSent = true\n\n\t\t\t\t\t\t\t\tduration := time.Since(reasoningStart).Seconds()\n\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresponseBuilder.WriteString(chunk.Delta)\n\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": chunk.Delta}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from final completed event\n\t\t\t\t\tif chunk.Type == \"response.completed\" {\n\t\t\t\t\t\tinputTokens = chunk.Response.Usage.InputTokens\n\t\t\t\t\t\toutputTokens = chunk.Response.Usage.OutputTokens\n\t\t\t\t\t\treasoningTokens = chunk.Response.Usage.OutputTokensDetails.ReasoningTokens\n\n\t\t\t\t\t\tif !reasoningDurationSent && !reasoningStart.IsZero() {\n\t\t\t\t\t\t\tduration := time.Since(reasoningStart).Seconds()\n\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmodelID, _ := reqBody[\"model\"].(string)\n\t\t\t\t\t\tcost := estimateOpenAITextCost(modelID, inputTokens, outputTokens)\n\n\t\t\t\t\t\tdoneData := map[string]interface{}{\n\t\t\t\t\t\t\t\"done\": true,\n\t\t\t\t\t\t\t\"tokenUsage\": map[string]int{\n\t\t\t\t\t\t\t\t\"inputTokens\":     inputTokens,\n\t\t\t\t\t\t\t\t\"outputTokens\":    outputTokens,\n\t\t\t\t\t\t\t\t\"reasoningTokens\": reasoningTokens,\n\t\t\t\t\t\t\t\t\"totalTokens\":     inputTokens + outputTokens,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"cost\": cost,\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoneBytes, _ := json.Marshal(doneData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfmt.Printf(\"[CODEX] Stream complete: %d input tokens, %d output tokens (%d reasoning)\\n\", inputTokens, outputTokens, reasoningTokens)\n\treturn nil\n}\n\n// setChatGPTCodexHeaders sets the required headers for ChatGPT backend API calls.\nfunc setChatGPTCodexHeaders(req *http.Request, accessToken, accountID string) {\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+accessToken)\n\treq.Header.Set(\"chatgpt-account-id\", accountID)\n\treq.Header.Set(\"accept\", \"text/event-stream\")\n\treq.Header.Set(\"User-Agent\", fmt.Sprintf(\"Glowbom (%s %s)\", runtime.GOOS, runtime.GOARCH))\n}\n"
  },
  {
    "path": "backend/elevenlabs_audio.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\tneturl \"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst (\n\televenLabsBaseURL         = \"https://api.elevenlabs.io\"\n\tdefaultElevenVoiceID      = \"JBFqnCBsd6RMkjVDRZzb\"\n\tdefaultElevenVoiceModel   = \"eleven_multilingual_v2\"\n\tdefaultElevenOutputFormat = \"mp3_44100_128\"\n)\n\ntype ElevenLabsAudioRequest struct {\n\tPrompt            string   `json:\"prompt\"`\n\tAudioType         string   `json:\"audioType\"` // \"voice\" | \"sound\" | \"music\"\n\tElevenLabsKey     string   `json:\"elevenLabsKey,omitempty\"`\n\tVoiceID           string   `json:\"voiceId,omitempty\"`\n\tVoiceModel        string   `json:\"voiceModel,omitempty\"`\n\tSoundModel        string   `json:\"soundModel,omitempty\"`\n\tMusicModel        string   `json:\"musicModel,omitempty\"`\n\tOutputFormat      string   `json:\"outputFormat,omitempty\"`\n\tDurationSeconds   float64  `json:\"durationSeconds,omitempty\"`\n\tPromptInfluence   *float64 `json:\"promptInfluence,omitempty\"`\n\tLoop              bool     `json:\"loop,omitempty\"`\n\tForceInstrumental bool     `json:\"forceInstrumental,omitempty\"`\n}\n\ntype ElevenLabsAudioResponse struct {\n\tPrompt    string `json:\"prompt\"`\n\tAudioType string `json:\"audioType\"`\n\tFilename  string `json:\"filename\"`\n\tSavedPath string `json:\"saved_path\"`\n\tAudio     string `json:\"audio\"`\n\tMimeType  string `json:\"mimeType\"`\n}\n\ntype ElevenLabsVoicesRequest struct {\n\tElevenLabsKey string `json:\"elevenLabsKey\"`\n}\n\ntype ElevenLabsVoiceOption struct {\n\tVoiceID     string            `json:\"voiceId\"`\n\tName        string            `json:\"name\"`\n\tCategory    string            `json:\"category,omitempty\"`\n\tDescription string            `json:\"description,omitempty\"`\n\tPreviewURL  string            `json:\"previewUrl,omitempty\"`\n\tLabels      map[string]string `json:\"labels,omitempty\"`\n}\n\ntype ElevenLabsVoicesResponse struct {\n\tVoices []ElevenLabsVoiceOption `json:\"voices\"`\n}\n\nfunc listElevenLabsVoicesHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req ElevenLabsVoicesRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tapiKey := strings.TrimSpace(req.ElevenLabsKey)\n\tif apiKey == \"\" {\n\t\thttp.Error(w, \"elevenLabsKey is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tvoices, err := fetchElevenLabsVoices(apiKey)\n\tif err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] ElevenLabs voices fetch failed: %v\", err)\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tjson.NewEncoder(w).Encode(ElevenLabsVoicesResponse{Voices: voices})\n}\n\nfunc generateAudioHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req ElevenLabsAudioRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\treq.Prompt = strings.TrimSpace(req.Prompt)\n\taudioType := normalizeAudioType(req.AudioType)\n\tapiKey := strings.TrimSpace(req.ElevenLabsKey)\n\tlog.Printf(\"[ELEVENLABS] generation request type=%s prompt=%q\", audioType, req.Prompt)\n\n\tif req.Prompt == \"\" {\n\t\thttp.Error(w, \"prompt is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif apiKey == \"\" {\n\t\thttp.Error(w, \"elevenLabsKey is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tvar (\n\t\taudioBytes []byte\n\t\tmimeType   string\n\t\terr        error\n\t)\n\n\tswitch audioType {\n\tcase \"voice\":\n\t\taudioBytes, mimeType, err = callElevenLabsVoice(req, apiKey)\n\tcase \"sound\":\n\t\taudioBytes, mimeType, err = callElevenLabsSound(req, apiKey)\n\tcase \"music\":\n\t\taudioBytes, mimeType, err = callElevenLabsMusic(req, apiKey)\n\tdefault:\n\t\thttp.Error(w, \"audioType must be one of: voice, sound, music\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] ElevenLabs %s generation failed: %v\", audioType, err)\n\t\tfmt.Println(msg)\n\t\tlog.Printf(\"[ELEVENLABS] generation failed type=%s err=%s\", audioType, sanitizeElevenLabsError(err))\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\taudioOutputDir := filepath.Join(\"saved_images\", \"audio\")\n\tif err := os.MkdirAll(audioOutputDir, 0755); err != nil {\n\t\tfmt.Printf(\"[WARN] Failed creating %s folder: %v\\n\", audioOutputDir, err)\n\t}\n\n\text := extensionForAudioMimeType(mimeType)\n\tfilename := fmt.Sprintf(\"%s_%d.%s\", audioType, time.Now().UnixNano(), ext)\n\tsavedPath := filepath.Join(audioOutputDir, filename)\n\n\tif err := os.WriteFile(savedPath, audioBytes, 0644); err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] writing audio file: %v\", err)\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tresp := ElevenLabsAudioResponse{\n\t\tPrompt:    req.Prompt,\n\t\tAudioType: audioType,\n\t\tFilename:  filename,\n\t\tSavedPath: savedPath,\n\t\tAudio:     fmt.Sprintf(\"data:%s;base64,%s\", mimeType, base64.StdEncoding.EncodeToString(audioBytes)),\n\t\tMimeType:  mimeType,\n\t}\n\n\tlog.Printf(\"[ELEVENLABS] generation success type=%s bytes=%d mime=%s file=%s\", audioType, len(audioBytes), mimeType, filename)\n\tjson.NewEncoder(w).Encode(resp)\n}\n\nfunc callElevenLabsVoice(req ElevenLabsAudioRequest, apiKey string) ([]byte, string, error) {\n\tvoiceID := strings.TrimSpace(req.VoiceID)\n\tif voiceID == \"\" {\n\t\tvoiceID = defaultElevenVoiceID\n\t}\n\n\tmodelID := normalizeElevenLabsVoiceModel(req.VoiceModel)\n\tif modelID == \"\" {\n\t\tmodelID = defaultElevenVoiceModel\n\t}\n\n\tparams := neturl.Values{}\n\toutputFormat := strings.TrimSpace(req.OutputFormat)\n\tif outputFormat == \"\" {\n\t\toutputFormat = defaultElevenOutputFormat\n\t}\n\tparams.Set(\"output_format\", outputFormat)\n\n\tbody := map[string]interface{}{\n\t\t\"text\":     req.Prompt,\n\t\t\"model_id\": modelID,\n\t}\n\n\tendpoint := fmt.Sprintf(\"%s/v1/text-to-speech/%s\", elevenLabsBaseURL, neturl.PathEscape(voiceID))\n\taudioBytes, mimeType, err := callElevenLabsBinaryAPI(endpoint, params, body, apiKey)\n\tif err != nil && modelID != defaultElevenVoiceModel && isElevenLabsModelNotFound(err) {\n\t\tlog.Printf(\"[ELEVENLABS][VOICE] model=%s not found, retrying with %s\", modelID, defaultElevenVoiceModel)\n\t\tbody[\"model_id\"] = defaultElevenVoiceModel\n\t\treturn callElevenLabsBinaryAPI(endpoint, params, body, apiKey)\n\t}\n\treturn audioBytes, mimeType, err\n}\n\nfunc callElevenLabsSound(req ElevenLabsAudioRequest, apiKey string) ([]byte, string, error) {\n\tparams := neturl.Values{}\n\toutputFormat := strings.TrimSpace(req.OutputFormat)\n\tif outputFormat == \"\" {\n\t\toutputFormat = defaultElevenOutputFormat\n\t}\n\tparams.Set(\"output_format\", outputFormat)\n\n\tbody := map[string]interface{}{\n\t\t\"text\": req.Prompt,\n\t}\n\tif modelID := strings.TrimSpace(req.SoundModel); modelID != \"\" {\n\t\tbody[\"model_id\"] = modelID\n\t}\n\n\tif req.DurationSeconds > 0 {\n\t\tbody[\"duration_seconds\"] = req.DurationSeconds\n\t}\n\tif req.PromptInfluence != nil {\n\t\tbody[\"prompt_influence\"] = *req.PromptInfluence\n\t}\n\tif req.Loop {\n\t\tbody[\"loop\"] = true\n\t}\n\n\treturn callElevenLabsBinaryAPI(elevenLabsBaseURL+\"/v1/sound-generation\", params, body, apiKey)\n}\n\nfunc callElevenLabsMusic(req ElevenLabsAudioRequest, apiKey string) ([]byte, string, error) {\n\tparams := neturl.Values{}\n\toutputFormat := strings.TrimSpace(req.OutputFormat)\n\tif outputFormat == \"\" {\n\t\toutputFormat = defaultElevenOutputFormat\n\t}\n\tparams.Set(\"output_format\", outputFormat)\n\n\tbody := map[string]interface{}{\n\t\t\"prompt\": req.Prompt,\n\t}\n\tif modelID := strings.TrimSpace(req.MusicModel); modelID != \"\" {\n\t\tbody[\"model_id\"] = modelID\n\t}\n\n\tif req.DurationSeconds > 0 {\n\t\tbody[\"music_length_ms\"] = int(req.DurationSeconds * 1000.0)\n\t}\n\tif req.ForceInstrumental {\n\t\tbody[\"is_instrumental\"] = true\n\t}\n\n\treturn callElevenLabsBinaryAPI(elevenLabsBaseURL+\"/v1/music\", params, body, apiKey)\n}\n\nfunc callElevenLabsBinaryAPI(endpoint string, query neturl.Values, body map[string]interface{}, apiKey string) ([]byte, string, error) {\n\turl := endpoint\n\tif len(query) > 0 {\n\t\turl += \"?\" + query.Encode()\n\t}\n\n\treqBody, err := json.Marshal(body)\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\trequest, err := http.NewRequest(\"POST\", url, bytes.NewReader(reqBody))\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\n\trequest.Header.Set(\"Content-Type\", \"application/json\")\n\trequest.Header.Set(\"xi-api-key\", apiKey)\n\tmodelID, _ := body[\"model_id\"].(string)\n\tpromptText := \"\"\n\tif text, ok := body[\"text\"].(string); ok {\n\t\tpromptText = text\n\t} else if prompt, ok := body[\"prompt\"].(string); ok {\n\t\tpromptText = prompt\n\t}\n\tlog.Printf(\"[ELEVENLABS] request endpoint=%s model=%s prompt=%q\", endpoint, strings.TrimSpace(modelID), promptText)\n\n\tresponse, err := http.DefaultClient.Do(request)\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"failed to call ElevenLabs API: %w\", err)\n\t}\n\tdefer response.Body.Close()\n\n\tdata, err := io.ReadAll(response.Body)\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"failed to read ElevenLabs response: %w\", err)\n\t}\n\n\tif response.StatusCode < 200 || response.StatusCode >= 300 {\n\t\tlog.Printf(\"[ELEVENLABS] error endpoint=%s status=%d body=%s\", endpoint, response.StatusCode, truncateElevenLabsLog(string(data), 320))\n\t\treturn nil, \"\", fmt.Errorf(\"ElevenLabs API error (status %d): %s\", response.StatusCode, string(data))\n\t}\n\n\tmimeType := inferAudioMimeType(response.Header.Get(\"Content-Type\"), data)\n\tlog.Printf(\"[ELEVENLABS] success endpoint=%s status=%d bytes=%d mime=%s\", endpoint, response.StatusCode, len(data), mimeType)\n\treturn data, mimeType, nil\n}\n\nfunc fetchElevenLabsVoices(apiKey string) ([]ElevenLabsVoiceOption, error) {\n\trequest, err := http.NewRequest(\"GET\", elevenLabsBaseURL+\"/v1/voices\", nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\trequest.Header.Set(\"xi-api-key\", apiKey)\n\n\tresponse, err := http.DefaultClient.Do(request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to call ElevenLabs API: %w\", err)\n\t}\n\tdefer response.Body.Close()\n\n\tdata, err := io.ReadAll(response.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read ElevenLabs response: %w\", err)\n\t}\n\n\tif response.StatusCode < 200 || response.StatusCode >= 300 {\n\t\treturn nil, fmt.Errorf(\"ElevenLabs API error (status %d): %s\", response.StatusCode, string(data))\n\t}\n\n\tvar decoded struct {\n\t\tVoices []struct {\n\t\t\tVoiceID     string            `json:\"voice_id\"`\n\t\t\tName        string            `json:\"name\"`\n\t\t\tCategory    string            `json:\"category\"`\n\t\t\tDescription string            `json:\"description\"`\n\t\t\tPreviewURL  string            `json:\"preview_url\"`\n\t\t\tLabels      map[string]string `json:\"labels\"`\n\t\t} `json:\"voices\"`\n\t}\n\n\tif err := json.Unmarshal(data, &decoded); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse ElevenLabs response: %w\", err)\n\t}\n\n\tvoices := make([]ElevenLabsVoiceOption, 0, len(decoded.Voices))\n\tfor _, v := range decoded.Voices {\n\t\tif strings.TrimSpace(v.VoiceID) == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tvoices = append(voices, ElevenLabsVoiceOption{\n\t\t\tVoiceID:     v.VoiceID,\n\t\t\tName:        v.Name,\n\t\t\tCategory:    v.Category,\n\t\t\tDescription: v.Description,\n\t\t\tPreviewURL:  v.PreviewURL,\n\t\t\tLabels:      v.Labels,\n\t\t})\n\t}\n\n\tsort.SliceStable(voices, func(i, j int) bool {\n\t\tleft := strings.ToLower(strings.TrimSpace(voices[i].Name))\n\t\tright := strings.ToLower(strings.TrimSpace(voices[j].Name))\n\t\tif left == right {\n\t\t\treturn voices[i].VoiceID < voices[j].VoiceID\n\t\t}\n\t\treturn left < right\n\t})\n\n\treturn voices, nil\n}\n\nfunc normalizeAudioType(value string) string {\n\tswitch strings.ToLower(strings.TrimSpace(value)) {\n\tcase \"\", \"voice\", \"speech\", \"tts\":\n\t\treturn \"voice\"\n\tcase \"sound\", \"sfx\", \"sound_effect\":\n\t\treturn \"sound\"\n\tcase \"music\", \"song\":\n\t\treturn \"music\"\n\tdefault:\n\t\treturn strings.ToLower(strings.TrimSpace(value))\n\t}\n}\n\nfunc normalizeElevenLabsVoiceModel(value string) string {\n\tnormalized := strings.ToLower(strings.TrimSpace(value))\n\tif normalized == \"\" {\n\t\treturn \"\"\n\t}\n\n\tswitch normalized {\n\tcase \"default\", \"standard\", \"base\", \"multilingual\", \"multilingual_v2\":\n\t\treturn defaultElevenVoiceModel\n\tdefault:\n\t\treturn strings.TrimSpace(value)\n\t}\n}\n\nfunc isElevenLabsModelNotFound(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tlower := strings.ToLower(err.Error())\n\treturn strings.Contains(lower, \"model_not_found\") ||\n\t\t(strings.Contains(lower, \"model id\") && strings.Contains(lower, \"does not exist\"))\n}\n\nfunc sanitizeElevenLabsError(err error) string {\n\tif err == nil {\n\t\treturn \"\"\n\t}\n\treturn truncateElevenLabsLog(strings.ReplaceAll(strings.TrimSpace(err.Error()), \"\\n\", \" \"), 320)\n}\n\nfunc truncateElevenLabsLog(value string, max int) string {\n\ttrimmed := strings.TrimSpace(value)\n\tif len(trimmed) <= max {\n\t\treturn trimmed\n\t}\n\tif max < 4 {\n\t\treturn trimmed[:max]\n\t}\n\treturn trimmed[:max-3] + \"...\"\n}\n\nfunc inferAudioMimeType(contentType string, data []byte) string {\n\ttrimmed := strings.TrimSpace(strings.ToLower(contentType))\n\tif trimmed != \"\" {\n\t\tif semi := strings.Index(trimmed, \";\"); semi >= 0 {\n\t\t\ttrimmed = strings.TrimSpace(trimmed[:semi])\n\t\t}\n\t\tif trimmed != \"\" && trimmed != \"application/octet-stream\" {\n\t\t\treturn trimmed\n\t\t}\n\t}\n\n\tif len(data) >= 3 {\n\t\tif string(data[:3]) == \"ID3\" {\n\t\t\treturn \"audio/mpeg\"\n\t\t}\n\t\t// MPEG frame sync.\n\t\tif data[0] == 0xFF && (data[1]&0xE0) == 0xE0 {\n\t\t\treturn \"audio/mpeg\"\n\t\t}\n\t}\n\n\tif len(data) >= 12 {\n\t\tif string(data[:4]) == \"RIFF\" && string(data[8:12]) == \"WAVE\" {\n\t\t\treturn \"audio/wav\"\n\t\t}\n\t}\n\n\tif len(data) >= 4 {\n\t\tif string(data[:4]) == \"OggS\" {\n\t\t\treturn \"audio/ogg\"\n\t\t}\n\t\tif string(data[:4]) == \"fLaC\" {\n\t\t\treturn \"audio/flac\"\n\t\t}\n\t}\n\n\tif len(data) >= 12 && string(data[4:8]) == \"ftyp\" {\n\t\treturn \"audio/mp4\"\n\t}\n\n\treturn \"audio/mpeg\"\n}\n\nfunc extensionForAudioMimeType(mimeType string) string {\n\tswitch strings.ToLower(strings.TrimSpace(mimeType)) {\n\tcase \"audio/wav\", \"audio/wave\", \"audio/x-wav\":\n\t\treturn \"wav\"\n\tcase \"audio/ogg\":\n\t\treturn \"ogg\"\n\tcase \"audio/flac\":\n\t\treturn \"flac\"\n\tcase \"audio/mp4\", \"audio/x-m4a\":\n\t\treturn \"m4a\"\n\tdefault:\n\t\treturn \"mp3\"\n\t}\n}\n"
  },
  {
    "path": "backend/fireworks_fireworks.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst fireworksChatCompletionsURL = \"https://api.fireworks.ai/inference/v1/chat/completions\"\n\nconst (\n\tfireworksChatMaxTokens       = 4096\n\tfireworksDrawToCodeMaxTokens = 16384\n\tfireworksDefaultTemperature  = 0.6\n\t// Hold back a small tail so normalization can safely fix near-boundary chunks.\n\tfireworksStreamNormalizeHoldback = 256\n)\n\nvar (\n\tcompactCommentCodeRegex        = regexp.MustCompile(`(?m)(//[^\\n]*?)\\s+((?:const|let|var|function|document\\.|window\\.|if\\s*\\(|for\\s*\\(|[A-Za-z_$][A-Za-z0-9_$]*\\.|[A-Za-z_$][A-Za-z0-9_$]*\\())`)\n\thexColorPercentCompactRegex    = regexp.MustCompile(`(#[0-9A-Fa-f]{3,8})(\\d{1,3}%)`)\n\ttransitionAllCompactRegex      = regexp.MustCompile(`transition:\\s*all([0-9]+(?:\\.[0-9]+)?s)`)\n\tanimationDurationCompactRegex  = regexp.MustCompile(`animation:\\s*([a-zA-Z_-][a-zA-Z0-9_-]*)([0-9]+(?:\\.[0-9]+)?s)`)\n\tboxShadowDoubleZeroCompact     = regexp.MustCompile(`box-shadow:\\s*00([0-9]+px)`)\n\tboxShadowCompactTwoOffsetRegex = regexp.MustCompile(`box-shadow:\\s*0([0-9]+px)([0-9]+px)`)\n\tfireworksGenericDataURIRegex   = regexp.MustCompile(`(?is)data:[^\"'\\s>]+;base64,[A-Za-z0-9+/=\\s]{128,}`)\n\tfireworksImgSrcBase64Regex     = regexp.MustCompile(`(?is)<img\\b[^>]*\\bsrc\\s*=\\s*[\"'][A-Za-z0-9+/=\\s]{256,}[\"']`)\n\tfireworksImageSigBase64Regex   = regexp.MustCompile(`(?is)[\"'](?:iVBORw0KGgo|/9j/|R0lGOD|UklGR|Qk0)[A-Za-z0-9+/=\\s]{256,}[\"']`)\n\tfireworksFunctionalityConstRE  = regexp.MustCompile(`(?i)\\bfunctionality\\s+const\\b`)\n\tfireworksThinkTagRegex         = regexp.MustCompile(`(?is)</?think>`)\n\t// Go's regexp (RE2) rejects counted repeats above 1000.\n\tfireworksLongBase64RunRegex = regexp.MustCompile(`[A-Za-z0-9+/]{1000,}={0,2}`)\n)\n\nfunc callFireworksDrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey, fireworksModel string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Fireworks API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tmessages := buildFireworksDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, fireworksModel, apiKey)\n\n\taiResp, inputTokens, outputTokens, err := callFireworksChatCompletions(messages, apiKey, fireworksDrawToCodeMaxTokens, fireworksDefaultTemperature, fireworksModel, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\nfunc callFireworksDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey, fireworksModel string) error {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn fmt.Errorf(\"no Fireworks API key provided\")\n\t}\n\n\tmessages := buildFireworksDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, fireworksModel, apiKey)\n\n\treturn callFireworksChatCompletionsStreaming(w, messages, apiKey, fireworksDrawToCodeMaxTokens, fireworksDefaultTemperature, fireworksModel, true)\n}\n\nfunc callFireworksApiGo(prevMsgs []ChatMessage, newMsg, apiKey, fireworksModel, attachmentBase64, attachmentMime string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Fireworks API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tmessages := buildFireworksChatMessages(prevMsgs, newMsg, fireworksModel, attachmentBase64, attachmentMime)\n\taiResp, inputTokens, outputTokens, err := callFireworksChatCompletions(messages, apiKey, fireworksChatMaxTokens, fireworksDefaultTemperature, fireworksModel, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\nfunc callFireworksChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, fireworksModel, attachmentBase64, attachmentMime string) error {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn fmt.Errorf(\"no Fireworks API key provided\")\n\t}\n\tmessages := buildFireworksChatMessages(prevMsgs, newMsg, fireworksModel, attachmentBase64, attachmentMime)\n\treturn callFireworksChatCompletionsStreaming(w, messages, apiKey, fireworksChatMaxTokens, fireworksDefaultTemperature, fireworksModel, false)\n}\n\nfunc buildFireworksChatMessages(prevMsgs []ChatMessage, newMsg, fireworksModel, attachmentBase64, attachmentMime string) []map[string]interface{} {\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemMsg,\n\t\t},\n\t}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\tuserContent := interface{}(newMsg)\n\ttrimmedAttachment := strings.TrimSpace(attachmentBase64)\n\ttrimmedMime := strings.TrimSpace(attachmentMime)\n\tif trimmedAttachment != \"\" && trimmedMime != \"\" {\n\t\tresolvedModel := normalizeFireworksModelID(fireworksModel)\n\t\tif fireworksModelSupportsImageInput(resolvedModel) {\n\t\t\tif strings.HasPrefix(strings.ToLower(trimmedMime), \"image/\") {\n\t\t\t\tuserContent = []interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"text\": newMsg,\n\t\t\t\t\t},\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\t\"url\": fireworksAttachmentDataURI(trimmedAttachment, trimmedMime),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tfmt.Printf(\"[Fireworks DEBUG] inline image attachment enabled model=%s mime=%s\\n\", resolvedModel, trimmedMime)\n\t\t\t} else {\n\t\t\t\tfmt.Printf(\"[Fireworks DEBUG] attachment ignored for model=%s (non-image mime=%q)\\n\", resolvedModel, trimmedMime)\n\t\t\t}\n\t\t} else {\n\t\t\tfmt.Printf(\"[Fireworks DEBUG] attachment ignored for model=%s (image input unsupported)\\n\", resolvedModel)\n\t\t}\n\t}\n\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": userContent,\n\t})\n\treturn messages\n}\n\nfunc callFireworksChatCompletions(messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, fireworksModel string, enforceNoEmbeddedImageData bool) (string, int, int, error) {\n\tresolvedModel := normalizeFireworksModelID(fireworksModel)\n\thasImage := fireworksMessagesContainImage(messages)\n\tlogFireworksRequestSummary(resolvedModel, false, hasImage, maxTokens, messages)\n\treqBody := map[string]interface{}{\n\t\t\"model\":             resolvedModel,\n\t\t\"max_tokens\":        maxTokens,\n\t\t\"top_p\":             1,\n\t\t\"top_k\":             40,\n\t\t\"presence_penalty\":  0,\n\t\t\"frequency_penalty\": 0,\n\t\t\"temperature\":       temperature,\n\t\t\"messages\":          messages,\n\t}\n\tif prettyBody, err := json.MarshalIndent(reqBody, \"\", \"  \"); err == nil {\n\t\tfmt.Printf(\"[Fireworks DEBUG] request body stream=false >>>\\n%s\\n<<< END Fireworks request body\\n\", string(prettyBody))\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", fireworksChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\n\treq.Header.Set(\"Accept\", \"application/json\")\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[Fireworks ERROR] model=%s stream=false status=%d hasImage=%v body=%s\\n\", resolvedModel, resp.StatusCode, hasImage, truncateForLog(bodyText))\n\t\treturn \"\", 0, 0, fmt.Errorf(\"Fireworks API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\tvar completion struct {\n\t\tChoices []struct {\n\t\t\tMessage struct {\n\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t} `json:\"message\"`\n\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t} `json:\"choices\"`\n\t\tUsage struct {\n\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\tTotalTokens      int `json:\"total_tokens\"`\n\t\t} `json:\"usage\"`\n\t}\n\n\tif err := json.NewDecoder(resp.Body).Decode(&completion); err != nil {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"failed to parse Fireworks response: %w\", err)\n\t}\n\tif len(completion.Choices) == 0 {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"no choices in Fireworks response\")\n\t}\n\n\tcontent := fireworkContentToText(completion.Choices[0].Message.Content)\n\treasoning := fireworkContentToText(completion.Choices[0].Message.ReasoningContent)\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = fireworkContentToText(completion.Choices[0].ReasoningContent)\n\t}\n\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoning) != \"\" {\n\t\tcontent = \"<think>\" + strings.TrimSpace(reasoning) + \"</think>\" + content\n\t}\n\tif enforceNoEmbeddedImageData {\n\t\tcontent = normalizeFireworksDrawToCodeOutput(content)\n\t}\n\tif enforceNoEmbeddedImageData {\n\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(content); blocked {\n\t\t\treturn \"\", 0, 0, embeddedImagePayloadError(reason)\n\t\t}\n\t}\n\tfinishReason := normalizeFinishReason(completion.Choices[0].FinishReason)\n\tif finishReason != \"\" {\n\t\tfmt.Printf(\"[Fireworks] completion finish_reason=%s model=%s stream=false\\n\", finishReason, resolvedModel)\n\t}\n\tif strings.EqualFold(finishReason, \"length\") {\n\t\tfmt.Printf(\"[Fireworks WARN] completion reached max_tokens=%d model=%s stream=false\\n\", maxTokens, resolvedModel)\n\t\tif enforceNoEmbeddedImageData {\n\t\t\treturn \"\", 0, 0, fmt.Errorf(\"Fireworks draw-to-code output was truncated at max_tokens=%d. Please regenerate with a shorter prompt.\", maxTokens)\n\t\t}\n\t}\n\tinputTokens := completion.Usage.PromptTokens\n\toutputTokens := completion.Usage.CompletionTokens\n\tif inputTokens == 0 && outputTokens == 0 {\n\t\tinputTokens = estimateTokenCountForMessages(messages)\n\t\toutputTokens = estimateTokenCount(content)\n\t}\n\treturn content, inputTokens, outputTokens, nil\n}\n\nfunc callFireworksChatCompletionsStreaming(w http.ResponseWriter, messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, fireworksModel string, enforceNoEmbeddedImageData bool) error {\n\tresolvedModel := normalizeFireworksModelID(fireworksModel)\n\thasImage := fireworksMessagesContainImage(messages)\n\tlogFireworksRequestSummary(resolvedModel, true, hasImage, maxTokens, messages)\n\treqBody := map[string]interface{}{\n\t\t\"model\":             resolvedModel,\n\t\t\"max_tokens\":        maxTokens,\n\t\t\"top_p\":             1,\n\t\t\"top_k\":             40,\n\t\t\"presence_penalty\":  0,\n\t\t\"frequency_penalty\": 0,\n\t\t\"temperature\":       temperature,\n\t\t\"messages\":          messages,\n\t\t\"stream\":            true,\n\t}\n\tif prettyBody, err := json.MarshalIndent(reqBody, \"\", \"  \"); err == nil {\n\t\tfmt.Printf(\"[Fireworks DEBUG] request body stream=true >>>\\n%s\\n<<< END Fireworks request body\\n\", string(prettyBody))\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", fireworksChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Accept\", \"text/event-stream, application/json\")\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[Fireworks ERROR] model=%s stream=true status=%d hasImage=%v body=%s\\n\", resolvedModel, resp.StatusCode, hasImage, truncateForLog(bodyText))\n\t\treturn fmt.Errorf(\"Fireworks API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\tcontentType := strings.ToLower(strings.TrimSpace(resp.Header.Get(\"Content-Type\")))\n\tfmt.Printf(\"[Fireworks] stream response model=%s hasImage=%v contentType=%q\\n\", resolvedModel, hasImage, contentType)\n\n\t// Some models/multimodal paths may ignore stream=true and return a regular JSON completion.\n\t// Handle that gracefully instead of silently returning an empty streamed result.\n\tif !strings.Contains(contentType, \"text/event-stream\") {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[Fireworks] stream fallback model=%s hasImage=%v contentType=%q body=%s\\n\", resolvedModel, hasImage, contentType, truncateForLog(bodyText))\n\n\t\tvar completion struct {\n\t\t\tChoices []struct {\n\t\t\t\tMessage struct {\n\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t} `json:\"message\"`\n\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t} `json:\"choices\"`\n\t\t\tUsage struct {\n\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t} `json:\"usage\"`\n\t\t}\n\t\tif err := json.Unmarshal(body, &completion); err != nil {\n\t\t\treturn fmt.Errorf(\"Fireworks stream fallback parse error: %w\", err)\n\t\t}\n\t\tif len(completion.Choices) == 0 {\n\t\t\treturn fmt.Errorf(\"Fireworks stream fallback returned no choices\")\n\t\t}\n\n\t\tcontent := fireworkContentToText(completion.Choices[0].Message.Content)\n\t\treasoning := fireworkContentToText(completion.Choices[0].Message.ReasoningContent)\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = fireworkContentToText(completion.Choices[0].ReasoningContent)\n\t\t}\n\t\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoning) != \"\" {\n\t\t\tcontent = \"<think>\" + strings.TrimSpace(reasoning) + \"</think>\" + content\n\t\t}\n\t\tif enforceNoEmbeddedImageData {\n\t\t\tcontent = normalizeFireworksDrawToCodeOutput(content)\n\t\t}\n\t\tif enforceNoEmbeddedImageData {\n\t\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(content); blocked {\n\t\t\t\treturn embeddedImagePayloadError(reason)\n\t\t\t}\n\t\t}\n\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\treturn fmt.Errorf(\"Fireworks stream fallback returned empty content\")\n\t\t}\n\t\tif err := emitFireworksStreamChunk(w, content); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tpromptTokens := completion.Usage.PromptTokens\n\t\tcompletionTokens := completion.Usage.CompletionTokens\n\t\tif promptTokens == 0 && completionTokens == 0 {\n\t\t\tpromptTokens = estimateTokenCountForMessages(messages)\n\t\t\tcompletionTokens = estimateTokenCount(content)\n\t\t}\n\t\treturn emitFireworksStreamDone(w, promptTokens, completionTokens)\n\t}\n\n\treader := bufio.NewReader(resp.Body)\n\tvar responseBuilder strings.Builder\n\t// Keep real-time streaming for draw-to-code UX.\n\tbufferDrawOutput := false\n\tpromptTokens := 0\n\tcompletionTokens := 0\n\tdataEvents := 0\n\tparseErrors := 0\n\tfinishReasonLength := false\n\tseenFinishReason := \"\"\n\trollingTail := \"\"\n\tnormalizedEmitted := 0\n\tvar reasoningBuilder strings.Builder\n\tvar reasoningSent bool\n\tvar reasoningStartTimeSet bool\n\tvar reasoningStartTimestamp int64\n\tvar reasoningDurationSent bool\n\tlastThinkingStep := \"\"\n\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\ttrimmedLine := strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(trimmedLine, \"data:\") {\n\t\t\t\tdataEvents++\n\t\t\t\tdataStr := strings.TrimSpace(trimmedLine[5:])\n\t\t\t\tif dataStr == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t\tMessage struct {\n\t\t\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\t} `json:\"message\"`\n\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif unmarshalErr := json.Unmarshal([]byte(dataStr), &chunk); unmarshalErr != nil {\n\t\t\t\t\tparseErrors++\n\t\t\t\t\tif parseErrors <= 3 {\n\t\t\t\t\t\tfmt.Printf(\"[Fireworks WARN] stream chunk parse failed model=%s hasImage=%v err=%v raw=%s\\n\", resolvedModel, hasImage, unmarshalErr, truncateForLog(dataStr))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif chunk.Usage.PromptTokens > 0 {\n\t\t\t\t\tpromptTokens = chunk.Usage.PromptTokens\n\t\t\t\t\tcompletionTokens = chunk.Usage.CompletionTokens\n\t\t\t\t}\n\n\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\treasoningChunk := fireworkContentToText(chunk.Choices[0].Delta.ReasoningContent)\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = fireworkContentToText(chunk.Choices[0].Message.ReasoningContent)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = fireworkContentToText(chunk.Choices[0].ReasoningContent)\n\t\t\t\t\t}\n\t\t\t\t\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoningChunk) != \"\" {\n\t\t\t\t\t\tif !reasoningStartTimeSet {\n\t\t\t\t\t\t\treasoningStartTimeSet = true\n\t\t\t\t\t\t\treasoningStartTimestamp = time.Now().UnixMilli()\n\t\t\t\t\t\t\tplaceholderStep := \"Thinking...\"\n\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": placeholderStep}\n\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastThinkingStep = placeholderStep\n\t\t\t\t\t\t}\n\t\t\t\t\t\treasoningBuilder.WriteString(reasoningChunk)\n\n\t\t\t\t\t\t// Emit better step titles as soon as enough reasoning text arrives.\n\t\t\t\t\t\tstepTitle := extractFireworksThinkingStepTitle(reasoningBuilder.String())\n\t\t\t\t\t\tif isMeaningfulThinkingStepTitle(stepTitle) && stepTitle != lastThinkingStep {\n\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastThinkingStep = stepTitle\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treason := normalizeFinishReason(chunk.Choices[0].FinishReason)\n\t\t\t\t\tif reason != \"\" {\n\t\t\t\t\t\tseenFinishReason = reason\n\t\t\t\t\t\tif strings.EqualFold(reason, \"length\") {\n\t\t\t\t\t\t\tfinishReasonLength = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontent := fireworkContentToText(chunk.Choices[0].Delta.Content)\n\t\t\t\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\t\t\t\tcontent = fireworkContentToText(chunk.Choices[0].Message.Content)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif !enforceNoEmbeddedImageData && !reasoningSent && reasoningBuilder.Len() > 0 {\n\t\t\t\t\t\tthinkingText := \"<think>\" + strings.TrimSpace(reasoningBuilder.String()) + \"</think>\"\n\t\t\t\t\t\tif err := emitFireworksStreamChunk(w, thinkingText); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\treasoningSent = true\n\t\t\t\t\t}\n\t\t\t\t\tif enforceNoEmbeddedImageData {\n\t\t\t\t\t\tcandidate := rollingTail + content\n\t\t\t\t\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(candidate); blocked {\n\t\t\t\t\t\t\treturn embeddedImagePayloadError(reason)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif len(candidate) > 4096 {\n\t\t\t\t\t\t\trollingTail = candidate[len(candidate)-4096:]\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trollingTail = candidate\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresponseBuilder.WriteString(content)\n\t\t\t\t\tif !bufferDrawOutput {\n\t\t\t\t\t\tchunkToEmit := content\n\t\t\t\t\t\tif enforceNoEmbeddedImageData {\n\t\t\t\t\t\t\tnormalizedCurrent := normalizeFireworksDrawToCodeOutput(responseBuilder.String())\n\t\t\t\t\t\t\tsafeLen := len(normalizedCurrent) - fireworksStreamNormalizeHoldback\n\t\t\t\t\t\t\tif safeLen < 0 {\n\t\t\t\t\t\t\t\tsafeLen = 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif safeLen > normalizedEmitted {\n\t\t\t\t\t\t\t\tchunkToEmit = normalizedCurrent[normalizedEmitted:safeLen]\n\t\t\t\t\t\t\t\tnormalizedEmitted = safeLen\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tchunkToEmit = \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif chunkToEmit != \"\" {\n\t\t\t\t\t\t\tif err := emitFireworksStreamChunk(w, chunkToEmit); err != nil {\n\t\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif !enforceNoEmbeddedImageData && !reasoningDurationSent && reasoningStartTimeSet {\n\t\t\t\t\t\tdurationSeconds := float64(time.Now().UnixMilli()-reasoningStartTimestamp) / 1000.0\n\t\t\t\t\t\tmetaData := map[string]interface{}{\n\t\t\t\t\t\t\t\"meta\": map[string]float64{\n\t\t\t\t\t\t\t\t\"thinkingSeconds\": durationSeconds,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfinalText := responseBuilder.String()\n\tif enforceNoEmbeddedImageData {\n\t\tfinalText = normalizeFireworksDrawToCodeOutput(finalText)\n\t}\n\tif !bufferDrawOutput && enforceNoEmbeddedImageData {\n\t\tif normalizedEmitted < len(finalText) {\n\t\t\tif err := emitFireworksStreamChunk(w, finalText[normalizedEmitted:]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tnormalizedEmitted = len(finalText)\n\t\t}\n\t\tresponseBuilder.Reset()\n\t\tresponseBuilder.WriteString(finalText)\n\t}\n\tif bufferDrawOutput {\n\t\tif enforceNoEmbeddedImageData {\n\t\t\tfinalText = normalizeFireworksDrawToCodeOutput(finalText)\n\t\t}\n\t\tresponseBuilder.Reset()\n\t\tresponseBuilder.WriteString(finalText)\n\t\tif strings.TrimSpace(finalText) != \"\" {\n\t\t\tif err := emitFireworksStreamChunk(w, finalText); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif promptTokens == 0 && completionTokens == 0 {\n\t\tpromptTokens = estimateTokenCountForMessages(messages)\n\t\tcompletionTokens = estimateTokenCount(responseBuilder.String())\n\t}\n\tif strings.TrimSpace(responseBuilder.String()) == \"\" {\n\t\treturn fmt.Errorf(\"Fireworks stream ended without content (model=%s, hasImage=%v, events=%d)\", resolvedModel, hasImage, dataEvents)\n\t}\n\tif !enforceNoEmbeddedImageData && !reasoningDurationSent && reasoningStartTimeSet {\n\t\tdurationSeconds := float64(time.Now().UnixMilli()-reasoningStartTimestamp) / 1000.0\n\t\tmetaData := map[string]interface{}{\n\t\t\t\"meta\": map[string]float64{\n\t\t\t\t\"thinkingSeconds\": durationSeconds,\n\t\t\t},\n\t\t}\n\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\tf.Flush()\n\t\t}\n\t\treasoningDurationSent = true\n\t}\n\tif enforceNoEmbeddedImageData {\n\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(responseBuilder.String()); blocked {\n\t\t\treturn embeddedImagePayloadError(reason)\n\t\t}\n\t}\n\tif seenFinishReason != \"\" {\n\t\tfmt.Printf(\"[Fireworks] stream finish_reason=%s model=%s\\n\", seenFinishReason, resolvedModel)\n\t}\n\tif finishReasonLength {\n\t\tfmt.Printf(\"[Fireworks WARN] stream reached max_tokens=%d model=%s\\n\", maxTokens, resolvedModel)\n\t\tif enforceNoEmbeddedImageData {\n\t\t\treturn fmt.Errorf(\"Fireworks draw-to-code output was truncated at max_tokens=%d. Please regenerate with a shorter prompt.\", maxTokens)\n\t\t}\n\t}\n\n\tfmt.Printf(\"[Fireworks] stream complete model=%s hasImage=%v events=%d parseErrors=%d chars=%d\\n\",\n\t\tresolvedModel, hasImage, dataEvents, parseErrors, responseBuilder.Len())\n\treturn emitFireworksStreamDone(w, promptTokens, completionTokens)\n}\n\nfunc fireworkContentToText(content interface{}) string {\n\tswitch v := content.(type) {\n\tcase string:\n\t\treturn v\n\tcase map[string]interface{}:\n\t\tif text, ok := v[\"text\"].(string); ok {\n\t\t\treturn text\n\t\t}\n\t\tif nested, ok := v[\"content\"]; ok {\n\t\t\treturn fireworkContentToText(nested)\n\t\t}\n\t\treturn \"\"\n\tcase []interface{}:\n\t\tvar builder strings.Builder\n\t\tfor _, part := range v {\n\t\t\tpartMap, ok := part.(map[string]interface{})\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpartType, _ := partMap[\"type\"].(string)\n\t\t\tif (partType == \"text\" || partType == \"output_text\") && partMap[\"text\"] != nil {\n\t\t\t\tif text, ok := partMap[\"text\"].(string); ok {\n\t\t\t\t\tbuilder.WriteString(text)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tif text, ok := partMap[\"text\"].(string); ok {\n\t\t\t\tbuilder.WriteString(text)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif nested, ok := partMap[\"content\"]; ok {\n\t\t\t\tbuilder.WriteString(fireworkContentToText(nested))\n\t\t\t}\n\t\t}\n\t\treturn builder.String()\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc estimateTokenCountForMessages(messages []map[string]interface{}) int {\n\ttotalChars := 0\n\tfor _, msg := range messages {\n\t\tif content, ok := msg[\"content\"]; ok {\n\t\t\ttotalChars += len(fireworkContentToText(content))\n\t\t}\n\t}\n\treturn estimateTokenCount(strings.Repeat(\"x\", totalChars))\n}\n\nfunc estimateTokenCount(text string) int {\n\ttrimmed := strings.TrimSpace(text)\n\tif trimmed == \"\" {\n\t\treturn 0\n\t}\n\treturn (len(trimmed) + 3) / 4\n}\n\nfunc fireworksMessagesContainImage(messages []map[string]interface{}) bool {\n\tfor _, msg := range messages {\n\t\tcontent, ok := msg[\"content\"]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tparts, ok := content.([]interface{})\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, part := range parts {\n\t\t\tpartMap, ok := part.(map[string]interface{})\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif partType, _ := partMap[\"type\"].(string); strings.EqualFold(partType, \"image_url\") {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc fireworksModelSupportsImageInput(modelID string) bool {\n\tresolved := strings.ToLower(strings.TrimSpace(normalizeFireworksModelID(modelID)))\n\tswitch resolved {\n\tcase \"accounts/fireworks/models/kimi-k2p5\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc fireworksAttachmentDataURI(attachmentBase64, attachmentMime string) string {\n\ttrimmed := strings.TrimSpace(attachmentBase64)\n\tif strings.HasPrefix(strings.ToLower(trimmed), \"data:\") {\n\t\treturn trimmed\n\t}\n\tmime := strings.TrimSpace(attachmentMime)\n\tif mime == \"\" {\n\t\tmime = \"image/jpeg\"\n\t}\n\treturn fmt.Sprintf(\"data:%s;base64,%s\", mime, trimmed)\n}\n\nfunc buildFireworksDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, fireworksModel, apiKey string) []map[string]interface{} {\n\teffectiveImageSource := imageSource\n\tif !strings.EqualFold(strings.TrimSpace(effectiveImageSource), \"Glowby Images\") {\n\t\teffectiveImageSource = \"Glowby Images\"\n\t\tfmt.Printf(\"[Fireworks DEBUG] forcing imageSource to Glowby Images for safe placeholder output (was=%q)\\n\", imageSource)\n\t}\n\tresolvedModel := normalizeFireworksModelID(fireworksModel)\n\n\tsystemPrompt := getSystemPrompt(template, effectiveImageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\tsystemPrompt += \" Glowby Images mode is strict: NEVER embed image bytes in output. NEVER output data: URIs, base64 blobs, blob: URLs, object URLs, or inline binary arrays.\"\n\tsystemPrompt += \" Use glowbyimage:<prompt> placeholders ONLY. Every <img> must start with src='about:blank', then JavaScript assigns .src from a glowbyimage variable.\"\n\tsystemPrompt += \" If you are uncertain about an image, create another descriptive glowbyimage:<prompt> placeholder instead of embedding bytes.\"\n\tsystemPrompt += \" Return a COMPLETE, valid HTML document from <!DOCTYPE html> through </html>. Never truncate output.\"\n\tsystemPrompt += \" Do NOT minify. Format output for humans with consistent indentation and spacing in CSS/JS (example: transition: all 0.3s ease; and color stops like #1a1a2e 0%).\"\n\tsystemPrompt += \" Never put JavaScript code on the same line as // comments. If comments are used, they must be standalone lines.\"\n\tsystemPrompt += \" Glowby image wiring contract: in one plain <script> block, first declare const image variables (each starting with glowbyimage:), then assign each to its matching img id via document.getElementById('...').src = ....\"\n\tsystemPrompt += \" The image wiring script must contain ONLY: const image declarations and document.getElementById(...).src assignments. No other logic, no function definitions, no event handlers, no extra words.\"\n\tsystemPrompt += \" Put interactive JavaScript in a separate second <script> block so image assignment always works even if other logic has issues.\"\n\tsystemPrompt += \" Do not put declarations or assignments on the same line as comments. Keep one statement per line.\"\n\tsystemPrompt += \" Leave one blank line between major HTML sections so the output stays readable in code view.\"\n\tsystemPrompt += \" JavaScript must be syntactically valid. Never emit stray tokens before declarations (for example: 'functionality const').\"\n\tsystemPrompt += \" Validate that every glowbyimage variable is assigned to an existing img id via document.getElementById(...).src before finishing.\"\n\n\tdetailedTask := buildDetailedTaskDescription(template, effectiveImageSource, userPrompt)\n\tlines := []string{\n\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t}\n\tusedImageDescription := false\n\timageDescriptionSource := \"none\"\n\tuseNativeImageInput := false\n\n\tif strings.TrimSpace(imageBase64) != \"\" {\n\t\tif fireworksModelSupportsImageInput(resolvedModel) {\n\t\t\tuseNativeImageInput = true\n\t\t\tfmt.Printf(\"[Fireworks DEBUG] draw received image payload (base64_len=%d), using native image_url input for model=%s\\n\", len(imageBase64), resolvedModel)\n\t\t} else {\n\t\t\tfmt.Printf(\"[Fireworks DEBUG] draw received image payload (base64_len=%d), deriving image description via Fireworks Kimi K2.5\\n\", len(imageBase64))\n\t\t\tdesc, err := describeImageWithFireworksKimi(imageBase64, apiKey)\n\t\t\tif err != nil {\n\t\t\t\t// Keep legacy fallback so GLM-5 draw-to-code doesn't hard-fail if Kimi vision is temporarily unavailable.\n\t\t\t\tfmt.Printf(\"[Fireworks WARN] Kimi image description unavailable; falling back to Ollama llama3.2-vision: %v\\n\", err)\n\t\t\t\tdesc, err = getImageDescription(imageBase64)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Models like GLM-5 reject image_url on this endpoint.\n\t\t\t\t\t// Continue with text-only context instead of failing the whole request.\n\t\t\t\t\tfmt.Printf(\"[Fireworks WARN] image description unavailable; proceeding text-only: %v\\n\", err)\n\t\t\t\t} else if trimmed := strings.TrimSpace(desc); trimmed != \"\" {\n\t\t\t\t\tusedImageDescription = true\n\t\t\t\t\timageDescriptionSource = \"ollama-llama3.2-vision\"\n\t\t\t\t\tfmt.Printf(\"[Fireworks DEBUG] draw image description (%s) >>>\\n%s\\n<<< END image description\\n\", imageDescriptionSource, trimmed)\n\t\t\t\t\tlines = append([]string{fmt.Sprintf(\"Image description: %s\", trimmed)}, lines...)\n\t\t\t\t}\n\t\t\t} else if trimmed := strings.TrimSpace(desc); trimmed != \"\" {\n\t\t\t\tusedImageDescription = true\n\t\t\t\timageDescriptionSource = \"fireworks-kimi-k2p5\"\n\t\t\t\tfmt.Printf(\"[Fireworks DEBUG] draw image description (%s) >>>\\n%s\\n<<< END image description\\n\", imageDescriptionSource, trimmed)\n\t\t\t\tlines = append([]string{fmt.Sprintf(\"Image description: %s\", trimmed)}, lines...)\n\t\t\t}\n\t\t}\n\t}\n\tuserContent := strings.Join(lines, \"\\n\")\n\tfmt.Printf(\"[Fireworks DEBUG] draw prompt usesImageDescription=%v imageDescriptionSource=%s nativeImageInput=%v\\n\", usedImageDescription, imageDescriptionSource, useNativeImageInput)\n\tfmt.Printf(\"[Fireworks DEBUG] draw system prompt >>>\\n%s\\n<<< END system prompt\\n\", systemPrompt)\n\tfmt.Printf(\"[Fireworks DEBUG] draw user prompt >>>\\n%s\\n<<< END user prompt\\n\", userContent)\n\n\tfinalUserContent := interface{}(userContent)\n\tif useNativeImageInput {\n\t\tfinalUserContent = []interface{}{\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"type\": \"text\",\n\t\t\t\t\"text\": userContent,\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\"url\": fireworksAttachmentDataURI(imageBase64, \"image/jpeg\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\treturn []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\":    \"user\",\n\t\t\t\"content\": finalUserContent,\n\t\t},\n\t}\n}\n\nfunc describeImageWithFireworksKimi(imageBase64, apiKey string) (string, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"missing Fireworks API key\")\n\t}\n\tif strings.TrimSpace(imageBase64) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"missing image payload\")\n\t}\n\n\tconst visionModel = \"accounts/fireworks/models/kimi-k2p5\"\n\tpayload := map[string]interface{}{\n\t\t\"model\":             visionModel,\n\t\t\"max_tokens\":        700,\n\t\t\"top_p\":             1,\n\t\t\"top_k\":             40,\n\t\t\"presence_penalty\":  0,\n\t\t\"frequency_penalty\": 0,\n\t\t\"temperature\":       0.2,\n\t\t\"messages\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"role\": \"system\",\n\t\t\t\t\"content\": \"Describe the image clearly in plain English. \" +\n\t\t\t\t\t\"Return only the description text. Do not use markdown, XML, JSON, or <think> tags.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"text\": \"Describe this image in human language. \" +\n\t\t\t\t\t\t\t\"If text appears in a foreign language, keep it as-is and mention it. \" +\n\t\t\t\t\t\t\t\"Include people, objects, setting, style, and notable details.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\t\"url\": fireworksAttachmentDataURI(imageBase64, \"image/jpeg\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tjsonBytes, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treq, err := http.NewRequest(\"POST\", fireworksChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Accept\", \"application/json\")\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", fmt.Errorf(\"Fireworks Kimi vision API error (%d): %s\", resp.StatusCode, strings.TrimSpace(string(body)))\n\t}\n\n\tvar completion struct {\n\t\tChoices []struct {\n\t\t\tMessage struct {\n\t\t\t\tContent interface{} `json:\"content\"`\n\t\t\t} `json:\"message\"`\n\t\t} `json:\"choices\"`\n\t}\n\tif err := json.NewDecoder(resp.Body).Decode(&completion); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse Fireworks Kimi vision response: %w\", err)\n\t}\n\tif len(completion.Choices) == 0 {\n\t\treturn \"\", fmt.Errorf(\"Fireworks Kimi vision returned no choices\")\n\t}\n\n\tdescription := strings.TrimSpace(fireworkContentToText(completion.Choices[0].Message.Content))\n\tdescription = fireworksThinkTagRegex.ReplaceAllString(description, \"\")\n\tdescription = strings.TrimSpace(description)\n\tif description == \"\" {\n\t\treturn \"\", fmt.Errorf(\"Fireworks Kimi vision returned empty description\")\n\t}\n\treturn description, nil\n}\n\nfunc emitFireworksStreamChunk(w http.ResponseWriter, content string) error {\n\teventData, err := json.Marshal(map[string]string{\"chunk\": content})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err := fmt.Fprintf(w, \"data: %s\\n\\n\", eventData); err != nil {\n\t\treturn err\n\t}\n\tif f, ok := w.(http.Flusher); ok {\n\t\tf.Flush()\n\t}\n\treturn nil\n}\n\nfunc emitFireworksStreamDone(w http.ResponseWriter, promptTokens, completionTokens int) error {\n\tdoneData := map[string]interface{}{\n\t\t\"done\": true,\n\t\t\"tokenUsage\": map[string]int{\n\t\t\t\"inputTokens\":  promptTokens,\n\t\t\t\"outputTokens\": completionTokens,\n\t\t\t\"totalTokens\":  promptTokens + completionTokens,\n\t\t},\n\t\t\"cost\": 0.0,\n\t}\n\tdoneBytes, err := json.Marshal(doneData)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err := fmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes); err != nil {\n\t\treturn err\n\t}\n\tif f, ok := w.(http.Flusher); ok {\n\t\tf.Flush()\n\t}\n\treturn nil\n}\n\nfunc logFireworksRequestSummary(model string, stream bool, hasImage bool, maxTokens int, messages []map[string]interface{}) {\n\tpromptChars := 0\n\tfor _, message := range messages {\n\t\tcontent, ok := message[\"content\"]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tpromptChars += len(fireworkContentToText(content))\n\t}\n\tpreview := truncateForLog(fireworksLatestUserPreview(messages))\n\tfmt.Printf(\"[Fireworks] request model=%s stream=%v hasImage=%v max_tokens=%d messages=%d prompt_chars=%d preview=%q\\n\",\n\t\tmodel, stream, hasImage, maxTokens, len(messages), promptChars, preview)\n}\n\nfunc fireworksLatestUserPreview(messages []map[string]interface{}) string {\n\tfor i := len(messages) - 1; i >= 0; i-- {\n\t\trole, _ := messages[i][\"role\"].(string)\n\t\tif strings.ToLower(strings.TrimSpace(role)) != \"user\" {\n\t\t\tcontinue\n\t\t}\n\t\tcontent := fireworkContentToText(messages[i][\"content\"])\n\t\tif strings.TrimSpace(content) != \"\" {\n\t\t\treturn content\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc normalizeFinishReason(reason interface{}) string {\n\tswitch v := reason.(type) {\n\tcase string:\n\t\treturn strings.TrimSpace(v)\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc detectFireworksEmbeddedImagePayload(content string) (string, bool) {\n\ttrimmed := strings.TrimSpace(content)\n\tif trimmed == \"\" {\n\t\treturn \"\", false\n\t}\n\n\tlower := strings.ToLower(trimmed)\n\tif strings.Contains(lower, \"data:image/\") && strings.Contains(lower, \";base64,\") {\n\t\treturn \"data:image base64 URI\", true\n\t}\n\tif fireworksGenericDataURIRegex.MatchString(trimmed) {\n\t\treturn \"generic data URI with base64 payload\", true\n\t}\n\tif fireworksImgSrcBase64Regex.MatchString(trimmed) {\n\t\treturn \"img src contains inline base64 payload\", true\n\t}\n\tif fireworksImageSigBase64Regex.MatchString(trimmed) {\n\t\treturn \"quoted base64 image-signature payload\", true\n\t}\n\tif strings.Contains(lower, \"base64\") && fireworksLongBase64RunRegex.MatchString(trimmed) {\n\t\treturn \"long base64-like payload\", true\n\t}\n\n\treturn \"\", false\n}\n\nfunc embeddedImagePayloadError(reason string) error {\n\treturn fmt.Errorf(\"generation blocked: model returned embedded image payload (%s). Regenerate using glowbyimage placeholders only\", reason)\n}\n\nfunc normalizeFireworksDrawToCodeOutput(content string) string {\n\tnormalized := strings.TrimSpace(content)\n\tif normalized == \"\" {\n\t\treturn normalized\n\t}\n\n\t// Common GLM-5 compacting artifacts that break JS/CSS execution/readability.\n\tnormalized = compactCommentCodeRegex.ReplaceAllString(normalized, \"$1\\n$2\")\n\tnormalized = hexColorPercentCompactRegex.ReplaceAllString(normalized, \"$1 $2\")\n\tnormalized = transitionAllCompactRegex.ReplaceAllString(normalized, \"transition: all $1\")\n\tnormalized = animationDurationCompactRegex.ReplaceAllString(normalized, \"animation: $1 $2\")\n\tnormalized = boxShadowDoubleZeroCompact.ReplaceAllString(normalized, \"box-shadow: 0 0 $1\")\n\tnormalized = boxShadowCompactTwoOffsetRegex.ReplaceAllString(normalized, \"box-shadow: 0 $1 $2\")\n\tnormalized = fireworksFunctionalityConstRE.ReplaceAllString(normalized, \"const\")\n\n\tnormalized = strings.ReplaceAll(normalized, \"0%,100%\", \"0%, 100%\")\n\tnormalized = strings.ReplaceAll(normalized, \"viewBox=\\\"002424\\\"\", \"viewBox=\\\"0 0 24 24\\\"\")\n\tnormalized = strings.ReplaceAll(normalized, \"viewBox=\\\"002020\\\"\", \"viewBox=\\\"0 0 20 20\\\"\")\n\tnormalized = strings.ReplaceAll(normalized, \"rootMargin: '0px0px -50px0px'\", \"rootMargin: '0px 0px -50px 0px'\")\n\n\treturn normalized\n}\n\nfunc extractFireworksThinkingStepTitle(raw string) string {\n\ttrimmed := strings.TrimSpace(raw)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\n\tlines := strings.Split(trimmed, \"\\n\")\n\tfor _, line := range lines {\n\t\tcandidate := strings.TrimSpace(line)\n\t\tif candidate == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Convert \"1. Analyze the input: ...\" -> \"Analyze the input\"\n\t\tif dot := strings.Index(candidate, \". \"); dot > 0 {\n\t\t\tprefix := candidate[:dot]\n\t\t\tisNumber := true\n\t\t\tfor _, ch := range prefix {\n\t\t\t\tif ch < '0' || ch > '9' {\n\t\t\t\t\tisNumber = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif isNumber {\n\t\t\t\tcandidate = strings.TrimSpace(candidate[dot+2:])\n\t\t\t}\n\t\t}\n\n\t\tif colon := strings.Index(candidate, \":\"); colon > 0 {\n\t\t\tcandidate = strings.TrimSpace(candidate[:colon])\n\t\t}\n\t\tif len(candidate) > 96 {\n\t\t\tcandidate = strings.TrimSpace(candidate[:96]) + \"...\"\n\t\t}\n\t\treturn candidate\n\t}\n\n\treturn \"\"\n}\n\nfunc isMeaningfulThinkingStepTitle(title string) bool {\n\ttrimmed := strings.TrimSpace(title)\n\tif trimmed == \"\" {\n\t\treturn false\n\t}\n\tif strings.EqualFold(trimmed, \"thinking...\") {\n\t\treturn false\n\t}\n\t// Avoid tiny first-token fragments like \"The\" while stream is still warming up.\n\tif len(trimmed) < 10 {\n\t\treturn false\n\t}\n\tif !strings.Contains(trimmed, \" \") {\n\t\treturn false\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "backend/gemini_google.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc isGeminiModelNotFound(statusCode int, body string) bool {\n\tif statusCode != http.StatusNotFound {\n\t\treturn false\n\t}\n\tlower := strings.ToLower(body)\n\treturn strings.Contains(lower, \"models/\") && strings.Contains(lower, \"not found\")\n}\n\n// callGeminiDrawToCodeApiFull handles draw-to-code using Gemini with native vision\n// Supports optional attachment (audio/file) inline_data in addition to the image.\nfunc callGeminiDrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey string, attachmentBase64 string, attachmentMime string, geminiModel string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Gemini API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// 1) Build system prompt\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// 2) Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// 3) Construct Gemini request with vision\n\t// Gemini uses \"contents\" array with \"role\" and \"parts\"\n\tcontents := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"parts\": func() []interface{} {\n\t\t\t\tparts := []interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"text\": systemPrompt + \"\\n\\n\" + detailedTask,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(imageBase64) != \"\" {\n\t\t\t\t\tparts = append(parts, map[string]interface{}{\n\t\t\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\t\t\"mime_type\": \"image/jpeg\",\n\t\t\t\t\t\t\t\"data\":      imageBase64,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(attachmentBase64) != \"\" && strings.TrimSpace(attachmentMime) != \"\" {\n\t\t\t\t\tparts = append(parts, map[string]interface{}{\n\t\t\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\t\t\"mime_type\": attachmentMime,\n\t\t\t\t\t\t\t\"data\":      attachmentBase64,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn parts\n\t\t\t}(),\n\t\t},\n\t}\n\n\t// 4) Call Gemini API with a larger output budget to avoid truncated long-form code generations.\n\taiResp, inputTokens, outputTokens, err := callGeminiAPI(contents, apiKey, 32768, \"\", geminiModel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 5) Calculate cost (Gemini 3.1 Pro pricing)\n\t// Input: $1.25 per 1M tokens, Output: $5 per 1M tokens\n\tcost := (float64(inputTokens) / 1_000_000.0 * 1.25) + (float64(outputTokens) / 1_000_000.0 * 5.0)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGeminiDrawToCodeStreaming handles draw-to-code with streaming for Gemini.\nfunc callGeminiDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey, attachmentBase64, attachmentMime, geminiModel string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no Gemini API key provided\")\n\t}\n\n\t// DEBUG: Log all input parameters for translation debugging\n\tfmt.Println(\"\\n\" + strings.Repeat(\"=\", 80))\n\tfmt.Println(\"[GEMINI DEBUG] callGeminiDrawToCodeStreaming called\")\n\tfmt.Println(strings.Repeat(\"=\", 80))\n\tfmt.Printf(\"[GEMINI DEBUG] template: %q\\n\", template)\n\tfmt.Printf(\"[GEMINI DEBUG] imageSource: %q\\n\", imageSource)\n\tfmt.Printf(\"[GEMINI DEBUG] imageBase64 length: %d bytes (not printed)\\n\", len(imageBase64))\n\tfmt.Printf(\"[GEMINI DEBUG] attachmentBase64 length: %d bytes (not printed)\\n\", len(attachmentBase64))\n\tfmt.Printf(\"[GEMINI DEBUG] attachmentMime: %q\\n\", attachmentMime)\n\tfmt.Println(strings.Repeat(\"-\", 80))\n\tfmt.Println(\"[GEMINI DEBUG] userPrompt (truncated to 2000 chars):\")\n\tif len(userPrompt) > 2000 {\n\t\tfmt.Println(userPrompt[:2000] + \"\\n... [TRUNCATED, total length: \" + fmt.Sprintf(\"%d\", len(userPrompt)) + \" chars]\")\n\t} else {\n\t\tfmt.Println(userPrompt)\n\t}\n\tfmt.Println(strings.Repeat(\"-\", 80))\n\n\t// Build system prompt\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// DEBUG: Log the constructed prompts (truncated)\n\tfmt.Println(\"[GEMINI DEBUG] systemPrompt length:\", len(systemPrompt), \"chars\")\n\tfmt.Println(\"[GEMINI DEBUG] detailedTask length:\", len(detailedTask), \"chars\")\n\tfmt.Println(strings.Repeat(\"-\", 80))\n\tfinalPrompt := systemPrompt + \"\\n\\n\" + detailedTask\n\tfmt.Println(\"[GEMINI DEBUG] FINAL PROMPT TO GEMINI (truncated to 3000 chars):\")\n\tif len(finalPrompt) > 3000 {\n\t\tfmt.Println(finalPrompt[:3000] + \"\\n... [TRUNCATED, total length: \" + fmt.Sprintf(\"%d\", len(finalPrompt)) + \" chars]\")\n\t} else {\n\t\tfmt.Println(finalPrompt)\n\t}\n\tfmt.Println(strings.Repeat(\"=\", 80) + \"\\n\")\n\n\t// Construct Gemini request with vision\n\tcontents := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"parts\": func() []interface{} {\n\t\t\t\tparts := []interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"text\": systemPrompt + \"\\n\\n\" + detailedTask,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(imageBase64) != \"\" {\n\t\t\t\t\tparts = append(parts, map[string]interface{}{\n\t\t\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\t\t\"mime_type\": \"image/jpeg\",\n\t\t\t\t\t\t\t\"data\":      imageBase64,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(attachmentBase64) != \"\" && strings.TrimSpace(attachmentMime) != \"\" {\n\t\t\t\t\tparts = append(parts, map[string]interface{}{\n\t\t\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\t\t\"mime_type\": attachmentMime,\n\t\t\t\t\t\t\t\"data\":      attachmentBase64,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn parts\n\t\t\t}(),\n\t\t},\n\t}\n\n\t// Call existing streaming function\n\t// Match non-streaming output budget to reduce partial/truncated translated files.\n\treturn callGeminiAPIStreaming(w, contents, apiKey, 32768, \"\", geminiModel)\n}\n\n// callGeminiApiGo handles normal chat using Gemini.\nfunc callGeminiApiGo(prevMsgs []ChatMessage, newMsg, apiKey, geminiModel string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Gemini API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// Gather system message and convert to Gemini format\n\tsystemMsg := defaultSystemPrompt\n\tvar contents []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// Add system message as first user message (Gemini doesn't have separate system role)\n\thasUserMsg := false\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\thasUserMsg = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif hasUserMsg {\n\t\t// Add system prompt as first user turn\n\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\"role\": \"user\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": systemMsg},\n\t\t\t},\n\t\t})\n\t\t// Add a model response acknowledging the system message\n\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\"role\": \"model\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": \"Understood. I'll follow these instructions.\"},\n\t\t\t},\n\t\t})\n\t}\n\n\t// Add conversation history (convert \"assistant\" to \"model\" for Gemini)\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" {\n\t\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"parts\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\t} else if m.Role == \"assistant\" {\n\t\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\t\"role\": \"model\",\n\t\t\t\t\"parts\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tcontents = append(contents, map[string]interface{}{\n\t\t\"role\": \"user\",\n\t\t\"parts\": []interface{}{\n\t\t\tmap[string]interface{}{\"text\": newMsg},\n\t\t},\n\t})\n\n\t// Call Gemini API\n\taiResp, inputTokens, outputTokens, err := callGeminiAPI(contents, apiKey, 12000, \"\", geminiModel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Calculate cost\n\tcost := (float64(inputTokens) / 1_000_000.0 * 1.25) + (float64(outputTokens) / 1_000_000.0 * 5.0)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGeminiAPI makes the actual HTTP request to Gemini API (non-streaming).\nfunc callGeminiAPI(contents []map[string]interface{}, apiKey string, maxTokens int, thinkingBudget string, geminiModel string) (string, int, int, error) {\n\t// Build generation config with thinking config\n\tthinkingCfg := map[string]interface{}{\n\t\t\"thinkingBudget\":  -1,   // -1 means dynamic budget (default)\n\t\t\"includeThoughts\": true, // Include thought summaries in response\n\t}\n\n\t// Set thinking budget if provided\n\tif thinkingBudget != \"\" {\n\t\tthinkingCfg[\"thinkingBudget\"] = thinkingBudget\n\t}\n\n\tgenerationConfig := map[string]interface{}{\n\t\t\"maxOutputTokens\": maxTokens,\n\t\t\"temperature\":     1.0,\n\t\t\"thinkingConfig\":  thinkingCfg,\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"contents\":         contents,\n\t\t\"generationConfig\": generationConfig,\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\tresolvedModel := normalizeGeminiModelID(geminiModel)\n\turl := fmt.Sprintf(\"https://generativelanguage.googleapis.com/v1beta/models/%s:generateContent?key=%s\", resolvedModel, apiKey)\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tfmt.Printf(\"[DEBUG] Calling Gemini API model=%s...\\n\", resolvedModel)\n\t// Request body not printed (contains large base64 images)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tfmt.Printf(\"[Gemini ERROR] HTTP request failed: %v\\n\", err)\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tfmt.Printf(\"[DEBUG] Gemini API response status: %d\\n\", resp.StatusCode)\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(b)\n\t\tif isGeminiModelNotFound(resp.StatusCode, bodyText) && resolvedModel != \"gemini-3.1-pro-preview\" {\n\t\t\tfmt.Printf(\"[Gemini WARN] Model %s not available, retrying with gemini-3.1-pro-preview\\n\", resolvedModel)\n\t\t\treturn callGeminiAPI(contents, apiKey, maxTokens, thinkingBudget, \"gemini-3.1-pro-preview\")\n\t\t}\n\t\terrMsg := fmt.Sprintf(\"Gemini API error (%d): %s\", resp.StatusCode, bodyText)\n\t\tfmt.Println(\"[Gemini ERROR]\", errMsg)\n\t\treturn \"\", 0, 0, fmt.Errorf(\"%s\", errMsg)\n\t}\n\n\t// Parse response\n\tvar geminiResp struct {\n\t\tCandidates []struct {\n\t\t\tContent struct {\n\t\t\t\tParts []map[string]interface{} `json:\"parts\"`\n\t\t\t} `json:\"content\"`\n\t\t} `json:\"candidates\"`\n\t\tUsageMetadata struct {\n\t\t\tPromptTokenCount     int `json:\"promptTokenCount\"`\n\t\t\tCandidatesTokenCount int `json:\"candidatesTokenCount\"`\n\t\t\tTotalTokenCount      int `json:\"totalTokenCount\"`\n\t\t} `json:\"usageMetadata\"`\n\t}\n\n\tbodyBytes, _ := io.ReadAll(resp.Body)\n\tfmt.Printf(\"[DEBUG] Gemini raw response: %s\\n\", string(bodyBytes))\n\n\tif err := json.Unmarshal(bodyBytes, &geminiResp); err != nil {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"failed to parse Gemini response: %w\", err)\n\t}\n\n\tif len(geminiResp.Candidates) == 0 {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"no candidates in Gemini response\")\n\t}\n\n\t// Extract text and thoughts\n\t// Gemini 3: thought can be a boolean (true) or string\n\t// When thought is true, the text field contains thinking content\n\t// When thought is false/absent, the text field contains the actual response\n\tvar responseText strings.Builder\n\tvar thinking strings.Builder\n\n\tfor _, part := range geminiResp.Candidates[0].Content.Parts {\n\t\t// Check if this part is a thought\n\t\t// Gemini 3: thought can be boolean true or a string\n\t\t// When thought is true, the text field contains thinking content\n\t\tisThought := false\n\t\tif thoughtVal, hasThought := part[\"thought\"]; hasThought {\n\t\t\tif thoughtBool, ok := thoughtVal.(bool); ok && thoughtBool {\n\t\t\t\tisThought = true\n\t\t\t} else if thoughtStr, ok := thoughtVal.(string); ok && thoughtStr != \"\" {\n\t\t\t\t// Legacy: if thought is a non-empty string, treat as thought\n\t\t\t\tisThought = true\n\t\t\t}\n\t\t}\n\n\t\t// Extract text field\n\t\tif textVal, hasText := part[\"text\"]; hasText {\n\t\t\tif textStr, ok := textVal.(string); ok && textStr != \"\" {\n\t\t\t\tif isThought {\n\t\t\t\t\t// In Gemini 3, when thought is true, text contains the thinking\n\t\t\t\t\tthinking.WriteString(textStr)\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, text contains the actual response\n\t\t\t\t\tresponseText.WriteString(textStr)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Prepend thinking wrapped in <think> tags if present\n\tfullResponse := responseText.String()\n\tif thinking.Len() > 0 {\n\t\tfullResponse = \"<think>\" + thinking.String() + \"</think>\" + fullResponse\n\t}\n\n\tinputTokens := geminiResp.UsageMetadata.PromptTokenCount\n\toutputTokens := geminiResp.UsageMetadata.CandidatesTokenCount\n\n\tfmt.Printf(\"[DEBUG] Gemini response: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\n\treturn fullResponse, inputTokens, outputTokens, nil\n}\n\n// getGeminiMagicEditTool returns the tool definition for magic_edit in Gemini format\nfunc getGeminiMagicEditTool() map[string]interface{} {\n\treturn map[string]interface{}{\n\t\t\"function_declarations\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"name\":        \"magic_edit\",\n\t\t\t\t\"description\": \"Trigger a visual code edit on the currently loaded project. Use this when the user asks you to make visual or code changes to their project (like changing colors, adding elements, modifying layouts, etc.).\",\n\t\t\t\t\"parameters\": map[string]interface{}{\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"properties\": map[string]interface{}{\n\t\t\t\t\t\t\"edit_description\": map[string]interface{}{\n\t\t\t\t\t\t\t\"type\":        \"string\",\n\t\t\t\t\t\t\t\"description\": \"A clear, specific description of what changes to make to the code/design. Be detailed about colors, positions, sizes, etc.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"required\": []string{\"edit_description\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n\n// callGeminiChatStreaming streams Gemini response via SSE to the writer (for chat)\nfunc callGeminiChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey string, attachmentBase64 string, attachmentMime string, geminiModel string) error {\n\treturn callGeminiChatStreamingWithTools(w, prevMsgs, newMsg, apiKey, attachmentBase64, attachmentMime, nil, geminiModel)\n}\n\n// callGeminiChatStreamingWithTools streams Gemini response with optional tools\nfunc callGeminiChatStreamingWithTools(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey string, attachmentBase64 string, attachmentMime string, tools []map[string]interface{}, geminiModel string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no Gemini API key provided\")\n\t}\n\n\t// Gather system message and convert to Gemini format\n\tsystemMsg := defaultSystemPrompt\n\tvar contents []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// Add system message as first user message\n\thasUserMsg := false\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\thasUserMsg = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif hasUserMsg {\n\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\"role\": \"user\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": systemMsg},\n\t\t\t},\n\t\t})\n\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\"role\": \"model\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": \"Understood. I'll follow these instructions.\"},\n\t\t\t},\n\t\t})\n\t}\n\n\t// Add conversation history\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" {\n\t\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"parts\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\t} else if m.Role == \"assistant\" {\n\t\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\t\"role\": \"model\",\n\t\t\t\t\"parts\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tparts := []interface{}{\n\t\tmap[string]interface{}{\"text\": newMsg},\n\t}\n\tif strings.TrimSpace(attachmentBase64) != \"\" && strings.TrimSpace(attachmentMime) != \"\" {\n\t\tparts = append(parts, map[string]interface{}{\n\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\"mime_type\": attachmentMime,\n\t\t\t\t\"data\":      attachmentBase64,\n\t\t\t},\n\t\t})\n\t}\n\tcontents = append(contents, map[string]interface{}{\n\t\t\"role\":  \"user\",\n\t\t\"parts\": parts,\n\t})\n\n\t// Call streaming Gemini API with optional tools\n\treturn callGeminiAPIStreamingWithTools(w, contents, apiKey, 12000, \"\", tools, geminiModel)\n}\n\n// callGeminiAPIStreaming streams Gemini responses via SSE directly to the HTTP response writer\nfunc callGeminiAPIStreaming(w http.ResponseWriter, contents []map[string]interface{}, apiKey string, maxTokens int, thinkingBudget string, geminiModel string) error {\n\treturn callGeminiAPIStreamingWithTools(w, contents, apiKey, maxTokens, thinkingBudget, nil, geminiModel)\n}\n\n// callGeminiAPIStreamingWithTools streams Gemini responses with optional tools support\nfunc callGeminiAPIStreamingWithTools(w http.ResponseWriter, contents []map[string]interface{}, apiKey string, maxTokens int, thinkingBudget string, tools []map[string]interface{}, geminiModel string) error {\n\t// Build generation config with thinking config\n\tthinkingCfg := map[string]interface{}{\n\t\t\"thinkingBudget\":  -1,   // -1 means dynamic budget (default)\n\t\t\"includeThoughts\": true, // Include thought summaries in response\n\t}\n\n\t// Set thinking budget if provided\n\tif thinkingBudget != \"\" {\n\t\tthinkingCfg[\"thinkingBudget\"] = thinkingBudget\n\t}\n\n\tgenerationConfig := map[string]interface{}{\n\t\t\"maxOutputTokens\": maxTokens,\n\t\t\"temperature\":     1.0,\n\t\t\"thinkingConfig\":  thinkingCfg,\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"contents\":         contents,\n\t\t\"generationConfig\": generationConfig,\n\t}\n\n\t// Add tools if provided\n\tif len(tools) > 0 {\n\t\treqBody[\"tools\"] = tools\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\tresolvedModel := normalizeGeminiModelID(geminiModel)\n\turl := fmt.Sprintf(\"https://generativelanguage.googleapis.com/v1beta/models/%s:streamGenerateContent?alt=sse&key=%s\", resolvedModel, apiKey)\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\tfmt.Printf(\"[Gemini ERROR] Creating request: %v\\n\", err)\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tfmt.Printf(\"[DEBUG] Calling Gemini API with streaming (SSE) model=%s...\\n\", resolvedModel)\n\t// Request body not printed (contains large base64 images)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tfmt.Printf(\"[Gemini ERROR] HTTP request failed: %v\\n\", err)\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tfmt.Printf(\"[DEBUG] Gemini API response status: %d\\n\", resp.StatusCode)\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(b)\n\t\tif isGeminiModelNotFound(resp.StatusCode, bodyText) && resolvedModel != \"gemini-3.1-pro-preview\" {\n\t\t\tfmt.Printf(\"[Gemini WARN] Model %s not available for streaming, retrying with gemini-3.1-pro-preview\\n\", resolvedModel)\n\t\t\treturn callGeminiAPIStreamingWithTools(w, contents, apiKey, maxTokens, thinkingBudget, tools, \"gemini-3.1-pro-preview\")\n\t\t}\n\t\terrMsg := fmt.Sprintf(\"Gemini API error (%d): %s\", resp.StatusCode, bodyText)\n\t\tfmt.Println(\"[Gemini ERROR]\", errMsg)\n\t\treturn fmt.Errorf(\"%s\", errMsg)\n\t}\n\n\t// Stream response chunks to client\n\tvar responseBuilder strings.Builder\n\tvar thinkingBuilder strings.Builder\n\tvar thinkingSent bool\n\tvar thinkingStart time.Time\n\tvar thinkingDurationSent bool\n\tvar inputTokens, outputTokens int\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\n\t\t\t\t// Skip empty data lines\n\t\t\t\tif dataStr == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tCandidates []struct {\n\t\t\t\t\t\tContent struct {\n\t\t\t\t\t\t\tParts []map[string]interface{} `json:\"parts\"`\n\t\t\t\t\t\t} `json:\"content\"`\n\t\t\t\t\t} `json:\"candidates\"`\n\t\t\t\t\tUsageMetadata struct {\n\t\t\t\t\t\tPromptTokenCount     int `json:\"promptTokenCount\"`\n\t\t\t\t\t\tCandidatesTokenCount int `json:\"candidatesTokenCount\"`\n\t\t\t\t\t} `json:\"usageMetadata\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\t// Debug: print the raw chunk to see structure\n\t\t\t\t\tfmt.Printf(\"[Gemini DEBUG] Raw chunk: %s\\n\", dataStr)\n\n\t\t\t\t\tif len(chunk.Candidates) > 0 {\n\t\t\t\t\t\tfor _, part := range chunk.Candidates[0].Content.Parts {\n\t\t\t\t\t\t\t// Check if this part is a thought (has \"thought\" key and it's true/string)\n\t\t\t\t\t\t\tif thoughtVal, hasThought := part[\"thought\"]; hasThought {\n\t\t\t\t\t\t\t\t// Could be a boolean flag or a string content\n\t\t\t\t\t\t\t\tvar thoughtText string\n\n\t\t\t\t\t\t\t\t// If thought is true (boolean), use text field\n\t\t\t\t\t\t\t\tif thoughtBool, ok := thoughtVal.(bool); ok && thoughtBool {\n\t\t\t\t\t\t\t\t\tif textVal, hasText := part[\"text\"]; hasText {\n\t\t\t\t\t\t\t\t\t\tthoughtText = textVal.(string)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if thoughtStr, ok := thoughtVal.(string); ok {\n\t\t\t\t\t\t\t\t\t// If thought is a string, use it directly\n\t\t\t\t\t\t\t\t\tthoughtText = thoughtStr\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif thoughtText != \"\" {\n\t\t\t\t\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfmt.Printf(\"[Gemini DEBUG] Found thought: %s\\n\", thoughtText)\n\t\t\t\t\t\t\t\t\tcleanThought := strings.Trim(thoughtText, \"\\n\")\n\t\t\t\t\t\t\t\t\tfirstLineSource := strings.TrimSpace(cleanThought)\n\t\t\t\t\t\t\t\t\tif firstLineSource != \"\" {\n\t\t\t\t\t\t\t\t\t\t// Preserve the full thought (including newlines) for the final <think> block\n\t\t\t\t\t\t\t\t\t\tif thinkingBuilder.Len() > 0 {\n\t\t\t\t\t\t\t\t\t\t\tthinkingBuilder.WriteString(\"\\n\\n\")\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tthinkingBuilder.WriteString(cleanThought)\n\n\t\t\t\t\t\t\t\t\t\t// Send only the first line (e.g., \"Framing the Response\") as the visible thinking step\n\t\t\t\t\t\t\t\t\t\tfirstLine := firstLineSource\n\t\t\t\t\t\t\t\t\t\tif idx := strings.Index(firstLine, \"\\n\"); idx != -1 {\n\t\t\t\t\t\t\t\t\t\t\tfirstLine = firstLine[:idx]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tfirstLine = strings.TrimSpace(firstLine)\n\t\t\t\t\t\t\t\t\t\tfirstLine = strings.Trim(firstLine, \"* \")\n\t\t\t\t\t\t\t\t\t\tif firstLine != \"\" {\n\t\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": firstLine}\n\t\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\t\tfmt.Println(\"[Gemini] Sending thinking step:\", firstLine)\n\t\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Handle function call (tool use)\n\t\t\t\t\t\t\tif funcCall, hasFuncCall := part[\"functionCall\"]; hasFuncCall {\n\t\t\t\t\t\t\t\tif fcMap, ok := funcCall.(map[string]interface{}); ok {\n\t\t\t\t\t\t\t\t\tfuncName, _ := fcMap[\"name\"].(string)\n\t\t\t\t\t\t\t\t\tfuncArgs, _ := fcMap[\"args\"].(map[string]interface{})\n\n\t\t\t\t\t\t\t\t\tfmt.Printf(\"[Gemini] Function call detected: %s, args: %v\\n\", funcName, funcArgs)\n\n\t\t\t\t\t\t\t\t\t// Convert args to JSON string for consistency with Claude\n\t\t\t\t\t\t\t\t\targsJSON, _ := json.Marshal(funcArgs)\n\n\t\t\t\t\t\t\t\t\t// Send tool_use event to client (same format as Claude)\n\t\t\t\t\t\t\t\t\ttoolUseData := map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\"tool_use\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\"id\":    fmt.Sprintf(\"gemini-%d\", time.Now().UnixNano()), // Generate unique ID\n\t\t\t\t\t\t\t\t\t\t\t\"name\":  funcName,\n\t\t\t\t\t\t\t\t\t\t\t\"input\": string(argsJSON),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttoolUseBytes, _ := json.Marshal(toolUseData)\n\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", toolUseBytes)\n\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Handle text content (only if not a thought)\n\t\t\t\t\t\t\tif textVal, hasText := part[\"text\"]; hasText {\n\t\t\t\t\t\t\t\t// Skip if this is a thought part (thought is true boolean or non-empty string)\n\t\t\t\t\t\t\t\tisThoughtPart := false\n\t\t\t\t\t\t\t\tif thoughtVal, hasThought := part[\"thought\"]; hasThought {\n\t\t\t\t\t\t\t\t\tif thoughtBool, ok := thoughtVal.(bool); ok && thoughtBool {\n\t\t\t\t\t\t\t\t\t\tisThoughtPart = true\n\t\t\t\t\t\t\t\t\t} else if thoughtStr, ok := thoughtVal.(string); ok && thoughtStr != \"\" {\n\t\t\t\t\t\t\t\t\t\tisThoughtPart = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif isThoughtPart {\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontent := textVal.(string)\n\t\t\t\t\t\t\t\tresponseBuilder.WriteString(content)\n\n\t\t\t\t\t\t\t\t// Send accumulated thinking before first content chunk\n\t\t\t\t\t\t\t\tif !thinkingSent && thinkingBuilder.Len() > 0 {\n\t\t\t\t\t\t\t\t\tthinkingText := \"<think>\" + thinkingBuilder.String() + \"</think>\"\n\t\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\t\tfmt.Println(\"[Gemini] Sending thinking:\", thinkingBuilder.String())\n\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthinkingSent = true\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Send content chunk\n\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": content}\n\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\tfmt.Println(\"[Gemini] Sending chunk:\", content)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Send thinking duration after first content\n\t\t\t\t\t\t\t\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\t\tduration := time.Since(thinkingStart).Seconds()\n\t\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthinkingDurationSent = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage metadata (just store it, don't send done yet)\n\t\t\t\t\tif chunk.UsageMetadata.PromptTokenCount > 0 {\n\t\t\t\t\t\tinputTokens = chunk.UsageMetadata.PromptTokenCount\n\t\t\t\t\t\toutputTokens = chunk.UsageMetadata.CandidatesTokenCount\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Send thinking duration if not sent yet\n\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\tduration := time.Since(thinkingStart).Seconds()\n\t\tduration = math.Round(duration*10) / 10\n\t\tmetaData := map[string]any{\n\t\t\t\"meta\": map[string]any{\n\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t},\n\t\t}\n\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\tf.Flush()\n\t\t}\n\t}\n\n\t// Calculate cost (Gemini 3.1 Pro: $1.25 per 1M input, $5 per 1M output)\n\tcost := (float64(inputTokens) / 1_000_000.0 * 1.25) + (float64(outputTokens) / 1_000_000.0 * 5.0)\n\n\t// Send done event with usage after all chunks are sent\n\tdoneData := map[string]interface{}{\n\t\t\"done\": true,\n\t\t\"tokenUsage\": map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\t\"cost\": cost,\n\t}\n\tdoneBytes, _ := json.Marshal(doneData)\n\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\tif f, ok := w.(http.Flusher); ok {\n\t\tf.Flush()\n\t}\n\n\tfmt.Printf(\"[Gemini] Stream complete: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\treturn nil\n}\n"
  },
  {
    "path": "backend/gemini_image.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n)\n\nconst nanoBanana2ModelID = \"gemini-3.1-flash-image-preview\"\n\n// callGeminiImageGeneration calls Gemini image generation via generativelanguage.googleapis.com\n// Returns base64 data URI on success\nfunc callGeminiImageGeneration(prompt string, aspectRatio string, outputFormat string, apiKey string) (string, error) {\n\turl := fmt.Sprintf(\"https://generativelanguage.googleapis.com/v1beta/models/%s:generateContent?key=%s\", nanoBanana2ModelID, apiKey)\n\n\t// Build request with text prompt\n\tcontents := []map[string]interface{}{\n\t\t{\n\t\t\t\"parts\": []map[string]interface{}{\n\t\t\t\t{\n\t\t\t\t\t\"text\": prompt,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// Build request with aspect ratio in correct structure (based on official example)\n\tgenerationConfig := map[string]interface{}{\n\t\t\"temperature\":        1.0,\n\t\t\"maxOutputTokens\":    8192,\n\t\t\"responseModalities\": []string{\"IMAGE\"},\n\t}\n\n\t// Add imageConfig with aspectRatio ONLY if specified\n\t// Note: outputFormat is not supported by the Gemini API (only Vertex AI)\n\tif strings.TrimSpace(aspectRatio) != \"\" {\n\t\tgenerationConfig[\"imageConfig\"] = map[string]interface{}{\n\t\t\t\"aspectRatio\": strings.TrimSpace(aspectRatio),\n\t\t}\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"contents\":         contents,\n\t\t\"generationConfig\": generationConfig,\n\t}\n\n\tbodyBytes, err := json.Marshal(reqBody)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tfmt.Println(\"[DEBUG] Calling Gemini image generation API...\")\n\tfmt.Printf(\"[DEBUG] Request body: %s\\n\", string(bodyBytes))\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to call Gemini API: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn \"\", fmt.Errorf(\"Gemini API error (status %d): %s\", resp.StatusCode, string(respBody))\n\t}\n\n\t// Parse response\n\tvar result struct {\n\t\tCandidates []struct {\n\t\t\tContent struct {\n\t\t\t\tParts []struct {\n\t\t\t\t\tText       string `json:\"text,omitempty\"`\n\t\t\t\t\tInlineData struct {\n\t\t\t\t\t\tMimeType string `json:\"mimeType\"`\n\t\t\t\t\t\tData     string `json:\"data\"`\n\t\t\t\t\t} `json:\"inlineData,omitempty\"`\n\t\t\t\t} `json:\"parts\"`\n\t\t\t} `json:\"content\"`\n\t\t} `json:\"candidates\"`\n\t}\n\n\tif err := json.Unmarshal(respBody, &result); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tif len(result.Candidates) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no candidates in response\")\n\t}\n\n\t// Find the image data in parts\n\tvar textFallback string\n\tfor _, part := range result.Candidates[0].Content.Parts {\n\t\tif part.InlineData.Data != \"\" {\n\t\t\tmimePrefix := \"image/png\"\n\t\t\tif part.InlineData.MimeType != \"\" {\n\t\t\t\tmimePrefix = part.InlineData.MimeType\n\t\t\t}\n\t\t\tdataURI := fmt.Sprintf(\"data:%s;base64,%s\", mimePrefix, part.InlineData.Data)\n\t\t\treturn dataURI, nil\n\t\t}\n\t\tif part.Text != \"\" && textFallback == \"\" {\n\t\t\ttextFallback = part.Text\n\t\t}\n\t}\n\n\tif textFallback != \"\" {\n\t\treturn \"\", fmt.Errorf(\"no image generated — model responded with text: %s\", textFallback)\n\t}\n\treturn \"\", fmt.Errorf(\"no image data in response\")\n}\n\n// callGeminiImageGenerationWithReference calls Gemini image generation with a reference image\n// for personalized generation (e.g., user photo, product image)\n//\n// PRIVACY NOTE: This function does not store or cache the reference image.\n// The image is only sent to Gemini's API and immediately discarded after the request.\n//\n// Returns base64 data URI on success\nfunc callGeminiImageGenerationWithReference(prompt string, referenceImageBase64 string, aspectRatio string, outputFormat string, apiKey string) (string, error) {\n\turl := fmt.Sprintf(\"https://generativelanguage.googleapis.com/v1beta/models/%s:generateContent?key=%s\", nanoBanana2ModelID, apiKey)\n\n\tgeminiAspectRatio := strings.TrimSpace(aspectRatio)\n\n\t// Detect image format from base64 data (first few characters after decoding)\n\tmimeType := \"image/jpeg\"\n\timageBytes, err := base64.StdEncoding.DecodeString(referenceImageBase64)\n\tif err == nil && len(imageBytes) > 2 {\n\t\t// PNG magic bytes: 89 50 4E 47\n\t\tif imageBytes[0] == 0x89 && imageBytes[1] == 0x50 && imageBytes[2] == 0x4E && imageBytes[3] == 0x47 {\n\t\t\tmimeType = \"image/png\"\n\t\t} else if len(imageBytes) > 11 && string(imageBytes[8:12]) == \"WEBP\" {\n\t\t\tmimeType = \"image/webp\"\n\t\t}\n\t}\n\n\t// Build request with both text prompt and reference image\n\tcontents := []map[string]interface{}{\n\t\t{\n\t\t\t\"parts\": []map[string]interface{}{\n\t\t\t\t{\n\t\t\t\t\t\"text\": prompt,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\t\"mime_type\": mimeType,\n\t\t\t\t\t\t\"data\":      referenceImageBase64,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// Build request with aspect ratio in correct structure (based on official example)\n\tgenerationConfig := map[string]interface{}{\n\t\t\"temperature\":        1.0,\n\t\t\"maxOutputTokens\":    8192,\n\t\t\"responseModalities\": []string{\"IMAGE\"},\n\t}\n\n\t// Add imageConfig with aspectRatio if specified\n\t// Note: outputFormat is not supported by the Gemini API (only Vertex AI)\n\tif geminiAspectRatio != \"\" {\n\t\tgenerationConfig[\"imageConfig\"] = map[string]interface{}{\n\t\t\t\"aspectRatio\": geminiAspectRatio,\n\t\t}\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"contents\":         contents,\n\t\t\"generationConfig\": generationConfig,\n\t}\n\n\tbodyBytes, err := json.Marshal(reqBody)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tfmt.Println(\"[DEBUG] Calling Gemini image generation API with reference image...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to call Gemini API: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn \"\", fmt.Errorf(\"Gemini API error (status %d): %s\", resp.StatusCode, string(respBody))\n\t}\n\n\t// Parse response\n\tvar result struct {\n\t\tCandidates []struct {\n\t\t\tContent struct {\n\t\t\t\tParts []struct {\n\t\t\t\t\tText       string `json:\"text,omitempty\"`\n\t\t\t\t\tInlineData struct {\n\t\t\t\t\t\tMimeType string `json:\"mimeType\"`\n\t\t\t\t\t\tData     string `json:\"data\"`\n\t\t\t\t\t} `json:\"inlineData,omitempty\"`\n\t\t\t\t} `json:\"parts\"`\n\t\t\t} `json:\"content\"`\n\t\t} `json:\"candidates\"`\n\t}\n\n\tif err := json.Unmarshal(respBody, &result); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tif len(result.Candidates) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no candidates in response\")\n\t}\n\n\t// Find the image data in parts\n\tvar textFallback string\n\tfor _, part := range result.Candidates[0].Content.Parts {\n\t\tif part.InlineData.Data != \"\" {\n\t\t\tmimePrefix := \"image/png\"\n\t\t\tif part.InlineData.MimeType != \"\" {\n\t\t\t\tmimePrefix = part.InlineData.MimeType\n\t\t\t}\n\t\t\tdataURI := fmt.Sprintf(\"data:%s;base64,%s\", mimePrefix, part.InlineData.Data)\n\t\t\treturn dataURI, nil\n\t\t}\n\t\tif part.Text != \"\" && textFallback == \"\" {\n\t\t\ttextFallback = part.Text\n\t\t}\n\t}\n\n\tif textFallback != \"\" {\n\t\treturn \"\", fmt.Errorf(\"no image generated — model responded with text: %s\", textFallback)\n\t}\n\treturn \"\", fmt.Errorf(\"no image data in response\")\n}\n"
  },
  {
    "path": "backend/gemini_text_with_attachment.go",
    "content": "package main\n\n// callGeminiApiGoWithAttachment builds a Gemini chat request that includes inline_data attachment.\nfunc callGeminiApiGoWithAttachment(prevMsgs []ChatMessage, newMsg, attachmentBase64, mimeType, apiKey, geminiModel string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Gemini API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// Gather system message and convert to Gemini format\n\tsystemMsg := defaultSystemPrompt\n\tvar contents []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// Add system message as first user message (Gemini doesn't have separate system role)\n\thasUserMsg := false\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\thasUserMsg = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif hasUserMsg {\n\t\t// Add system prompt as first user turn\n\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\"role\": \"user\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": systemMsg},\n\t\t\t},\n\t\t})\n\t\t// Add a model response acknowledging the system message\n\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\"role\": \"model\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": \"Understood. I'll follow these instructions.\"},\n\t\t\t},\n\t\t})\n\t}\n\n\t// Add conversation history (convert \"assistant\" to \"model\" for Gemini)\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" {\n\t\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"parts\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\t} else if m.Role == \"assistant\" {\n\t\t\tcontents = append(contents, map[string]interface{}{\n\t\t\t\t\"role\": \"model\",\n\t\t\t\t\"parts\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\"text\": m.Content},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message with inline attachment\n\tcontents = append(contents, map[string]interface{}{\n\t\t\"role\": \"user\",\n\t\t\"parts\": []interface{}{\n\t\t\tmap[string]interface{}{\"text\": newMsg},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\"mime_type\": mimeType,\n\t\t\t\t\t\"data\":      attachmentBase64,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\t// Call Gemini API\n\tresolvedModel := normalizeGeminiModelID(geminiModel)\n\trespText, inputTokens, outputTokens, err := callGeminiAPIWithModel(contents, apiKey, 12000, \"\", resolvedModel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Calculate cost\n\tcost := (float64(inputTokens) / 1_000_000.0 * 1.25) + (float64(outputTokens) / 1_000_000.0 * 5.0)\n\n\treturn &R1Response{\n\t\tAIResponse: respText,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n"
  },
  {
    "path": "backend/gemini_veo.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"google.golang.org/genai\"\n)\n\n// MARK: - Request/Response Types\n\ntype VeoImageInput struct {\n\tData     string `json:\"data\"`\n\tMimeType string `json:\"mimeType\"`\n}\n\ntype VeoVideoAsset struct {\n\tURI         string `json:\"uri\"`\n\tAspectRatio string `json:\"aspectRatio\"`\n}\n\ntype VeoGenerationRequest struct {\n\tPrompt          string          `json:\"prompt\"`\n\tImages          []VeoImageInput `json:\"images\"`\n\tAspectRatio     string          `json:\"aspectRatio\"`\n\tUseKeyframes    bool            `json:\"useKeyframes\"`\n\tExtensionSource *VeoVideoAsset  `json:\"extensionSource\"`\n\tDurationSeconds int             `json:\"durationSeconds,omitempty\"`\n\tResolution      string          `json:\"resolution,omitempty\"`\n\tVideoSource     string          `json:\"videoSource,omitempty\"`\n\tGeminiKey       string          `json:\"geminiKey\"`\n\tXaiKey          string          `json:\"xaiKey,omitempty\"`\n}\n\ntype VeoGenerationResponse struct {\n\tOperationID string `json:\"operationId\"`\n\tMessage     string `json:\"message\"`\n}\n\ntype VeoPollRequest struct {\n\tOperationID string `json:\"operationId\"`\n\tVideoSource string `json:\"videoSource,omitempty\"`\n\tGeminiKey   string `json:\"geminiKey\"`\n\tXaiKey      string `json:\"xaiKey,omitempty\"`\n}\n\ntype VeoPollResponse struct {\n\tDone       bool           `json:\"done\"`\n\tStatus     string         `json:\"status\"`\n\tVideoURL   string         `json:\"videoUrl,omitempty\"`\n\tVideoAsset *VeoVideoAsset `json:\"videoAsset,omitempty\"`\n\tError      string         `json:\"error,omitempty\"`\n}\n\n// MARK: - Core Functions (Direct translation from TypeScript)\n\n// startVeoVideoGeneration - Direct translation of generateVeoVideo from veoService.ts\nfunc startVeoVideoGeneration(req VeoGenerationRequest) (*VeoGenerationResponse, error) {\n\tif req.GeminiKey == \"\" {\n\t\treturn nil, fmt.Errorf(\"no Gemini API key provided\")\n\t}\n\n\tif len(req.Images) == 0 && req.ExtensionSource == nil {\n\t\treturn nil, fmt.Errorf(\"at least one image or extensionSource is required\")\n\t}\n\n\tctx := context.Background()\n\n\t// Create client with API key\n\tclient, err := genai.NewClient(ctx, &genai.ClientConfig{\n\t\tAPIKey:  req.GeminiKey,\n\t\tBackend: genai.BackendGeminiAPI,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create client: %v\", err)\n\t}\n\n\tisMultiImage := len(req.Images) > 1\n\tuseKeyframesMode := req.UseKeyframes && len(req.Images) == 2\n\n\t// Choose model based on feature requirements (same logic as TS)\n\tmodel := \"veo-3.1-fast-generate-preview\"\n\tif len(req.Images) > 2 || req.ExtensionSource != nil {\n\t\tmodel = \"veo-3.1-generate-preview\"\n\t}\n\n\tvar operation *genai.GenerateVideosOperation\n\n\t// VIDEO EXTENSION (Video-to-Video flow)\n\tif req.ExtensionSource != nil {\n\t\tconfig := &genai.GenerateVideosConfig{\n\t\t\tNumberOfVideos: 1,\n\t\t\tResolution:     \"720p\",\n\t\t\tAspectRatio:    req.AspectRatio,\n\t\t}\n\n\t\tsource := &genai.GenerateVideosSource{\n\t\t\tPrompt: req.Prompt,\n\t\t\tVideo: &genai.Video{\n\t\t\t\tURI: req.ExtensionSource.URI,\n\t\t\t},\n\t\t}\n\n\t\toperation, err = client.Models.GenerateVideosFromSource(ctx, \"veo-3.1-generate-preview\", source, config)\n\n\t} else if useKeyframesMode {\n\t\t// START -> END KEYFRAME INTERPOLATION\n\t\timageData, decodeErr := base64.StdEncoding.DecodeString(req.Images[0].Data)\n\t\tif decodeErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to decode image: %v\", decodeErr)\n\t\t}\n\n\t\tlastFrameData, decodeErr := base64.StdEncoding.DecodeString(req.Images[1].Data)\n\t\tif decodeErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to decode last frame: %v\", decodeErr)\n\t\t}\n\n\t\timage := &genai.Image{\n\t\t\tImageBytes: imageData,\n\t\t\tMIMEType:   req.Images[0].MimeType,\n\t\t}\n\n\t\tconfig := &genai.GenerateVideosConfig{\n\t\t\tNumberOfVideos: 1,\n\t\t\tResolution:     \"720p\",\n\t\t\tAspectRatio:    req.AspectRatio,\n\t\t\tLastFrame: &genai.Image{\n\t\t\t\tImageBytes: lastFrameData,\n\t\t\t\tMIMEType:   req.Images[1].MimeType,\n\t\t\t},\n\t\t}\n\n\t\toperation, err = client.Models.GenerateVideos(ctx, \"veo-3.1-fast-generate-preview\", req.Prompt, image, config)\n\n\t} else if isMultiImage {\n\t\t// MULTI-IMAGE ASSET REFERENCE (Max 3)\n\t\tvar referenceImages []*genai.VideoGenerationReferenceImage\n\t\tfor i := 0; i < len(req.Images) && i < 3; i++ {\n\t\t\timageData, decodeErr := base64.StdEncoding.DecodeString(req.Images[i].Data)\n\t\t\tif decodeErr != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to decode reference image: %v\", decodeErr)\n\t\t\t}\n\n\t\t\treferenceImages = append(referenceImages, &genai.VideoGenerationReferenceImage{\n\t\t\t\tImage: &genai.Image{\n\t\t\t\t\tImageBytes: imageData,\n\t\t\t\t\tMIMEType:   req.Images[i].MimeType,\n\t\t\t\t},\n\t\t\t\tReferenceType: \"ASSET\",\n\t\t\t})\n\t\t}\n\n\t\tconfig := &genai.GenerateVideosConfig{\n\t\t\tNumberOfVideos:  1,\n\t\t\tResolution:      \"720p\",\n\t\t\tAspectRatio:     \"16:9\", // Requirement for multi-image\n\t\t\tReferenceImages: referenceImages,\n\t\t}\n\n\t\tsource := &genai.GenerateVideosSource{\n\t\t\tPrompt: req.Prompt,\n\t\t}\n\n\t\toperation, err = client.Models.GenerateVideosFromSource(ctx, \"veo-3.1-generate-preview\", source, config)\n\n\t} else {\n\t\t// SINGLE IMAGE START FRAME\n\t\timageData, decodeErr := base64.StdEncoding.DecodeString(req.Images[0].Data)\n\t\tif decodeErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to decode image: %v\", decodeErr)\n\t\t}\n\n\t\timage := &genai.Image{\n\t\t\tImageBytes: imageData,\n\t\t\tMIMEType:   req.Images[0].MimeType,\n\t\t}\n\n\t\tconfig := &genai.GenerateVideosConfig{\n\t\t\tNumberOfVideos: 1,\n\t\t\tResolution:     \"720p\",\n\t\t\tAspectRatio:    req.AspectRatio,\n\t\t}\n\n\t\toperation, err = client.Models.GenerateVideos(ctx, model, req.Prompt, image, config)\n\t}\n\n\tif err != nil {\n\t\tlog.Printf(\"[VEO Start] Generation error: %v\", err)\n\t\tif strings.Contains(err.Error(), \"Requested entity was not found\") {\n\t\t\treturn nil, fmt.Errorf(\"KEY_RESET_REQUIRED\")\n\t\t}\n\t\t// Check for rate limit at generation start\n\t\tif strings.Contains(err.Error(), \"429\") || strings.Contains(err.Error(), \"RESOURCE_EXHAUSTED\") || strings.Contains(err.Error(), \"rate\") || strings.Contains(err.Error(), \"quota\") {\n\t\t\tlog.Printf(\"[VEO Start] Rate limit detected: %v\", err)\n\t\t\treturn nil, fmt.Errorf(\"Rate limit exceeded. Please wait a few minutes and try again. Details: %v\", err)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"API error: %v\", err)\n\t}\n\n\tlog.Printf(\"[VEO Start] Generation started successfully. Operation: %s\", operation.Name)\n\n\t// Extract operation name (format: \"operations/{operationId}\")\n\treturn &VeoGenerationResponse{\n\t\tOperationID: operation.Name,\n\t\tMessage:     \"Video generation started successfully\",\n\t}, nil\n}\n\n// pollVeoOperation - Direct translation of polling logic from veoService.ts\nfunc pollVeoOperation(operationID, apiKey string) (*VeoPollResponse, error) {\n\tif apiKey == \"\" {\n\t\treturn nil, fmt.Errorf(\"no API key provided\")\n\t}\n\n\tlog.Printf(\"[VEO Poll] Starting poll for operation: %s\", operationID)\n\n\tctx := context.Background()\n\n\t// Create client with API key\n\tclient, err := genai.NewClient(ctx, &genai.ClientConfig{\n\t\tAPIKey:  apiKey,\n\t\tBackend: genai.BackendGeminiAPI,\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"[VEO Poll] Failed to create client: %v\", err)\n\t\treturn nil, fmt.Errorf(\"failed to create client: %v\", err)\n\t}\n\n\t// Poll operation status\n\toperation, err := client.Operations.GetVideosOperation(ctx, &genai.GenerateVideosOperation{\n\t\tName: operationID,\n\t}, nil)\n\n\tif err != nil {\n\t\tlog.Printf(\"[VEO Poll] GetVideosOperation error: %v\", err)\n\t\tif strings.Contains(err.Error(), \"Requested entity was not found\") {\n\t\t\treturn &VeoPollResponse{\n\t\t\t\tDone:   true,\n\t\t\t\tStatus: \"failed\",\n\t\t\t\tError:  \"KEY_RESET_REQUIRED\",\n\t\t\t}, nil\n\t\t}\n\t\t// Check for rate limit errors\n\t\tif strings.Contains(err.Error(), \"429\") || strings.Contains(err.Error(), \"RESOURCE_EXHAUSTED\") || strings.Contains(err.Error(), \"rate\") {\n\t\t\tlog.Printf(\"[VEO Poll] Rate limit detected in error: %v\", err)\n\t\t\treturn &VeoPollResponse{\n\t\t\t\tDone:   true,\n\t\t\t\tStatus: \"failed\",\n\t\t\t\tError:  fmt.Sprintf(\"Rate limit exceeded. Please wait a few minutes and try again. Details: %v\", err),\n\t\t\t}, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"poll failed: %v\", err)\n\t}\n\n\t// Log full operation state for debugging\n\tlog.Printf(\"[VEO Poll] Operation Done: %v, Has Error: %v, Has Response: %v\",\n\t\toperation.Done, operation.Error != nil, operation.Response != nil)\n\n\t// Check for errors\n\tif operation.Error != nil {\n\t\t// Log the full error object for debugging\n\t\terrorJSON, _ := json.MarshalIndent(operation.Error, \"\", \"  \")\n\t\tlog.Printf(\"[VEO Poll] Operation error (full): %s\", string(errorJSON))\n\n\t\terrorMsg := \"Generation failed\"\n\t\t// Try to extract more detailed error info\n\t\tif msg, ok := operation.Error[\"message\"].(string); ok {\n\t\t\terrorMsg = msg\n\t\t\tlog.Printf(\"[VEO Poll] Error message: %s\", msg)\n\t\t}\n\t\tif code, ok := operation.Error[\"code\"].(float64); ok {\n\t\t\tlog.Printf(\"[VEO Poll] Error code: %v\", code)\n\t\t\t// HTTP 429 = rate limit\n\t\t\tif int(code) == 429 {\n\t\t\t\terrorMsg = \"Rate limit exceeded. Please wait a few minutes and try again.\"\n\t\t\t}\n\t\t}\n\t\tif status, ok := operation.Error[\"status\"].(string); ok {\n\t\t\tlog.Printf(\"[VEO Poll] Error status: %s\", status)\n\t\t\tif status == \"RESOURCE_EXHAUSTED\" {\n\t\t\t\terrorMsg = \"Rate limit exceeded. Please wait a few minutes and try again.\"\n\t\t\t}\n\t\t}\n\t\t// Check for details array\n\t\tif details, ok := operation.Error[\"details\"].([]interface{}); ok {\n\t\t\tdetailsJSON, _ := json.MarshalIndent(details, \"\", \"  \")\n\t\t\tlog.Printf(\"[VEO Poll] Error details: %s\", string(detailsJSON))\n\t\t}\n\n\t\treturn &VeoPollResponse{\n\t\t\tDone:   true,\n\t\t\tStatus: \"failed\",\n\t\t\tError:  errorMsg,\n\t\t}, nil\n\t}\n\n\t// Check if operation is done\n\tif !operation.Done {\n\t\tlog.Printf(\"[VEO Poll] Operation still processing...\")\n\t\treturn &VeoPollResponse{\n\t\t\tDone:   false,\n\t\t\tStatus: \"processing\",\n\t\t}, nil\n\t}\n\n\t// Operation completed - extract video info\n\t// Debug: log full response\n\tresponseJSON, _ := json.MarshalIndent(operation.Response, \"\", \"  \")\n\tlog.Printf(\"[VEO Poll] Full response: %s\", string(responseJSON))\n\n\tif operation.Response == nil || len(operation.Response.GeneratedVideos) == 0 {\n\t\tlog.Printf(\"[VEO Poll] Operation completed but no video returned. Response nil: %v, GeneratedVideos count: %d\",\n\t\t\toperation.Response == nil,\n\t\t\tfunc() int {\n\t\t\t\tif operation.Response != nil {\n\t\t\t\t\treturn len(operation.Response.GeneratedVideos)\n\t\t\t\t}\n\t\t\t\treturn 0\n\t\t\t}())\n\n\t\t// Check for RAI (Responsible AI) filter reasons\n\t\terrorMsg := \"Generation completed but no video was returned. This may be due to safety filters or content policy.\"\n\t\tif operation.Response != nil && len(operation.Response.RAIMediaFilteredReasons) > 0 {\n\t\t\terrorMsg = operation.Response.RAIMediaFilteredReasons[0]\n\t\t\tlog.Printf(\"[VEO Poll] RAI filter reason: %s\", errorMsg)\n\t\t}\n\n\t\treturn &VeoPollResponse{\n\t\t\tDone:   true,\n\t\t\tStatus: \"failed\",\n\t\t\tError:  errorMsg,\n\t\t}, nil\n\t}\n\n\tvideoAsset := operation.Response.GeneratedVideos[0].Video\n\tlog.Printf(\"[VEO Poll] Success! Video URI: %s\", videoAsset.URI)\n\n\treturn &VeoPollResponse{\n\t\tDone:     true,\n\t\tStatus:   \"completed\",\n\t\tVideoURL: videoAsset.URI,\n\t\tVideoAsset: &VeoVideoAsset{\n\t\t\tURI:         videoAsset.URI,\n\t\t\tAspectRatio: \"16:9\", // Default, SDK might not provide this field\n\t\t},\n\t}, nil\n}\n"
  },
  {
    "path": "backend/gemini_video.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\n// callGeminiVideoAnalysis sends a recorded video (base64) to Gemini for understanding.\n// It returns a short analysis that can be attached to the user's chat message.\nfunc callGeminiVideoAnalysis(videoBase64, mimeType, prompt, apiKey string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Gemini API key provided. Add it in Settings to analyze video.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tif mimeType == \"\" {\n\t\tmimeType = \"video/mp4\"\n\t}\n\n\tcontents := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"parts\": []interface{}{\n\t\t\t\tmap[string]interface{}{\"text\": prompt},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"inline_data\": map[string]interface{}{\n\t\t\t\t\t\t\"mime_type\": mimeType,\n\t\t\t\t\t\t\"data\":      videoBase64,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// Use Gemini 3 Flash preview by default for faster multimodal analysis.\n\tmodel := \"gemini-3-flash-preview\"\n\taiResp, inputTokens, outputTokens, err := callGeminiAPIWithModel(contents, apiKey, 12000, \"\", model)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcost := (float64(inputTokens) / 1_000_000.0 * 1.25) + (float64(outputTokens) / 1_000_000.0 * 5.0)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGeminiAPIWithModel mirrors callGeminiAPI but lets callers choose the model (needed for video support).\nfunc callGeminiAPIWithModel(contents []map[string]interface{}, apiKey string, maxTokens int, thinkingBudget string, modelName string) (string, int, int, error) {\n\tstart := time.Now()\n\tfmt.Printf(\"[GeminiVideo] request model=%s\\n\", modelName)\n\tthinkingCfg := map[string]interface{}{\n\t\t\"thinkingBudget\":  -1,\n\t\t\"includeThoughts\": true,\n\t}\n\n\tif thinkingBudget != \"\" {\n\t\tthinkingCfg[\"thinkingBudget\"] = thinkingBudget\n\t}\n\n\tgenerationConfig := map[string]interface{}{\n\t\t\"maxOutputTokens\": maxTokens,\n\t\t\"temperature\":     0.6,\n\t\t\"thinkingConfig\":  thinkingCfg,\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"contents\":         contents,\n\t\t\"generationConfig\": generationConfig,\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\tif modelName == \"\" {\n\t\tmodelName = \"gemini-3-flash-preview\"\n\t}\n\turl := fmt.Sprintf(\"https://generativelanguage.googleapis.com/v1beta/models/%s:generateContent?key=%s\", modelName, apiKey)\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{\n\t\tTimeout: 120 * time.Second,\n\t}\n\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\telapsed := time.Since(start)\n\tfmt.Printf(\"[GeminiVideo] response status=%d elapsed=%s\\n\", resp.StatusCode, elapsed)\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\terrMsg := fmt.Sprintf(\"Gemini API error (%d): %s\", resp.StatusCode, string(b))\n\t\treturn \"\", 0, 0, fmt.Errorf(\"%s\", errMsg)\n\t}\n\n\tvar geminiResp struct {\n\t\tCandidates []struct {\n\t\t\tContent struct {\n\t\t\t\tParts []map[string]interface{} `json:\"parts\"`\n\t\t\t} `json:\"content\"`\n\t\t} `json:\"candidates\"`\n\t\tUsageMetadata struct {\n\t\t\tPromptTokenCount     int `json:\"promptTokenCount\"`\n\t\t\tCandidatesTokenCount int `json:\"candidatesTokenCount\"`\n\t\t\tTotalTokenCount      int `json:\"totalTokenCount\"`\n\t\t} `json:\"usageMetadata\"`\n\t}\n\n\tbodyBytes, _ := io.ReadAll(resp.Body)\n\n\tif err := json.Unmarshal(bodyBytes, &geminiResp); err != nil {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"failed to parse Gemini response: %w\", err)\n\t}\n\n\tif len(geminiResp.Candidates) == 0 {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"no candidates in Gemini response\")\n\t}\n\n\tvar responseText strings.Builder\n\tvar thinking strings.Builder\n\n\tfor _, part := range geminiResp.Candidates[0].Content.Parts {\n\t\tisThought := false\n\t\tif thoughtVal, hasThought := part[\"thought\"]; hasThought {\n\t\t\tif thoughtBool, ok := thoughtVal.(bool); ok && thoughtBool {\n\t\t\t\tisThought = true\n\t\t\t} else if thoughtStr, ok := thoughtVal.(string); ok && thoughtStr != \"\" {\n\t\t\t\tisThought = true\n\t\t\t}\n\t\t}\n\n\t\tif text, ok := part[\"text\"].(string); ok {\n\t\t\tif isThought {\n\t\t\t\tfmt.Fprintf(&thinking, \"<think>%s</think>\\n\", text)\n\t\t\t} else {\n\t\t\t\tresponseText.WriteString(text)\n\t\t\t}\n\t\t}\n\t}\n\n\tfinal := strings.TrimSpace(thinking.String() + \"\\n\" + responseText.String())\n\tinputTokens := geminiResp.UsageMetadata.PromptTokenCount\n\toutputTokens := geminiResp.UsageMetadata.CandidatesTokenCount\n\n\treturn final, inputTokens, outputTokens, nil\n}\n"
  },
  {
    "path": "backend/go.mod",
    "content": "module glowbom-backend\n\ngo 1.24\n\ntoolchain go1.24.11\n\nrequire (\n\tcloud.google.com/go v0.116.0 // indirect\n\tcloud.google.com/go/auth v0.9.3 // indirect\n\tcloud.google.com/go/compute/metadata v0.5.0 // indirect\n\tgithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect\n\tgithub.com/google/go-cmp v0.6.0 // indirect\n\tgithub.com/google/s2a-go v0.1.8 // indirect\n\tgithub.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect\n\tgithub.com/gorilla/websocket v1.5.3 // indirect\n\tgithub.com/sst/opencode-sdk-go v0.19.2 // indirect\n\tgithub.com/tidwall/gjson v1.14.4 // indirect\n\tgithub.com/tidwall/match v1.1.1 // indirect\n\tgithub.com/tidwall/pretty v1.2.1 // indirect\n\tgithub.com/tidwall/sjson v1.2.5 // indirect\n\tgo.opencensus.io v0.24.0 // indirect\n\tgolang.org/x/crypto v0.36.0 // indirect\n\tgolang.org/x/net v0.38.0 // indirect\n\tgolang.org/x/sys v0.31.0 // indirect\n\tgolang.org/x/text v0.23.0 // indirect\n\tgoogle.golang.org/genai v1.40.0 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect\n\tgoogle.golang.org/grpc v1.66.2 // indirect\n\tgoogle.golang.org/protobuf v1.34.2 // indirect\n)\n"
  },
  {
    "path": "backend/go.sum",
    "content": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=\ncloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=\ncloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U=\ncloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk=\ncloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=\ncloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\ngithub.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=\ngithub.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=\ngithub.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=\ngithub.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=\ngithub.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=\ngithub.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=\ngithub.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/sst/opencode-sdk-go v0.19.2 h1:ffgQpE+ms4F0Wop/tT4tqTvFAbocyWYM8iy543b3Ous=\ngithub.com/sst/opencode-sdk-go v0.19.2/go.mod h1:rrpo5n0Be43y6tJ29TeMxH1/zeoDcB0D43nJh6gnL34=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=\ngithub.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=\ngithub.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=\ngithub.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=\ngithub.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=\ngithub.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=\ngithub.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=\ngithub.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=\ngithub.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=\ngithub.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=\ngithub.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=\ngithub.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=\ngo.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=\ngo.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=\ngolang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=\ngolang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=\ngolang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=\ngolang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=\ngolang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/genai v1.40.0 h1:kYxyQSH+vsib8dvsgyLJzsVEIv5k3ZmHJyVqdvGncmc=\ngoogle.golang.org/genai v1.40.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\ngoogle.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=\ngoogle.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=\ngoogle.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\ngoogle.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=\ngoogle.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n"
  },
  {
    "path": "backend/gpt5_openai.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\n// callGPT5DrawToCodeApiFull handles draw-to-code using GPT-5 with native vision\nfunc callGPT5DrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey, openAIModel string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenAI API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\n\t// 1) Build system prompt (developer role)\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// 2) Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// 3) Construct GPT-5.2 request with vision\n\t// GPT-5.2 uses \"developer\" role for system messages and supports vision in user messages\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"developer\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"content\": []interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": detailedTask,\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\"url\": fmt.Sprintf(\"data:image/jpeg;base64,%s\", imageBase64),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// 4) Call OpenAI API with GPT-5.2\n\taiResp, inputTokens, outputTokens, err := callGPT5API(messages, apiKey, 32768, \"low\", resolvedModel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcost := estimateOpenAITextCost(resolvedModel, inputTokens, outputTokens)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGPT5DrawToCodeStreaming handles draw-to-code with streaming for GPT-5.2\nfunc callGPT5DrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey, openAIModel string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no OpenAI API key provided\")\n\t}\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\n\t// Build system prompt (developer role)\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// Construct GPT-5.2 request with vision\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"developer\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"content\": []interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": detailedTask,\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\"url\": fmt.Sprintf(\"data:image/jpeg;base64,%s\", imageBase64),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// Use the same high output budget as non-streaming draw-to-code to avoid truncated translations.\n\treturn callGPT5APIStreaming(w, messages, apiKey, 32768, \"low\", resolvedModel)\n}\n\n// callGPT5ApiGo handles normal chat using GPT-5.2\nfunc callGPT5ApiGo(prevMsgs []ChatMessage, newMsg, apiKey, openAIModel string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenAI API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\n\t// Gather system message and convert to GPT-5.2 format\n\tsystemMsg := defaultSystemPrompt\n\tvar messages []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// Add developer message (GPT-5.2's system role)\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"developer\",\n\t\t\"content\": systemMsg,\n\t})\n\n\t// Add conversation history\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg,\n\t})\n\n\t// Call GPT-5.2 API\n\taiResp, inputTokens, outputTokens, err := callGPT5API(messages, apiKey, 8192, \"low\", resolvedModel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcost := estimateOpenAITextCost(resolvedModel, inputTokens, outputTokens)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGPT5API makes the actual HTTP request to OpenAI API with streaming support\nfunc callGPT5API(messages []map[string]interface{}, apiKey string, maxTokens int, reasoningEffort, openAIModel string) (string, int, int, error) {\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\treqBody := map[string]interface{}{\n\t\t\"model\":                 resolvedModel,\n\t\t\"reasoning_effort\":      reasoningEffort, // \"low\", \"medium\", or \"high\"\n\t\t\"max_completion_tokens\": maxTokens,\n\t\t\"messages\":              messages,\n\t\t\"stream\":                true,\n\t\t\"stream_options\": map[string]interface{}{\n\t\t\t\"include_usage\": true,\n\t\t},\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.openai.com/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tfmt.Println(\"[DEBUG] Calling GPT-5 API with streaming...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(b)\n\t\tif isOpenAIMissingModelScope(bodyText) {\n\t\t\treturn \"\", 0, 0, fmt.Errorf(\"%s\", openAIModelScopeHelpMessage())\n\t\t}\n\t\treturn \"\", 0, 0, fmt.Errorf(\"OpenAI API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\t// Parse streaming response\n\tvar responseText strings.Builder\n\tvar reasoning strings.Builder\n\tvar inputTokens, outputTokens int\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent   string `json:\"content\"`\n\t\t\t\t\t\t\tReasoning struct {\n\t\t\t\t\t\t\t\tSummary []struct {\n\t\t\t\t\t\t\t\t\tType string `json:\"type\"`\n\t\t\t\t\t\t\t\t\tText string `json:\"text\"`\n\t\t\t\t\t\t\t\t} `json:\"summary\"`\n\t\t\t\t\t\t\t} `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\t// Extract content\n\t\t\t\t\t\tresponseText.WriteString(chunk.Choices[0].Delta.Content)\n\n\t\t\t\t\t\t// Extract reasoning summaries\n\t\t\t\t\t\tfor _, summary := range chunk.Choices[0].Delta.Reasoning.Summary {\n\t\t\t\t\t\t\tif summary.Type == \"summary_text\" {\n\t\t\t\t\t\t\t\treasoning.WriteString(summary.Text)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from final chunk\n\t\t\t\t\tif chunk.Usage.PromptTokens > 0 {\n\t\t\t\t\t\tinputTokens = chunk.Usage.PromptTokens\n\t\t\t\t\t\toutputTokens = chunk.Usage.CompletionTokens\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", 0, 0, err\n\t\t}\n\t}\n\n\t// Prepend reasoning wrapped in <think> tags if present (matching Ollama format)\n\tfullResponse := responseText.String()\n\tif reasoning.Len() > 0 {\n\t\tfullResponse = \"<think>\" + reasoning.String() + \"</think>\" + fullResponse\n\t}\n\n\tfmt.Printf(\"[DEBUG] GPT-5 response: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\n\treturn fullResponse, inputTokens, outputTokens, nil\n}\n\n// callGPT5ChatStreaming streams GPT-5.2 response via SSE to the writer (for chat)\nfunc callGPT5ChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, openAIModel string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no OpenAI API key provided\")\n\t}\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\n\t// Gather system message and convert to GPT-5.2 format\n\tsystemMsg := defaultSystemPrompt\n\tvar messages []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// Add developer message (GPT-5.2's system role)\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"developer\",\n\t\t\"content\": systemMsg,\n\t})\n\n\t// Add conversation history\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg,\n\t})\n\n\t// Call streaming GPT-5.2 API\n\treturn callGPT5APIStreaming(w, messages, apiKey, 8192, \"low\", resolvedModel)\n}\n\n// callGPT5APIStreaming streams GPT-5.2 responses via SSE directly to the HTTP response writer\nfunc callGPT5APIStreaming(w http.ResponseWriter, messages []map[string]interface{}, apiKey string, maxTokens int, reasoningEffort, openAIModel string) error {\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\treqBody := map[string]interface{}{\n\t\t\"model\":                 resolvedModel,\n\t\t\"reasoning_effort\":      reasoningEffort,\n\t\t\"max_completion_tokens\": maxTokens,\n\t\t\"messages\":              messages,\n\t\t\"stream\":                true,\n\t\t\"stream_options\": map[string]interface{}{\n\t\t\t\"include_usage\": true,\n\t\t},\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.openai.com/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tfmt.Println(\"[DEBUG] Calling GPT-5 API with streaming (SSE)...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(b)\n\t\tif isOpenAIMissingModelScope(bodyText) {\n\t\t\treturn fmt.Errorf(\"%s\", openAIModelScopeHelpMessage())\n\t\t}\n\t\treturn fmt.Errorf(\"OpenAI API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\t// Stream response chunks to client\n\tvar responseBuilder strings.Builder\n\tvar reasoningBuilder strings.Builder\n\tvar reasoningSent bool\n\tvar reasoningStart time.Time\n\tvar reasoningDurationSent bool\n\tvar inputTokens, outputTokens int\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent   string `json:\"content\"`\n\t\t\t\t\t\t\tReasoning struct {\n\t\t\t\t\t\t\t\tSummary []struct {\n\t\t\t\t\t\t\t\t\tType string `json:\"type\"`\n\t\t\t\t\t\t\t\t\tText string `json:\"text\"`\n\t\t\t\t\t\t\t\t} `json:\"summary\"`\n\t\t\t\t\t\t\t} `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\t// Debug: print raw chunk to see what we're getting\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\tfmt.Printf(\"[GPT-5 DEBUG] Chunk delta: %+v\\n\", chunk.Choices[0].Delta)\n\t\t\t\t\t}\n\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\t// Accumulate reasoning content\n\t\t\t\t\t\tfor _, summary := range chunk.Choices[0].Delta.Reasoning.Summary {\n\t\t\t\t\t\t\tif summary.Type == \"summary_text\" {\n\t\t\t\t\t\t\t\tif reasoningStart.IsZero() {\n\t\t\t\t\t\t\t\t\treasoningStart = time.Now()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfmt.Printf(\"[GPT-5 DEBUG] Found reasoning summary: %s\\n\", summary.Text)\n\t\t\t\t\t\t\t\treasoningBuilder.WriteString(summary.Text)\n\n\t\t\t\t\t\t\t\t// Send individual thinking step to client immediately\n\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": summary.Text}\n\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\tfmt.Println(\"[GPT-5] Sending thinking step:\", summary.Text)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontent := chunk.Choices[0].Delta.Content\n\t\t\t\t\t\tresponseBuilder.WriteString(content)\n\n\t\t\t\t\t\t// Send accumulated reasoning before first content chunk\n\t\t\t\t\t\tif !reasoningSent && reasoningBuilder.Len() > 0 && (content != \"\" || chunk.Usage.PromptTokens > 0) {\n\t\t\t\t\t\t\tthinkingText := \"<think>\" + reasoningBuilder.String() + \"</think>\"\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tfmt.Println(\"[GPT-5] Sending reasoning:\", reasoningBuilder.String())\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treasoningSent = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Send content chunk\n\t\t\t\t\t\tif content != \"\" {\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": content}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tfmt.Println(\"[GPT-5] Sending chunk:\", content)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Send reasoning duration after first content\n\t\t\t\t\t\t\tif !reasoningDurationSent && !reasoningStart.IsZero() {\n\t\t\t\t\t\t\t\tduration := time.Since(reasoningStart).Seconds()\n\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from final chunk\n\t\t\t\t\tif chunk.Usage.PromptTokens > 0 {\n\t\t\t\t\t\tinputTokens = chunk.Usage.PromptTokens\n\t\t\t\t\t\toutputTokens = chunk.Usage.CompletionTokens\n\n\t\t\t\t\t\t// Send thinking duration if not sent yet\n\t\t\t\t\t\tif !reasoningDurationSent && !reasoningStart.IsZero() {\n\t\t\t\t\t\t\tduration := time.Since(reasoningStart).Seconds()\n\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate cost (GPT-5 pricing: $5 per 1M input, $20 per 1M output)\n\t\t\t\t\t\tcost := estimateOpenAITextCost(resolvedModel, inputTokens, outputTokens)\n\n\t\t\t\t\t\t// Send done event with usage\n\t\t\t\t\t\tdoneData := map[string]interface{}{\n\t\t\t\t\t\t\t\"done\": true,\n\t\t\t\t\t\t\t\"tokenUsage\": map[string]int{\n\t\t\t\t\t\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\t\t\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\t\t\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"cost\": cost,\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoneBytes, _ := json.Marshal(doneData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfmt.Printf(\"[GPT-5] Stream complete: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\treturn nil\n}\n"
  },
  {
    "path": "backend/gpt5_responses_api.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\n// callGPT5ResponsesAPIStreaming uses the Responses API for GPT-5 with reasoning support\nfunc callGPT5ResponsesAPIStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, openAIModel string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no OpenAI API key provided\")\n\t}\n\tresolvedModel := normalizeOpenAIModelID(openAIModel)\n\n\t// Build conversation history for Responses API\n\t// Responses API uses \"input\" instead of \"messages\"\n\n\t// Start with default system prompt, override if one exists in prevMsgs\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t\tbreak\n\t\t}\n\t}\n\n\tvar conversationText strings.Builder\n\n\t// Add system prompt at the beginning\n\tconversationText.WriteString(fmt.Sprintf(\"System: %s\\n\\n\", systemMsg))\n\n\t// Add conversation history (skip system messages as we already added it)\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" {\n\t\t\tconversationText.WriteString(fmt.Sprintf(\"User: %s\\n\\n\", m.Content))\n\t\t} else if m.Role == \"assistant\" {\n\t\t\tconversationText.WriteString(fmt.Sprintf(\"Assistant: %s\\n\\n\", m.Content))\n\t\t}\n\t}\n\tconversationText.WriteString(fmt.Sprintf(\"User: %s\\n\\nAssistant:\", newMsg))\n\n\t// Build Responses API request\n\treqBody := map[string]interface{}{\n\t\t\"model\":             resolvedModel,\n\t\t\"input\":             conversationText.String(),\n\t\t\"max_output_tokens\": 10000,\n\t\t\"reasoning\": map[string]interface{}{\n\t\t\t\"effort\":  \"medium\", // \"minimal\", \"medium\", or \"high\"\n\t\t\t\"summary\": \"auto\",   // Request reasoning summaries\n\t\t},\n\t\t\"stream\": true,\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.openai.com/v1/responses\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tfmt.Printf(\"[DEBUG] Calling %s Responses API with streaming...\\n\", resolvedModel)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(b)\n\t\tif isMissingResponsesWriteScope(bodyText) {\n\t\t\tfmt.Println(\"[GPT-5] Responses scope missing, falling back to Chat Completions streaming\")\n\t\t\treturn callGPT5ChatStreaming(w, prevMsgs, newMsg, apiKey, resolvedModel)\n\t\t}\n\t\tif isMissingModelRequestScope(bodyText) {\n\t\t\treturn fmt.Errorf(\"%s\", openAIModelScopeHelpMessage())\n\t\t}\n\t\treturn fmt.Errorf(\"OpenAI Responses API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\t// Stream response chunks to client\n\tvar responseBuilder strings.Builder\n\tvar reasoningBuilder strings.Builder\n\tvar reasoningSent bool\n\tvar reasoningStart time.Time\n\tvar reasoningDurationSent bool\n\tvar inputTokens, outputTokens, reasoningTokens int\n\tvar lastSummaryIndex int = -1\n\tvar currentThinkingStep strings.Builder\n\tvar currentStepTitleSent bool\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// Responses API streaming format - events have delta/text at top level\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tType           string `json:\"type\"`\n\t\t\t\t\tSequenceNumber int    `json:\"sequence_number\"`\n\t\t\t\t\tSummaryIndex   int    `json:\"summary_index\"`\n\n\t\t\t\t\t// For delta events (reasoning and output text)\n\t\t\t\t\tDelta string `json:\"delta\"`\n\t\t\t\t\tText  string `json:\"text\"`\n\n\t\t\t\t\t// For completed event with usage\n\t\t\t\t\tResponse struct {\n\t\t\t\t\t\tUsage struct {\n\t\t\t\t\t\t\tInputTokens         int `json:\"input_tokens\"`\n\t\t\t\t\t\t\tOutputTokens        int `json:\"output_tokens\"`\n\t\t\t\t\t\t\tOutputTokensDetails struct {\n\t\t\t\t\t\t\t\tReasoningTokens int `json:\"reasoning_tokens\"`\n\t\t\t\t\t\t\t} `json:\"output_tokens_details\"`\n\t\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t\t} `json:\"response\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\t// Handle reasoning delta events (accumulate ALL summary sections)\n\t\t\t\t\tif chunk.Type == \"response.reasoning_summary_text.delta\" {\n\t\t\t\t\t\tif reasoningStart.IsZero() {\n\t\t\t\t\t\t\treasoningStart = time.Now()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif chunk.Delta != \"\" {\n\t\t\t\t\t\t\t// When we move to a new summary section\n\t\t\t\t\t\t\tif chunk.SummaryIndex != lastSummaryIndex {\n\t\t\t\t\t\t\t\t// Add spacing between different summary sections in the full reasoning\n\t\t\t\t\t\t\t\tif lastSummaryIndex != -1 {\n\t\t\t\t\t\t\t\t\treasoningBuilder.WriteString(\"\\n\\n\")\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reset for the new thinking step\n\t\t\t\t\t\t\t\tcurrentThinkingStep.Reset()\n\t\t\t\t\t\t\t\tcurrentStepTitleSent = false\n\t\t\t\t\t\t\t\tlastSummaryIndex = chunk.SummaryIndex\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Accumulate the reasoning text\n\t\t\t\t\t\t\treasoningBuilder.WriteString(chunk.Delta)\n\t\t\t\t\t\t\tcurrentThinkingStep.WriteString(chunk.Delta)\n\n\t\t\t\t\t\t\t// Try to extract and send the title once we have a complete title\n\t\t\t\t\t\t\tif !currentStepTitleSent {\n\t\t\t\t\t\t\t\ttext := currentThinkingStep.String()\n\t\t\t\t\t\t\t\t// Check if we have a complete title:\n\t\t\t\t\t\t\t\t// Either: both opening and closing ** (complete markdown title)\n\t\t\t\t\t\t\t\t// Or: text followed by at least 2 newlines (title + blank line before body)\n\t\t\t\t\t\t\t\thasCompleteMarkdown := strings.HasPrefix(text, \"**\") && strings.Count(text, \"**\") >= 2\n\t\t\t\t\t\t\t\thasNewlineSeparation := strings.Count(text, \"\\n\") >= 2\n\n\t\t\t\t\t\t\t\tif hasCompleteMarkdown || hasNewlineSeparation {\n\t\t\t\t\t\t\t\t\tstepTitle := extractThinkingStepTitle(text)\n\t\t\t\t\t\t\t\t\tif stepTitle != \"\" {\n\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\tfmt.Printf(\"[GPT-5] Sending thinking step: %s\\n\", stepTitle)\n\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcurrentStepTitleSent = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle output text delta events (actual response content)\n\t\t\t\t\tif chunk.Type == \"response.output_text.delta\" {\n\t\t\t\t\t\tif chunk.Delta != \"\" {\n\t\t\t\t\t\t\t// Send complete reasoning before first content chunk\n\t\t\t\t\t\t\tif !reasoningSent && reasoningBuilder.Len() > 0 {\n\t\t\t\t\t\t\t\t// Send the last thinking step if we haven't sent its title yet\n\t\t\t\t\t\t\t\tif !currentStepTitleSent && currentThinkingStep.Len() > 0 {\n\t\t\t\t\t\t\t\t\tstepTitle := extractThinkingStepTitle(currentThinkingStep.String())\n\t\t\t\t\t\t\t\t\tif stepTitle != \"\" {\n\t\t\t\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\t\t\t\tfmt.Printf(\"[GPT-5] Sending final thinking step: %s\\n\", stepTitle)\n\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcurrentStepTitleSent = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthinkingText := \"<think>\" + reasoningBuilder.String() + \"</think>\"\n\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\tfmt.Println(\"[GPT-5] Sent complete reasoning chain to client\")\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treasoningSent = true\n\n\t\t\t\t\t\t\t\t// Send thinking duration\n\t\t\t\t\t\t\t\tduration := time.Since(reasoningStart).Seconds()\n\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\tfmt.Printf(\"[GPT-5] Sent thinking duration: %.1fs\\n\", duration)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresponseBuilder.WriteString(chunk.Delta)\n\n\t\t\t\t\t\t\t// Send content chunk to client\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": chunk.Delta}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from final completed event\n\t\t\t\t\tif chunk.Type == \"response.completed\" {\n\t\t\t\t\t\tinputTokens = chunk.Response.Usage.InputTokens\n\t\t\t\t\t\toutputTokens = chunk.Response.Usage.OutputTokens\n\t\t\t\t\t\treasoningTokens = chunk.Response.Usage.OutputTokensDetails.ReasoningTokens\n\n\t\t\t\t\t\t// Send thinking duration if not sent yet\n\t\t\t\t\t\tif !reasoningDurationSent && !reasoningStart.IsZero() {\n\t\t\t\t\t\t\tduration := time.Since(reasoningStart).Seconds()\n\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\tfmt.Printf(\"[GPT-5] Sent thinking duration: %.1fs\\n\", duration)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate cost (GPT-5 pricing: $5 per 1M input, $20 per 1M output)\n\t\t\t\t\t\tcost := estimateOpenAITextCost(resolvedModel, inputTokens, outputTokens)\n\n\t\t\t\t\t\t// Send done event with usage\n\t\t\t\t\t\tdoneData := map[string]interface{}{\n\t\t\t\t\t\t\t\"done\": true,\n\t\t\t\t\t\t\t\"tokenUsage\": map[string]int{\n\t\t\t\t\t\t\t\t\"inputTokens\":     inputTokens,\n\t\t\t\t\t\t\t\t\"outputTokens\":    outputTokens,\n\t\t\t\t\t\t\t\t\"reasoningTokens\": reasoningTokens,\n\t\t\t\t\t\t\t\t\"totalTokens\":     inputTokens + outputTokens,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"cost\": cost,\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoneBytes, _ := json.Marshal(doneData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfmt.Printf(\"[GPT-5] Stream complete: %d input tokens, %d output tokens (%d reasoning)\\n\", inputTokens, outputTokens, reasoningTokens)\n\treturn nil\n}\n\n// extractThinkingStepTitle extracts the title from a thinking step\n// Looks for text between ** markers (e.g., \"**Title**\") or up to the first newline\nfunc extractThinkingStepTitle(text string) string {\n\ttext = strings.TrimSpace(text)\n\tif text == \"\" {\n\t\treturn \"\"\n\t}\n\n\t// Look for text between ** markers\n\tif strings.HasPrefix(text, \"**\") {\n\t\t// Find the closing **\n\t\trest := text[2:]\n\t\tif endIdx := strings.Index(rest, \"**\"); endIdx != -1 {\n\t\t\treturn strings.TrimSpace(rest[:endIdx])\n\t\t}\n\t}\n\n\t// Fallback: take everything up to the first newline\n\tif newlineIdx := strings.Index(text, \"\\n\"); newlineIdx != -1 {\n\t\treturn strings.TrimSpace(text[:newlineIdx])\n\t}\n\n\t// If no newline and no ** markers, return the whole text (shouldn't happen in practice)\n\treturn text\n}\n"
  },
  {
    "path": "backend/grok_image.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime\"\n\t\"net/http\"\n\tneturl \"net/url\"\n\t\"path\"\n\t\"strings\"\n)\n\nconst (\n\txAIImageGenerationURL   = \"https://api.x.ai/v1/images/generations\"\n\txAIImageEditURL         = \"https://api.x.ai/v1/images/edits\"\n\txAIImageGenerationModel = \"grok-imagine-image-pro\"\n\txAIImageEditModel       = \"grok-imagine-image\"\n\txAIImageEditResolution  = \"1k\"\n)\n\n// callGrokImageGeneration calls xAI's Grok image generation API.\n// Returns a base64 data URI on success.\nfunc callGrokImageGeneration(prompt, apiKey, aspectRatio string) (string, error) {\n\treqBody := map[string]interface{}{\n\t\t\"model\":        xAIImageGenerationModel,\n\t\t\"prompt\":       prompt,\n\t\t\"n\":            1,\n\t\t\"image_format\": \"url\",\n\t}\n\n\tif trimmedAspectRatio := strings.TrimSpace(aspectRatio); trimmedAspectRatio != \"\" {\n\t\treqBody[\"aspect_ratio\"] = trimmedAspectRatio\n\t}\n\n\treturn callXAIImageAPI(xAIImageGenerationURL, xAIImageGenerationModel, reqBody, apiKey, false, aspectRatio)\n}\n\n// callGrokImageGenerationWithReference sends a single reference image to Grok image edits API.\n//\n// PRIVACY NOTE: Reference image is only sent to xAI API and not cached.\nfunc callGrokImageGenerationWithReference(prompt, referenceImageBase64, apiKey, aspectRatio string) (string, error) {\n\treferenceImageURL := ensureImageDataURI(referenceImageBase64, \"image/jpeg\")\n\tif strings.TrimSpace(referenceImageURL) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"reference image is required\")\n\t}\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":      xAIImageEditModel,\n\t\t\"prompt\":     prompt,\n\t\t\"n\":          1,\n\t\t\"resolution\": xAIImageEditResolution,\n\t\t\"image\": map[string]interface{}{\n\t\t\t\"url\": referenceImageURL,\n\t\t},\n\t}\n\n\tif trimmedAspectRatio := strings.TrimSpace(aspectRatio); trimmedAspectRatio != \"\" {\n\t\treqBody[\"aspect_ratio\"] = trimmedAspectRatio\n\t} else {\n\t\treqBody[\"aspect_ratio\"] = \"auto\"\n\t}\n\n\treturn callXAIImageAPI(xAIImageEditURL, xAIImageEditModel, reqBody, apiKey, true, aspectRatio)\n}\n\nfunc callXAIImageAPI(endpointURL, model string, reqBody map[string]interface{}, apiKey string, hasReference bool, aspectRatio string) (string, error) {\n\tbodyBytes, err := json.Marshal(reqBody)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\treq, err := http.NewRequest(\"POST\", endpointURL, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\treq.Header.Set(\"Accept\", \"application/json\")\n\n\tfmt.Printf(\"[DEBUG] Calling xAI %s image endpoint=%s (reference=%v, aspect_ratio=%q)\\n\",\n\t\tmodel, endpointURL, hasReference, strings.TrimSpace(aspectRatio))\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to call xAI API: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices {\n\t\treturn \"\", fmt.Errorf(\"xAI API error (status %d): %s\", resp.StatusCode, string(respBody))\n\t}\n\n\tdataURI, err := parseXAIImageGenerationResponse(respBody, apiKey)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn dataURI, nil\n}\n\nfunc ensureImageDataURI(value, defaultMimeType string) string {\n\ttrimmed := strings.TrimSpace(value)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\tif strings.HasPrefix(strings.ToLower(trimmed), \"data:image/\") {\n\t\treturn trimmed\n\t}\n\treturn fmt.Sprintf(\"data:%s;base64,%s\", defaultMimeType, trimmed)\n}\n\nfunc parseXAIImageGenerationResponse(respBody []byte, apiKey string) (string, error) {\n\tvar result struct {\n\t\tData []struct {\n\t\t\tB64JSON string `json:\"b64_json\"`\n\t\t\tURL     string `json:\"url\"`\n\t\t} `json:\"data\"`\n\t\tImages []struct {\n\t\t\tB64JSON string `json:\"b64_json\"`\n\t\t\tURL     string `json:\"url\"`\n\t\t} `json:\"images\"`\n\t}\n\n\tif err := json.Unmarshal(respBody, &result); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\ttype xAIImageResult struct {\n\t\tb64 string\n\t\turl string\n\t}\n\tcandidates := make([]xAIImageResult, 0, len(result.Data)+len(result.Images))\n\tfor _, item := range result.Data {\n\t\tcandidates = append(candidates, xAIImageResult{b64: item.B64JSON, url: item.URL})\n\t}\n\tfor _, item := range result.Images {\n\t\tcandidates = append(candidates, xAIImageResult{b64: item.B64JSON, url: item.URL})\n\t}\n\tif len(candidates) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no image data in response\")\n\t}\n\n\tfirst := candidates[0]\n\tif strings.TrimSpace(first.b64) != \"\" {\n\t\treturn fmt.Sprintf(\"data:image/jpeg;base64,%s\", first.b64), nil\n\t}\n\tif strings.TrimSpace(first.url) != \"\" {\n\t\treturn downloadImageURLAsDataURI(first.url, apiKey)\n\t}\n\treturn \"\", fmt.Errorf(\"image response did not include b64_json or url\")\n}\n\nfunc downloadImageURLAsDataURI(imageURL, apiKey string) (string, error) {\n\treq, err := http.NewRequest(\"GET\", imageURL, nil)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create image download request: %w\", err)\n\t}\n\tif strings.TrimSpace(apiKey) != \"\" {\n\t\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to download image URL: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\timageBytes, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read downloaded image: %w\", err)\n\t}\n\tif resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices {\n\t\treturn \"\", fmt.Errorf(\"image download failed (status %d): %s\", resp.StatusCode, string(imageBytes))\n\t}\n\tif len(imageBytes) == 0 {\n\t\treturn \"\", fmt.Errorf(\"downloaded image is empty\")\n\t}\n\n\tcontentType := strings.TrimSpace(resp.Header.Get(\"Content-Type\"))\n\tif contentType == \"\" {\n\t\tif parsedURL, err := neturl.Parse(imageURL); err == nil {\n\t\t\text := strings.ToLower(path.Ext(parsedURL.Path))\n\t\t\tif ext != \"\" {\n\t\t\t\tcontentType = mime.TypeByExtension(ext)\n\t\t\t}\n\t\t}\n\t}\n\tif contentType == \"\" {\n\t\tcontentType = http.DetectContentType(imageBytes)\n\t}\n\tif contentType == \"\" {\n\t\tcontentType = \"image/jpeg\"\n\t}\n\tif semicolonIdx := strings.Index(contentType, \";\"); semicolonIdx != -1 {\n\t\tcontentType = strings.TrimSpace(contentType[:semicolonIdx])\n\t}\n\n\tencoded := base64.StdEncoding.EncodeToString(imageBytes)\n\treturn fmt.Sprintf(\"data:%s;base64,%s\", contentType, encoded), nil\n}\n"
  },
  {
    "path": "backend/grok_video.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\tneturl \"net/url\"\n\t\"strings\"\n)\n\nconst (\n\txAIVideoGenerationURL   = \"https://api.x.ai/v1/videos/generations\"\n\txAIVideoGenerationModel = \"grok-imagine-video\"\n)\n\nfunc startGrokImagineVideoGeneration(req VeoGenerationRequest) (*VeoGenerationResponse, error) {\n\tif strings.TrimSpace(req.XaiKey) == \"\" {\n\t\treturn nil, fmt.Errorf(\"xAI API key required\")\n\t}\n\n\tpayload := map[string]interface{}{\n\t\t\"model\":  xAIVideoGenerationModel,\n\t\t\"prompt\": req.Prompt,\n\t}\n\n\thasMediaInput := false\n\thasVideoInput := false\n\tif len(req.Images) > 0 {\n\t\thasMediaInput = true\n\t\tpayload[\"image\"] = map[string]interface{}{\n\t\t\t\"url\": veoImageInputToDataURI(req.Images[0]),\n\t\t}\n\t}\n\tif req.ExtensionSource != nil && strings.TrimSpace(req.ExtensionSource.URI) != \"\" {\n\t\thasMediaInput = true\n\t\thasVideoInput = true\n\t\tpayload[\"video\"] = map[string]interface{}{\n\t\t\t\"url\": strings.TrimSpace(req.ExtensionSource.URI),\n\t\t}\n\t}\n\tif !hasMediaInput {\n\t\treturn nil, fmt.Errorf(\"at least one image or video input is required\")\n\t}\n\tif hasVideoInput && (req.DurationSeconds != 0 || strings.TrimSpace(req.Resolution) != \"\" || strings.TrimSpace(req.AspectRatio) != \"\") {\n\t\tfmt.Printf(\"[GROK VIDEO] Edit mode override ignored per docs duration=%d resolution=%q aspect=%q\\n\",\n\t\t\treq.DurationSeconds, strings.TrimSpace(req.Resolution), strings.TrimSpace(req.AspectRatio))\n\t}\n\n\t// xAI docs: editing an existing video does not support duration/aspect_ratio/resolution overrides.\n\tif !hasVideoInput {\n\t\tpayload[\"duration\"] = normalizeXAIVideoDurationSeconds(req.DurationSeconds)\n\t\tpayload[\"resolution\"] = normalizeXAIVideoResolution(req.Resolution)\n\t\tif aspectRatio := normalizeVideoAspectRatio(req.AspectRatio); aspectRatio != \"\" {\n\t\t\tpayload[\"aspect_ratio\"] = aspectRatio\n\t\t}\n\t}\n\n\tmode := \"image-to-video\"\n\tif hasVideoInput {\n\t\tmode = \"video-to-video\"\n\t}\n\tfmt.Printf(\"[GROK VIDEO] Start request mode=%s prompt_len=%d image=%t video=%t duration=%v resolution=%v aspect=%v\\n\",\n\t\tmode,\n\t\tlen(strings.TrimSpace(req.Prompt)),\n\t\tpayload[\"image\"] != nil,\n\t\tpayload[\"video\"] != nil,\n\t\tpayload[\"duration\"],\n\t\tpayload[\"resolution\"],\n\t\tpayload[\"aspect_ratio\"],\n\t)\n\n\trespBody, statusCode, err := xaiStartVideoGenerationRequest(payload, req.XaiKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfmt.Printf(\"[GROK VIDEO] Start response status=%d body=%s\\n\", statusCode, truncateBodyForLog(respBody, 400))\n\tif statusCode < http.StatusOK || statusCode >= http.StatusMultipleChoices {\n\t\t// Compatibility fallback for legacy payload shape.\n\t\tlegacyPayload := map[string]interface{}{\n\t\t\t\"model\":      payload[\"model\"],\n\t\t\t\"prompt\":     payload[\"prompt\"],\n\t\t\t\"duration\":   payload[\"duration\"],\n\t\t\t\"resolution\": payload[\"resolution\"],\n\t\t}\n\t\tif aspectRatio := payload[\"aspect_ratio\"]; aspectRatio != nil {\n\t\t\tlegacyPayload[\"aspect_ratio\"] = aspectRatio\n\t\t}\n\t\tif imagePayload := xaiAsMap(payload[\"image\"]); imagePayload != nil {\n\t\t\tif url := xaiMapStringValue(imagePayload, \"url\"); url != \"\" {\n\t\t\t\tlegacyPayload[\"image_url\"] = url\n\t\t\t}\n\t\t}\n\t\tif videoPayload := xaiAsMap(payload[\"video\"]); videoPayload != nil {\n\t\t\tif url := xaiMapStringValue(videoPayload, \"url\"); url != \"\" {\n\t\t\t\tlegacyPayload[\"video_url\"] = url\n\t\t\t}\n\t\t}\n\n\t\tfmt.Printf(\"[GROK VIDEO] Start legacy fallback request status=%d trigger_body=%s\\n\", statusCode, truncateBodyForLog(respBody, 400))\n\t\tlegacyRespBody, legacyStatusCode, legacyErr := xaiStartVideoGenerationRequest(legacyPayload, req.XaiKey)\n\t\tif legacyErr != nil {\n\t\t\treturn nil, legacyErr\n\t\t}\n\t\tfmt.Printf(\"[GROK VIDEO] Start legacy fallback response status=%d body=%s\\n\", legacyStatusCode, truncateBodyForLog(legacyRespBody, 400))\n\t\tif legacyStatusCode < http.StatusOK || legacyStatusCode >= http.StatusMultipleChoices {\n\t\t\treturn nil, fmt.Errorf(\"xAI video API error (%d): %s | fallback (%d): %s\",\n\t\t\t\tstatusCode,\n\t\t\t\tstrings.TrimSpace(string(respBody)),\n\t\t\t\tlegacyStatusCode,\n\t\t\t\tstrings.TrimSpace(string(legacyRespBody)),\n\t\t\t)\n\t\t}\n\t\trespBody = legacyRespBody\n\t}\n\n\tvar result struct {\n\t\tRequestID string `json:\"request_id\"`\n\t\tID        string `json:\"id\"`\n\t\tStatus    string `json:\"status\"`\n\t\tData      struct {\n\t\t\tRequestID string `json:\"request_id\"`\n\t\t\tID        string `json:\"id\"`\n\t\t} `json:\"data\"`\n\t\tError interface{} `json:\"error\"`\n\t}\n\n\tif err := json.Unmarshal(respBody, &result); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse xAI video start response: %w\", err)\n\t}\n\n\toperationID := strings.TrimSpace(result.RequestID)\n\tif operationID == \"\" {\n\t\toperationID = strings.TrimSpace(result.ID)\n\t}\n\tif operationID == \"\" {\n\t\toperationID = strings.TrimSpace(result.Data.RequestID)\n\t}\n\tif operationID == \"\" {\n\t\toperationID = strings.TrimSpace(result.Data.ID)\n\t}\n\tif operationID == \"\" {\n\t\tif errMsg := xaiErrorValue(result.Error); errMsg != \"\" {\n\t\t\treturn nil, fmt.Errorf(\"xAI video generation failed: %s\", errMsg)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"xAI video generation did not return a request id\")\n\t}\n\n\treturn &VeoGenerationResponse{\n\t\tOperationID: operationID,\n\t\tMessage:     \"Video generation started successfully\",\n\t}, nil\n}\n\nfunc xaiStartVideoGenerationRequest(payload map[string]interface{}, apiKey string) ([]byte, int, error) {\n\tbodyBytes, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"failed to marshal xAI video request: %w\", err)\n\t}\n\n\thttpReq, err := http.NewRequest(\"POST\", xAIVideoGenerationURL, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"failed to create xAI video request: %w\", err)\n\t}\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\thttpReq.Header.Set(\"Authorization\", \"Bearer \"+strings.TrimSpace(apiKey))\n\thttpReq.Header.Set(\"Accept\", \"application/json\")\n\n\tresp, err := http.DefaultClient.Do(httpReq)\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"failed to call xAI video API: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"failed to read xAI video response: %w\", err)\n\t}\n\treturn respBody, resp.StatusCode, nil\n}\n\nfunc pollGrokImagineVideoOperation(operationID, apiKey string) (*VeoPollResponse, error) {\n\tif strings.TrimSpace(operationID) == \"\" {\n\t\treturn nil, fmt.Errorf(\"operation id is required\")\n\t}\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn nil, fmt.Errorf(\"xAI API key required\")\n\t}\n\n\tstatusURL := fmt.Sprintf(\"https://api.x.ai/v1/videos/%s\", neturl.PathEscape(strings.TrimSpace(operationID)))\n\thttpReq, err := http.NewRequest(\"GET\", statusURL, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create xAI video poll request: %w\", err)\n\t}\n\thttpReq.Header.Set(\"Authorization\", \"Bearer \"+strings.TrimSpace(apiKey))\n\thttpReq.Header.Set(\"Accept\", \"application/json\")\n\n\tresp, err := http.DefaultClient.Do(httpReq)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to poll xAI video operation: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read xAI video poll response: %w\", err)\n\t}\n\tfmt.Printf(\"[GROK VIDEO] Poll response operation=%s status_code=%d body=%s\\n\",\n\t\tstrings.TrimSpace(operationID), resp.StatusCode, truncateBodyForLog(respBody, 500))\n\n\tif resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices {\n\t\treturn nil, fmt.Errorf(\"xAI video poll error (%d): %s\", resp.StatusCode, string(respBody))\n\t}\n\n\tvar raw map[string]interface{}\n\tif err := json.Unmarshal(respBody, &raw); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse xAI video poll response: %w\", err)\n\t}\n\tfmt.Printf(\"[GROK VIDEO] Poll status candidates operation=%s top=%q data=%q result=%q response=%q\\n\",\n\t\tstrings.TrimSpace(operationID),\n\t\tstrings.TrimSpace(xaiMapStringValue(raw, \"status\", \"state\", \"request_status\", \"requestStatus\")),\n\t\tstrings.TrimSpace(xaiMapStringValue(xaiAsMap(raw[\"data\"]), \"status\", \"state\", \"request_status\", \"requestStatus\")),\n\t\tstrings.TrimSpace(xaiMapStringValue(xaiAsMap(raw[\"result\"]), \"status\", \"state\", \"request_status\", \"requestStatus\")),\n\t\tstrings.TrimSpace(xaiMapStringValue(xaiAsMap(raw[\"response\"]), \"status\", \"state\", \"request_status\", \"requestStatus\")),\n\t)\n\n\trawStatus := xaiExtractVideoStatus(raw)\n\tstatus := rawStatus\n\tif status == \"\" {\n\t\tstatus = \"unknown\"\n\t}\n\n\tvideoURL := xaiExtractVideoURL(raw)\n\taspectRatio := normalizeVideoAspectRatio(xaiExtractAspectRatio(raw))\n\terrorMsg := xaiExtractErrorMessage(raw)\n\tfmt.Printf(\"[GROK VIDEO] Poll parsed operation=%s raw_status=%q normalized_status=%s has_video_url=%t error=%q\\n\",\n\t\tstrings.TrimSpace(operationID), rawStatus, status, strings.TrimSpace(videoURL) != \"\", errorMsg)\n\n\tswitch status {\n\tcase \"completed\", \"succeeded\", \"success\", \"done\":\n\t\tif strings.TrimSpace(videoURL) == \"\" {\n\t\t\tif errorMsg == \"\" {\n\t\t\t\terrorMsg = \"video generation completed but no video URL was returned\"\n\t\t\t}\n\t\t\treturn &VeoPollResponse{\n\t\t\t\tDone:   true,\n\t\t\t\tStatus: \"failed\",\n\t\t\t\tError:  errorMsg,\n\t\t\t}, nil\n\t\t}\n\t\treturn &VeoPollResponse{\n\t\t\tDone:     true,\n\t\t\tStatus:   \"completed\",\n\t\t\tVideoURL: videoURL,\n\t\t\tVideoAsset: &VeoVideoAsset{\n\t\t\t\tURI:         videoURL,\n\t\t\t\tAspectRatio: aspectRatio,\n\t\t\t},\n\t\t}, nil\n\tcase \"expired\", \"failed\", \"error\", \"cancelled\", \"canceled\", \"rejected\":\n\t\tif errorMsg == \"\" {\n\t\t\terrorMsg = \"video generation failed\"\n\t\t}\n\t\treturn &VeoPollResponse{\n\t\t\tDone:   true,\n\t\t\tStatus: \"failed\",\n\t\t\tError:  errorMsg,\n\t\t}, nil\n\tcase \"pending\", \"processing\", \"running\", \"queued\", \"in_progress\":\n\t\t// Some xAI poll responses omit status once video.url is available.\n\t\tif strings.TrimSpace(videoURL) != \"\" {\n\t\t\treturn &VeoPollResponse{\n\t\t\t\tDone:     true,\n\t\t\t\tStatus:   \"completed\",\n\t\t\t\tVideoURL: videoURL,\n\t\t\t\tVideoAsset: &VeoVideoAsset{\n\t\t\t\t\tURI:         videoURL,\n\t\t\t\t\tAspectRatio: aspectRatio,\n\t\t\t\t},\n\t\t\t}, nil\n\t\t}\n\t\treturn &VeoPollResponse{\n\t\t\tDone:   false,\n\t\t\tStatus: \"processing\",\n\t\t}, nil\n\tdefault:\n\t\tif strings.TrimSpace(videoURL) != \"\" {\n\t\t\treturn &VeoPollResponse{\n\t\t\t\tDone:     true,\n\t\t\t\tStatus:   \"completed\",\n\t\t\t\tVideoURL: videoURL,\n\t\t\t\tVideoAsset: &VeoVideoAsset{\n\t\t\t\t\tURI:         videoURL,\n\t\t\t\t\tAspectRatio: aspectRatio,\n\t\t\t\t},\n\t\t\t}, nil\n\t\t}\n\t\tif errorMsg != \"\" {\n\t\t\treturn &VeoPollResponse{\n\t\t\t\tDone:   true,\n\t\t\t\tStatus: \"failed\",\n\t\t\t\tError:  errorMsg,\n\t\t\t}, nil\n\t\t}\n\t\treturn &VeoPollResponse{\n\t\t\tDone:   false,\n\t\t\tStatus: \"processing\",\n\t\t}, nil\n\t}\n}\n\nfunc normalizeXAIVideoDurationSeconds(value int) int {\n\tif value <= 0 {\n\t\treturn 5\n\t}\n\tif value < 1 {\n\t\treturn 1\n\t}\n\tif value > 15 {\n\t\treturn 15\n\t}\n\treturn value\n}\n\nfunc normalizeXAIVideoResolution(value string) string {\n\tswitch strings.ToLower(strings.TrimSpace(value)) {\n\tcase \"480p\":\n\t\treturn \"480p\"\n\tcase \"720p\":\n\t\treturn \"720p\"\n\tdefault:\n\t\treturn \"480p\"\n\t}\n}\n\nfunc veoImageInputToDataURI(input VeoImageInput) string {\n\traw := strings.TrimSpace(input.Data)\n\tif raw == \"\" {\n\t\treturn \"\"\n\t}\n\tif strings.HasPrefix(strings.ToLower(raw), \"data:image/\") {\n\t\treturn raw\n\t}\n\n\tmimeType := strings.TrimSpace(input.MimeType)\n\tif mimeType == \"\" {\n\t\tmimeType = \"image/jpeg\"\n\t}\n\treturn fmt.Sprintf(\"data:%s;base64,%s\", mimeType, raw)\n}\n\nfunc normalizeVideoAspectRatio(value string) string {\n\ttrimmed := strings.TrimSpace(value)\n\tswitch strings.ToLower(trimmed) {\n\tcase \"\", \"auto\":\n\t\treturn \"\"\n\tcase \"16:9\", \"9:16\", \"1:1\", \"4:3\", \"3:4\":\n\t\treturn strings.ToLower(trimmed)\n\tdefault:\n\t\treturn strings.ToLower(trimmed)\n\t}\n}\n\nfunc xaiExtractVideoURL(raw map[string]interface{}) string {\n\tif direct := xaiMapStringValue(raw, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(direct) != \"\" {\n\t\treturn strings.TrimSpace(direct)\n\t}\n\n\tfor _, key := range []string{\"video\", \"data\", \"result\", \"response\"} {\n\t\tif nested := xaiAsMap(raw[key]); nested != nil {\n\t\t\tif url := xaiMapStringValue(nested, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(url) != \"\" {\n\t\t\t\treturn strings.TrimSpace(url)\n\t\t\t}\n\t\t\tif video := xaiAsMap(nested[\"video\"]); video != nil {\n\t\t\t\tif url := xaiMapStringValue(video, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(url) != \"\" {\n\t\t\t\t\treturn strings.TrimSpace(url)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, innerKey := range []string{\"response\", \"result\", \"data\"} {\n\t\t\t\tif inner := xaiAsMap(nested[innerKey]); inner != nil {\n\t\t\t\t\tif url := xaiMapStringValue(inner, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(url) != \"\" {\n\t\t\t\t\t\treturn strings.TrimSpace(url)\n\t\t\t\t\t}\n\t\t\t\t\tif video := xaiAsMap(inner[\"video\"]); video != nil {\n\t\t\t\t\t\tif url := xaiMapStringValue(video, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(url) != \"\" {\n\t\t\t\t\t\t\treturn strings.TrimSpace(url)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, key := range []string{\"videos\", \"output\", \"results\"} {\n\t\titems := xaiAsSlice(raw[key])\n\t\tfor _, item := range items {\n\t\t\tif nested := xaiAsMap(item); nested != nil {\n\t\t\t\tif url := xaiMapStringValue(nested, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(url) != \"\" {\n\t\t\t\t\treturn strings.TrimSpace(url)\n\t\t\t\t}\n\t\t\t\tfor _, innerKey := range []string{\"response\", \"result\", \"data\", \"video\"} {\n\t\t\t\t\tif inner := xaiAsMap(nested[innerKey]); inner != nil {\n\t\t\t\t\t\tif url := xaiMapStringValue(inner, \"video_url\", \"videoUrl\", \"url\", \"download_url\", \"downloadUrl\"); strings.TrimSpace(url) != \"\" {\n\t\t\t\t\t\t\treturn strings.TrimSpace(url)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\nfunc xaiExtractAspectRatio(raw map[string]interface{}) string {\n\tif direct := xaiMapStringValue(raw, \"aspect_ratio\", \"aspectRatio\"); strings.TrimSpace(direct) != \"\" {\n\t\treturn strings.TrimSpace(direct)\n\t}\n\tfor _, key := range []string{\"video\", \"data\", \"result\", \"response\"} {\n\t\tif nested := xaiAsMap(raw[key]); nested != nil {\n\t\t\tif ratio := xaiMapStringValue(nested, \"aspect_ratio\", \"aspectRatio\"); strings.TrimSpace(ratio) != \"\" {\n\t\t\t\treturn strings.TrimSpace(ratio)\n\t\t\t}\n\t\t\tif video := xaiAsMap(nested[\"video\"]); video != nil {\n\t\t\t\tif ratio := xaiMapStringValue(video, \"aspect_ratio\", \"aspectRatio\"); strings.TrimSpace(ratio) != \"\" {\n\t\t\t\t\treturn strings.TrimSpace(ratio)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, innerKey := range []string{\"response\", \"result\", \"data\"} {\n\t\t\t\tif inner := xaiAsMap(nested[innerKey]); inner != nil {\n\t\t\t\t\tif ratio := xaiMapStringValue(inner, \"aspect_ratio\", \"aspectRatio\"); strings.TrimSpace(ratio) != \"\" {\n\t\t\t\t\t\treturn strings.TrimSpace(ratio)\n\t\t\t\t\t}\n\t\t\t\t\tif video := xaiAsMap(inner[\"video\"]); video != nil {\n\t\t\t\t\t\tif ratio := xaiMapStringValue(video, \"aspect_ratio\", \"aspectRatio\"); strings.TrimSpace(ratio) != \"\" {\n\t\t\t\t\t\t\treturn strings.TrimSpace(ratio)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc xaiExtractVideoStatus(raw map[string]interface{}) string {\n\tif direct := xaiMapStringValue(raw, \"status\", \"state\", \"request_status\", \"requestStatus\"); strings.TrimSpace(direct) != \"\" {\n\t\treturn strings.ToLower(strings.TrimSpace(direct))\n\t}\n\n\tfor _, key := range []string{\"status\", \"data\", \"result\", \"response\"} {\n\t\tif nested := xaiAsMap(raw[key]); nested != nil {\n\t\t\tif status := xaiMapStringValue(nested, \"status\", \"state\", \"request_status\", \"requestStatus\"); strings.TrimSpace(status) != \"\" {\n\t\t\t\treturn strings.ToLower(strings.TrimSpace(status))\n\t\t\t}\n\t\t\tfor _, innerKey := range []string{\"response\", \"result\", \"data\", \"status\"} {\n\t\t\t\tif inner := xaiAsMap(nested[innerKey]); inner != nil {\n\t\t\t\t\tif status := xaiMapStringValue(inner, \"status\", \"state\", \"request_status\", \"requestStatus\"); strings.TrimSpace(status) != \"\" {\n\t\t\t\t\t\treturn strings.ToLower(strings.TrimSpace(status))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif doneRaw, ok := raw[\"done\"].(bool); ok && doneRaw {\n\t\treturn \"done\"\n\t}\n\treturn \"\"\n}\n\nfunc xaiExtractErrorMessage(raw map[string]interface{}) string {\n\tif errMsg := xaiErrorValue(raw[\"error\"]); errMsg != \"\" {\n\t\treturn errMsg\n\t}\n\tfor _, key := range []string{\"response\", \"data\", \"result\"} {\n\t\tif nested := xaiAsMap(raw[key]); nested != nil {\n\t\t\tif errMsg := xaiErrorValue(nested[\"error\"]); errMsg != \"\" {\n\t\t\t\treturn errMsg\n\t\t\t}\n\t\t\tfor _, innerKey := range []string{\"response\", \"result\", \"data\"} {\n\t\t\t\tif inner := xaiAsMap(nested[innerKey]); inner != nil {\n\t\t\t\t\tif errMsg := xaiErrorValue(inner[\"error\"]); errMsg != \"\" {\n\t\t\t\t\t\treturn errMsg\n\t\t\t\t\t}\n\t\t\t\t\tif errMsg := strings.TrimSpace(xaiMapStringValue(inner, \"message\", \"error_message\")); errMsg != \"\" {\n\t\t\t\t\t\treturn errMsg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn strings.TrimSpace(xaiMapStringValue(raw, \"message\", \"error_message\"))\n}\n\nfunc xaiErrorValue(v interface{}) string {\n\tswitch typed := v.(type) {\n\tcase string:\n\t\treturn strings.TrimSpace(typed)\n\tcase map[string]interface{}:\n\t\treturn strings.TrimSpace(xaiMapStringValue(typed, \"message\", \"error\", \"detail\"))\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc xaiMapStringValue(m map[string]interface{}, keys ...string) string {\n\tfor _, key := range keys {\n\t\tif value, ok := m[key]; ok {\n\t\t\tif str := xaiStringValue(value); str != \"\" {\n\t\t\t\treturn str\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc xaiStringValue(v interface{}) string {\n\tswitch typed := v.(type) {\n\tcase string:\n\t\treturn strings.TrimSpace(typed)\n\tcase json.Number:\n\t\treturn typed.String()\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc xaiAsMap(v interface{}) map[string]interface{} {\n\tm, _ := v.(map[string]interface{})\n\treturn m\n}\n\nfunc xaiAsSlice(v interface{}) []interface{} {\n\titems, _ := v.([]interface{})\n\treturn items\n}\n\nfunc truncateBodyForLog(body []byte, maxLen int) string {\n\ttrimmed := strings.TrimSpace(string(body))\n\tif maxLen <= 0 || len(trimmed) <= maxLen {\n\t\treturn trimmed\n\t}\n\treturn trimmed[:maxLen] + \"...\"\n}\n"
  },
  {
    "path": "backend/grok_xai.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n)\n\n// findValidUTF8CutPoint finds a safe position to cut a string without breaking UTF-8 characters\n// Returns the largest position <= maxPos that doesn't split a multi-byte character\nfunc findValidUTF8CutPoint(s string, maxPos int) int {\n\tif maxPos >= len(s) {\n\t\treturn len(s)\n\t}\n\t// Walk backwards from maxPos to find a valid UTF-8 boundary\n\tfor i := maxPos; i > 0; i-- {\n\t\tif utf8.ValidString(s[:i]) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn 0\n}\n\n// callGrok4DrawToCodeApiFull handles draw-to-code using Grok 4.1 with native vision (assuming supported)\nfunc callGrok4DrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No xAI API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// 1) Build system prompt (developer role equivalent, but Grok uses system)\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// 2) Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// 3) Construct Grok 4.1 request with vision (assuming supported)\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"content\": []interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": detailedTask,\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\"url\": fmt.Sprintf(\"data:image/jpeg;base64,%s\", imageBase64),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// 4) Call xAI API with Grok 4.1\n\taiResp, inputTokens, outputTokens, err := callGrok4API(messages, apiKey, 8192, \"\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Pricing snapshot (February 2026): $0.20/M input tokens, $0.50/M output tokens.\n\tcost := (float64(inputTokens) / 1_000_000.0 * 0.20) + (float64(outputTokens) / 1_000_000.0 * 0.50)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGrok4DrawToCodeStreaming handles draw-to-code with streaming for Grok 4.1\nfunc callGrok4DrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no xAI API key provided\")\n\t}\n\n\t// Build system prompt\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\n\t// Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// Construct Grok 4.1 request with vision\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\": \"user\",\n\t\t\t\"content\": []interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": detailedTask,\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\"url\": fmt.Sprintf(\"data:image/jpeg;base64,%s\", imageBase64),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t// Call existing streaming function\n\treturn callGrok4APIStreaming(w, messages, apiKey, 8192, \"\")\n}\n\n// callGrok4ApiGo handles normal chat using Grok 4.1\nfunc callGrok4ApiGo(prevMsgs []ChatMessage, newMsg, apiKey string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No xAI API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// Gather system message and convert to Grok 4.1 format\n\tsystemMsg := defaultSystemPrompt\n\tvar messages []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// For Grok, add instruction to explain thinking step by step in <think> tags\n\tsystemMsg += \" Explain your thinking step by step, wrapping the reasoning in <think> tags, before giving the final answer.\"\n\n\t// Add system message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"system\",\n\t\t\"content\": systemMsg,\n\t})\n\n\t// Add conversation history\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg,\n\t})\n\n\t// Call Grok 4.1 API\n\taiResp, inputTokens, outputTokens, err := callGrok4API(messages, apiKey, 4096, \"\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Pricing snapshot (February 2026): $0.20/M input tokens, $0.50/M output tokens.\n\tcost := (float64(inputTokens) / 1_000_000.0 * 0.20) + (float64(outputTokens) / 1_000_000.0 * 0.50)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// callGrok4API makes the actual HTTP request to xAI API with streaming support\nfunc callGrok4API(messages []map[string]interface{}, apiKey string, maxTokens int, reasoningEffort string) (string, int, int, error) {\n\treqBody := map[string]interface{}{\n\t\t\"model\":       \"grok-4-1-fast-reasoning\",\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"messages\":    messages,\n\t\t\"stream\":      true,\n\t\t\"temperature\": 0,\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.x.ai/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tfmt.Println(\"[DEBUG] Calling Grok 4.1 API with streaming...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", 0, 0, fmt.Errorf(\"xAI API error (%d): %s\", resp.StatusCode, string(b))\n\t}\n\n\t// Parse streaming response\n\tvar responseText strings.Builder\n\tvar reasoningBuilder strings.Builder\n\tvar inputTokens, outputTokens int\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent          string `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent string `json:\"reasoning_content\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\t// Extract reasoning and content\n\t\t\t\t\t\treasoning := chunk.Choices[0].Delta.ReasoningContent\n\t\t\t\t\t\tcontent := chunk.Choices[0].Delta.Content\n\t\t\t\t\t\tif reasoning != \"\" {\n\t\t\t\t\t\t\treasoningBuilder.WriteString(reasoning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseText.WriteString(content)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract usage from final chunk\n\t\t\t\t\tif chunk.Usage.PromptTokens > 0 {\n\t\t\t\t\t\tinputTokens = chunk.Usage.PromptTokens\n\t\t\t\t\t\toutputTokens = chunk.Usage.CompletionTokens\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", 0, 0, err\n\t\t}\n\t}\n\n\tfullResponse := responseText.String()\n\tif reasoningBuilder.Len() > 0 {\n\t\tfullResponse = \"<think>\" + reasoningBuilder.String() + \"</think>\" + fullResponse\n\t}\n\n\tfmt.Printf(\"[DEBUG] Grok 4.1 response: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\n\treturn fullResponse, inputTokens, outputTokens, nil\n}\n\n// callGrok4ChatStreaming streams Grok 4.1 response via SSE to the writer (for chat)\nfunc callGrok4ChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey string) error {\n\tif apiKey == \"\" {\n\t\treturn fmt.Errorf(\"no xAI API key provided\")\n\t}\n\n\t// Gather system message and convert to Grok 4.1 format\n\tsystemMsg := defaultSystemPrompt\n\tvar messages []map[string]interface{}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\t// For Grok, add instruction to explain thinking step by step in <think> tags\n\tsystemMsg += \" Explain your thinking step by step, wrapping the reasoning in <think> tags, before giving the final answer.\"\n\n\t// Add system message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"system\",\n\t\t\"content\": systemMsg,\n\t})\n\n\t// Add conversation history\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add new user message\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg,\n\t})\n\n\t// Call streaming Grok 4.1 API\n\treturn callGrok4APIStreaming(w, messages, apiKey, 4096, \"\")\n}\n\n// callGrok4APIStreaming streams Grok 4.1 responses via SSE directly to the HTTP response writer\nfunc callGrok4APIStreaming(w http.ResponseWriter, messages []map[string]interface{}, apiKey string, maxTokens int, reasoningEffort string) error {\n\treqBody := map[string]interface{}{\n\t\t\"model\":       \"grok-4-1-fast-reasoning\",\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"messages\":    messages,\n\t\t\"stream\":      true,\n\t\t\"temperature\": 0,\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.x.ai/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tfmt.Println(\"[DEBUG] Calling Grok 4.1 API with streaming (SSE)...\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\treturn fmt.Errorf(\"xAI API error (%d): %s\", resp.StatusCode, string(b))\n\t}\n\n\t// Stream response chunks to client\n\tvar reasoningBuilder strings.Builder\n\tvar thinkingSent bool\n\tvar thinkingStart time.Time\n\tvar thinkingDurationSent bool\n\tvar inputTokens, outputTokens int\n\tvar inThinkTag bool\n\tvar contentBuffer strings.Builder\n\tvar thinkBuffer strings.Builder\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent          string `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent string `json:\"reasoning_content\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\treasoning := chunk.Choices[0].Delta.ReasoningContent\n\t\t\t\t\t\tcontent := chunk.Choices[0].Delta.Content\n\n\t\t\t\t\t\t// Handle reasoning_content (Grok's native reasoning field)\n\t\t\t\t\t\tif reasoning != \"\" {\n\t\t\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treasoningBuilder.WriteString(reasoning)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Handle regular content with <think> tag parsing\n\t\t\t\t\t\tif content != \"\" {\n\t\t\t\t\t\t\t//fmt.Printf(\"[Grok DEBUG] Received content: %q\\n\", content)\n\t\t\t\t\t\t\tcontentBuffer.WriteString(content)\n\t\t\t\t\t\t\tbufferStr := contentBuffer.String()\n\t\t\t\t\t\t\t//fmt.Printf(\"[Grok DEBUG] Buffer state: inThinkTag=%v, bufferLen=%d\\n\", inThinkTag, len(bufferStr))\n\n\t\t\t\t\t\t\t// Process buffer for <think> tags\n\t\t\t\t\t\t\tfor {\n\t\t\t\t\t\t\t\tif !inThinkTag {\n\t\t\t\t\t\t\t\t\t// Look for <think> opening tag\n\t\t\t\t\t\t\t\t\tif idx := strings.Index(bufferStr, \"<think>\"); idx != -1 {\n\t\t\t\t\t\t\t\t\t\t// Send content before <think> immediately\n\t\t\t\t\t\t\t\t\t\tif idx > 0 {\n\t\t\t\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": bufferStr[:idx]}\n\t\t\t\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\t\t\t\t//fmt.Printf(\"[Grok DEBUG] Sent chunk before <think>: %q\\n\", bufferStr[:idx])\n\t\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Start tracking thinking time\n\t\t\t\t\t\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbufferStr = bufferStr[idx+7:] // Skip \"<think>\"\n\t\t\t\t\t\t\t\t\t\tinThinkTag = true\n\t\t\t\t\t\t\t\t\t\tthinkBuffer.Reset()\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// No <think> found yet\n\t\t\t\t\t\t\t\t\t\t// Keep last 8 chars in buffer (in case \"<think>\" is split across chunks)\n\t\t\t\t\t\t\t\t\t\tif len(bufferStr) > 8 {\n\t\t\t\t\t\t\t\t\t\t\t// Find safe UTF-8 cut point to avoid breaking multi-byte characters\n\t\t\t\t\t\t\t\t\t\t\tsendLen := findValidUTF8CutPoint(bufferStr, len(bufferStr)-8)\n\t\t\t\t\t\t\t\t\t\t\tif sendLen > 0 {\n\t\t\t\t\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": bufferStr[:sendLen]}\n\t\t\t\t\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\t\t\t\t\t//fmt.Printf(\"[Grok DEBUG] Sent regular chunk: %q\\n\", bufferStr[:sendLen])\n\t\t\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tbufferStr = bufferStr[sendLen:]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Inside <think> tag - accumulate into thinkBuffer and look for </think>\n\t\t\t\t\t\t\t\t\tthinkBuffer.WriteString(bufferStr)\n\t\t\t\t\t\t\t\t\tthinkBufferStr := thinkBuffer.String()\n\n\t\t\t\t\t\t\t\t\tcloseIdx := strings.Index(thinkBufferStr, \"</think>\")\n\t\t\t\t\t\t\t\t\t//fmt.Printf(\"[Grok DEBUG] Looking for </think>, closeIdx=%d, thinkBufferStr=%q\\n\", closeIdx, thinkBufferStr)\n\t\t\t\t\t\t\t\t\tif closeIdx != -1 {\n\t\t\t\t\t\t\t\t\t\t//fmt.Println(\"[Grok DEBUG] Found </think>! Sending thinking block and switching to regular content mode\")\n\t\t\t\t\t\t\t\t\t\t// Extract thinking content (before </think>)\n\t\t\t\t\t\t\t\t\t\tthinkContent := thinkBufferStr[:closeIdx]\n\n\t\t\t\t\t\t\t\t\t\t// Send complete thinking block\n\t\t\t\t\t\t\t\t\t\tif !thinkingSent {\n\t\t\t\t\t\t\t\t\t\t\tthinkingText := \"<think>\" + thinkContent + \"</think>\"\n\t\t\t\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\t\t\t\tfmt.Println(\"[Grok] Sent complete thinking to client\")\n\t\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthinkingSent = true\n\n\t\t\t\t\t\t\t\t\t\t\t// Send thinking duration\n\t\t\t\t\t\t\t\t\t\t\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\t\t\t\t\tduration := time.Since(thinkingStart).Seconds()\n\t\t\t\t\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\t\t\t\t\tfmt.Printf(\"[Grok] Sent thinking duration: %.1fs\\n\", duration)\n\t\t\t\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tthinkingDurationSent = true\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Continue with content after </think>\n\t\t\t\t\t\t\t\t\t\tbufferStr = thinkBufferStr[closeIdx+8:] // Skip \"</think>\"\n\t\t\t\t\t\t\t\t\t\tinThinkTag = false\n\t\t\t\t\t\t\t\t\t\tthinkBuffer.Reset()\n\t\t\t\t\t\t\t\t\t\t// Loop back to process remaining content\n\t\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// No closing tag yet - keep accumulating\n\t\t\t\t\t\t\t\t\t\tbufferStr = \"\"\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Update content buffer with what remains\n\t\t\t\t\t\t\tcontentBuffer.Reset()\n\t\t\t\t\t\t\tcontentBuffer.WriteString(bufferStr)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Capture usage if the provider includes it.\n\t\t\t\t\t// Some Grok responses omit usage in SSE; we still must send a final \"done\" event.\n\t\t\t\t\tif chunk.Usage.PromptTokens > 0 || chunk.Usage.CompletionTokens > 0 {\n\t\t\t\t\t\tinputTokens = chunk.Usage.PromptTokens\n\t\t\t\t\t\toutputTokens = chunk.Usage.CompletionTokens\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Flush any remaining content in buffer before finishing\n\tif contentBuffer.Len() > 0 && !inThinkTag {\n\t\tremaining := contentBuffer.String()\n\t\tchunkData := map[string]string{\"chunk\": remaining}\n\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\tfmt.Printf(\"[Grok DEBUG] Flushed remaining buffer: %q\\n\", remaining)\n\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\tf.Flush()\n\t\t}\n\t}\n\n\t// Always send a terminal done event so the client can finalize post-processing.\n\t// If xAI omitted usage in stream chunks, these fields will be zero.\n\tcost := (float64(inputTokens) / 1_000_000.0 * 0.20) + (float64(outputTokens) / 1_000_000.0 * 0.50)\n\tdoneData := map[string]interface{}{\n\t\t\"done\": true,\n\t\t\"tokenUsage\": map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\t\"cost\": cost,\n\t}\n\tdoneBytes, _ := json.Marshal(doneData)\n\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\tif f, ok := w.(http.Flusher); ok {\n\t\tf.Flush()\n\t}\n\n\tfmt.Printf(\"[Grok 4.1] Stream complete: %d input tokens, %d output tokens\\n\", inputTokens, outputTokens)\n\treturn nil\n}\n"
  },
  {
    "path": "backend/handlers.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n)\n\n// extractProjectName extracts and removes [PROJECT_NAME: ...] marker from AI response\nfunc extractProjectName(response string) (name string, cleaned string) {\n\tre := regexp.MustCompile(`\\[PROJECT_NAME:\\s*([^\\]]+)\\]`)\n\tif matches := re.FindStringSubmatch(response); len(matches) > 1 {\n\t\treturn strings.TrimSpace(matches[1]), strings.TrimSpace(re.ReplaceAllString(response, \"\"))\n\t}\n\treturn \"\", response\n}\n\nfunc chatWithAIHandler(w http.ResponseWriter, r *http.Request) {\n\tisStream := r.URL.Query().Get(\"stream\") == \"true\"\n\tif isStream {\n\t\tw.Header().Set(\"Content-Type\", \"text/event-stream\")\n\t\tw.Header().Set(\"Cache-Control\", \"no-cache\")\n\t\tw.Header().Set(\"Connection\", \"keep-alive\")\n\t} else {\n\t\tw.Header().Set(\"Content-Type\", \"application/json\")\n\t}\n\n\tvar req ChatWithAIRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif strings.TrimSpace(req.AttachmentContext) != \"\" {\n\t\treq.Message = fmt.Sprintf(\"%s\\n\\n[Attached video context]\\n%s\", req.Message, req.AttachmentContext)\n\t}\n\n\tif req.Model == \"\" {\n\t\treq.Model = \"gpt-oss\"\n\t} else if req.Model == \"r1\" {\n\t\t// Legacy DeepSeek-R1 path (temporarily routed through GPT-OSS)\n\t\treq.Model = \"gpt-oss\"\n\t}\n\tif req.ImageSource == \"\" {\n\t\treq.ImageSource = \"Lorem Picsum\"\n\t}\n\n\tif strings.TrimSpace(req.SearchContext) != \"\" {\n\t\tinjectSearchContext(&req.PreviousMessages, req.SearchContext)\n\t} else if req.UseSearch && !isOpenAIChatAlias(req.Model) && !isStream {\n\t\tfmt.Printf(\"[SEARCH] Missing client-provided context, performing server-side search for query %q\\n\", truncateForLog(req.Message))\n\t\tif context, err := performWebSearch(req.PreviousMessages, req.Message, req.OpenAIKey); err != nil {\n\t\t\tfmt.Printf(\"[SEARCH] performWebSearch failed: %v\\n\", err)\n\t\t} else {\n\t\t\tinjectSearchContext(&req.PreviousMessages, context)\n\t\t}\n\t}\n\n\tfmt.Printf(\"[CHAT] Using model: %s (stream=%v)\\n\", req.Model, isStream)\n\n\t// if there's an image => draw to code\n\tif req.Image != nil && *req.Image != \"\" {\n\t\t// Augment prompt with attachment context for models that cannot accept inline data\n\t\tuserPrompt := req.Message\n\t\tif strings.TrimSpace(req.AttachmentContext) != \"\" {\n\t\t\tuserPrompt = fmt.Sprintf(\"%s\\n\\n[Attachment]\\n%s\", userPrompt, req.AttachmentContext)\n\t\t}\n\n\t\t// STREAMING MODE: Check if ?stream=true and route to streaming functions\n\t\tif isStream {\n\t\t\tfmt.Printf(\"[STREAM] Draw-to-code streaming enabled for model: %s\\n\", req.Model)\n\t\t\tvar err error\n\t\t\tif req.Model == \"claude\" {\n\t\t\t\terr = callClaudeDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.ClaudeKey, claudeSonnetDefaultModel)\n\t\t\t} else if req.Model == \"claude-opus\" {\n\t\t\t\terr = callClaudeDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.ClaudeKey, claudeOpusDefaultModel)\n\t\t\t} else if isOpenAIChatAlias(req.Model) {\n\t\t\t\tif req.OpenAIAuthMode == \"codex-jwt\" {\n\t\t\t\t\terr = callChatGPTCodexDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\t\treq.Template, req.ImageSource, req.OpenAIKey, req.OpenAIAccountID, req.OpenAIModel)\n\t\t\t\t} else {\n\t\t\t\t\terr = callGPT5DrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\t\treq.Template, req.ImageSource, req.OpenAIKey, req.OpenAIModel)\n\t\t\t\t}\n\t\t\t} else if req.Model == \"gemini\" {\n\t\t\t\terr = callGeminiDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.GeminiKey, req.AttachmentData, req.AttachmentMime, req.GeminiModel)\n\t\t\t} else if req.Model == \"grok\" {\n\t\t\t\terr = callGrok4DrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.XaiKey)\n\t\t\t} else if req.Model == \"fireworks\" {\n\t\t\t\terr = callFireworksDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.FireworksKey, req.FireworksModel)\n\t\t\t} else if req.Model == \"openrouter\" {\n\t\t\t\terr = callOpenRouterDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.OpenRouterKey, req.OpenRouterModel)\n\t\t\t} else if req.Model == \"opencode\" {\n\t\t\t\terr = callOpenCodeZenDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.OpenCodeZenKey, req.OpenCodeZenModel)\n\t\t\t} else if req.Model == \"r1-groq\" {\n\t\t\t\terr = callGroqDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, req.GroqKey)\n\t\t\t} else if req.Model == \"gpt-oss\" {\n\t\t\t\terr = callOllamaDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, \"gpt-oss:20b\")\n\t\t\t} else if req.Model == \"qwen3.5\" {\n\t\t\t\terr = callOllamaDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, \"qwen3.5\")\n\t\t\t} else if req.Model == \"qwen3-coder\" {\n\t\t\t\terr = callOllamaDrawToCodeStreaming(w, *req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource, \"qwen3-coder:30b\")\n\t\t\t}\n\n\t\t\tif err != nil {\n\t\t\t\terrData := map[string]interface{}{\n\t\t\t\t\t\"error\": err.Error(),\n\t\t\t\t\t\"done\":  true,\n\t\t\t\t}\n\t\t\t\terrBytes, _ := json.Marshal(errData)\n\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", errBytes)\n\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\tf.Flush()\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// BLOCKING MODE (existing code, unchanged)\n\t\tif req.Model == \"r1-groq\" {\n\t\t\tif req.Image != nil && *req.Image != \"\" {\n\t\t\t\trespData, err := callR1GroqDrawToCodeApiFull(\n\t\t\t\t\t*req.Image, userPrompt, // userPrompt + prompt\n\t\t\t\t\t\"\", req.Template, req.ImageSource, req.GroqKey,\n\t\t\t\t)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callR1GroqApiGo(req.PreviousMessages, req.Message, req.GroqKey)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"gpt-oss\" {\n\t\t\t// Local draw-to-code using Ollama chat API with gpt-oss:20b\n\t\t\trespData, err := callOllamaChatDrawToCodeWithModel(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\t\"gpt-oss:20b\",\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"qwen3.5\" {\n\t\t\t// Local draw-to-code using Ollama chat API with qwen3.5\n\t\t\trespData, err := callOllamaChatDrawToCodeWithModel(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\t\"qwen3.5\",\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"qwen3-coder\" {\n\t\t\t// Local draw-to-code using Ollama chat API with qwen3-coder:30b\n\t\t\trespData, err := callOllamaChatDrawToCodeWithModel(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\t\"qwen3-coder:30b\",\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"claude\" {\n\t\t\t// Draw-to-code using Claude Sonnet 4.6 API\n\t\t\trespData, err := callClaudeDrawToCodeApiFull(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.ClaudeKey,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"claude-opus\" {\n\t\t\t// Draw-to-code using Claude Opus 4.6 API\n\t\t\trespData, err := callClaudeDrawToCodeApiFullWithModel(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.ClaudeKey,\n\t\t\t\tclaudeOpusDefaultModel,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if isOpenAIChatAlias(req.Model) {\n\t\t\t// Draw-to-code using the selected OpenAI model.\n\t\t\tvar respData *R1Response\n\t\t\tvar err error\n\t\t\tif req.OpenAIAuthMode == \"codex-jwt\" {\n\t\t\t\trespData, err = callChatGPTCodexNonStreaming(nil, userPrompt, req.OpenAIKey, req.OpenAIAccountID, req.OpenAIModel)\n\t\t\t} else {\n\t\t\t\trespData, err = callGPT5DrawToCodeApiFull(\n\t\t\t\t\t*req.Image, userPrompt,\n\t\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\t\treq.OpenAIKey,\n\t\t\t\t\treq.OpenAIModel,\n\t\t\t\t)\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"grok\" {\n\t\t\t// Draw-to-code using Grok 4.1\n\t\t\trespData, err := callGrok4DrawToCodeApiFull(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.XaiKey,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"gemini\" {\n\t\t\t// Draw-to-code using Gemini 3.1 Pro (with optional attachment)\n\t\t\trespData, err := callGeminiDrawToCodeApiFull(\n\t\t\t\t*req.Image, req.Message,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.GeminiKey,\n\t\t\t\treq.AttachmentData, req.AttachmentMime,\n\t\t\t\treq.GeminiModel,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"fireworks\" {\n\t\t\t// Draw-to-code using Fireworks (GLM-5)\n\t\t\trespData, err := callFireworksDrawToCodeApiFull(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.FireworksKey, req.FireworksModel,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"openrouter\" {\n\t\t\t// Draw-to-code using OpenRouter\n\t\t\trespData, err := callOpenRouterDrawToCodeApiFull(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.OpenRouterKey, req.OpenRouterModel,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"opencode\" {\n\t\t\t// Draw-to-code using OpenCode Zen\n\t\t\trespData, err := callOpenCodeZenDrawToCodeApiFull(\n\t\t\t\t*req.Image, userPrompt,\n\t\t\t\treq.Template, req.ImageSource,\n\t\t\t\treq.OpenCodeZenKey, req.OpenCodeZenModel,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojectName, cleanedResponse := extractProjectName(respData.AIResponse)\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":     req.Message,\n\t\t\t\t\"aiResponse\":  cleanedResponse,\n\t\t\t\t\"projectName\": projectName,\n\t\t\t\t\"tokenUsage\":  respData.TokenUsage,\n\t\t\t\t\"cost\":        respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t}\n\t} else {\n\t\t// normal chat\n\t\tif req.Model == \"r1-groq\" {\n\t\t\tif isStream {\n\t\t\t\terr := callGroqGPTOSSChatStreaming(w, req.PreviousMessages, req.Message, req.GroqKey)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\trespData, err := callR1GroqApiGo(req.PreviousMessages, req.Message, req.GroqKey)\n\t\t\tif err != nil {\n\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresp := map[string]interface{}{\n\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t}\n\t\t\twriteJSON(w, resp)\n\t\t\treturn\n\t\t} else if req.Model == \"gpt-oss\" {\n\t\t\tif isStream {\n\t\t\t\terr := callOllamaChatWithModelStreaming(w, req.PreviousMessages, req.Message, \"gpt-oss:20b\", \"\")\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callOllamaChatWithModel(req.PreviousMessages, req.Message, \"gpt-oss:20b\", \"\")\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\tfmt.Println(\"req.AIResponse: \", respData.AIResponse)\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"qwen3.5\" {\n\t\t\tif isStream {\n\t\t\t\terr := callOllamaChatWithModelStreamingAndAttachment(\n\t\t\t\t\tw,\n\t\t\t\t\treq.PreviousMessages,\n\t\t\t\t\treq.Message,\n\t\t\t\t\t\"qwen3.5\",\n\t\t\t\t\t\"\",\n\t\t\t\t\treq.AttachmentData,\n\t\t\t\t\treq.AttachmentMime,\n\t\t\t\t)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callOllamaChatWithModelAndAttachment(\n\t\t\t\t\treq.PreviousMessages,\n\t\t\t\t\treq.Message,\n\t\t\t\t\t\"qwen3.5\",\n\t\t\t\t\t\"\",\n\t\t\t\t\treq.AttachmentData,\n\t\t\t\t\treq.AttachmentMime,\n\t\t\t\t)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\tfmt.Println(\"req.AIResponse: \", respData.AIResponse)\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"qwen3-coder\" {\n\t\t\tif isStream {\n\t\t\t\terr := callOllamaChatWithModelStreaming(w, req.PreviousMessages, req.Message, \"qwen3-coder:30b\", \"\")\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callOllamaChatWithModel(req.PreviousMessages, req.Message, \"qwen3-coder:30b\", \"\")\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\tfmt.Println(\"req.AIResponse: \", respData.AIResponse)\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"claude\" {\n\t\t\tif isStream {\n\t\t\t\t// Use streaming with Extended Thinking support (Sonnet 4.6)\n\t\t\t\tvar err error\n\t\t\t\tif req.EnableMagicEdit {\n\t\t\t\t\t// Include magic_edit tool for AI-triggered edits\n\t\t\t\t\ttools := []map[string]interface{}{getMagicEditTool()}\n\t\t\t\t\terr = callClaudeChatStreamingWithModelAndTools(w, req.PreviousMessages, req.Message, req.ClaudeKey, claudeSonnetDefaultModel, tools)\n\t\t\t\t} else {\n\t\t\t\t\terr = callClaudeChatStreaming(w, req.PreviousMessages, req.Message, req.ClaudeKey)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callClaudeApiGoWithModel(req.PreviousMessages, req.Message, req.ClaudeKey, claudeSonnetDefaultModel)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"claude-opus\" {\n\t\t\tif isStream {\n\t\t\t\t// Use streaming with Extended Thinking support (Opus 4.6)\n\t\t\t\tvar err error\n\t\t\t\tif req.EnableMagicEdit {\n\t\t\t\t\t// Include magic_edit tool for AI-triggered edits\n\t\t\t\t\ttools := []map[string]interface{}{getMagicEditTool()}\n\t\t\t\t\terr = callClaudeChatStreamingWithModelAndTools(w, req.PreviousMessages, req.Message, req.ClaudeKey, claudeOpusDefaultModel, tools)\n\t\t\t\t} else {\n\t\t\t\t\terr = callClaudeChatStreamingWithModel(w, req.PreviousMessages, req.Message, req.ClaudeKey, claudeOpusDefaultModel)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\t// Non-streaming Opus chat not commonly used, but supported\n\t\t\t\trespData, err := callClaudeApiGoWithModel(req.PreviousMessages, req.Message, req.ClaudeKey, claudeOpusDefaultModel)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if isOpenAIChatAlias(req.Model) {\n\t\t\tif req.UseSearch && strings.TrimSpace(req.SearchContext) == \"\" && req.OpenAIAuthMode == \"codex-jwt\" {\n\t\t\t\t// Web search requires the standard OpenAI API, not supported via ChatGPT JWT\n\t\t\t\tfmt.Println(\"[SEARCH] Web search skipped: codex-jwt auth mode does not support web search API\")\n\t\t\t} else if req.UseSearch && strings.TrimSpace(req.SearchContext) == \"\" {\n\t\t\t\trespData, err := callGPT5Search(req.PreviousMessages, req.Message, req.OpenAIKey)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Printf(\"[SEARCH] OpenAI web search failed: %v\\n\", err)\n\t\t\t\t\tsearchError := fmt.Sprintf(\"Search is unavailable right now (details: %v). Please try again later or disable search.\", err)\n\t\t\t\t\tif isOpenAIMissingModelScope(err.Error()) {\n\t\t\t\t\t\tsearchError = openAIModelScopeHelpMessage()\n\t\t\t\t\t}\n\t\t\t\t\tfallback := map[string]interface{}{\n\t\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\t\"aiResponse\": searchError,\n\t\t\t\t\t\t\"tokenUsage\": nil,\n\t\t\t\t\t\t\"cost\":       0,\n\t\t\t\t\t}\n\t\t\t\t\twriteJSON(w, fallback)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif isStream {\n\t\t\t\tvar err error\n\t\t\t\tif req.OpenAIAuthMode == \"codex-jwt\" {\n\t\t\t\t\terr = callChatGPTCodexStreaming(w, req.PreviousMessages, req.Message, req.OpenAIKey, req.OpenAIAccountID, req.OpenAIModel)\n\t\t\t\t} else {\n\t\t\t\t\t// Use Responses API for streaming with reasoning support\n\t\t\t\t\terr = callGPT5ResponsesAPIStreaming(w, req.PreviousMessages, req.Message, req.OpenAIKey, req.OpenAIModel)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\tif isOpenAIMissingModelScope(err.Error()) {\n\t\t\t\t\t\tmsg := map[string]string{\"error\": openAIModelScopeHelpMessage()}\n\t\t\t\t\t\tmsgBytes, _ := json.Marshal(msg)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", msgBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\tvar respData *R1Response\n\t\t\t\tvar err error\n\t\t\t\tif req.OpenAIAuthMode == \"codex-jwt\" {\n\t\t\t\t\trespData, err = callChatGPTCodexNonStreaming(req.PreviousMessages, req.Message, req.OpenAIKey, req.OpenAIAccountID, req.OpenAIModel)\n\t\t\t\t} else {\n\t\t\t\t\trespData, err = callGPT5ApiGo(req.PreviousMessages, req.Message, req.OpenAIKey, req.OpenAIModel)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\tif isOpenAIMissingModelScope(err.Error()) {\n\t\t\t\t\t\tfallback := map[string]interface{}{\n\t\t\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\t\t\"aiResponse\": openAIModelScopeHelpMessage(),\n\t\t\t\t\t\t\t\"tokenUsage\": nil,\n\t\t\t\t\t\t\t\"cost\":       0,\n\t\t\t\t\t\t}\n\t\t\t\t\t\twriteJSON(w, fallback)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"grok\" {\n\t\t\tif isStream {\n\t\t\t\t// Use streaming with chain of thought support\n\t\t\t\terr := callGrok4ChatStreaming(w, req.PreviousMessages, req.Message, req.XaiKey)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callGrok4ApiGo(req.PreviousMessages, req.Message, req.XaiKey)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"gemini\" {\n\t\t\tif isStream {\n\t\t\t\tvar err error\n\t\t\t\tif req.EnableMagicEdit {\n\t\t\t\t\t// Include magic_edit tool for AI-triggered edits\n\t\t\t\t\ttools := []map[string]interface{}{getGeminiMagicEditTool()}\n\t\t\t\t\terr = callGeminiChatStreamingWithTools(w, req.PreviousMessages, req.Message, req.GeminiKey, req.AttachmentData, req.AttachmentMime, tools, req.GeminiModel)\n\t\t\t\t} else {\n\t\t\t\t\terr = callGeminiChatStreaming(w, req.PreviousMessages, req.Message, req.GeminiKey, req.AttachmentData, req.AttachmentMime, req.GeminiModel)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\t// If attachment data is present, include it in the chat call\n\t\t\t\tif strings.TrimSpace(req.AttachmentData) != \"\" && strings.TrimSpace(req.AttachmentMime) != \"\" {\n\t\t\t\t\trespData, err := callGeminiApiGoWithAttachment(req.PreviousMessages, req.Message, req.AttachmentData, req.AttachmentMime, req.GeminiKey, req.GeminiModel)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t\t}\n\t\t\t\t\twriteJSON(w, resp)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\trespData, err := callGeminiApiGo(req.PreviousMessages, req.Message, req.GeminiKey, req.GeminiModel)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"fireworks\" {\n\t\t\tif isStream {\n\t\t\t\terr := callFireworksChatStreaming(w, req.PreviousMessages, req.Message, req.FireworksKey, req.FireworksModel, req.AttachmentData, req.AttachmentMime)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callFireworksApiGo(req.PreviousMessages, req.Message, req.FireworksKey, req.FireworksModel, req.AttachmentData, req.AttachmentMime)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"openrouter\" {\n\t\t\tif isStream {\n\t\t\t\terr := callOpenRouterChatStreaming(w, req.PreviousMessages, req.Message, req.OpenRouterKey, req.OpenRouterModel, req.AttachmentData, req.AttachmentMime)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callOpenRouterApiGo(req.PreviousMessages, req.Message, req.OpenRouterKey, req.OpenRouterModel, req.AttachmentData, req.AttachmentMime)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if req.Model == \"opencode\" {\n\t\t\tif isStream {\n\t\t\t\terr := callOpenCodeZenChatStreaming(w, req.PreviousMessages, req.Message, req.OpenCodeZenKey, req.OpenCodeZenModel, req.AttachmentData, req.AttachmentMime)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\trespData, err := callOpenCodeZenApiGo(req.PreviousMessages, req.Message, req.OpenCodeZenKey, req.OpenCodeZenModel, req.AttachmentData, req.AttachmentMime)\n\t\t\t\tif err != nil {\n\t\t\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tresp := map[string]interface{}{\n\t\t\t\t\t\"message\":    req.Message,\n\t\t\t\t\t\"aiResponse\": respData.AIResponse,\n\t\t\t\t\t\"tokenUsage\": respData.TokenUsage,\n\t\t\t\t\t\"cost\":       respData.Cost,\n\t\t\t\t}\n\t\t\t\twriteJSON(w, resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t}\n}\n\nfunc writeJSON(w http.ResponseWriter, v interface{}) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tjson.NewEncoder(w).Encode(v)\n}\n\nfunc webSearchHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tvar req WebSearchRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif strings.TrimSpace(req.Message) == \"\" {\n\t\thttp.Error(w, \"Empty search query\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tif strings.TrimSpace(req.OpenAIKey) == \"\" {\n\t\thttp.Error(w, \"Missing OpenAI key\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tcontext, err := performWebSearch(req.PreviousMessages, req.Message, req.OpenAIKey)\n\tif err != nil {\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tresp := map[string]string{\"searchContext\": context}\n\twriteJSON(w, resp)\n}\n\nfunc analyzeVideoHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req AnalyzeVideoRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tvideoData := strings.TrimSpace(req.VideoBase64)\n\tif videoData == \"\" && strings.TrimSpace(req.VideoPath) == \"\" {\n\t\thttp.Error(w, \"videoBase64 or videoPath is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tmimeType := strings.TrimSpace(req.MimeType)\n\tif mimeType == \"\" {\n\t\tmimeType = \"video/mp4\"\n\t}\n\n\tprompt := strings.TrimSpace(req.Prompt)\n\tif prompt == \"\" {\n\t\tprompt = \"Analyze the attached video and summarize what the user explains or demonstrates. Capture clear instructions, actions on screen, objects involved, and any observed emotions or tone (e.g., excited, frustrated). Return a concise bullet list plus a one-line headline we can attach to their chat message.\"\n\t}\n\n\tif videoData == \"\" && req.VideoPath != \"\" {\n\t\tdata, err := os.ReadFile(req.VideoPath)\n\t\tif err != nil {\n\t\t\thttp.Error(w, fmt.Sprintf(\"Failed to read videoPath: %v\", err), http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tvideoData = base64.StdEncoding.EncodeToString(data)\n\t\tfmt.Printf(\"[analyzeVideo] read file %s size=%.2fMB\\n\", req.VideoPath, float64(len(data))/1_048_576.0)\n\t}\n\n\tfmt.Printf(\"[analyzeVideo] payload size=%.2fMB mime=%s\\n\", float64(len(videoData))/1_048_576.0, mimeType)\n\n\trespData, err := callGeminiVideoAnalysis(videoData, mimeType, prompt, req.GeminiKey)\n\tif err != nil {\n\t\tfmt.Printf(\"[analyzeVideo] error: %v\\n\", err)\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tresponse := AnalyzeVideoResponse{\n\t\tAnalysis:   respData.AIResponse,\n\t\tTokenUsage: respData.TokenUsage,\n\t\tCost:       respData.Cost,\n\t}\n\twriteJSON(w, response)\n}\n\n// A simple node-graph in \"API format\" for ComfyUI.\n// Each key is a node ID (string), with a \"class_type\" and \"inputs\".\nvar baseNodeGraph = map[string]interface{}{\n\t\"5\": map[string]interface{}{\n\t\t\"class_type\": \"EmptyLatentImage\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"width\":      512,\n\t\t\t\"height\":     512,\n\t\t\t\"batch_size\": 1,\n\t\t},\n\t},\n\t\"6\": map[string]interface{}{\n\t\t\"class_type\": \"CLIPTextEncode\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t// We'll replace \"text\" dynamically:\n\t\t\t\"text\": \"placeholder\",\n\t\t\t\"clip\": []interface{}{\"11\", 0},\n\t\t},\n\t},\n\t\"8\": map[string]interface{}{\n\t\t\"class_type\": \"VAEDecode\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"samples\": []interface{}{\"13\", 0},\n\t\t\t\"vae\":     []interface{}{\"10\", 0},\n\t\t},\n\t},\n\t\"9\": map[string]interface{}{\n\t\t\"class_type\": \"SaveImage\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"filename_prefix\": \"ComfyUI\",\n\t\t\t\"images\":          []interface{}{\"8\", 0},\n\t\t},\n\t},\n\t\"10\": map[string]interface{}{\n\t\t\"class_type\": \"VAELoader\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"vae_name\": \"diffusion_pytorch_model.safetensors\",\n\t\t},\n\t},\n\t\"11\": map[string]interface{}{\n\t\t\"class_type\": \"DualCLIPLoader\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"clip_name1\": \"t5xxl_fp8_e4m3fn.safetensors\",\n\t\t\t\"clip_name2\": \"clip_l.safetensors\",\n\t\t\t\"type\":       \"flux\",\n\t\t\t\"device\":     \"default\",\n\t\t},\n\t},\n\t\"12\": map[string]interface{}{\n\t\t\"class_type\": \"UNETLoader\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"unet_name\":    \"flux1-dev.safetensors\",\n\t\t\t\"weight_dtype\": \"default\",\n\t\t},\n\t},\n\t\"13\": map[string]interface{}{\n\t\t\"class_type\": \"SamplerCustomAdvanced\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"noise\":        []interface{}{\"25\", 0},\n\t\t\t\"guider\":       []interface{}{\"22\", 0},\n\t\t\t\"sampler\":      []interface{}{\"16\", 0},\n\t\t\t\"sigmas\":       []interface{}{\"17\", 0},\n\t\t\t\"latent_image\": []interface{}{\"5\", 0},\n\t\t},\n\t},\n\t\"16\": map[string]interface{}{\n\t\t\"class_type\": \"KSamplerSelect\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"sampler_name\": \"euler\",\n\t\t},\n\t},\n\t\"17\": map[string]interface{}{\n\t\t\"class_type\": \"BasicScheduler\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"scheduler\": \"simple\",\n\t\t\t\"steps\":     20,\n\t\t\t\"denoise\":   1,\n\t\t\t\"model\":     []interface{}{\"12\", 0},\n\t\t},\n\t},\n\t\"22\": map[string]interface{}{\n\t\t\"class_type\": \"BasicGuider\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"model\":        []interface{}{\"12\", 0},\n\t\t\t\"conditioning\": []interface{}{\"6\", 0},\n\t\t},\n\t},\n\t\"25\": map[string]interface{}{\n\t\t\"class_type\": \"RandomNoise\",\n\t\t\"inputs\": map[string]interface{}{\n\t\t\t\"noise_seed\": 377605356023600,\n\t\t},\n\t},\n}\n\n// generateImageHandler uses a \"history\" poll approach with fixes to read status.completed\n// and handle subfolder from the final image object.\nfunc generateImageHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\t// 1) Parse { \"prompt\": \"...\", \"imageSource\": \"...\", \"aspectRatio\": \"...\", \"openaiKey\": \"...\", \"geminiKey\": \"...\", \"xaiKey\": \"...\", \"referenceImage\": \"...\", \"forcePersonalization\": false }\n\tvar reqBody struct {\n\t\tPrompt               string  `json:\"prompt\"`\n\t\tImageSource          string  `json:\"imageSource,omitempty\"`\n\t\tAspectRatio          string  `json:\"aspectRatio,omitempty\"`\n\t\tOutputFormat         string  `json:\"outputFormat,omitempty\"`\n\t\tOpenAIKey            string  `json:\"openaiKey,omitempty\"`\n\t\tGeminiKey            string  `json:\"geminiKey,omitempty\"`\n\t\tXaiKey               string  `json:\"xaiKey,omitempty\"`\n\t\tReferenceImage       *string `json:\"referenceImage,omitempty\"`\n\t\tForcePersonalization bool    `json:\"forcePersonalization,omitempty\"`\n\t}\n\tif err := json.NewDecoder(r.Body).Decode(&reqBody); err != nil || reqBody.Prompt == \"\" {\n\t\thttp.Error(w, \"Missing prompt\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tif strings.TrimSpace(reqBody.AspectRatio) != \"\" {\n\t\treqBody.AspectRatio = normalizeImageAspectRatio(reqBody.AspectRatio)\n\t}\n\tfmt.Println(\"[DEBUG] Received prompt:\", reqBody.Prompt)\n\n\t// 2) Check if using gpt-image-1 or gpt-image-1.5 (OpenAI)\n\tif (reqBody.ImageSource == \"Glowby Images (gpt-image-1)\" || reqBody.ImageSource == \"Glowby Images (gpt-image-1.5)\") && reqBody.OpenAIKey != \"\" {\n\t\tfmt.Println(\"[DEBUG] Using OpenAI (gpt-image-1.5) for image generation\")\n\n\t\tvar dataURI string\n\t\tvar err error\n\n\t\t// Auto-detect if we should use reference image (unless forced)\n\t\tuseRef := reqBody.ReferenceImage != nil && *reqBody.ReferenceImage != \"\" && (reqBody.ForcePersonalization || shouldUseReferenceImage(reqBody.Prompt))\n\n\t\tif useRef {\n\t\t\tfmt.Println(\"[DEBUG] Using reference image for personalization\")\n\t\t\tdataURI, err = callOpenAIImageGenerationWithReference(reqBody.Prompt, *reqBody.ReferenceImage, reqBody.AspectRatio, reqBody.OutputFormat, reqBody.OpenAIKey)\n\t\t} else {\n\t\t\tfmt.Println(\"[DEBUG] Using standard generation\")\n\t\t\tdataURI, err = callOpenAIImageGeneration(reqBody.Prompt, reqBody.AspectRatio, reqBody.OutputFormat, reqBody.OpenAIKey)\n\t\t}\n\n\t\tif err != nil {\n\t\t\tmsg := fmt.Sprintf(\"[ERROR] OpenAI image generation failed: %v\", err)\n\t\t\tfmt.Println(msg)\n\t\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\n\t\t// Return response in same format as ComfyUI\n\t\trespJSON := map[string]interface{}{\n\t\t\t\"prompt\":     reqBody.Prompt,\n\t\t\t\"filename\":   \"gpt-image-1.png\",\n\t\t\t\"subfolder\":  \"\",\n\t\t\t\"saved_path\": \"\",\n\t\t\t\"image\":      dataURI,\n\t\t}\n\t\tjson.NewEncoder(w).Encode(respJSON)\n\t\treturn\n\t}\n\n\t// 2b) Check if using Nano Banana family (Gemini)\n\tif (reqBody.ImageSource == \"Glowby Images (Nano Banana 2)\" || reqBody.ImageSource == \"Glowby Images (Nano Banana Pro)\" || reqBody.ImageSource == \"Glowby Images (Nano Banana)\") && reqBody.GeminiKey != \"\" {\n\t\tfmt.Println(\"[DEBUG] Using Gemini (Nano Banana 2) for image generation\")\n\n\t\tvar dataURI string\n\t\tvar err error\n\n\t\t// Auto-detect if we should use reference image (unless forced)\n\t\tuseRef := reqBody.ReferenceImage != nil && *reqBody.ReferenceImage != \"\" && (reqBody.ForcePersonalization || shouldUseReferenceImage(reqBody.Prompt))\n\n\t\tif useRef {\n\t\t\tfmt.Println(\"[DEBUG] Using reference image for personalization\")\n\t\t\tdataURI, err = callGeminiImageGenerationWithReference(reqBody.Prompt, *reqBody.ReferenceImage, reqBody.AspectRatio, reqBody.OutputFormat, reqBody.GeminiKey)\n\t\t} else {\n\t\t\tfmt.Println(\"[DEBUG] Using standard generation\")\n\t\t\tdataURI, err = callGeminiImageGeneration(reqBody.Prompt, reqBody.AspectRatio, reqBody.OutputFormat, reqBody.GeminiKey)\n\t\t}\n\n\t\tif err != nil {\n\t\t\tmsg := fmt.Sprintf(\"[ERROR] Gemini image generation failed: %v\", err)\n\t\t\tfmt.Println(msg)\n\t\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\n\t\t// Return response in same format as ComfyUI\n\t\trespJSON := map[string]interface{}{\n\t\t\t\"prompt\":     reqBody.Prompt,\n\t\t\t\"filename\":   \"nano-banana.png\",\n\t\t\t\"subfolder\":  \"\",\n\t\t\t\"saved_path\": \"\",\n\t\t\t\"image\":      dataURI,\n\t\t}\n\t\tjson.NewEncoder(w).Encode(respJSON)\n\t\treturn\n\t}\n\n\t// 2c) Check if using Grok Imagine Image Pro (xAI)\n\tif isGrokImagineImageSource(reqBody.ImageSource) && reqBody.XaiKey != \"\" {\n\t\tfmt.Println(\"[DEBUG] Using xAI Grok Imagine Image Pro for image generation\")\n\n\t\tvar dataURI string\n\t\tvar err error\n\n\t\t// Auto-detect if we should use reference image (unless forced)\n\t\tuseRef := reqBody.ReferenceImage != nil && *reqBody.ReferenceImage != \"\" && (reqBody.ForcePersonalization || shouldUseReferenceImage(reqBody.Prompt))\n\n\t\tif useRef {\n\t\t\tfmt.Println(\"[DEBUG] Using reference image for personalization\")\n\t\t\tdataURI, err = callGrokImageGenerationWithReference(reqBody.Prompt, *reqBody.ReferenceImage, reqBody.XaiKey, reqBody.AspectRatio)\n\t\t} else {\n\t\t\tfmt.Println(\"[DEBUG] Using standard generation\")\n\t\t\tdataURI, err = callGrokImageGeneration(reqBody.Prompt, reqBody.XaiKey, reqBody.AspectRatio)\n\t\t}\n\n\t\tif err != nil {\n\t\t\tmsg := fmt.Sprintf(\"[ERROR] xAI Grok Imagine image generation failed: %v\", err)\n\t\t\tfmt.Println(msg)\n\t\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\n\t\t// Return response in same format as ComfyUI\n\t\trespJSON := map[string]interface{}{\n\t\t\t\"prompt\":     reqBody.Prompt,\n\t\t\t\"filename\":   \"grok-imagine-image-pro.jpg\",\n\t\t\t\"subfolder\":  \"\",\n\t\t\t\"saved_path\": \"\",\n\t\t\t\"image\":      dataURI,\n\t\t}\n\t\tjson.NewEncoder(w).Encode(respJSON)\n\t\treturn\n\t}\n\n\t// 3) Otherwise use ComfyUI (existing flow)\n\n\t// 2) Clone the base node graph\n\trawBase, _ := json.Marshal(baseNodeGraph) // baseNodeGraph is your global map\n\tnodeGraph := map[string]interface{}{}\n\tif err := json.Unmarshal(rawBase, &nodeGraph); err != nil {\n\t\thttp.Error(w, \"Cannot copy baseNodeGraph\", http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\t// 3) Insert user prompt into node \"6\"\n\tsixNode := nodeGraph[\"6\"].(map[string]interface{})\n\tsixInputs := sixNode[\"inputs\"].(map[string]interface{})\n\tsixInputs[\"text\"] = reqBody.Prompt\n\tfmt.Println(\"[DEBUG] Updated node 6 text to:\", reqBody.Prompt)\n\n\t// 4) Wrap in top-level \"prompt\" + optionally \"client_id\"\n\tfinalPayload := map[string]interface{}{\n\t\t\"client_id\": \"glowbom-client\", // optional, can be any string\n\t\t\"prompt\":    nodeGraph,\n\t}\n\tpayloadBytes, _ := json.Marshal(finalPayload)\n\n\t// 5) POST to /prompt?queue=true\n\tpostURL := \"http://127.0.0.1:8000/prompt\"\n\tfmt.Println(\"[DEBUG] Sending POST to:\", postURL)\n\n\tpostReq, err := http.NewRequest(\"POST\", postURL, bytes.NewReader(payloadBytes))\n\tif err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] Creating ComfyUI request: %v\", err)\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\tpostReq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tresp, err := http.DefaultClient.Do(postReq)\n\tif err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] Calling ComfyUI: %v\", err)\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tmsg := fmt.Sprintf(\"ComfyUI returned %d: %s\", resp.StatusCode, string(body))\n\t\tfmt.Println(\"[ERROR]\", msg)\n\t\thttp.Error(w, msg, resp.StatusCode)\n\t\treturn\n\t}\n\n\t// 6) Parse immediate response to get prompt_id\n\tvar firstResp struct {\n\t\tPromptID string `json:\"prompt_id\"`\n\t}\n\tbodyBytes, _ := io.ReadAll(resp.Body)\n\tfmt.Println(\"[DEBUG] Immediate POST response:\", string(bodyBytes))\n\n\tif err := json.Unmarshal(bodyBytes, &firstResp); err != nil {\n\t\tmsg := \"[ERROR] No prompt_id in immediate response\"\n\t\tfmt.Println(msg, err)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\tif firstResp.PromptID == \"\" {\n\t\tmsg := \"[ERROR] ComfyUI didn't return a prompt_id\"\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusBadRequest)\n\t\treturn\n\t}\n\tfmt.Println(\"[DEBUG] Got prompt_id:\", firstResp.PromptID)\n\n\t// 7) Poll /history/<prompt_id> up to 10 minutes\n\tconst maxWait = 600 * time.Second\n\tdeadline := time.Now().Add(maxWait)\n\n\tvar finalFilename, finalSubfolder, finalType string\n\npollLoop:\n\tfor {\n\t\tif time.Now().After(deadline) {\n\t\t\tmsg := \"[ERROR] Timeout waiting for ComfyUI job to finish\"\n\t\t\tfmt.Println(msg)\n\t\t\thttp.Error(w, msg, http.StatusGatewayTimeout)\n\t\t\treturn\n\t\t}\n\n\t\tfmt.Println(\"[DEBUG] Sleeping 15s before next /history check...\")\n\t\ttime.Sleep(15 * time.Second)\n\n\t\thistURL := fmt.Sprintf(\"http://127.0.0.1:8000/history/%s\", firstResp.PromptID)\n\t\tfmt.Println(\"[DEBUG] GET\", histURL)\n\t\thistResp, err := http.Get(histURL)\n\t\tif err != nil {\n\t\t\tmsg := fmt.Sprintf(\"[ERROR] Polling /history: %v\", err)\n\t\t\tfmt.Println(msg)\n\t\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\t\tif histResp.StatusCode != 200 {\n\t\t\tfmt.Printf(\"[DEBUG] /history responded %d; continuing...\\n\", histResp.StatusCode)\n\t\t\thistResp.Body.Close()\n\t\t\tcontinue\n\t\t}\n\n\t\tbodyData, _ := io.ReadAll(histResp.Body)\n\t\thistResp.Body.Close()\n\t\tfmt.Println(\"[DEBUG] /history response JSON:\", string(bodyData))\n\n\t\tvar histData map[string]interface{}\n\t\tif err := json.Unmarshal(bodyData, &histData); err != nil {\n\t\t\tfmt.Println(\"[DEBUG] JSON unmarshal error:\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\tjobData, ok := histData[firstResp.PromptID].(map[string]interface{})\n\t\tif !ok {\n\t\t\tfmt.Println(\"[DEBUG] No key for prompt_id in history yet; continuing...\")\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check status.completed\n\t\tstatusMap, _ := jobData[\"status\"].(map[string]interface{})\n\t\tif statusMap == nil {\n\t\t\tfmt.Println(\"[DEBUG] No 'status' map yet; continuing...\")\n\t\t\tcontinue\n\t\t}\n\t\tdoneVal, _ := statusMap[\"completed\"].(bool)\n\t\tfmt.Println(\"[DEBUG] status.completed =\", doneVal)\n\t\tif !doneVal {\n\t\t\tfmt.Println(\"[DEBUG] Not finished yet; continuing...\")\n\t\t\tcontinue\n\t\t}\n\n\t\t// job is done => parse outputs\n\t\toutMap, _ := jobData[\"outputs\"].(map[string]interface{})\n\t\tif outMap == nil {\n\t\t\tfmt.Println(\"[DEBUG] No 'outputs' in jobData; continuing...\")\n\t\t\tcontinue\n\t\t}\n\t\t// we assume SaveImage node is ID \"9\"\n\t\tnode9, _ := outMap[\"9\"].(map[string]interface{})\n\t\tif node9 == nil {\n\t\t\tfmt.Println(\"[DEBUG] 'outputs' has no node9; continuing...\")\n\t\t\tcontinue\n\t\t}\n\t\timages, _ := node9[\"images\"].([]interface{})\n\t\tif len(images) == 0 {\n\t\t\tfmt.Println(\"[DEBUG] node9 has no images; continuing...\")\n\t\t\tcontinue\n\t\t}\n\n\t\t// read first image object\n\t\tfirstImg := images[0].(map[string]interface{})\n\t\tfname, _ := firstImg[\"filename\"].(string)\n\t\tsubf, _ := firstImg[\"subfolder\"].(string)\n\t\ttyp, _ := firstImg[\"type\"].(string)\n\t\tif fname == \"\" {\n\t\t\tfmt.Println(\"[DEBUG] no 'filename' in images[0]; continuing...\")\n\t\t\tcontinue\n\t\t}\n\n\t\tfinalFilename = fname\n\t\tfinalSubfolder = subf\n\t\tfinalType = typ\n\t\tfmt.Printf(\"[DEBUG] Found finalFilename=%s, subfolder=%s, type=%s\\n\", fname, subf, typ)\n\n\t\t// break out of poll loop\n\t\tbreak pollLoop\n\t}\n\n\tif finalFilename == \"\" {\n\t\tmsg := \"[ERROR] Job finished but no images found in history\"\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\t// 8) Now fetch final image from /view?filename=..., subfolder=..., type=...\n\tviewURL := fmt.Sprintf(\"http://127.0.0.1:8000/view?filename=%s&subfolder=%s&type=%s\",\n\t\tfinalFilename, finalSubfolder, finalType)\n\tfmt.Println(\"[DEBUG] GET final image from:\", viewURL)\n\n\tviewResp, err := http.Get(viewURL)\n\tif err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] fetching final image /view: %v\", err)\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\tif viewResp.StatusCode != 200 {\n\t\tbody, _ := io.ReadAll(viewResp.Body)\n\t\tviewResp.Body.Close()\n\t\tmsg := fmt.Sprintf(\"[ERROR] /view responded %d: %s\", viewResp.StatusCode, string(body))\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, viewResp.StatusCode)\n\t\treturn\n\t}\n\n\tfinalImageBytes, _ := io.ReadAll(viewResp.Body)\n\tviewResp.Body.Close()\n\tfmt.Printf(\"[DEBUG] Fetched %d bytes from /view\\n\", len(finalImageBytes))\n\n\t// 9) Base64-encode & store locally\n\tb64 := base64.StdEncoding.EncodeToString(finalImageBytes)\n\tif err := os.MkdirAll(\"saved_images\", 0755); err != nil {\n\t\tfmt.Println(\"[ERROR] Creating saved_images folder:\", err)\n\t}\n\tpath := filepath.Join(\"saved_images\", fmt.Sprintf(\"image_%d.png\", time.Now().UnixNano()))\n\terr = os.WriteFile(path, finalImageBytes, 0644)\n\tif err != nil {\n\t\tmsg := fmt.Sprintf(\"[ERROR] writing image file: %v\", err)\n\t\tfmt.Println(msg)\n\t\thttp.Error(w, msg, http.StatusInternalServerError)\n\t\treturn\n\t}\n\tfmt.Println(\"[DEBUG] Wrote final image to:\", path)\n\n\t// 10) Return JSON\n\trespJSON := map[string]interface{}{\n\t\t\"prompt\":     reqBody.Prompt,\n\t\t\"filename\":   finalFilename,\n\t\t\"subfolder\":  finalSubfolder,\n\t\t\"saved_path\": path,\n\t\t\"image\":      \"data:image/png;base64,\" + b64,\n\t}\n\tfmt.Println(\"[DEBUG] Done. Returning JSON to client.\")\n\tjson.NewEncoder(w).Encode(respJSON)\n}\n\nfunc normalizeImageAspectRatio(value string) string {\n\ttrimmed := strings.TrimSpace(value)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\n\tswitch strings.ToLower(trimmed) {\n\tcase \"square\", \"1x1\", \"1:1\":\n\t\treturn \"1:1\"\n\tcase \"portrait\", \"9:16\":\n\t\treturn \"9:16\"\n\tcase \"landscape\", \"16:9\":\n\t\treturn \"16:9\"\n\tcase \"2:3\", \"3:2\", \"3:4\", \"4:3\", \"4:5\", \"5:4\", \"21:9\":\n\t\treturn strings.ToLower(trimmed)\n\tdefault:\n\t\t// Defensive fallback for strict providers (e.g., Gemini).\n\t\treturn \"1:1\"\n\t}\n}\n\nfunc isGrokImagineImageSource(imageSource string) bool {\n\tnormalized := strings.ToLower(strings.TrimSpace(imageSource))\n\tif normalized == \"\" {\n\t\treturn false\n\t}\n\n\treturn strings.Contains(normalized, \"grok imagine image\") ||\n\t\tstrings.Contains(normalized, \"grok-imagine-image\") ||\n\t\tstrings.Contains(normalized, \"grok 2 image gen\")\n}\n\nfunc normalizeVideoProvider(videoSource string, hasGeminiKey bool, hasXAIKey bool) string {\n\tnormalized := strings.ToLower(strings.TrimSpace(videoSource))\n\tswitch {\n\tcase strings.Contains(normalized, \"grok\"):\n\t\treturn \"grok\"\n\tcase strings.Contains(normalized, \"veo\"):\n\t\treturn \"veo\"\n\t}\n\n\t// Backward-compatible fallback when older clients do not send videoSource.\n\tif hasXAIKey && !hasGeminiKey {\n\t\treturn \"grok\"\n\t}\n\treturn \"veo\"\n}\n\n// MARK: - Veo Video Generation Handlers\n\nfunc generateVeoVideoHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tvar req VeoGenerationRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// Validate inputs\n\tif len(req.Images) == 0 && req.ExtensionSource == nil {\n\t\thttp.Error(w, \"Images or extensionSource required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tprovider := normalizeVideoProvider(req.VideoSource, strings.TrimSpace(req.GeminiKey) != \"\", strings.TrimSpace(req.XaiKey) != \"\")\n\tfmt.Printf(\"[VIDEO] Starting generation provider=%s (images: %d, extension: %v, keyframes: %v)\\n\",\n\t\tprovider, len(req.Images), req.ExtensionSource != nil, req.UseKeyframes)\n\n\tvar (\n\t\tresp *VeoGenerationResponse\n\t\terr  error\n\t)\n\tif provider == \"grok\" {\n\t\tif strings.TrimSpace(req.XaiKey) == \"\" {\n\t\t\thttp.Error(w, \"xAI API key required for Grok Imagine Video\", http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tresp, err = startGrokImagineVideoGeneration(req)\n\t} else {\n\t\tif strings.TrimSpace(req.GeminiKey) == \"\" {\n\t\t\thttp.Error(w, \"Gemini API key required for Veo generation\", http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tresp, err = startVeoVideoGeneration(req)\n\t}\n\n\tif err != nil {\n\t\tfmt.Printf(\"[VIDEO] Generation failed (provider=%s): %v\\n\", provider, err)\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tfmt.Printf(\"[VIDEO] Generation started successfully. provider=%s operationID=%s\\n\", provider, resp.OperationID)\n\n\t// Return operation ID\n\tjson.NewEncoder(w).Encode(resp)\n}\n\nfunc pollVeoOperationHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tvar req VeoPollRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif req.OperationID == \"\" {\n\t\thttp.Error(w, \"Operation ID required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tprovider := normalizeVideoProvider(req.VideoSource, strings.TrimSpace(req.GeminiKey) != \"\", strings.TrimSpace(req.XaiKey) != \"\")\n\tfmt.Printf(\"[VIDEO] Poll request provider=%s operationID=%s\\n\", provider, strings.TrimSpace(req.OperationID))\n\tvar (\n\t\tresp *VeoPollResponse\n\t\terr  error\n\t)\n\tif provider == \"grok\" {\n\t\tif strings.TrimSpace(req.XaiKey) == \"\" {\n\t\t\thttp.Error(w, \"xAI API key required for Grok Imagine Video\", http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tresp, err = pollGrokImagineVideoOperation(req.OperationID, req.XaiKey)\n\t} else {\n\t\tif strings.TrimSpace(req.GeminiKey) == \"\" {\n\t\t\thttp.Error(w, \"Gemini API key required for Veo generation\", http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\tresp, err = pollVeoOperation(req.OperationID, req.GeminiKey)\n\t}\n\n\tif err != nil {\n\t\tfmt.Printf(\"[VIDEO] Poll failed (provider=%s): %v\\n\", provider, err)\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\tfmt.Printf(\"[VIDEO] Poll response provider=%s operationID=%s done=%t status=%s hasVideo=%t hasError=%t\\n\",\n\t\tprovider,\n\t\tstrings.TrimSpace(req.OperationID),\n\t\tresp.Done,\n\t\tstrings.TrimSpace(resp.Status),\n\t\tstrings.TrimSpace(resp.VideoURL) != \"\",\n\t\tstrings.TrimSpace(resp.Error) != \"\",\n\t)\n\n\tif resp.Done && resp.Status == \"completed\" {\n\t\tfmt.Printf(\"[VIDEO] Operation completed (provider=%s): %s\\n\", provider, req.OperationID)\n\t}\n\n\t// Return poll response\n\tjson.NewEncoder(w).Encode(resp)\n}\n"
  },
  {
    "path": "backend/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n)\n\nfunc main() {\n\tmux := http.NewServeMux()\n\n\tmux.HandleFunc(\"/healthz\", glowbyHealthHandler)\n\tmux.HandleFunc(\"/\", glowbyBackendHomeHandler)\n\tmux.HandleFunc(\"/favicon.png\", glowbyFaviconHandler)\n\tmux.HandleFunc(\"/logo-svg.svg\", glowbyLogoSVGHandler)\n\n\tmux.HandleFunc(\"/chatWithAI\", chatWithAIHandler)\n\tmux.HandleFunc(\"/webSearch\", webSearchHandler)\n\tmux.HandleFunc(\"/analyzeVideo\", analyzeVideoHandler)\n\n\tmux.HandleFunc(\"/image\", generateImageHandler)\n\tmux.HandleFunc(\"/audio\", generateAudioHandler)\n\tmux.HandleFunc(\"/audio/voices\", listElevenLabsVoicesHandler)\n\n\t// Veo video generation endpoints\n\tmux.HandleFunc(\"/generateVeoVideo\", generateVeoVideoHandler)\n\tmux.HandleFunc(\"/pollVeoOperation\", pollVeoOperationHandler)\n\n\t// OpenCode agent endpoints\n\tmux.HandleFunc(\"/opencode/translate\", openCodeTranslateHandler)\n\tmux.HandleFunc(\"/opencode/health\", openCodeHealthHandler)\n\tmux.HandleFunc(\"/opencode/about\", openCodeAboutHandler)\n\tmux.HandleFunc(\"/opencode/about/project-description\", openCodeProjectDescriptionHandler)\n\tmux.HandleFunc(\"/opencode/auth/status\", openCodeAuthStatusHandler)\n\tmux.HandleFunc(\"/opencode/auth/openai/oauth/start\", openCodeOpenAIOAuthStartHandler)\n\tmux.HandleFunc(\"/opencode/auth/openai/oauth/status\", openCodeOpenAIOAuthStatusHandler)\n\tmux.HandleFunc(\"/opencode/auth/openai/oauth/callback\", openCodeOpenAIOAuthCallbackHandler)\n\tmux.HandleFunc(\"/opencode/auth/openai/connect\", openCodeOpenAIConnectHandler)\n\tmux.HandleFunc(\"/opencode/auth/openai/disconnect\", openCodeOpenAIDisconnectHandler)\n\tmux.HandleFunc(\"/opencode/project/init\", openCodeInitProjectHandler)\n\tmux.HandleFunc(\"/opencode/project\", openCodeGetProjectHandler)\n\tmux.HandleFunc(\"/opencode/project/history\", openCodeProjectHistoryHandler)\n\tmux.HandleFunc(\"/opencode/project/pick\", openCodePickProjectFolderHandler)\n\tmux.HandleFunc(\"/opencode/instructions/files/pick\", openCodePickInstructionFilesHandler)\n\tmux.HandleFunc(\"/opencode/project/ide/status\", openCodeProjectIDEStatusHandler)\n\tmux.HandleFunc(\"/opencode/project/open\", openCodeProjectOpenHandler)\n\tmux.HandleFunc(\"/opencode/project/rename\", openCodeRenameProjectHandler)\n\tmux.HandleFunc(\"/opencode/project/settings\", openCodeUpdateProjectSettingsHandler)\n\tmux.HandleFunc(\"/opencode/project/icon\", openCodeProjectIconHandler)\n\tmux.HandleFunc(\"/opencode/project/icon/generate\", openCodeGenerateIconHandler)\n\tmux.HandleFunc(\"/opencode/models/available\", openCodeAvailableModelsHandler)\n\tmux.HandleFunc(\"/providers/openai/models\", openAIModelsHandler)\n\tmux.HandleFunc(\"/opencode/refine\", openCodeRefineHandler)\n\tmux.HandleFunc(\"/opencode/media/postpass\", openCodeMediaPostPassHandler)\n\tmux.HandleFunc(\"/opencode/verify\", openCodeVerifyHandler)\n\tmux.HandleFunc(\"/opencode/question/respond\", openCodeQuestionRespondHandler)\n\tmux.HandleFunc(\"/opencode/permission/respond\", openCodePermissionRespondHandler)\n\n\tport := os.Getenv(\"GLOWBOM_PORT\")\n\tif port == \"\" {\n\t\tport = \"4569\"\n\t}\n\tlistenAddr := backendListenAddr(port)\n\tif glowbyServerToken() == \"\" {\n\t\tfmt.Println(\"Warning: GLOWBY_SERVER_TOKEN is not set; backend auth is disabled.\")\n\t} else {\n\t\tfmt.Println(\"Backend auth enabled for non-public routes.\")\n\t}\n\tfmt.Printf(\"Server running on http://%s\\n\", listenAddr)\n\tlog.Fatal(http.ListenAndServe(listenAddr, withGlowbySecurity(mux)))\n}\n"
  },
  {
    "path": "backend/model_helpers.go",
    "content": "package main\n\nimport \"strings\"\n\nconst defaultOpenAIModelID = \"gpt-5.4\"\n\ntype openAITextPricing struct {\n\tInputPerMillion  float64\n\tOutputPerMillion float64\n}\n\nfunc isOpenAIChatAlias(modelID string) bool {\n\tswitch strings.ToLower(strings.TrimSpace(modelID)) {\n\tcase \"gpt-5\", \"gpt-5.1\", \"gpt-5.2\", \"gpt-5.4\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc normalizeOpenAIModelID(modelID string) string {\n\ttrimmed := strings.TrimSpace(modelID)\n\tif trimmed == \"\" {\n\t\treturn defaultOpenAIModelID\n\t}\n\tswitch strings.ToLower(trimmed) {\n\tcase \"gpt-5\", \"gpt-5.1\":\n\t\treturn defaultOpenAIModelID\n\t}\n\t// ChatGPT Codex rejects spark for many accounts; transparently route to gpt-5.3-codex.\n\tif strings.EqualFold(trimmed, \"gpt-5.3-codex-spark\") {\n\t\treturn \"gpt-5.3-codex\"\n\t}\n\treturn trimmed\n}\n\nfunc openAITextPricingForModel(modelID string) (openAITextPricing, bool) {\n\tswitch strings.ToLower(strings.TrimSpace(normalizeOpenAIModelID(modelID))) {\n\tcase \"gpt-5.4\":\n\t\treturn openAITextPricing{InputPerMillion: 2.50, OutputPerMillion: 20.00}, true\n\tcase \"gpt-5.4-pro\":\n\t\treturn openAITextPricing{InputPerMillion: 15.00, OutputPerMillion: 120.00}, true\n\tcase \"gpt-5.2\":\n\t\treturn openAITextPricing{InputPerMillion: 1.25, OutputPerMillion: 10.00}, true\n\tdefault:\n\t\treturn openAITextPricing{}, false\n\t}\n}\n\nfunc estimateOpenAITextCost(modelID string, inputTokens, outputTokens int) float64 {\n\tpricing, ok := openAITextPricingForModel(modelID)\n\tif !ok {\n\t\treturn 0\n\t}\n\treturn (float64(inputTokens) / 1_000_000.0 * pricing.InputPerMillion) +\n\t\t(float64(outputTokens) / 1_000_000.0 * pricing.OutputPerMillion)\n}\n\nfunc normalizeGeminiModelID(modelID string) string {\n\ttrimmed := strings.TrimSpace(modelID)\n\tif trimmed == \"\" {\n\t\treturn \"gemini-3.1-pro-preview\"\n\t}\n\n\tswitch strings.ToLower(trimmed) {\n\tcase \"gemini\", \"gemini-3-pro\", \"gemini-3-pro-preview\", \"gemini-3.1-pro\", \"gemini-3.1-pro-preview\":\n\t\treturn \"gemini-3.1-pro-preview\"\n\tcase \"gemini-3-flash\", \"gemini-3-flash-preview\":\n\t\treturn \"gemini-3-flash-preview\"\n\tdefault:\n\t\t// Keep forward-compatibility for newly supported Gemini model IDs.\n\t\treturn trimmed\n\t}\n}\n\nfunc normalizeFireworksModelID(modelID string) string {\n\ttrimmed := strings.TrimSpace(modelID)\n\tif trimmed == \"\" {\n\t\treturn \"accounts/fireworks/models/glm-5\"\n\t}\n\n\tswitch strings.ToLower(trimmed) {\n\tcase \"glm-5\", \"fireworks/glm-5\":\n\t\treturn \"accounts/fireworks/models/glm-5\"\n\tcase \"kimi-k2.5\", \"kimi-k2p5\", \"fireworks/kimi-k2.5\", \"fireworks/kimi-k2p5\":\n\t\treturn \"accounts/fireworks/models/kimi-k2p5\"\n\tcase \"minimax-m2.5\", \"minimax-m2p5\", \"minimax-m2.5-free\", \"minimax-m2p5-free\",\n\t\t\"fireworks/minimax-m2.5\", \"fireworks/minimax-m2p5\", \"fireworks/minimax-m2.5-free\", \"fireworks/minimax-m2p5-free\":\n\t\treturn \"accounts/fireworks/models/minimax-m2p5\"\n\tdefault:\n\t\t// Allow full model ids for forward compatibility.\n\t\treturn trimmed\n\t}\n}\n\nfunc normalizeOpenRouterModelID(modelID string) string {\n\ttrimmed := strings.TrimSpace(modelID)\n\tif trimmed == \"\" {\n\t\treturn \"z-ai/glm-5\"\n\t}\n\n\tswitch strings.ToLower(trimmed) {\n\tcase \"glm-5\", \"fireworks/glm-5\", \"openrouter/glm-5\", \"z-ai/glm-5\":\n\t\treturn \"z-ai/glm-5\"\n\tcase \"kimi-k2.5\", \"kimi-k2p5\", \"kimi-k2\", \"fireworks/kimi-k2.5\", \"fireworks/kimi-k2p5\",\n\t\t\"openrouter/kimi-k2\", \"openrouter/kimi-k2.5\", \"moonshotai/kimi-k2\", \"moonshotai/kimi-k2.5\", \"moonshotai/kimi-k2-0905\":\n\t\treturn \"moonshotai/kimi-k2.5\"\n\tcase \"minimax-m2\", \"minimax-m2.5\", \"minimax-m2p5\", \"minimax-m2.5-free\", \"minimax-m2p5-free\",\n\t\t\"fireworks/minimax-m2.5\", \"fireworks/minimax-m2p5\", \"openrouter/minimax-m2.5\",\n\t\t\"minimax/minimax-m2\", \"minimax/minimax-m2.5\", \"minimax/minimax-m2-250918\":\n\t\treturn \"minimax/minimax-m2.5\"\n\tdefault:\n\t\t// Allow full model ids for forward compatibility.\n\t\treturn trimmed\n\t}\n}\n\nfunc normalizeOpenCodeZenModelID(modelID string) string {\n\ttrimmed := strings.TrimSpace(modelID)\n\tif trimmed == \"\" {\n\t\treturn \"kimi-k2.5-free\"\n\t}\n\tnormalized := strings.ToLower(trimmed)\n\tif strings.HasPrefix(normalized, \"opencode/\") {\n\t\tnormalized = strings.TrimPrefix(normalized, \"opencode/\")\n\t}\n\n\tswitch normalized {\n\tcase \"glm-5\", \"glm5\", \"glm-5-free\", \"glm5-free\":\n\t\treturn \"glm-5-free\"\n\tcase \"kimi-k2\", \"kimi-k2.5\", \"kimi-k2p5\", \"kimi-k2.5-free\", \"kimi-k2p5-free\":\n\t\treturn \"kimi-k2.5-free\"\n\tcase \"minimax-m2\", \"minimax-m2.5\", \"minimax-m2p5\", \"minimax-m2.5-free\", \"minimax-m2p5-free\":\n\t\treturn \"minimax-m2.5-free\"\n\tcase \"big-pickle\", \"bigpickle\":\n\t\treturn \"big-pickle\"\n\tdefault:\n\t\t// Allow full/forward-compatible model ids.\n\t\treturn normalized\n\t}\n}\n\nfunc normalizeXAIModelID(modelID string) string {\n\ttrimmed := strings.TrimSpace(modelID)\n\tif trimmed == \"\" {\n\t\t// OpenCode currently exposes non-reasoning variants for 4.1 fast models.\n\t\treturn \"grok-4-1-fast-non-reasoning\"\n\t}\n\n\tswitch strings.ToLower(trimmed) {\n\tcase \"grok\", \"xai\", \"grok-4\", \"grok-4.1\", \"grok-4-1\", \"grok-4.1-fast\", \"grok-4-1-fast\",\n\t\t\"grok-4.1-fast-reasoning\", \"grok-4-1-fast-reasoning\",\n\t\t\"grok-4.1-reasoning\", \"grok-4-1-reasoning\":\n\t\treturn \"grok-4-1-fast-non-reasoning\"\n\tcase \"grok-4-fast\", \"grok-4-fast-reasoning\":\n\t\treturn \"grok-4-fast-non-reasoning\"\n\tcase \"grok-4.1-fast-non-reasoning\", \"grok-4-1-fast-non-reasoning\", \"grok-4-fast-non-reasoning\":\n\t\treturn strings.ToLower(trimmed)\n\tdefault:\n\t\t// Allow full/forward-compatible model ids.\n\t\treturn trimmed\n\t}\n}\n"
  },
  {
    "path": "backend/o3_openai.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n)\n\nfunc callo3miniOpenAiDrawToCodeApiFull(imageBase64, userPrompt, prompt, template, imageSource, openAiKey string) (*R1Response, error) {\n\t// No key => error response\n\tif openAiKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenAI API key provided. Please check config.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// 1) Describe image (OpenAI vision if needed; or skip if not available)\n\timageDescription := \"Image description not available\"\n\tdesc, err := getOpenAiImageDescription(imageBase64, openAiKey)\n\tif err == nil && desc != \"\" {\n\t\timageDescription = desc\n\t}\n\n\tfmt.Println(\"imageDescription: \", imageDescription)\n\n\t// 2) Build system message\n\tsystemMsg := prompt + \" Replace @tailwind placeholders with the Tailwind CDN link.\"\n\n\t// 3) Build detailed task\n\tdetailedTask := \"\"\n\tif template != \"\" {\n\t\tdetailedTask = template\n\t} else {\n\t\tdetailedTask = fmt.Sprintf(\n\t\t\t\"Turn this into a single HTML file using Tailwind. Show real pictures from %s. The user describes this image as: %s\",\n\t\t\timageSource, userPrompt,\n\t\t)\n\t}\n\n\t// 4) Build final messages\n\tmessages := []map[string]interface{}{\n\t\t{\"role\": \"system\", \"content\": systemMsg},\n\t\t{\"role\": \"user\", \"content\": fmt.Sprintf(\"Image description: %s\", imageDescription)},\n\t\t{\"role\": \"user\", \"content\": fmt.Sprintf(\"Detailed Task Description: %s\", detailedTask)},\n\t\t{\"role\": \"user\", \"content\": fmt.Sprintf(\"Human: %s\\nAssistant:\", userPrompt)},\n\t}\n\n\tfmt.Println(\"final messages: \", messages)\n\n\t// 5) Call the streaming OpenAI endpoint\n\taiResp, err := callOpenAiSSE(messages, openAiKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 6) Build and return usage/cost\n\tinputLen := len(prompt) + len(imageDescription) + len(userPrompt)\n\toutputLen := len(aiResp)\n\tinputTokens := (inputLen + 3) / 4\n\toutputTokens := (outputLen + 3) / 4\n\ttotalTokens := inputTokens + outputTokens\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  totalTokens,\n\t\t},\n\t\tCost: 0, // or compute as needed\n\t}, nil\n}\n\n// Optional chat version (no image):\nfunc callo3miniOpenAiApiGo(prevMsgs []ChatMessage, newMsg, openAiKey string) (*R1Response, error) {\n\tif openAiKey == \"\" {\n\t\treturn &R1Response{AIResponse: \"No OpenAI key provided.\", TokenUsage: nil, Cost: 0}, nil\n\t}\n\t// Gather system + user messages\n\tvar systemMsg string\n\tvar msgArr []map[string]interface{}\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\tif systemMsg == \"\" {\n\t\tsystemMsg = \"You are a helpful assistant.\"\n\t}\n\tmsgArr = append(msgArr, map[string]interface{}{\"role\": \"system\", \"content\": systemMsg})\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role != \"system\" {\n\t\t\tmsgArr = append(msgArr, map[string]interface{}{\"role\": m.Role, \"content\": m.Content})\n\t\t}\n\t}\n\tmsgArr = append(msgArr, map[string]interface{}{\"role\": \"user\", \"content\": newMsg + \"\\nAssistant:\"})\n\n\taiResp, err := callOpenAiSSE(msgArr, openAiKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinputLen := 0\n\tfor _, m := range prevMsgs {\n\t\tinputLen += len(m.Content)\n\t}\n\tinputLen += len(newMsg)\n\toutputLen := len(aiResp)\n\tinputTokens := (inputLen + 3) / 4\n\toutputTokens := (outputLen + 3) / 4\n\n\tfmt.Println(\"aiResp: \", aiResp)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\n// Utility to describe image with OpenAI Vision (if needed)\nfunc getOpenAiImageDescription(imageBase64, openAiKey string) (string, error) {\n\tif imageBase64 == \"\" {\n\t\treturn \"\", nil\n\t}\n\t// Example prompt\n\tpayload := map[string]interface{}{\n\t\t\"model\": \"llama-3.2-11b-vision-preview\",\n\t\t\"messages\": []map[string]interface{}{\n\t\t\t{\"role\": \"user\", \"content\": \"Describe this image in detail.\", \"images\": []string{imageBase64}},\n\t\t},\n\t}\n\tbody, _ := json.Marshal(payload)\n\treq, err := http.NewRequest(\"POST\", \"https://api.openai.com/openai/v1/chat/completions\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+openAiKey)\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer res.Body.Close()\n\tif res.StatusCode != http.StatusOK {\n\t\tb, _ := io.ReadAll(res.Body)\n\t\treturn \"\", fmt.Errorf(\"Vision error: %s\", string(b))\n\t}\n\n\tvar desc strings.Builder\n\treader := bufio.NewReader(res.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tif strings.HasPrefix(strings.TrimSpace(line), \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line)[5:]\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent string `json:\"content\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t}\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\tdesc.WriteString(chunk.Choices[0].Delta.Content)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn desc.String(), nil\n}\n\n// Reusable SSE fetch\nfunc callOpenAiSSE(messages []map[string]interface{}, openAiKey string) (string, error) {\n\treqBody := map[string]interface{}{\n\t\t\"model\":                 \"deepseek-r1-distill-llama-70b\",\n\t\t\"messages\":              messages,\n\t\t\"stream\":                true,\n\t\t\"temperature\":           0.1,\n\t\t\"max_completion_tokens\": 4096,\n\t\t\"top_p\":                 0.95,\n\t}\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.openai.com/openai/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+openAiKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", fmt.Errorf(\"OpenAI API error (%d): %s\", resp.StatusCode, string(b))\n\t}\n\n\tvar aiResp strings.Builder\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent string `json:\"content\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t}\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\taiResp.WriteString(chunk.Choices[0].Delta.Content)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn aiResp.String(), nil\n}\n"
  },
  {
    "path": "backend/openai_image.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"strings\"\n)\n\n// callOpenAIImageGeneration calls OpenAI's image generation API with gpt-image-1.5\n// Returns base64 data URI on success\nfunc callOpenAIImageGeneration(prompt string, aspectRatio string, outputFormat string, apiKey string) (string, error) {\n\turl := \"https://api.openai.com/v1/images/generations\"\n\n\t// Map aspect ratio to OpenAI size parameter\n\tsize := \"1024x1024\" // default\n\tswitch aspectRatio {\n\tcase \"9:16\":\n\t\tsize = \"1024x1536\"\n\tcase \"16:9\":\n\t\tsize = \"1536x1024\"\n\tcase \"1:1\", \"\":\n\t\tsize = \"1024x1024\"\n\t}\n\n\t// Request payload for gpt-image-1.5\n\t// Using low quality for fastest experience\n\treqBody := map[string]interface{}{\n\t\t\"model\":   \"gpt-image-1.5\",\n\t\t\"prompt\":  prompt,\n\t\t\"size\":    size,\n\t\t\"quality\": \"low\", // low quality for speed\n\t\t\"n\":       1,\n\t}\n\n\t// Add output_format if explicitly set (OpenAI supports: \"png\", \"jpeg\", \"webp\")\n\tif outputFormat == \"jpeg\" || outputFormat == \"png\" || outputFormat == \"webp\" {\n\t\treqBody[\"output_format\"] = outputFormat\n\t}\n\n\tbodyBytes, err := json.Marshal(reqBody)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to call OpenAI API: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn \"\", fmt.Errorf(\"OpenAI API error (status %d): %s\", resp.StatusCode, string(respBody))\n\t}\n\n\t// Parse response\n\tvar result struct {\n\t\tData []struct {\n\t\t\tB64JSON string `json:\"b64_json\"`\n\t\t} `json:\"data\"`\n\t}\n\n\tif err := json.Unmarshal(respBody, &result); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tif len(result.Data) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no image data in response\")\n\t}\n\n\t// Return as data URI with correct mime type\n\tmimeType := \"image/png\"\n\tif outputFormat == \"jpeg\" {\n\t\tmimeType = \"image/jpeg\"\n\t} else if outputFormat == \"webp\" {\n\t\tmimeType = \"image/webp\"\n\t}\n\tdataURI := fmt.Sprintf(\"data:%s;base64,%s\", mimeType, result.Data[0].B64JSON)\n\treturn dataURI, nil\n}\n\n// callOpenAIImageGenerationWithReference calls OpenAI's /v1/images/edits endpoint\n// to generate an image using a reference image (e.g., user's photo)\n//\n// PRIVACY NOTE: This function does not store or cache the reference image.\n// The image is only sent to OpenAI's API and immediately discarded after the request.\n//\n// Returns base64 data URI on success\nfunc callOpenAIImageGenerationWithReference(prompt string, referenceImageBase64 string, aspectRatio string, outputFormat string, apiKey string) (string, error) {\n\turl := \"https://api.openai.com/v1/images/edits\"\n\n\t// Decode base64 to bytes\n\timageBytes, err := base64.StdEncoding.DecodeString(referenceImageBase64)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to decode reference image: %w\", err)\n\t}\n\n\t// Detect image format from magic bytes\n\tcontentType := \"image/png\"\n\tfilename := \"reference.png\"\n\tif len(imageBytes) > 2 {\n\t\t// JPEG magic bytes: FF D8 FF\n\t\tif imageBytes[0] == 0xFF && imageBytes[1] == 0xD8 && imageBytes[2] == 0xFF {\n\t\t\tcontentType = \"image/jpeg\"\n\t\t\tfilename = \"reference.jpg\"\n\t\t} else if len(imageBytes) > 3 && imageBytes[0] == 0x89 && imageBytes[1] == 0x50 && imageBytes[2] == 0x4E && imageBytes[3] == 0x47 {\n\t\t\t// PNG magic bytes: 89 50 4E 47\n\t\t\tcontentType = \"image/png\"\n\t\t\tfilename = \"reference.png\"\n\t\t} else if len(imageBytes) > 11 && string(imageBytes[8:12]) == \"WEBP\" {\n\t\t\t// WebP magic bytes check\n\t\t\tcontentType = \"image/webp\"\n\t\t\tfilename = \"reference.webp\"\n\t\t}\n\t}\n\n\t// Map aspect ratio to size\n\tsize := \"1024x1024\" // default\n\tswitch aspectRatio {\n\tcase \"9:16\":\n\t\tsize = \"1024x1536\"\n\tcase \"16:9\":\n\t\tsize = \"1536x1024\"\n\tcase \"1:1\", \"\":\n\t\tsize = \"1024x1024\"\n\t}\n\n\t// Create multipart form data\n\tvar requestBody bytes.Buffer\n\twriter := multipart.NewWriter(&requestBody)\n\n\t// Add image file with proper MIME type using CreatePart\n\th := make(textproto.MIMEHeader)\n\th.Set(\"Content-Disposition\", fmt.Sprintf(`form-data; name=\"image[]\"; filename=\"%s\"`, filename))\n\th.Set(\"Content-Type\", contentType)\n\tpart, err := writer.CreatePart(h)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create form part: %w\", err)\n\t}\n\tif _, err := part.Write(imageBytes); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to write image data: %w\", err)\n\t}\n\n\t// Add prompt\n\tif err := writer.WriteField(\"prompt\", prompt); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to write prompt: %w\", err)\n\t}\n\n\t// Add model\n\tif err := writer.WriteField(\"model\", \"gpt-image-1.5\"); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to write model: %w\", err)\n\t}\n\n\t// Add size (using mapped aspect ratio)\n\tif err := writer.WriteField(\"size\", size); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to write size: %w\", err)\n\t}\n\n\t// Add quality\n\tif err := writer.WriteField(\"quality\", \"low\"); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to write quality: %w\", err)\n\t}\n\n\t// Add n (number of images)\n\tif err := writer.WriteField(\"n\", \"1\"); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to write n: %w\", err)\n\t}\n\n\t// Add output_format if explicitly set\n\tif outputFormat == \"jpeg\" || outputFormat == \"png\" || outputFormat == \"webp\" {\n\t\tif err := writer.WriteField(\"output_format\", outputFormat); err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to write output_format: %w\", err)\n\t\t}\n\t}\n\n\tif err := writer.Close(); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to close writer: %w\", err)\n\t}\n\n\t// Create request\n\treq, err := http.NewRequest(\"POST\", url, &requestBody)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create request: %w\", err)\n\t}\n\n\treq.Header.Set(\"Content-Type\", writer.FormDataContentType())\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\t// Execute request\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to call OpenAI API: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\trespBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn \"\", fmt.Errorf(\"OpenAI API error (status %d): %s\", resp.StatusCode, string(respBody))\n\t}\n\n\t// Parse response\n\tvar result struct {\n\t\tData []struct {\n\t\t\tB64JSON string `json:\"b64_json\"`\n\t\t} `json:\"data\"`\n\t}\n\n\tif err := json.Unmarshal(respBody, &result); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tif len(result.Data) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no image data in response\")\n\t}\n\n\t// Return as data URI with correct mime type\n\tmimeType := \"image/png\"\n\tif outputFormat == \"jpeg\" {\n\t\tmimeType = \"image/jpeg\"\n\t} else if outputFormat == \"webp\" {\n\t\tmimeType = \"image/webp\"\n\t}\n\tdataURI := fmt.Sprintf(\"data:%s;base64,%s\", mimeType, result.Data[0].B64JSON)\n\treturn dataURI, nil\n}\n\n// shouldUseReferenceImage detects if the prompt contains keywords that suggest\n// using the reference image (person, product, pet, etc.)\nfunc shouldUseReferenceImage(prompt string) bool {\n\tlowerPrompt := strings.ToLower(prompt)\n\n\t// Keywords that suggest personalization\n\tkeywords := []string{\n\t\t// Person-related\n\t\t\"person\", \"me\", \"myself\", \"i \", \"user\", \"subject\", \"face\", \"portrait\",\n\t\t\"man\", \"woman\", \"boy\", \"girl\", \"individual\", \"character\",\n\t\t// Object/product-related\n\t\t\"product\", \"item\", \"this\", \"same\", \"original\", \"object\",\n\t\t// Pet-related\n\t\t\"dog\", \"cat\", \"pet\", \"puppy\", \"kitten\",\n\t\t// Possessive pronouns\n\t\t\"my \", \"their \", \"his \", \"her \",\n\t}\n\n\tfor _, keyword := range keywords {\n\t\tif strings.Contains(lowerPrompt, keyword) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "backend/opencode_driver.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"crypto/rand\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"html\"\n\t\"io\"\n\t\"log\"\n\t\"math\"\n\t\"mime\"\n\t\"net\"\n\t\"net/http\"\n\tneturl \"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\topencode \"github.com/sst/opencode-sdk-go\"\n\t\"github.com/sst/opencode-sdk-go/option\"\n)\n\n// OpenCodeDriver manages interactions with the OpenCode agent\ntype OpenCodeDriver struct {\n\tclient    *opencode.Client\n\tserverURL string\n\n\t// Guards endpoint cache and question dedupe map.\n\tmu sync.Mutex\n\t// Endpoint path for question replies. Default is stable in OpenCode server.\n\tquestionReplyPath string\n\t// Endpoint path for permission replies.\n\tpermissionReplyPath string\n\t// Prevent accidental duplicate replies for the same pending question request.\n\trepliedQuestions map[string]time.Time\n}\n\ntype usageLimitHint struct {\n\tResetAt           time.Time\n\tHasResetAt        bool\n\tResetInSeconds    int64\n\tHasResetInSeconds bool\n\tWindowMinutes     int64\n\tHasWindowMinutes  bool\n\tUsedPercent       int64\n\tHasUsedPercent    bool\n\tUpdatedAt         time.Time\n}\n\nvar usageLimitHintState struct {\n\tmu   sync.RWMutex\n\thint usageLimitHint\n}\n\n// Serialize server start/restart/auth-sync so mode transitions do not race.\nvar openCodeServerPrepMu sync.Mutex\n\ntype openCodeOpenAIAuthState struct {\n\tknown             bool\n\tmode              string\n\tapiKeyFingerprint string\n}\n\nvar openCodeOpenAIAuthStateCache struct {\n\tmu    sync.RWMutex\n\tstate openCodeOpenAIAuthState\n}\n\nvar openCodeOpenAIOAuthSessions struct {\n\tmu       sync.Mutex\n\tsessions map[string]*openCodeOpenAIOAuthSession\n}\n\nvar openCodeOpenAIOAuthLoopback struct {\n\tmu      sync.Mutex\n\tserver  *http.Server\n\tstarted bool\n}\n\nconst (\n\topenAIOAuthIssuer             = \"https://auth.openai.com\"\n\topenAIOAuthDefaultClientID    = \"app_EMoamEEZ73f0CkXaXp7hrann\"\n\topenAIOAuthDefaultOriginator  = \"Codex Desktop\"\n\topenAIOAuthDefaultRedirectURI = \"http://localhost:1455/auth/callback\"\n\topenAIOAuthLoopbackListenAddr = \"127.0.0.1:1455\"\n)\n\ntype openCodeRuntimePaths struct {\n\tDataHome   string\n\tStateHome  string\n\tAuthFile   string\n\tConfigHome string\n}\n\ntype openCodeAuthStatusResponse struct {\n\tServerRunning         bool   `json:\"serverRunning\"`\n\tConfiguredDataHome    string `json:\"configuredDataHome\"`\n\tConfiguredStateHome   string `json:\"configuredStateHome\"`\n\tAuthFilePath          string `json:\"authFilePath\"`\n\tOpenAICredentialType  string `json:\"openaiCredentialType\"`  // none | oauth | api | unknown\n\tCachedGlowbomAuthMode string `json:\"cachedGlowbomAuthMode\"` // api-key | codex-jwt | opencode-config | unknown\n}\n\nvar openCodeNoisyServerPaths = []string{\n\t\"/session/status\",\n\t\"/mcp\",\n\t\"/lsp\",\n\t\"/vcs\",\n\t\"/permission\",\n\t\"/question\",\n\t\"/path\",\n\t\"/command\",\n}\n\nfunc shouldSuppressOpenCodeServerLogLine(line string) bool {\n\ttrimmed := strings.TrimSpace(line)\n\tif trimmed == \"\" {\n\t\treturn true\n\t}\n\n\tlower := strings.ToLower(trimmed)\n\tif !strings.Contains(lower, \"service=server\") {\n\t\treturn false\n\t}\n\tif !strings.Contains(lower, \"method=get\") && !strings.Contains(lower, \"method=head\") {\n\t\treturn false\n\t}\n\n\tfor _, p := range openCodeNoisyServerPaths {\n\t\tif strings.Contains(lower, \"path=\"+p) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc shouldSuppressOpenCodeServerStderrInfoLine(line string) bool {\n\ttrimmed := strings.TrimSpace(line)\n\tif trimmed == \"\" {\n\t\treturn true\n\t}\n\n\tlower := strings.ToLower(trimmed)\n\t// OpenCode emits very high-volume INFO/DEBUG logs on stderr (bus/session/tool chatter).\n\t// Keep WARN/ERROR visibility while dropping routine diagnostics.\n\treturn strings.HasPrefix(lower, \"info \") || strings.HasPrefix(lower, \"debug \")\n}\n\n// GlowbomProject represents a Glowbom project workspace\ntype GlowbomProject struct {\n\tName        string            `json:\"name\"`\n\tVersion     string            `json:\"version\"`\n\tDescription string            `json:\"description,omitempty\"`\n\tBundleID    string            `json:\"bundleID,omitempty\"`\n\tDisplayName string            `json:\"displayName,omitempty\"`\n\tBuildNumber string            `json:\"buildNumber,omitempty\"`\n\tTargets     map[string]Target `json:\"targets\"` // \"ios\", \"android\", \"web\", \"godot\"\n\tCreatedAt   string            `json:\"createdAt\"`\n\tUpdatedAt   string            `json:\"updatedAt\"`\n}\n\n// Target represents a build target configuration\ntype Target struct {\n\tEnabled   bool   `json:\"enabled\"`\n\tOutputDir string `json:\"outputDir\"` // relative path, e.g., \"ios\", \"android\"\n\tLastBuild string `json:\"lastBuild,omitempty\"`\n\tStack     string `json:\"stack,omitempty\"`\n}\n\n// ProjectPaths holds standard paths within a project\ntype ProjectPaths struct {\n\tRoot      string // Project root directory\n\tPrototype string // prototype/ - HTML/Tailwind source\n\tAssets    string // prototype/assets/ - images, fonts\n\tiOS       string // ios/ - SwiftUI output\n\tAndroid   string // android/ - Kotlin output\n\tWeb       string // web/ - Next.js output\n\tGodot     string // godot/ - Godot output\n\tManifest  string // glowbom.json\n}\n\n// OpenCodeTranslateRequest represents a translation task\ntype OpenCodeTranslateRequest struct {\n\t// Option 1: Direct HTML (legacy/simple mode)\n\tSourceHTML string `json:\"sourceHtml,omitempty\"`\n\n\t// Option 2: Project-based (preferred)\n\tProjectPath string `json:\"projectPath,omitempty\"` // Path to Glowbom project root\n\n\tTargetLang         string  `json:\"targetLang\"`           // stack id: \"swiftui\", \"kotlin\", \"nextjs\", \"godot\", etc.\n\tTargetID           string  `json:\"targetID,omitempty\"`   // destination id: \"ios\", \"ipados\", \"macos\", etc.\n\tTargetDir          string  `json:\"targetDir,omitempty\"`  // relative output dir for project mode\n\tProjectDir         string  `json:\"projectDir,omitempty\"` // Override output dir (legacy)\n\tModel              string  `json:\"model,omitempty\"`\n\tAnthropicKey       string  `json:\"anthropicKey,omitempty\"`\n\tOpenAIKey          string  `json:\"openaiKey,omitempty\"`\n\tGeminiKey          string  `json:\"geminiKey,omitempty\"`\n\tFireworksKey       string  `json:\"fireworksKey,omitempty\"`\n\tOpenRouterKey      string  `json:\"openrouterKey,omitempty\"`\n\tOpenCodeZenKey     string  `json:\"opencodeZenKey,omitempty\"`\n\tXaiKey             string  `json:\"xaiKey,omitempty\"`\n\tOpenAIAuthMode     string  `json:\"openaiAuthMode,omitempty\"`     // \"api-key\" or \"codex-jwt\"\n\tOpenAIAccountID    string  `json:\"openaiAccountID,omitempty\"`    // chatgpt_account_id for JWT mode\n\tOpenAIRefreshToken string  `json:\"openaiRefreshToken,omitempty\"` // refresh token for OpenCode auth sync\n\tOpenAIExpiresAt    float64 `json:\"openaiExpiresAt,omitempty\"`    // token expiry (seconds since reference date)\n}\n\n// OpenCodeTranslateResponse represents the translation result\ntype OpenCodeTranslateResponse struct {\n\tSessionID   string   `json:\"sessionId\"`\n\tSuccess     bool     `json:\"success\"`\n\tFiles       []string `json:\"files\"`\n\tBuildOutput string   `json:\"buildOutput,omitempty\"`\n\tError       string   `json:\"error,omitempty\"`\n\tTokensUsed  float64  `json:\"tokensUsed\"`\n\tCost        float64  `json:\"cost\"`\n}\n\ntype OpenAIModelsRequest struct {\n\tProjectPath        string  `json:\"projectPath,omitempty\"`\n\tOpenAIKey          string  `json:\"openaiKey,omitempty\"`\n\tOpenAIAuthMode     string  `json:\"openaiAuthMode,omitempty\"`     // \"api-key\" or \"codex-jwt\"\n\tOpenAIRefreshToken string  `json:\"openaiRefreshToken,omitempty\"` // refresh token for OpenCode auth sync\n\tOpenAIExpiresAt    float64 `json:\"openaiExpiresAt,omitempty\"`    // token expiry (seconds since reference date)\n\tAnthropicKey       string  `json:\"anthropicKey,omitempty\"`\n\tGeminiKey          string  `json:\"geminiKey,omitempty\"`\n}\n\ntype OpenAIModelOption struct {\n\tID          string `json:\"id\"`\n\tDisplayName string `json:\"displayName\"`\n}\n\ntype OpenAIModelsDebug struct {\n\tAuthMode              string   `json:\"authMode\"`\n\tProviderFound         bool     `json:\"providerFound\"`\n\tProviderModelCount    int      `json:\"providerModelCount\"`\n\tProviderModelSample   []string `json:\"providerModelSample,omitempty\"`\n\tAllowlistModelIDs     []string `json:\"allowlistModelIDs\"`\n\tMatchedModelIDs       []string `json:\"matchedModelIDs\"`\n\tAddedForwardCompatIDs []string `json:\"addedForwardCompatIDs,omitempty\"`\n\tUsedFallbackAllowlist bool     `json:\"usedFallbackAllowlist\"`\n}\n\ntype OpenAIModelsResponse struct {\n\tProvider  string              `json:\"provider\"`\n\tSource    string              `json:\"source\"`\n\tModels    []OpenAIModelOption `json:\"models\"`\n\tFetchedAt string              `json:\"fetchedAt\"`\n\tDebug     OpenAIModelsDebug   `json:\"debug\"`\n}\n\ntype OpenCodeAvailableModelsRequest struct {\n\tProjectPath        string  `json:\"projectPath,omitempty\"`\n\tOpenAIKey          string  `json:\"openaiKey,omitempty\"`\n\tOpenAIAuthMode     string  `json:\"openaiAuthMode,omitempty\"`     // \"api-key\" | \"codex-jwt\" | \"opencode-config\"\n\tOpenAIRefreshToken string  `json:\"openaiRefreshToken,omitempty\"` // refresh token for OpenCode auth sync\n\tOpenAIExpiresAt    float64 `json:\"openaiExpiresAt,omitempty\"`    // token expiry (seconds since reference date)\n\tAnthropicKey       string  `json:\"anthropicKey,omitempty\"`\n\tGeminiKey          string  `json:\"geminiKey,omitempty\"`\n\tFireworksKey       string  `json:\"fireworksKey,omitempty\"`\n\tOpenRouterKey      string  `json:\"openrouterKey,omitempty\"`\n\tOpenCodeZenKey     string  `json:\"opencodeZenKey,omitempty\"`\n\tXaiKey             string  `json:\"xaiKey,omitempty\"`\n}\n\ntype OpenCodeProviderModelOption struct {\n\tID          string `json:\"id\"`\n\tDisplayName string `json:\"displayName\"`\n}\n\ntype OpenCodeProviderOption struct {\n\tID          string                        `json:\"id\"`\n\tDisplayName string                        `json:\"displayName\"`\n\tModels      []OpenCodeProviderModelOption `json:\"models\"`\n}\n\ntype OpenCodeAvailableModelsResponse struct {\n\tSource    string                   `json:\"source\"`\n\tProviders []OpenCodeProviderOption `json:\"providers\"`\n\tFetchedAt string                   `json:\"fetchedAt\"`\n}\n\ntype OpenCodeAuthConnectRequest struct {\n\tProjectPath        string  `json:\"projectPath,omitempty\"`\n\tOpenAIKey          string  `json:\"openaiKey,omitempty\"`\n\tOpenAIRefreshToken string  `json:\"openaiRefreshToken,omitempty\"`\n\tOpenAIExpiresAt    float64 `json:\"openaiExpiresAt,omitempty\"`\n}\n\ntype OpenCodeAuthDisconnectRequest struct {\n\tProjectPath string `json:\"projectPath,omitempty\"`\n}\n\ntype OpenCodeAuthConnectionResponse struct {\n\tSuccess   bool                       `json:\"success\"`\n\tProvider  string                     `json:\"provider\"`\n\tConnected bool                       `json:\"connected\"`\n\tStatus    openCodeAuthStatusResponse `json:\"status\"`\n\tError     string                     `json:\"error,omitempty\"`\n}\n\ntype OpenCodeAuthOAuthStartRequest struct {\n\tProjectPath string `json:\"projectPath,omitempty\"`\n}\n\ntype OpenCodeAuthOAuthStartResponse struct {\n\tSuccess          bool   `json:\"success\"`\n\tProvider         string `json:\"provider\"`\n\tState            string `json:\"state\"`\n\tAuthorizationURL string `json:\"authorizationURL\"`\n\tRedirectURI      string `json:\"redirectURI\"`\n\tError            string `json:\"error,omitempty\"`\n}\n\ntype OpenCodeAuthOAuthStatusResponse struct {\n\tSuccess   bool                       `json:\"success\"`\n\tProvider  string                     `json:\"provider\"`\n\tState     string                     `json:\"state\"`\n\tPhase     string                     `json:\"phase\"` // pending | succeeded | failed\n\tConnected bool                       `json:\"connected\"`\n\tStatus    openCodeAuthStatusResponse `json:\"status\"`\n\tError     string                     `json:\"error,omitempty\"`\n}\n\ntype openCodeOpenAIOAuthSession struct {\n\tState        string\n\tCodeVerifier string\n\tRedirectURI  string\n\tProjectPath  string\n\tCreatedAt    time.Time\n\tCompletedAt  time.Time\n\tPhase        string\n\tConnected    bool\n\tError        string\n\tStatus       openCodeAuthStatusResponse\n}\n\nvar openAIChatGPTModelAllowlist = map[string]string{\n\t\"gpt-5.4\":            \"GPT-5.4\",\n\t\"gpt-5.3-codex\":      \"GPT-5.3 Codex\",\n\t\"gpt-5.2\":            \"GPT-5.2\",\n\t\"gpt-5.2-codex\":      \"GPT-5.2 Codex\",\n\t\"gpt-5.1-codex-mini\": \"GPT-5.1 Codex mini\",\n\t\"gpt-5.1-codex-max\":  \"GPT-5.1 Codex Max\",\n}\n\nvar openAICodexForwardCompatModelIDs = []string{\n\t\"gpt-5.4\",\n\t\"gpt-5.3-codex\",\n}\n\nfunc isOpenAICodexForwardCompatModelID(modelID string) bool {\n\tnormalized := strings.ToLower(strings.TrimSpace(modelID))\n\tif normalized == \"\" {\n\t\treturn false\n\t}\n\treturn normalized == \"gpt-5.4\" || normalized == \"gpt-5.3-codex\"\n}\n\nfunc appendOpenAICodexForwardCompatModels(models []OpenAIModelOption, providerModelIDs []string, authMode string) ([]OpenAIModelOption, []string) {\n\tif strings.TrimSpace(authMode) != \"codex-jwt\" {\n\t\treturn models, nil\n\t}\n\n\tproviderModelSet := make(map[string]struct{}, len(providerModelIDs))\n\tfor _, id := range providerModelIDs {\n\t\tproviderModelSet[id] = struct{}{}\n\t}\n\n\thasTemplate := false\n\tif _, ok := providerModelSet[\"gpt-5.2-codex\"]; ok {\n\t\thasTemplate = true\n\t}\n\tif _, ok := providerModelSet[\"gpt-5.3-codex\"]; ok {\n\t\thasTemplate = true\n\t}\n\tif !hasTemplate {\n\t\treturn models, nil\n\t}\n\n\tseen := make(map[string]struct{}, len(models))\n\tfor _, model := range models {\n\t\tseen[model.ID] = struct{}{}\n\t}\n\n\tadded := make([]string, 0, len(openAICodexForwardCompatModelIDs))\n\tfor _, id := range openAICodexForwardCompatModelIDs {\n\t\tif _, ok := seen[id]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tname := strings.TrimSpace(openAIChatGPTModelAllowlist[id])\n\t\tif name == \"\" {\n\t\t\tname = id\n\t\t}\n\t\tmodels = append(models, OpenAIModelOption{\n\t\t\tID:          id,\n\t\t\tDisplayName: name,\n\t\t})\n\t\tseen[id] = struct{}{}\n\t\tadded = append(added, id)\n\t}\n\n\treturn models, added\n}\n\nfunc previewStringList(values []string, max int) []string {\n\tif max <= 0 || len(values) <= max {\n\t\treturn values\n\t}\n\treturn values[:max]\n}\n\n// OpenCodeQuestionRespondRequest represents a response to an agent question\ntype OpenCodeQuestionRespondRequest struct {\n\tSessionID          string             `json:\"sessionID\"`\n\tQuestionID         string             `json:\"questionID\"`\n\tAnswer             string             `json:\"answer\"`\n\tProjectPath        string             `json:\"projectPath,omitempty\"`\n\tAnswers            QuestionAnswers    `json:\"answers,omitempty\"`\n\tAnswerByQuestionID AnswerByQuestionID `json:\"answerByQuestionID,omitempty\"`\n}\n\ntype QuestionAnswers [][]string\n\nfunc (qa *QuestionAnswers) UnmarshalJSON(b []byte) error {\n\tif len(b) == 0 || string(b) == \"null\" {\n\t\treturn nil\n\t}\n\tvar nested [][]string\n\tif err := json.Unmarshal(b, &nested); err == nil {\n\t\t*qa = nested\n\t\treturn nil\n\t}\n\tvar flat []string\n\tif err := json.Unmarshal(b, &flat); err == nil {\n\t\tout := make([][]string, 0, len(flat))\n\t\tfor _, v := range flat {\n\t\t\tout = append(out, []string{v})\n\t\t}\n\t\t*qa = out\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"invalid answers payload\")\n}\n\ntype AnswerByQuestionID map[string][]string\n\nfunc (abq *AnswerByQuestionID) UnmarshalJSON(b []byte) error {\n\tif len(b) == 0 || string(b) == \"null\" {\n\t\treturn nil\n\t}\n\tvar nested map[string][]string\n\tif err := json.Unmarshal(b, &nested); err == nil {\n\t\t*abq = nested\n\t\treturn nil\n\t}\n\tvar flat map[string]string\n\tif err := json.Unmarshal(b, &flat); err == nil {\n\t\tout := make(map[string][]string, len(flat))\n\t\tfor k, v := range flat {\n\t\t\tout[k] = []string{v}\n\t\t}\n\t\t*abq = out\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"invalid answerByQuestionID payload\")\n}\n\n// OpenCodePermissionRespondRequest represents a response to a permission prompt\ntype OpenCodePermissionRespondRequest struct {\n\tSessionID    string `json:\"sessionID\"`\n\tPermissionID string `json:\"permissionID\"`\n\tResponse     string `json:\"response\"` // \"once\" | \"always\" | \"reject\"\n\tProjectPath  string `json:\"projectPath,omitempty\"`\n}\n\n// getAgentPort returns the OpenCode agent port from GLOWBOM_AGENT_PORT env var,\n// falling back to \"4571\".\nfunc getAgentPort() string {\n\tif port := os.Getenv(\"GLOWBOM_AGENT_PORT\"); port != \"\" {\n\t\treturn port\n\t}\n\treturn \"4571\"\n}\n\nfunc openCodeServerHostname() string {\n\tif host := strings.TrimSpace(os.Getenv(\"OPENCODE_SERVER_HOSTNAME\")); host != \"\" {\n\t\treturn host\n\t}\n\treturn \"127.0.0.1\"\n}\n\nfunc openCodeServerUsername() string {\n\tif username := strings.TrimSpace(os.Getenv(\"OPENCODE_SERVER_USERNAME\")); username != \"\" {\n\t\treturn username\n\t}\n\treturn \"opencode\"\n}\n\nfunc openCodeServerPassword() string {\n\treturn strings.TrimSpace(os.Getenv(\"OPENCODE_SERVER_PASSWORD\"))\n}\n\nfunc openCodeServerAuthorizationHeader() string {\n\tpassword := openCodeServerPassword()\n\tif password == \"\" {\n\t\treturn \"\"\n\t}\n\ttoken := base64.StdEncoding.EncodeToString([]byte(openCodeServerUsername() + \":\" + password))\n\treturn \"Basic \" + token\n}\n\nfunc applyOpenCodeServerAuthorization(req *http.Request) {\n\tif header := openCodeServerAuthorizationHeader(); header != \"\" {\n\t\treq.Header.Set(\"Authorization\", header)\n\t}\n}\n\nfunc glowbomOpenCodeRuntimePaths() (openCodeRuntimePaths, error) {\n\thomeDir, err := os.UserHomeDir()\n\tif err != nil || strings.TrimSpace(homeDir) == \"\" {\n\t\treturn openCodeRuntimePaths{}, fmt.Errorf(\"failed to resolve user home directory for OpenCode runtime paths\")\n\t}\n\n\tdataHome := filepath.Join(homeDir, \".glowbom\", \"opencode-data\")\n\tstateHome := filepath.Join(homeDir, \".glowbom\", \"opencode-state\")\n\tconfigHome := os.Getenv(\"XDG_CONFIG_HOME\")\n\tif strings.TrimSpace(configHome) == \"\" {\n\t\tconfigHome = filepath.Join(homeDir, \".config\")\n\t}\n\n\treturn openCodeRuntimePaths{\n\t\tDataHome:   dataHome,\n\t\tStateHome:  stateHome,\n\t\tAuthFile:   filepath.Join(dataHome, \"opencode\", \"auth.json\"),\n\t\tConfigHome: configHome,\n\t}, nil\n}\n\nfunc ensureOpenCodeRuntimeDirs(paths openCodeRuntimePaths) error {\n\tif strings.TrimSpace(paths.DataHome) == \"\" || strings.TrimSpace(paths.StateHome) == \"\" {\n\t\treturn fmt.Errorf(\"invalid OpenCode runtime paths\")\n\t}\n\tif err := os.MkdirAll(paths.DataHome, 0755); err != nil {\n\t\treturn fmt.Errorf(\"failed creating OpenCode data directory %s: %w\", paths.DataHome, err)\n\t}\n\tif err := os.MkdirAll(paths.StateHome, 0755); err != nil {\n\t\treturn fmt.Errorf(\"failed creating OpenCode state directory %s: %w\", paths.StateHome, err)\n\t}\n\treturn nil\n}\n\nfunc setEnvValue(env []string, key, value string) []string {\n\tprefix := key + \"=\"\n\tfor i, entry := range env {\n\t\tif strings.HasPrefix(entry, prefix) {\n\t\t\tenv[i] = prefix + value\n\t\t\treturn env\n\t\t}\n\t}\n\treturn append(env, prefix+value)\n}\n\nfunc normalizeOpenAIAuthMode(mode string) string {\n\tnormalized := strings.ToLower(strings.TrimSpace(mode))\n\tif normalized == \"codex-jwt\" {\n\t\treturn \"codex-jwt\"\n\t}\n\tif normalized == \"opencode-config\" {\n\t\treturn \"opencode-config\"\n\t}\n\treturn \"api-key\"\n}\n\nfunc openAIKeyFingerprint(openAIKey string) string {\n\ttrimmed := strings.TrimSpace(openAIKey)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\tdigest := sha256.Sum256([]byte(trimmed))\n\t// Store only a short non-reversible fingerprint for change detection.\n\treturn hex.EncodeToString(digest[:8])\n}\n\nfunc getOpenCodeOpenAIAuthState() openCodeOpenAIAuthState {\n\topenCodeOpenAIAuthStateCache.mu.RLock()\n\tdefer openCodeOpenAIAuthStateCache.mu.RUnlock()\n\treturn openCodeOpenAIAuthStateCache.state\n}\n\nfunc setOpenCodeOpenAIAuthState(mode, openAIKey string) {\n\tnormalizedMode := normalizeOpenAIAuthMode(mode)\n\tstate := openCodeOpenAIAuthState{\n\t\tknown:             true,\n\t\tmode:              normalizedMode,\n\t\tapiKeyFingerprint: \"\",\n\t}\n\tif normalizedMode == \"api-key\" {\n\t\tstate.apiKeyFingerprint = openAIKeyFingerprint(openAIKey)\n\t}\n\n\topenCodeOpenAIAuthStateCache.mu.Lock()\n\topenCodeOpenAIAuthStateCache.state = state\n\topenCodeOpenAIAuthStateCache.mu.Unlock()\n}\n\nfunc shouldRestartForOpenAIAuthChange(serverWasAlreadyRunning bool, requestedMode, openAIKey string) bool {\n\tif normalizeOpenAIAuthMode(requestedMode) == \"opencode-config\" {\n\t\treturn false\n\t}\n\tif !serverWasAlreadyRunning {\n\t\treturn false\n\t}\n\n\trequestedMode = normalizeOpenAIAuthMode(requestedMode)\n\tcurrent := getOpenCodeOpenAIAuthState()\n\tif !current.known {\n\t\t// Unknown inherited server state; restart when a concrete auth transition was requested.\n\t\treturn strings.TrimSpace(openAIKey) != \"\" || requestedMode != \"api-key\"\n\t}\n\tif current.mode != requestedMode {\n\t\treturn true\n\t}\n\tif requestedMode == \"api-key\" && strings.TrimSpace(openAIKey) != \"\" && current.apiKeyFingerprint != openAIKeyFingerprint(openAIKey) {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isSessionNotFoundError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\n\tlower := strings.ToLower(strings.TrimSpace(err.Error()))\n\treturn strings.Contains(lower, \"session not found\") || strings.Contains(lower, \"404 not found\")\n}\n\nfunc (d *OpenCodeDriver) createRefineSession(ctx context.Context, projectPath string) (*opencode.Session, error) {\n\tsession, err := d.client.Session.New(ctx, opencode.SessionNewParams{\n\t\tTitle:     opencode.F(\"Refine Glowbom Project\"),\n\t\tDirectory: opencode.F(projectPath),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn session, nil\n}\n\nfunc (d *OpenCodeDriver) resolveRefineSession(ctx context.Context, projectPath, requestedSessionID string) (*opencode.Session, bool, error) {\n\ttrimmedSessionID := strings.TrimSpace(requestedSessionID)\n\tif trimmedSessionID != \"\" {\n\t\tsession, err := d.client.Session.Get(ctx, trimmedSessionID, opencode.SessionGetParams{})\n\t\tif err == nil && session != nil {\n\t\t\treturn session, true, nil\n\t\t}\n\t\tif err != nil && !isSessionNotFoundError(err) {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Stored session %s is unavailable, creating a fresh session: %v\", trimmedSessionID, err)\n\t\t}\n\t}\n\n\tsession, err := d.createRefineSession(ctx, projectPath)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\treturn session, false, nil\n}\n\nfunc openAIOAuthClientID() string {\n\tif value := strings.TrimSpace(os.Getenv(\"OPENAI_OAUTH_CLIENT_ID\")); value != \"\" {\n\t\treturn value\n\t}\n\treturn openAIOAuthDefaultClientID\n}\n\nfunc openAIOAuthOriginator() string {\n\tif value := strings.TrimSpace(os.Getenv(\"OPENAI_OAUTH_ORIGINATOR\")); value != \"\" {\n\t\treturn value\n\t}\n\treturn openAIOAuthDefaultOriginator\n}\n\nfunc openAIOAuthRedirectURI() string {\n\tif value := strings.TrimSpace(os.Getenv(\"OPENAI_OAUTH_REDIRECT_URI\")); value != \"\" {\n\t\treturn value\n\t}\n\treturn openAIOAuthDefaultRedirectURI\n}\n\nfunc randomURLSafeBase64(byteCount int) (string, error) {\n\tif byteCount <= 0 {\n\t\tbyteCount = 32\n\t}\n\tbuf := make([]byte, byteCount)\n\tif _, err := rand.Read(buf); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.TrimRight(base64.URLEncoding.EncodeToString(buf), \"=\"), nil\n}\n\nfunc sha256Base64URL(value string) string {\n\tdigest := sha256.Sum256([]byte(value))\n\treturn strings.TrimRight(base64.URLEncoding.EncodeToString(digest[:]), \"=\")\n}\n\nfunc ensureOpenAIOAuthSessionStore() {\n\topenCodeOpenAIOAuthSessions.mu.Lock()\n\tdefer openCodeOpenAIOAuthSessions.mu.Unlock()\n\tif openCodeOpenAIOAuthSessions.sessions == nil {\n\t\topenCodeOpenAIOAuthSessions.sessions = make(map[string]*openCodeOpenAIOAuthSession)\n\t}\n}\n\nfunc cleanupExpiredOpenAIOAuthSessionsLocked(now time.Time) {\n\tfor state, session := range openCodeOpenAIOAuthSessions.sessions {\n\t\tif session == nil {\n\t\t\tdelete(openCodeOpenAIOAuthSessions.sessions, state)\n\t\t\tcontinue\n\t\t}\n\t\tif now.Sub(session.CreatedAt) > 30*time.Minute {\n\t\t\tdelete(openCodeOpenAIOAuthSessions.sessions, state)\n\t\t\tcontinue\n\t\t}\n\t\tif session.Phase != \"pending\" && !session.CompletedAt.IsZero() && now.Sub(session.CompletedAt) > 10*time.Minute {\n\t\t\tdelete(openCodeOpenAIOAuthSessions.sessions, state)\n\t\t}\n\t}\n}\n\nfunc ensureOpenAIOAuthLoopbackServer() error {\n\topenCodeOpenAIOAuthLoopback.mu.Lock()\n\tdefer openCodeOpenAIOAuthLoopback.mu.Unlock()\n\n\tif openCodeOpenAIOAuthLoopback.started && openCodeOpenAIOAuthLoopback.server != nil {\n\t\treturn nil\n\t}\n\n\tloopbackMux := http.NewServeMux()\n\tloopbackMux.HandleFunc(\"/auth/callback\", openCodeOpenAIOAuthLoopbackCallbackHandler)\n\tloopbackMux.HandleFunc(\"/cancel\", openCodeOpenAIOAuthLoopbackCancelHandler)\n\n\tlistener, err := net.Listen(\"tcp\", openAIOAuthLoopbackListenAddr)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not start OAuth callback listener on %s: %w\", openAIOAuthLoopbackListenAddr, err)\n\t}\n\n\tserver := &http.Server{\n\t\tHandler:           loopbackMux,\n\t\tReadHeaderTimeout: 10 * time.Second,\n\t}\n\n\topenCodeOpenAIOAuthLoopback.server = server\n\topenCodeOpenAIOAuthLoopback.started = true\n\n\tgo func(s *http.Server, ln net.Listener) {\n\t\tif err := s.Serve(ln); err != nil && !errors.Is(err, http.ErrServerClosed) {\n\t\t\tlog.Printf(\"[OPENCODE] OAuth loopback listener stopped: %v\", err)\n\t\t\topenCodeOpenAIOAuthLoopback.mu.Lock()\n\t\t\tif openCodeOpenAIOAuthLoopback.server == s {\n\t\t\t\topenCodeOpenAIOAuthLoopback.server = nil\n\t\t\t\topenCodeOpenAIOAuthLoopback.started = false\n\t\t\t}\n\t\t\topenCodeOpenAIOAuthLoopback.mu.Unlock()\n\t\t}\n\t}(server, listener)\n\n\treturn nil\n}\n\nfunc openCodeOpenAIOAuthLoopbackCallbackHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tsuccess, message := finalizeOpenAIOAuthCallback(\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"state\")),\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"code\")),\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"error\")),\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"error_description\")),\n\t)\n\twriteOpenAIOAuthCallbackHTML(w, success, message)\n}\n\nfunc openCodeOpenAIOAuthLoopbackCancelHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tstate := strings.TrimSpace(r.URL.Query().Get(\"state\"))\n\tif state != \"\" {\n\t\tsetOpenAIOAuthSessionFailed(state, \"Login was canceled.\")\n\t}\n\twriteOpenAIOAuthCallbackHTML(w, false, \"Login was canceled.\")\n}\n\nfunc writeOpenAIOAuthCallbackHTML(w http.ResponseWriter, success bool, message string) {\n\tw.Header().Set(\"Content-Type\", \"text/html; charset=utf-8\")\n\tstatusClass := \"error\"\n\ttitle := \"ChatGPT login failed\"\n\tif success {\n\t\tstatusClass = \"success\"\n\t\ttitle = \"ChatGPT connected\"\n\t}\n\n\tescapedTitle := html.EscapeString(title)\n\tescapedMessage := html.EscapeString(message)\n\tpage := fmt.Sprintf(`<!doctype html>\n<html>\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>%s</title>\n    <style>\n      body { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; background: #f7faf8; color: #24332b; padding: 28px; }\n      .card { max-width: 560px; margin: 24px auto; background: white; border: 1px solid #dbeae2; border-radius: 14px; padding: 20px; box-shadow: 0 8px 28px rgba(17, 35, 27, 0.08); }\n      .success { color: #16784a; }\n      .error { color: #b23a3a; }\n      p { line-height: 1.45; }\n      code { background: #f1f6f3; padding: 2px 6px; border-radius: 6px; }\n    </style>\n  </head>\n  <body>\n    <div class=\"card\">\n      <h2 class=\"%s\">%s</h2>\n      <p>%s</p>\n      <p>You can close this tab and return to Glowby OSS.</p>\n    </div>\n    <script>setTimeout(function(){ try { window.close(); } catch (_) {} }, 900);</script>\n  </body>\n</html>`, escapedTitle, statusClass, escapedTitle, escapedMessage)\n\t_, _ = io.WriteString(w, page)\n}\n\nfunc exchangeOpenAIOAuthCodeForCredential(code, codeVerifier, redirectURI string) (openCodeOpenAIOAuthCredential, error) {\n\tform := neturl.Values{}\n\tform.Set(\"grant_type\", \"authorization_code\")\n\tform.Set(\"code\", strings.TrimSpace(code))\n\tform.Set(\"redirect_uri\", strings.TrimSpace(redirectURI))\n\tform.Set(\"client_id\", openAIOAuthClientID())\n\tform.Set(\"code_verifier\", strings.TrimSpace(codeVerifier))\n\n\treq, err := http.NewRequest(http.MethodPost, openAIOAuthIssuer+\"/oauth/token\", strings.NewReader(form.Encode()))\n\tif err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded\")\n\n\tclient := &http.Client{Timeout: 45 * time.Second}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, err\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, _ := io.ReadAll(resp.Body)\n\tif resp.StatusCode < 200 || resp.StatusCode >= 300 {\n\t\tmessage := strings.TrimSpace(string(body))\n\t\tif len(message) > 500 {\n\t\t\tmessage = message[:500]\n\t\t}\n\t\treturn openCodeOpenAIOAuthCredential{}, fmt.Errorf(\"oauth token exchange failed (%d): %s\", resp.StatusCode, message)\n\t}\n\n\tvar decoded struct {\n\t\tAccessToken  string `json:\"access_token\"`\n\t\tRefreshToken string `json:\"refresh_token\"`\n\t\tExpiresIn    int    `json:\"expires_in\"`\n\t}\n\tif err := json.Unmarshal(body, &decoded); err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, fmt.Errorf(\"oauth token decode failed: %w\", err)\n\t}\n\n\taccess := strings.TrimSpace(decoded.AccessToken)\n\tif access == \"\" {\n\t\treturn openCodeOpenAIOAuthCredential{}, fmt.Errorf(\"oauth token exchange returned empty access token\")\n\t}\n\n\texpiresAtReference := 0.0\n\tif decoded.ExpiresIn > 0 {\n\t\texpiresAtReference = float64(time.Now().Add(time.Duration(decoded.ExpiresIn)*time.Second).Unix()) - 978307200\n\t}\n\n\treturn openCodeOpenAIOAuthCredential{\n\t\tAccessToken:               access,\n\t\tRefreshToken:              strings.TrimSpace(decoded.RefreshToken),\n\t\tExpiresAtReferenceSeconds: expiresAtReference,\n\t\tSource:                    \"oauth_callback\",\n\t}, nil\n}\n\n// isServerRunning checks if OpenCode server is accessible\nfunc isServerRunning(serverURL string) bool {\n\tctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)\n\tdefer cancel()\n\n\tclient := &http.Client{}\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", serverURL+\"/health\", nil)\n\tif err != nil {\n\t\treturn false\n\t}\n\tapplyOpenCodeServerAuthorization(req)\n\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn false\n\t}\n\tdefer resp.Body.Close()\n\n\treturn resp.StatusCode == http.StatusOK\n}\n\n// startOpenCodeServer attempts to start the OpenCode server with provided API keys.\n// When openAIAuthMode is \"codex-jwt\", the OpenAI key is a JWT token and should NOT be\n// passed as OPENAI_API_KEY; instead, auth will be synced via PUT /auth/openai after startup.\nfunc startOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, model, openAIAuthMode string) error {\n\topenAIAuthMode = normalizeOpenAIAuthMode(openAIAuthMode)\n\tuseOpenCodeConfigRuntime := openAIAuthMode == \"opencode-config\"\n\n\t// Check if opencode CLI is available\n\tif _, err := exec.LookPath(\"opencode\"); err != nil {\n\t\treturn fmt.Errorf(\"opencode CLI not found in PATH: %w\", err)\n\t}\n\n\tvar runtimePaths openCodeRuntimePaths\n\tif !useOpenCodeConfigRuntime {\n\t\tvar err error\n\t\truntimePaths, err = glowbomOpenCodeRuntimePaths()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := ensureOpenCodeRuntimeDirs(runtimePaths); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Set environment variables for model and API keys\n\tenv := os.Environ()\n\tif !useOpenCodeConfigRuntime {\n\t\tenv = setEnvValue(env, \"XDG_DATA_HOME\", runtimePaths.DataHome)\n\t\tenv = setEnvValue(env, \"XDG_STATE_HOME\", runtimePaths.StateHome)\n\t}\n\n\t// Only pass OPENAI_API_KEY for standard API key mode.\n\t// In codex-jwt mode, auth is synced via the OpenCode REST API after startup.\n\tif openAIKey != \"\" && openAIAuthMode != \"codex-jwt\" {\n\t\tenv = append(env, \"OPENAI_API_KEY=\"+openAIKey)\n\t}\n\tif anthropicKey != \"\" {\n\t\tenv = append(env, \"ANTHROPIC_API_KEY=\"+anthropicKey)\n\t}\n\tif geminiKey != \"\" {\n\t\tenv = append(env, \"GOOGLE_GENERATIVE_AI_API_KEY=\"+geminiKey)\n\t\tenv = append(env, \"GOOGLE_API_KEY=\"+geminiKey)\n\t}\n\tif fireworksKey != \"\" {\n\t\tenv = append(env, \"FIREWORKS_API_KEY=\"+fireworksKey)\n\t}\n\tif openRouterKey != \"\" {\n\t\tenv = append(env, \"OPENROUTER_API_KEY=\"+openRouterKey)\n\t}\n\tif openCodeZenKey != \"\" {\n\t\tenv = append(env, \"OPENCODE_API_KEY=\"+openCodeZenKey)\n\t}\n\tif xaiKey != \"\" {\n\t\tenv = append(env, \"XAI_API_KEY=\"+xaiKey)\n\t}\n\n\t// Set model\n\tmodelToUse := model\n\tif modelToUse != \"\" {\n\t\tenv = append(env, \"OPENCODE_MODEL=\"+modelToUse)\n\t} else {\n\t\tif useOpenCodeConfigRuntime {\n\t\t\t// Keep OpenCode's configured default model unchanged.\n\t\t\tmodelToUse = \"(opencode configured default)\"\n\t\t} else {\n\t\t\t// Default model based on available keys\n\t\t\tif anthropicKey != \"\" {\n\t\t\t\tmodelToUse = \"anthropic/claude-sonnet-4-6\"\n\t\t\t} else if openAIKey != \"\" {\n\t\t\t\tmodelToUse = \"openai/gpt-5.4\"\n\t\t\t} else if xaiKey != \"\" {\n\t\t\t\tmodelToUse = \"xai/grok-4-1-fast-non-reasoning\"\n\t\t\t} else if openCodeZenKey != \"\" {\n\t\t\t\tmodelToUse = \"opencode/kimi-k2.5-free\"\n\t\t\t} else {\n\t\t\t\tmodelToUse = \"anthropic/claude-sonnet-4-6\"\n\t\t\t}\n\t\t\tenv = append(env, \"OPENCODE_MODEL=\"+modelToUse)\n\t\t}\n\t}\n\n\tlog.Printf(\"[OPENCODE] Starting server with model: %s (authMode: %s)\", modelToUse, openAIAuthMode)\n\tif useOpenCodeConfigRuntime {\n\t\tlog.Printf(\"[OPENCODE] Runtime paths - using existing OpenCode runtime/config from environment\")\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Runtime paths - dataHome=%s stateHome=%s configHome=%s\", runtimePaths.DataHome, runtimePaths.StateHome, runtimePaths.ConfigHome)\n\t}\n\tlog.Printf(\"[OPENCODE] API keys provided - Anthropic: %t, OpenAI: %t, Gemini: %t, Fireworks: %t, OpenRouter: %t, OpenCodeZen: %t, xAI: %t\",\n\t\tanthropicKey != \"\", openAIKey != \"\", geminiKey != \"\", fireworksKey != \"\", openRouterKey != \"\", openCodeZenKey != \"\", xaiKey != \"\")\n\n\t// Start server in background with manageable logging by default.\n\t// Override via GLOWBOM_OPENCODE_LOG_LEVEL (e.g. DEBUG) when deeper diagnostics are needed.\n\topenCodeLogLevel := strings.ToUpper(strings.TrimSpace(os.Getenv(\"GLOWBOM_OPENCODE_LOG_LEVEL\")))\n\tif openCodeLogLevel == \"\" {\n\t\topenCodeLogLevel = \"WARN\"\n\t}\n\tcmd := exec.Command(\n\t\t\"opencode\",\n\t\t\"serve\",\n\t\t\"--port\", getAgentPort(),\n\t\t\"--hostname\", openCodeServerHostname(),\n\t\t\"--print-logs\",\n\t\t\"--log-level\", openCodeLogLevel,\n\t)\n\tcmd.Env = env\n\n\t// Create pipes to capture stdout and stderr\n\tstdoutPipe, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create stdout pipe: %w\", err)\n\t}\n\tstderrPipe, err := cmd.StderrPipe()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create stderr pipe: %w\", err)\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\treturn fmt.Errorf(\"failed to start opencode serve: %w\", err)\n\t}\n\n\tsetOpenCodeOpenAIAuthState(openAIAuthMode, openAIKey)\n\n\t// Log stdout in background\n\tgo func() {\n\t\tscanner := bufio.NewScanner(stdoutPipe)\n\t\tfor scanner.Scan() {\n\t\t\tline := scanner.Text()\n\t\t\trecordUsageLimitHintFromText(line)\n\t\t\tif shouldSuppressOpenCodeServerLogLine(line) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE-SERVER] %s\", line)\n\t\t}\n\t\tif err := scanner.Err(); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE-SERVER] stdout scanner error: %v\", err)\n\t\t}\n\t}()\n\n\t// Log stderr in background\n\tgo func() {\n\t\tscanner := bufio.NewScanner(stderrPipe)\n\t\tfor scanner.Scan() {\n\t\t\tline := scanner.Text()\n\t\t\trecordUsageLimitHintFromText(line)\n\t\t\tif shouldSuppressOpenCodeServerLogLine(line) || shouldSuppressOpenCodeServerStderrInfoLine(line) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE-SERVER-ERR] %s\", line)\n\t\t}\n\t\tif err := scanner.Err(); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE-SERVER-ERR] stderr scanner error: %v\", err)\n\t\t}\n\t}()\n\n\t// Wait for command completion in background\n\tgo func() {\n\t\tif err := cmd.Wait(); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Server process exited: %v\", err)\n\t\t}\n\t}()\n\n\treturn nil\n}\n\n// syncOpenAIAuth syncs ChatGPT OAuth credentials to the running OpenCode server\n// via PUT /auth/openai so OpenCode routes calls to chatgpt.com/backend-api/codex/responses\n// instead of api.openai.com/v1/responses.\nfunc syncOpenAIAuth(serverURL, accessToken, refreshToken string, expiresAt float64) error {\n\tif accessToken == \"\" {\n\t\treturn fmt.Errorf(\"no access token to sync\")\n\t}\n\n\t// Convert expiresAt from NSDate reference (2001-01-01) to Unix milliseconds\n\t// NSDate reference date is 978307200 seconds after Unix epoch\n\tvar expiresMs int64\n\tif expiresAt > 0 {\n\t\texpiresUnix := expiresAt + 978307200\n\t\texpiresMs = int64(expiresUnix * 1000)\n\t} else {\n\t\t// Default: 1 hour from now\n\t\texpiresMs = time.Now().Add(time.Hour).UnixMilli()\n\t}\n\n\t// If no refresh token, use a placeholder (OpenCode requires it)\n\tif refreshToken == \"\" {\n\t\trefreshToken = \"none\"\n\t}\n\n\tpayload := map[string]interface{}{\n\t\t\"type\":    \"oauth\",\n\t\t\"access\":  accessToken,\n\t\t\"refresh\": refreshToken,\n\t\t\"expires\": expiresMs,\n\t}\n\n\tbody, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to marshal auth payload: %w\", err)\n\t}\n\n\treq, err := http.NewRequest(http.MethodPut, serverURL+\"/auth/openai\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create auth sync request: %w\", err)\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\tapplyOpenCodeServerAuthorization(req)\n\n\tclient := &http.Client{Timeout: 10 * time.Second}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"auth sync request failed: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\trespBody, _ := io.ReadAll(resp.Body)\n\t\treturn fmt.Errorf(\"auth sync returned %d: %s\", resp.StatusCode, string(respBody))\n\t}\n\n\tlog.Printf(\"[OPENCODE] Successfully synced OpenAI OAuth credentials to OpenCode server\")\n\treturn nil\n}\n\nfunc clearOpenAIAuth(serverURL string) error {\n\treq, err := http.NewRequest(http.MethodDelete, serverURL+\"/auth/openai\", nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed creating OpenAI auth clear request: %w\", err)\n\t}\n\tapplyOpenCodeServerAuthorization(req)\n\n\tclient := &http.Client{Timeout: 10 * time.Second}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"OpenAI auth clear request failed: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\t// Treat not found as already cleared.\n\tif resp.StatusCode == http.StatusNotFound {\n\t\treturn nil\n\t}\n\tif resp.StatusCode >= 200 && resp.StatusCode < 300 {\n\t\treturn nil\n\t}\n\n\trespBody, _ := io.ReadAll(resp.Body)\n\treturn fmt.Errorf(\"OpenAI auth clear returned %d: %s\", resp.StatusCode, strings.TrimSpace(string(respBody)))\n}\n\nfunc applyOpenAIAuthModeToRunningServer(serverURL, openAIAuthMode, openAIKey, openAIRefreshToken string, openAIExpiresAt float64) error {\n\topenAIAuthMode = normalizeOpenAIAuthMode(openAIAuthMode)\n\n\tif openAIAuthMode == \"opencode-config\" {\n\t\tsetOpenCodeOpenAIAuthState(openAIAuthMode, \"\")\n\t\treturn nil\n\t}\n\n\tif openAIAuthMode == \"codex-jwt\" {\n\t\tif strings.TrimSpace(openAIKey) != \"\" {\n\t\t\tif err := syncOpenAIAuth(serverURL, openAIKey, openAIRefreshToken, openAIExpiresAt); err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to sync OpenAI oauth auth: %w\", err)\n\t\t\t}\n\t\t}\n\t\tsetOpenCodeOpenAIAuthState(openAIAuthMode, openAIKey)\n\t\treturn nil\n\t}\n\n\tif openAIAuthMode == \"api-key\" {\n\t\tif err := clearOpenAIAuth(serverURL); err != nil {\n\t\t\treturn fmt.Errorf(\"failed clearing OpenAI oauth auth: %w\", err)\n\t\t}\n\t\tsetOpenCodeOpenAIAuthState(openAIAuthMode, openAIKey)\n\t}\n\n\treturn nil\n}\n\nfunc waitForOpenCodeServerReady(serverURL string, timeout time.Duration) error {\n\tdeadline := time.Now().Add(timeout)\n\tfor {\n\t\tif isServerRunning(serverURL) {\n\t\t\treturn nil\n\t\t}\n\t\tif time.Now().After(deadline) {\n\t\t\treturn fmt.Errorf(\"OpenCode server did not become healthy within %s\", timeout)\n\t\t}\n\t\ttime.Sleep(200 * time.Millisecond)\n\t}\n}\n\nfunc stopOpenCodeServerOnPort(port string) error {\n\tout, err := exec.Command(\"lsof\", \"-nP\", \"-iTCP:\"+port, \"-sTCP:LISTEN\", \"-t\").CombinedOutput()\n\tif err != nil {\n\t\t// lsof exits with status 1 when no process is listening on the port.\n\t\tif exitErr, ok := err.(*exec.ExitError); ok && exitErr.ExitCode() == 1 {\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"failed to discover process on port %s: %w\", port, err)\n\t}\n\n\tpidStrings := strings.Fields(string(out))\n\tif len(pidStrings) == 0 {\n\t\treturn nil\n\t}\n\n\tvar stopErrs []string\n\tfor _, pidStr := range pidStrings {\n\t\tpid, convErr := strconv.Atoi(strings.TrimSpace(pidStr))\n\t\tif convErr != nil {\n\t\t\tstopErrs = append(stopErrs, fmt.Sprintf(\"invalid pid %q\", pidStr))\n\t\t\tcontinue\n\t\t}\n\n\t\tproc, findErr := os.FindProcess(pid)\n\t\tif findErr != nil {\n\t\t\tstopErrs = append(stopErrs, fmt.Sprintf(\"pid %d lookup failed: %v\", pid, findErr))\n\t\t\tcontinue\n\t\t}\n\n\t\tif killErr := proc.Kill(); killErr != nil {\n\t\t\tstopErrs = append(stopErrs, fmt.Sprintf(\"pid %d kill failed: %v\", pid, killErr))\n\t\t\tcontinue\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] Stopped existing server process on port %s (pid=%d)\", port, pid)\n\t}\n\n\tif len(stopErrs) > 0 {\n\t\treturn fmt.Errorf(\"%s\", strings.Join(stopErrs, \"; \"))\n\t}\n\treturn nil\n}\n\nfunc restartOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, model, openAIAuthMode string) error {\n\tport := getAgentPort()\n\tserverURL := \"http://\" + openCodeServerHostname() + \":\" + port\n\n\tif err := stopOpenCodeServerOnPort(port); err != nil {\n\t\treturn fmt.Errorf(\"failed to stop existing OpenCode server: %w\", err)\n\t}\n\n\ttime.Sleep(250 * time.Millisecond)\n\n\tif err := startOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, model, openAIAuthMode); err != nil {\n\t\treturn fmt.Errorf(\"failed to restart OpenCode server: %w\", err)\n\t}\n\n\tif err := waitForOpenCodeServerReady(serverURL, 12*time.Second); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc shouldAttemptOpenCodeRestartForProvider(providerID, openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey string) bool {\n\tswitch providerID {\n\tcase \"openai\":\n\t\treturn strings.TrimSpace(openAIKey) != \"\"\n\tcase \"anthropic\":\n\t\treturn strings.TrimSpace(anthropicKey) != \"\"\n\tcase \"google\":\n\t\treturn strings.TrimSpace(geminiKey) != \"\"\n\tcase \"fireworks\", \"fireworks-ai\":\n\t\treturn strings.TrimSpace(fireworksKey) != \"\"\n\tcase \"openrouter\":\n\t\treturn strings.TrimSpace(openRouterKey) != \"\"\n\tcase \"opencode\":\n\t\treturn strings.TrimSpace(openCodeZenKey) != \"\"\n\tcase \"xai\":\n\t\treturn strings.TrimSpace(xaiKey) != \"\"\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc normalizeOpenCodeProviderID(providerID string) string {\n\tswitch strings.ToLower(strings.TrimSpace(providerID)) {\n\tcase \"fireworks\":\n\t\treturn \"fireworks-ai\"\n\tdefault:\n\t\treturn providerID\n\t}\n}\n\nfunc isStrictModelPreflightProvider(providerID string) bool {\n\tswitch strings.ToLower(strings.TrimSpace(providerID)) {\n\tcase \"openai\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc ensureOpenCodeModelAvailable(projectPath, providerID, modelID string) error {\n\tif strings.TrimSpace(providerID) == \"\" || strings.TrimSpace(modelID) == \"\" {\n\t\treturn nil\n\t}\n\tproviderID = normalizeOpenCodeProviderID(providerID)\n\n\tdriver := GetOpenCodeDriver()\n\tctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\n\tparams := opencode.AppProvidersParams{}\n\tif dir := strings.TrimSpace(projectPath); dir != \"\" {\n\t\tparams.Directory = opencode.F(dir)\n\t}\n\n\tprovidersResp, err := driver.client.App.Providers(ctx, params)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to fetch OpenCode providers: %w\", err)\n\t}\n\n\tvar selectedProvider *opencode.Provider\n\tfor i := range providersResp.Providers {\n\t\tp := &providersResp.Providers[i]\n\t\tif strings.EqualFold(p.ID, providerID) {\n\t\t\tselectedProvider = p\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif selectedProvider == nil {\n\t\treturn fmt.Errorf(\"provider %q is not available on the running OpenCode server\", providerID)\n\t}\n\n\tif _, ok := selectedProvider.Models[modelID]; ok {\n\t\treturn nil\n\t}\n\n\tmodelIDs := make([]string, 0, len(selectedProvider.Models))\n\tfor id := range selectedProvider.Models {\n\t\tmodelIDs = append(modelIDs, id)\n\t}\n\tsort.Strings(modelIDs)\n\n\tif len(modelIDs) == 0 {\n\t\treturn fmt.Errorf(\"provider %q is available but returned no models\", providerID)\n\t}\n\n\tpreview := modelIDs\n\tif len(preview) > 6 {\n\t\tpreview = preview[:6]\n\t}\n\n\tif strings.EqualFold(providerID, \"openai\") && isOpenAICodexForwardCompatModelID(modelID) {\n\t\tif _, ok := selectedProvider.Models[\"gpt-5.2-codex\"]; ok {\n\t\t\tlog.Printf(\"[OPENCODE] Model %q not present in provider %q registry; allowing forward-compat via template gpt-5.2-codex\", modelID, providerID)\n\t\t\treturn nil\n\t\t}\n\t\tif _, ok := selectedProvider.Models[\"gpt-5.3-codex\"]; ok {\n\t\t\tlog.Printf(\"[OPENCODE] Model %q not present in provider %q registry; allowing forward-compat via template gpt-5.3-codex\", modelID, providerID)\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif !isStrictModelPreflightProvider(providerID) {\n\t\tlog.Printf(\"[OPENCODE] Model %q not present in provider %q registry; proceeding without strict block (sample available: %s)\", modelID, providerID, strings.Join(preview, \", \"))\n\t\treturn nil\n\t}\n\n\treturn fmt.Errorf(\"model %q is not available for provider %q (available: %s)\", modelID, providerID, strings.Join(preview, \", \"))\n}\n\ntype openCodeProviderModelProbe struct {\n\tProviderFound       bool\n\tModelRegistered     bool\n\tProviderModelIDs    []string\n\tProviderModelSample []string\n}\n\nfunc probeOpenCodeProviderModel(projectPath, providerID, modelID string) (openCodeProviderModelProbe, error) {\n\tresult := openCodeProviderModelProbe{}\n\tif strings.TrimSpace(providerID) == \"\" || strings.TrimSpace(modelID) == \"\" {\n\t\treturn result, nil\n\t}\n\n\tproviderID = normalizeOpenCodeProviderID(providerID)\n\tdriver := GetOpenCodeDriver()\n\tctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n\tdefer cancel()\n\n\tparams := opencode.AppProvidersParams{}\n\tif dir := strings.TrimSpace(projectPath); dir != \"\" {\n\t\tparams.Directory = opencode.F(dir)\n\t}\n\n\tprovidersResp, err := driver.client.App.Providers(ctx, params)\n\tif err != nil {\n\t\treturn result, err\n\t}\n\n\tvar selectedProvider *opencode.Provider\n\tfor i := range providersResp.Providers {\n\t\tp := &providersResp.Providers[i]\n\t\tif strings.EqualFold(p.ID, providerID) {\n\t\t\tselectedProvider = p\n\t\t\tbreak\n\t\t}\n\t}\n\tif selectedProvider == nil {\n\t\treturn result, nil\n\t}\n\n\tresult.ProviderFound = true\n\tmodelIDs := make([]string, 0, len(selectedProvider.Models))\n\tfor id := range selectedProvider.Models {\n\t\tmodelIDs = append(modelIDs, id)\n\t}\n\tsort.Strings(modelIDs)\n\tresult.ProviderModelIDs = modelIDs\n\n\tif len(modelIDs) > 12 {\n\t\tresult.ProviderModelSample = modelIDs[:12]\n\t} else {\n\t\tresult.ProviderModelSample = modelIDs\n\t}\n\n\t_, result.ModelRegistered = selectedProvider.Models[modelID]\n\treturn result, nil\n}\n\nfunc openCodeZenAgentModelFallbackCandidates(modelID string) []string {\n\tnormalized := normalizeOpenCodeZenModelID(modelID)\n\tcandidates := []string{normalized}\n\n\tswitch normalized {\n\tcase \"minimax-m2.5-free\":\n\t\tcandidates = append(candidates, \"kimi-k2.5-free\", \"glm-5-free\", \"big-pickle\")\n\tcase \"glm-5-free\":\n\t\tcandidates = append(candidates, \"kimi-k2.5-free\", \"big-pickle\")\n\tcase \"big-pickle\":\n\t\tcandidates = append(candidates, \"kimi-k2.5-free\", \"glm-5-free\")\n\tcase \"kimi-k2.5-free\":\n\t\tcandidates = append(candidates, \"glm-5-free\", \"big-pickle\")\n\tdefault:\n\t\tcandidates = append(candidates, \"kimi-k2.5-free\", \"glm-5-free\", \"big-pickle\")\n\t}\n\n\tseen := make(map[string]struct{}, len(candidates))\n\tout := make([]string, 0, len(candidates))\n\tfor _, candidate := range candidates {\n\t\tcandidate = strings.TrimSpace(candidate)\n\t\tif candidate == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, exists := seen[candidate]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tseen[candidate] = struct{}{}\n\t\tout = append(out, candidate)\n\t}\n\treturn out\n}\n\nfunc ollamaAgentModelFallbackCandidates(modelID string) []string {\n\ttrimmed := strings.TrimSpace(strings.ToLower(modelID))\n\ttrimmed = strings.TrimPrefix(trimmed, \"ollama/\")\n\tif trimmed == \"\" {\n\t\treturn nil\n\t}\n\n\tcandidates := []string{}\n\tswitch trimmed {\n\tcase \"qwen3.5\", \"qwen-3.5\", \"qwen3.5:latest\", \"qwen-3.5:latest\":\n\t\tcandidates = append(candidates,\n\t\t\t\"qwen3.5\",\n\t\t\t\"qwen3.5:latest\",\n\t\t\t\"qwen-3.5\",\n\t\t\t\"qwen-3.5:latest\",\n\t\t)\n\tcase \"gpt-oss\", \"gpt-oss:20b\", \"gpt-oss:20b:latest\":\n\t\tcandidates = append(candidates,\n\t\t\t\"gpt-oss:20b\",\n\t\t\t\"gpt-oss:20b:latest\",\n\t\t\t\"gpt-oss\",\n\t\t\t\"gpt-oss:latest\",\n\t\t)\n\tcase \"qwen3-coder\", \"qwen3-coder:30b\", \"qwen3-coder:30b:latest\":\n\t\tcandidates = append(candidates,\n\t\t\t\"qwen3-coder:30b\",\n\t\t\t\"qwen3-coder:30b:latest\",\n\t\t\t\"qwen3-coder\",\n\t\t)\n\tdefault:\n\t\tcandidates = append(candidates, trimmed)\n\t\tif strings.HasSuffix(trimmed, \":latest\") {\n\t\t\tbase := strings.TrimSuffix(trimmed, \":latest\")\n\t\t\tif base != \"\" {\n\t\t\t\tcandidates = append(candidates, base)\n\t\t\t}\n\t\t} else {\n\t\t\tcandidates = append(candidates, trimmed+\":latest\")\n\t\t}\n\t}\n\n\tseen := make(map[string]struct{}, len(candidates))\n\tout := make([]string, 0, len(candidates))\n\tfor _, candidate := range candidates {\n\t\tcandidate = strings.TrimSpace(candidate)\n\t\tif candidate == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, exists := seen[candidate]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tseen[candidate] = struct{}{}\n\t\tout = append(out, candidate)\n\t}\n\treturn out\n}\n\nfunc resolveSessionModelForRequest(projectPath, requestedModel string) (modelID, providerID string, fallbackNote string) {\n\tmodelID, providerID = parseModel(requestedModel)\n\n\ttrimmedRequested := strings.TrimSpace(requestedModel)\n\trequestedModelID := trimmedRequested\n\tif slash := strings.Index(trimmedRequested, \"/\"); slash > 0 && slash+1 < len(trimmedRequested) {\n\t\trequestedProvider := strings.TrimSpace(trimmedRequested[:slash])\n\t\tif strings.EqualFold(requestedProvider, providerID) {\n\t\t\trequestedModelID = strings.TrimSpace(trimmedRequested[slash+1:])\n\t\t}\n\t}\n\n\tif strings.EqualFold(providerID, \"opencode\") {\n\t\tprobe, probeErr := probeOpenCodeProviderModel(projectPath, providerID, modelID)\n\t\tif probeErr != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed probing provider registry for %s/%s: %v\", providerID, modelID, probeErr)\n\t\t\treturn modelID, providerID, \"\"\n\t\t}\n\t\tif !probe.ProviderFound || probe.ModelRegistered {\n\t\t\treturn modelID, providerID, \"\"\n\t\t}\n\n\t\tavailable := make(map[string]struct{}, len(probe.ProviderModelIDs))\n\t\tfor _, id := range probe.ProviderModelIDs {\n\t\t\tavailable[strings.TrimSpace(strings.ToLower(id))] = struct{}{}\n\t\t}\n\n\t\tfor _, candidate := range openCodeZenAgentModelFallbackCandidates(modelID) {\n\t\t\tif _, ok := available[strings.ToLower(candidate)]; !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif strings.EqualFold(candidate, modelID) {\n\t\t\t\treturn modelID, providerID, \"\"\n\t\t\t}\n\t\t\tfallbackNote = fmt.Sprintf(\"OpenCode model %s/%s is unavailable on this server build; using %s/%s instead.\", providerID, modelID, providerID, candidate)\n\t\t\tlog.Printf(\"[OPENCODE] %s Available sample: %s\", fallbackNote, strings.Join(probe.ProviderModelSample, \", \"))\n\t\t\treturn candidate, providerID, fallbackNote\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] No compatible OpenCode Zen fallback found for requested model %s/%s. Available sample: %s\", providerID, modelID, strings.Join(probe.ProviderModelSample, \", \"))\n\t\treturn modelID, providerID, \"\"\n\t}\n\n\tif strings.EqualFold(providerID, \"ollama\") {\n\t\tprobe, probeErr := probeOpenCodeProviderModel(projectPath, providerID, modelID)\n\t\tif probeErr != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed probing provider registry for %s/%s: %v\", providerID, modelID, probeErr)\n\t\t\treturn modelID, providerID, \"\"\n\t\t}\n\t\tif !probe.ProviderFound || probe.ModelRegistered {\n\t\t\treturn modelID, providerID, \"\"\n\t\t}\n\n\t\tavailableByLower := make(map[string]string, len(probe.ProviderModelIDs))\n\t\tfor _, id := range probe.ProviderModelIDs {\n\t\t\tavailableByLower[strings.TrimSpace(strings.ToLower(id))] = id\n\t\t}\n\n\t\tfor _, candidate := range ollamaAgentModelFallbackCandidates(modelID) {\n\t\t\tactualID, ok := availableByLower[strings.ToLower(candidate)]\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif strings.EqualFold(actualID, modelID) {\n\t\t\t\treturn actualID, providerID, \"\"\n\t\t\t}\n\t\t\tfallbackNote = fmt.Sprintf(\"OpenCode model %s/%s is unavailable on this server build; using %s/%s instead.\", providerID, modelID, providerID, actualID)\n\t\t\tlog.Printf(\"[OPENCODE] %s Available sample: %s\", fallbackNote, strings.Join(probe.ProviderModelSample, \", \"))\n\t\t\treturn actualID, providerID, fallbackNote\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] No compatible Ollama fallback found for requested model %s/%s. Available sample: %s\", providerID, modelID, strings.Join(probe.ProviderModelSample, \", \"))\n\t\treturn modelID, providerID, \"\"\n\t}\n\n\tif strings.EqualFold(providerID, \"xai\") &&\n\t\tstrings.Contains(trimmedRequested, \"/\") &&\n\t\trequestedModelID != \"\" &&\n\t\t!strings.EqualFold(requestedModelID, modelID) {\n\t\tfallbackNote = fmt.Sprintf(\"OpenCode xAI provider does not expose %s yet; using xai/%s instead.\", requestedModelID, modelID)\n\t}\n\treturn modelID, providerID, fallbackNote\n}\n\nfunc ensureOpenCodeServerReady(projectPath, model, openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, openAIAuthMode, openAIRefreshToken string, openAIExpiresAt float64) error {\n\topenCodeServerPrepMu.Lock()\n\tdefer openCodeServerPrepMu.Unlock()\n\n\tserverURL := \"http://\" + openCodeServerHostname() + \":\" + getAgentPort()\n\topenAIAuthMode = normalizeOpenAIAuthMode(openAIAuthMode)\n\tif openAIAuthMode == \"codex-jwt\" && strings.TrimSpace(openAIKey) == \"\" {\n\t\tresolved, err := resolveOpenAIOAuthCredentialForConnect(OpenCodeAuthConnectRequest{\n\t\t\tOpenAIKey:          openAIKey,\n\t\t\tOpenAIRefreshToken: openAIRefreshToken,\n\t\t\tOpenAIExpiresAt:    openAIExpiresAt,\n\t\t})\n\t\tif err == nil {\n\t\t\topenAIKey = resolved.AccessToken\n\t\t\tif strings.TrimSpace(openAIRefreshToken) == \"\" {\n\t\t\t\topenAIRefreshToken = resolved.RefreshToken\n\t\t\t}\n\t\t\tif openAIExpiresAt <= 0 {\n\t\t\t\topenAIExpiresAt = resolved.ExpiresAtReferenceSeconds\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE] Reusing ChatGPT OAuth credential from %s for codex-jwt mode\", resolved.Source)\n\t\t}\n\t}\n\tmodelForServer := strings.TrimSpace(model)\n\tif modelForServer != \"\" {\n\t\tnormalizedModelID, normalizedProviderID := parseModel(modelForServer)\n\t\tif strings.TrimSpace(normalizedModelID) != \"\" && strings.TrimSpace(normalizedProviderID) != \"\" {\n\t\t\tmodelForServer = normalizedProviderID + \"/\" + normalizedModelID\n\t\t}\n\t}\n\n\tserverWasAlreadyRunning := isServerRunning(serverURL)\n\tif serverWasAlreadyRunning {\n\t\tif !getOpenCodeOpenAIAuthState().known {\n\t\t\tif openAIAuthMode == \"opencode-config\" {\n\t\t\t\tlog.Printf(\"[OPENCODE] Running server detected with unknown auth/runtime state; preserving server in opencode-config mode\")\n\t\t\t\tsetOpenCodeOpenAIAuthState(openAIAuthMode, \"\")\n\t\t\t} else {\n\t\t\t\tlog.Printf(\"[OPENCODE] Running server detected with unknown auth/runtime state; restarting under Glowbom-managed runtime\")\n\t\t\t\tif restartErr := restartOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, modelForServer, openAIAuthMode); restartErr != nil {\n\t\t\t\t\treturn fmt.Errorf(\"failed restarting inherited OpenCode server: %w\", restartErr)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Server not running, starting with provided keys...\")\n\t\tif err := startOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, modelForServer, openAIAuthMode); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to start OpenCode server: %w\", err)\n\t\t}\n\t\tif err := waitForOpenCodeServerReady(serverURL, 12*time.Second); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif shouldRestartForOpenAIAuthChange(serverWasAlreadyRunning, openAIAuthMode, openAIKey) {\n\t\tlog.Printf(\"[OPENCODE] Restarting server to apply OpenAI auth transition (mode=%s)\", openAIAuthMode)\n\t\tif restartErr := restartOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, modelForServer, openAIAuthMode); restartErr != nil {\n\t\t\treturn fmt.Errorf(\"failed to restart OpenCode server for OpenAI auth transition: %w\", restartErr)\n\t\t}\n\t}\n\n\tif err := applyOpenAIAuthModeToRunningServer(serverURL, openAIAuthMode, openAIKey, openAIRefreshToken, openAIExpiresAt); err != nil {\n\t\treturn err\n\t}\n\n\trequestedModel := strings.TrimSpace(modelForServer)\n\tif requestedModel == \"\" {\n\t\treturn nil\n\t}\n\n\tmodelID, providerID := parseModel(requestedModel)\n\tif err := ensureOpenCodeModelAvailable(projectPath, providerID, modelID); err == nil {\n\t\treturn nil\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Model availability preflight failed for %s/%s: %v\", providerID, modelID, err)\n\t\tif !shouldAttemptOpenCodeRestartForProvider(providerID, openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey) {\n\t\t\treturn err\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] Attempting OpenCode server restart to refresh credentials for provider=%s\", providerID)\n\t\tif restartErr := restartOpenCodeServer(openAIKey, anthropicKey, geminiKey, fireworksKey, openRouterKey, openCodeZenKey, xaiKey, modelForServer, openAIAuthMode); restartErr != nil {\n\t\t\treturn fmt.Errorf(\"OpenCode restart failed while preparing %s/%s: %w\", providerID, modelID, restartErr)\n\t\t}\n\n\t\tif err := applyOpenAIAuthModeToRunningServer(serverURL, openAIAuthMode, openAIKey, openAIRefreshToken, openAIExpiresAt); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif finalErr := ensureOpenCodeModelAvailable(projectPath, providerID, modelID); finalErr != nil {\n\t\t\treturn fmt.Errorf(\"requested model %s/%s is unavailable after restart: %w\", providerID, modelID, finalErr)\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] Model availability preflight succeeded after restart for %s/%s\", providerID, modelID)\n\t}\n\n\treturn nil\n}\n\n// NewOpenCodeDriver creates a new OpenCode driver instance\n// Checks OPENCODE_URL env var, then falls back to default http://127.0.0.1:<GLOWBOM_AGENT_PORT>\n// Note: Server auto-start is now handled per-request with API keys\nfunc NewOpenCodeDriver(serverURL string) *OpenCodeDriver {\n\tif serverURL == \"\" {\n\t\tserverURL = os.Getenv(\"OPENCODE_URL\")\n\t}\n\tif serverURL == \"\" {\n\t\tserverURL = \"http://\" + openCodeServerHostname() + \":\" + getAgentPort()\n\t}\n\n\tlog.Printf(\"[OPENCODE] Connecting to server at %s\", serverURL)\n\n\tclientOptions := []option.RequestOption{\n\t\toption.WithBaseURL(serverURL),\n\t}\n\tif header := openCodeServerAuthorizationHeader(); header != \"\" {\n\t\tclientOptions = append(clientOptions, option.WithHeader(\"Authorization\", header))\n\t}\n\tclient := opencode.NewClient(clientOptions...)\n\n\treturn &OpenCodeDriver{\n\t\tclient:              client,\n\t\tserverURL:           serverURL,\n\t\tquestionReplyPath:   \"/question/{requestID}/reply\",\n\t\tpermissionReplyPath: \"/permission/{requestID}/reply\",\n\t\trepliedQuestions:    make(map[string]time.Time),\n\t}\n}\n\n// ============================================================\n// Project Management\n// ============================================================\n\n// GetProjectPaths returns standard paths for a project root\nfunc GetProjectPaths(projectRoot string) ProjectPaths {\n\treturn ProjectPaths{\n\t\tRoot:      projectRoot,\n\t\tPrototype: filepath.Join(projectRoot, \"prototype\"),\n\t\tAssets:    filepath.Join(projectRoot, \"prototype\", \"assets\"),\n\t\tiOS:       filepath.Join(projectRoot, \"ios\"),\n\t\tAndroid:   filepath.Join(projectRoot, \"android\"),\n\t\tWeb:       filepath.Join(projectRoot, \"web\"),\n\t\tGodot:     filepath.Join(projectRoot, \"godot\"),\n\t\tManifest:  filepath.Join(projectRoot, \"glowbom.json\"),\n\t}\n}\n\n// InitProject creates a new Glowbom project structure\nfunc InitProject(projectRoot, name string) (*GlowbomProject, error) {\n\tpaths := GetProjectPaths(projectRoot)\n\n\t// Create directory structure\n\tdirs := []string{\n\t\tpaths.Root,\n\t\tpaths.Prototype,\n\t\tpaths.Assets,\n\t}\n\tfor _, dir := range dirs {\n\t\tif err := os.MkdirAll(dir, 0755); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to create directory %s: %w\", dir, err)\n\t\t}\n\t}\n\n\t// Create project manifest\n\tnow := time.Now().UTC().Format(time.RFC3339)\n\tproject := &GlowbomProject{\n\t\tName:    name,\n\t\tVersion: \"1.0.0\",\n\t\tTargets: map[string]Target{\n\t\t\t\"ios\":     {Enabled: true, OutputDir: \"ios\", Stack: \"swiftui\"},\n\t\t\t\"android\": {Enabled: true, OutputDir: \"android\", Stack: \"kotlin\"},\n\t\t\t\"web\":     {Enabled: true, OutputDir: \"web\", Stack: \"nextjs\"},\n\t\t\t\"godot\":   {Enabled: false, OutputDir: \"godot\", Stack: \"godot\"},\n\t\t},\n\t\tCreatedAt: now,\n\t\tUpdatedAt: now,\n\t}\n\n\t// Write manifest\n\tif err := SaveProject(paths.Manifest, project); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfmt.Printf(\"[PROJECT] Initialized project '%s' at %s\\n\", name, projectRoot)\n\treturn project, nil\n}\n\n// LoadProject loads a project from its manifest\nfunc LoadProject(manifestPath string) (*GlowbomProject, error) {\n\tdata, err := os.ReadFile(manifestPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read manifest: %w\", err)\n\t}\n\n\tvar project GlowbomProject\n\tif err := json.Unmarshal(data, &project); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse manifest: %w\", err)\n\t}\n\n\treturn &project, nil\n}\n\n// SaveProject saves a project manifest\nfunc SaveProject(manifestPath string, project *GlowbomProject) error {\n\tproject.UpdatedAt = time.Now().UTC().Format(time.RFC3339)\n\n\tdata, err := json.MarshalIndent(project, \"\", \"  \")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to serialize manifest: %w\", err)\n\t}\n\n\tif err := os.WriteFile(manifestPath, data, 0644); err != nil {\n\t\treturn fmt.Errorf(\"failed to write manifest: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// SavePrototype saves HTML and assets to the project's prototype directory\nfunc SavePrototype(projectRoot, html string, assets map[string][]byte) error {\n\tpaths := GetProjectPaths(projectRoot)\n\n\t// Ensure directories exist\n\tif err := os.MkdirAll(paths.Prototype, 0755); err != nil {\n\t\treturn err\n\t}\n\tif err := os.MkdirAll(paths.Assets, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// Write HTML\n\thtmlPath := filepath.Join(paths.Prototype, \"index.html\")\n\tif err := os.WriteFile(htmlPath, []byte(html), 0644); err != nil {\n\t\treturn fmt.Errorf(\"failed to write prototype HTML: %w\", err)\n\t}\n\n\t// Write assets\n\tfor name, data := range assets {\n\t\tassetPath := filepath.Join(paths.Assets, name)\n\t\tif err := os.WriteFile(assetPath, data, 0644); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to write asset %s: %w\", name, err)\n\t\t}\n\t}\n\n\tfmt.Printf(\"[PROJECT] Saved prototype with %d assets\\n\", len(assets))\n\treturn nil\n}\n\n// LoadPrototype loads the prototype HTML from a project\nfunc LoadPrototype(projectRoot string) (string, error) {\n\tpaths := GetProjectPaths(projectRoot)\n\thtmlPath := filepath.Join(paths.Prototype, \"index.html\")\n\n\tdata, err := os.ReadFile(htmlPath)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to read prototype: %w\", err)\n\t}\n\n\treturn string(data), nil\n}\n\n// GetTargetDir returns the output directory for a target language\nfunc GetTargetDir(projectRoot, targetLang string) string {\n\tpaths := GetProjectPaths(projectRoot)\n\tswitch targetLang {\n\tcase \"swiftui\", \"ios\":\n\t\treturn paths.iOS\n\tcase \"kotlin\", \"android\":\n\t\treturn paths.Android\n\tcase \"nextjs\", \"web\":\n\t\treturn paths.Web\n\tcase \"godot\", \"games\":\n\t\treturn paths.Godot\n\tcase \"ipados\", \"macos\", \"visionos\", \"watchos\", \"tvos\", \"wearos\", \"androidtv\", \"androidauto\", \"windows\", \"linux\", \"server\":\n\t\treturn filepath.Join(projectRoot, targetLang)\n\tdefault:\n\t\treturn filepath.Join(projectRoot, targetLang)\n\t}\n}\n\n// ============================================================\n// Translation\n// ============================================================\n\n// TranslateToProduction translates HTML prototype to production code\nfunc (d *OpenCodeDriver) TranslateToProduction(ctx context.Context, req OpenCodeTranslateRequest) (*OpenCodeTranslateResponse, error) {\n\tlog.Printf(\"[OPENCODE] Starting translation to %s\", req.TargetLang)\n\tvar projectRoot, sourceHTML, targetDir string\n\n\t// Determine source and target based on request type\n\tif req.ProjectPath != \"\" {\n\t\t// Project-based mode: read from project structure\n\t\tprojectRoot = req.ProjectPath\n\t\tpaths := GetProjectPaths(projectRoot)\n\n\t\t// Verify project exists\n\t\tif _, err := os.Stat(paths.Manifest); os.IsNotExist(err) {\n\t\t\tlog.Printf(\"[OPENCODE] Error: Not a Glowbom project: %s (missing glowbom.json)\", projectRoot)\n\t\t\treturn nil, fmt.Errorf(\"not a Glowbom project: %s (missing glowbom.json)\", projectRoot)\n\t\t}\n\n\t\t// Load prototype HTML\n\t\thtml, err := LoadPrototype(projectRoot)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Error: Failed to load prototype from %s: %v\", paths.Prototype, err)\n\t\t\treturn nil, fmt.Errorf(\"failed to load prototype: %w\", err)\n\t\t}\n\t\tsourceHTML = html\n\t\tif req.TargetDir != \"\" {\n\t\t\ttargetDir = filepath.Join(projectRoot, req.TargetDir)\n\t\t} else if project, err := LoadProject(paths.Manifest); err == nil {\n\t\t\ttargetKey := req.TargetID\n\t\t\tif targetKey == \"\" {\n\t\t\t\ttargetKey = req.TargetLang\n\t\t\t}\n\t\t\tif target, ok := project.Targets[targetKey]; ok && target.OutputDir != \"\" {\n\t\t\t\ttargetDir = filepath.Join(projectRoot, target.OutputDir)\n\t\t\t} else {\n\t\t\t\tfor _, target := range project.Targets {\n\t\t\t\t\tif target.Stack == req.TargetLang && target.OutputDir != \"\" {\n\t\t\t\t\t\ttargetDir = filepath.Join(projectRoot, target.OutputDir)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif targetDir == \"\" {\n\t\t\ttargetDir = GetTargetDir(projectRoot, req.TargetLang)\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] Project mode: Loading from %s, translating to %s\", paths.Prototype, targetDir)\n\t} else {\n\t\t// Legacy mode: direct HTML input\n\t\tif req.SourceHTML == \"\" {\n\t\t\tlog.Printf(\"[OPENCODE] Error: Neither projectPath nor sourceHtml provided\")\n\t\t\treturn nil, fmt.Errorf(\"either projectPath or sourceHtml is required\")\n\t\t}\n\t\tsourceHTML = req.SourceHTML\n\n\t\t// Use provided dir or create temp\n\t\tif req.ProjectDir != \"\" {\n\t\t\tprojectRoot = req.ProjectDir\n\t\t\ttargetDir = req.ProjectDir\n\t\t} else {\n\t\t\ttmpDir, err := os.MkdirTemp(\"\", \"glowbom-translate-*\")\n\t\t\tif err != nil {\n\t\t\t\tlog.Printf(\"[OPENCODE] Error: Failed to create temp directory: %v\", err)\n\t\t\t\treturn nil, fmt.Errorf(\"failed to create temp directory: %w\", err)\n\t\t\t}\n\t\t\tprojectRoot = tmpDir\n\t\t\ttargetDir = tmpDir\n\t\t}\n\n\t\t// Write source HTML for agent reference\n\t\tif err := os.MkdirAll(projectRoot, 0755); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Error: Failed to create directory %s: %v\", projectRoot, err)\n\t\t\treturn nil, fmt.Errorf(\"failed to create directory: %w\", err)\n\t\t}\n\t\thtmlPath := filepath.Join(projectRoot, \"prototype.html\")\n\t\tif err := os.WriteFile(htmlPath, []byte(sourceHTML), 0644); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Error: Failed to write prototype HTML: %v\", err)\n\t\t\treturn nil, fmt.Errorf(\"failed to write prototype HTML: %w\", err)\n\t\t}\n\n\t\tlog.Printf(\"[OPENCODE] Legacy mode: Translating to %s\", targetDir)\n\t}\n\n\t// Ensure target directory exists\n\tif err := os.MkdirAll(targetDir, 0755); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Failed to create target directory %s: %v\", targetDir, err)\n\t\treturn nil, fmt.Errorf(\"failed to create target directory: %w\", err)\n\t}\n\n\tlog.Printf(\"[OPENCODE] Creating new session for translation task\")\n\n\t// Create a new session for this translation task\n\tsession, err := d.client.Session.New(ctx, opencode.SessionNewParams{\n\t\tTitle:     opencode.F(fmt.Sprintf(\"Translate to %s\", req.TargetLang)),\n\t\tDirectory: opencode.F(projectRoot),\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Failed to create session: %v\", err)\n\t\treturn nil, fmt.Errorf(\"failed to create session: %w\", err)\n\t}\n\n\tlog.Printf(\"[OPENCODE] Session created: %s\", session.ID)\n\n\t// Build the translation prompt with project context\n\tprompt := buildProjectTranslationPrompt(sourceHTML, req.TargetLang, projectRoot, targetDir)\n\tlog.Printf(\"[OPENCODE] Built translation prompt (%d chars)\", len(prompt))\n\n\t// Determine model to use\n\tmodelID, providerID, fallbackNote := resolveSessionModelForRequest(projectRoot, req.Model)\n\tlog.Printf(\"[OPENCODE] Requested model: %s, resolved to: %s/%s\", req.Model, providerID, modelID)\n\tif fallbackNote != \"\" {\n\t\tlog.Printf(\"[OPENCODE] %s\", fallbackNote)\n\t}\n\n\t// Send the translation prompt to the agent\n\tlog.Printf(\"[OPENCODE] Sending prompt to agent\")\n\tresponse, err := d.sendSessionPrompt(ctx, session.ID, opencode.SessionPromptParams{\n\t\tParts: opencode.F([]opencode.SessionPromptParamsPartUnion{\n\t\t\topencode.TextPartInputParam{\n\t\t\t\tType: opencode.F(opencode.TextPartInputTypeText),\n\t\t\t\tText: opencode.F(prompt),\n\t\t\t},\n\t\t}),\n\t\tModel: opencode.F(opencode.SessionPromptParamsModel{\n\t\t\tModelID:    opencode.F(modelID),\n\t\t\tProviderID: opencode.F(providerID),\n\t\t}),\n\t\tDirectory: opencode.F(projectRoot),\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Failed to send prompt: %v\", err)\n\t\treturn nil, fmt.Errorf(\"failed to send prompt: %w\", err)\n\t}\n\n\tif response != nil {\n\t\tlog.Printf(\"[OPENCODE] Prompt sent successfully, tokens used: %.0f input + %.0f output\", response.Info.Tokens.Input, response.Info.Tokens.Output)\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Prompt sent successfully (no synchronous response payload)\")\n\t}\n\n\t// Collect generated files from target directory\n\tfiles, err := d.collectGeneratedFiles(ctx, targetDir)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: Failed to collect files: %v\", err)\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Collected %d generated files\", len(files))\n\t}\n\n\t// Update project manifest if project-based\n\tif req.ProjectPath != \"\" {\n\t\tpaths := GetProjectPaths(projectRoot)\n\t\tif project, err := LoadProject(paths.Manifest); err == nil {\n\t\t\ttargetKey := req.TargetID\n\t\t\tif targetKey == \"\" {\n\t\t\t\ttargetKey = req.TargetLang\n\t\t\t}\n\t\t\tif _, ok := project.Targets[targetKey]; !ok {\n\t\t\t\tfor key, target := range project.Targets {\n\t\t\t\t\tif target.Stack == req.TargetLang {\n\t\t\t\t\t\ttargetKey = key\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif _, ok := project.Targets[targetKey]; !ok {\n\t\t\t\tswitch req.TargetLang {\n\t\t\t\tcase \"swiftui\":\n\t\t\t\t\ttargetKey = \"ios\"\n\t\t\t\tcase \"kotlin\":\n\t\t\t\t\ttargetKey = \"android\"\n\t\t\t\tcase \"nextjs\":\n\t\t\t\t\ttargetKey = \"web\"\n\t\t\t\tcase \"godot\", \"games\":\n\t\t\t\t\ttargetKey = \"godot\"\n\t\t\t\t}\n\t\t\t}\n\t\t\tif target, ok := project.Targets[targetKey]; ok {\n\t\t\t\ttarget.LastBuild = time.Now().UTC().Format(time.RFC3339)\n\t\t\t\tproject.Targets[targetKey] = target\n\t\t\t\tSaveProject(paths.Manifest, project)\n\t\t\t\tlog.Printf(\"[OPENCODE] Updated project manifest for target %s\", targetKey)\n\t\t\t}\n\t\t} else {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: Could not update project manifest: %v\", err)\n\t\t}\n\t}\n\n\tlog.Printf(\"[OPENCODE] Translation completed successfully\")\n\treturn &OpenCodeTranslateResponse{\n\t\tSessionID:  session.ID,\n\t\tSuccess:    true,\n\t\tFiles:      files,\n\t\tTokensUsed: response.Info.Tokens.Input + response.Info.Tokens.Output,\n\t\tCost:       response.Info.Cost,\n\t}, nil\n}\n\n// TranslateToProductionStreaming translates with real-time streaming to HTTP response\nfunc (d *OpenCodeDriver) TranslateToProductionStreaming(ctx context.Context, w http.ResponseWriter, req OpenCodeTranslateRequest) error {\n\tlog.Printf(\"[OPENCODE] Starting streaming translation to %s\", req.TargetLang)\n\n\t// Set up SSE headers\n\tw.Header().Set(\"Content-Type\", \"text/event-stream\")\n\tw.Header().Set(\"Cache-Control\", \"no-cache\")\n\tw.Header().Set(\"Connection\", \"keep-alive\")\n\n\tflusher, ok := w.(http.Flusher)\n\tif !ok {\n\t\tlog.Printf(\"[OPENCODE] Error: Streaming not supported\")\n\t\treturn fmt.Errorf(\"streaming not supported\")\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Starting translation with OpenCode agent...\"})\n\n\tvar projectRoot, sourceHTML, targetDir string\n\n\t// Determine source and target based on request type.\n\tif req.ProjectPath != \"\" {\n\t\tprojectRoot = req.ProjectPath\n\t\tpaths := GetProjectPaths(projectRoot)\n\n\t\tif _, err := os.Stat(paths.Manifest); os.IsNotExist(err) {\n\t\t\tmsg := fmt.Sprintf(\"Not a Glowbom project: %s (missing glowbom.json)\", projectRoot)\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\t\treturn errors.New(msg)\n\t\t}\n\n\t\thtml, err := LoadPrototype(projectRoot)\n\t\tif err != nil {\n\t\t\tmsg := userFacingAgentErrorMessage(fmt.Sprintf(\"failed to load prototype: %v\", err))\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\t\treturn err\n\t\t}\n\t\tsourceHTML = html\n\n\t\tif req.TargetDir != \"\" {\n\t\t\ttargetDir = filepath.Join(projectRoot, req.TargetDir)\n\t\t} else if project, err := LoadProject(paths.Manifest); err == nil {\n\t\t\ttargetKey := req.TargetID\n\t\t\tif targetKey == \"\" {\n\t\t\t\ttargetKey = req.TargetLang\n\t\t\t}\n\t\t\tif target, ok := project.Targets[targetKey]; ok && target.OutputDir != \"\" {\n\t\t\t\ttargetDir = filepath.Join(projectRoot, target.OutputDir)\n\t\t\t} else {\n\t\t\t\tfor _, target := range project.Targets {\n\t\t\t\t\tif target.Stack == req.TargetLang && target.OutputDir != \"\" {\n\t\t\t\t\t\ttargetDir = filepath.Join(projectRoot, target.OutputDir)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif targetDir == \"\" {\n\t\t\ttargetDir = GetTargetDir(projectRoot, req.TargetLang)\n\t\t}\n\t} else {\n\t\t// Legacy mode: direct HTML input.\n\t\tif req.SourceHTML == \"\" {\n\t\t\tmsg := \"either projectPath or sourceHtml is required\"\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\t\treturn errors.New(msg)\n\t\t}\n\t\tsourceHTML = req.SourceHTML\n\t\tif req.ProjectDir != \"\" {\n\t\t\tprojectRoot = req.ProjectDir\n\t\t\ttargetDir = req.ProjectDir\n\t\t} else {\n\t\t\ttmpDir, err := os.MkdirTemp(\"\", \"glowbom-translate-*\")\n\t\t\tif err != nil {\n\t\t\t\tmsg := userFacingAgentErrorMessage(fmt.Sprintf(\"failed to create temp directory: %v\", err))\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tprojectRoot = tmpDir\n\t\t\ttargetDir = tmpDir\n\t\t}\n\n\t\tif err := os.MkdirAll(projectRoot, 0755); err != nil {\n\t\t\tmsg := userFacingAgentErrorMessage(fmt.Sprintf(\"failed to create directory: %v\", err))\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\t\treturn err\n\t\t}\n\t\thtmlPath := filepath.Join(projectRoot, \"prototype.html\")\n\t\tif err := os.WriteFile(htmlPath, []byte(sourceHTML), 0644); err != nil {\n\t\t\tmsg := userFacingAgentErrorMessage(fmt.Sprintf(\"failed to write prototype HTML: %v\", err))\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := os.MkdirAll(targetDir, 0755); err != nil {\n\t\tmsg := userFacingAgentErrorMessage(fmt.Sprintf(\"failed to create target directory: %v\", err))\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": msg})\n\t\treturn err\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Creating translation session...\"})\n\tsession, err := d.client.Session.New(ctx, opencode.SessionNewParams{\n\t\tTitle:     opencode.F(fmt.Sprintf(\"Translate to %s\", req.TargetLang)),\n\t\tDirectory: opencode.F(projectRoot),\n\t})\n\tif err != nil {\n\t\tfriendly := userFacingAgentErrorMessage(err.Error())\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": friendly})\n\t\treturn err\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Session created: %s\", session.ID)})\n\n\tprompt := buildProjectTranslationPrompt(sourceHTML, req.TargetLang, projectRoot, targetDir)\n\tmodelID, providerID, fallbackNote := resolveSessionModelForRequest(projectRoot, req.Model)\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Using model: %s/%s\", providerID, modelID)})\n\tif fallbackNote != \"\" {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"⚠️ \" + fallbackNote})\n\t}\n\n\t// Capture a pre-run snapshot so we can recover changed files when stream file events are missing.\n\tpreRunSnapshot, snapshotErr := captureProjectFileSnapshot(projectRoot)\n\tif snapshotErr != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: Failed to capture pre-run snapshot for translation: %v\", snapshotErr)\n\t}\n\n\t// Start event stream in background before sending prompt to avoid race conditions.\n\ttype sessionStreamResult struct {\n\t\tcompleted    bool\n\t\tchangedFiles []string\n\t\thadActivity  bool\n\t\terrorMessage string\n\t}\n\teventStreamDone := make(chan sessionStreamResult, 1)\n\tpromptDispatched := make(chan struct{})\n\n\tgo func() {\n\t\tcompleted, changedFiles, hadActivity, errorMessage := d.streamEventsAndWaitForCompletion(ctx, w, flusher, projectRoot, session.ID, promptDispatched)\n\t\teventStreamDone <- sessionStreamResult{\n\t\t\tcompleted:    completed,\n\t\t\tchangedFiles: changedFiles,\n\t\t\thadActivity:  hadActivity,\n\t\t\terrorMessage: errorMessage,\n\t\t}\n\t}()\n\n\ttime.Sleep(100 * time.Millisecond)\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Agent is translating the project...\"})\n\n\tresponse, err := d.sendSessionPrompt(ctx, session.ID, opencode.SessionPromptParams{\n\t\tParts: opencode.F([]opencode.SessionPromptParamsPartUnion{\n\t\t\topencode.TextPartInputParam{\n\t\t\t\tType: opencode.F(opencode.TextPartInputTypeText),\n\t\t\t\tText: opencode.F(prompt),\n\t\t\t},\n\t\t}),\n\t\tModel: opencode.F(opencode.SessionPromptParamsModel{\n\t\t\tModelID:    opencode.F(modelID),\n\t\t\tProviderID: opencode.F(providerID),\n\t\t}),\n\t\tDirectory: opencode.F(projectRoot),\n\t})\n\tclose(promptDispatched)\n\tif err != nil {\n\t\tfriendly := userFacingAgentErrorMessage(err.Error())\n\t\tif isUsageLimitErrorMessage(err.Error()) || isUsageLimitErrorMessage(friendly) {\n\t\t\tgo d.abortSessionBestEffort(session.ID, projectRoot, \"usage limit while sending translation prompt\")\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": friendly})\n\t\treturn err\n\t}\n\n\tstreamResult := <-eventStreamDone\n\tif !streamResult.completed {\n\t\tsessionErr := userFacingAgentErrorMessage(streamResult.errorMessage)\n\t\tif strings.TrimSpace(sessionErr) == \"\" || strings.EqualFold(sessionErr, \"Unknown error occurred\") {\n\t\t\tsessionErr = \"Session did not complete\"\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"done\":    true,\n\t\t\t\"success\": false,\n\t\t\t\"error\":   sessionErr,\n\t\t})\n\t\treturn fmt.Errorf(\"translation session did not complete: %s\", sessionErr)\n\t}\n\n\tchangedFiles := streamResult.changedFiles\n\tif len(changedFiles) == 0 && preRunSnapshot != nil {\n\t\tsnapshotChanges, err := detectChangedFilesFromSnapshot(projectRoot, preRunSnapshot)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: Failed translation snapshot fallback: %v\", err)\n\t\t} else if len(snapshotChanges) > 0 {\n\t\t\tchangedFiles = snapshotChanges\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📡 Recovered %d changed files via snapshot fallback\", len(changedFiles))})\n\t\t}\n\t}\n\tif !streamResult.hadActivity {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": \"⚠️  Session reached idle without assistant/tool activity. The selected model may be only partially supported by this OpenCode server build.\",\n\t\t})\n\t}\n\n\tfiles, collectErr := d.collectGeneratedFiles(ctx, targetDir)\n\tif collectErr != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: Failed to collect generated files after translation: %v\", collectErr)\n\t\tfiles = []string{}\n\t}\n\n\t// Update project manifest if project-based.\n\tif req.ProjectPath != \"\" {\n\t\tpaths := GetProjectPaths(projectRoot)\n\t\tif project, err := LoadProject(paths.Manifest); err == nil {\n\t\t\ttargetKey := req.TargetID\n\t\t\tif targetKey == \"\" {\n\t\t\t\ttargetKey = req.TargetLang\n\t\t\t}\n\t\t\tif _, ok := project.Targets[targetKey]; !ok {\n\t\t\t\tfor key, target := range project.Targets {\n\t\t\t\t\tif target.Stack == req.TargetLang {\n\t\t\t\t\t\ttargetKey = key\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif _, ok := project.Targets[targetKey]; !ok {\n\t\t\t\tswitch req.TargetLang {\n\t\t\t\tcase \"swiftui\":\n\t\t\t\t\ttargetKey = \"ios\"\n\t\t\t\tcase \"kotlin\":\n\t\t\t\t\ttargetKey = \"android\"\n\t\t\t\tcase \"nextjs\":\n\t\t\t\t\ttargetKey = \"web\"\n\t\t\t\tcase \"godot\", \"games\":\n\t\t\t\t\ttargetKey = \"godot\"\n\t\t\t\t}\n\t\t\t}\n\t\t\tif target, ok := project.Targets[targetKey]; ok {\n\t\t\t\ttarget.LastBuild = time.Now().UTC().Format(time.RFC3339)\n\t\t\t\tproject.Targets[targetKey] = target\n\t\t\t\tSaveProject(paths.Manifest, project)\n\t\t\t}\n\t\t} else {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: Could not update project manifest after translation stream: %v\", err)\n\t\t}\n\t}\n\n\ttokensUsed := 0.0\n\tcost := 0.0\n\tif response != nil {\n\t\ttokensUsed = response.Info.Tokens.Input + response.Info.Tokens.Output\n\t\tcost = response.Info.Cost\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\"done\":           true,\n\t\t\"success\":        true,\n\t\t\"output\":         \"✅ Translation completed successfully!\",\n\t\t\"sessionId\":      session.ID,\n\t\t\"files\":          len(files),\n\t\t\"generatedFiles\": files,\n\t\t\"changedFiles\":   changedFiles,\n\t\t\"tokensUsed\":     tokensUsed,\n\t\t\"cost\":           cost,\n\t})\n\n\treturn nil\n}\n\n// streamEvents streams OpenCode events to the HTTP response\nfunc (d *OpenCodeDriver) streamEvents(ctx context.Context, w http.ResponseWriter, flusher http.Flusher, projectDir, sessionID string) {\n\tlog.Printf(\"[OPENCODE] Starting event streaming for directory: %s\", projectDir)\n\tstream := d.client.Event.ListStreaming(ctx, opencode.EventListParams{\n\t\tDirectory: opencode.F(projectDir),\n\t})\n\n\tfor stream.Next() {\n\t\tevent := stream.Current()\n\t\teventSID := extractEventSessionID(event)\n\t\tif sessionID != \"\" && eventSID != \"\" && eventSID != sessionID {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Stream relevant events to client\n\t\tswitch event.Type {\n\t\tcase \"message.updated\":\n\t\t\tif props, ok := event.Properties.(map[string]interface{}); ok {\n\t\t\t\tif content, ok := props[\"content\"].(string); ok && content != \"\" {\n\t\t\t\t\tlog.Printf(\"[OPENCODE] Agent message: %s\", content[:min(100, len(content))])\n\t\t\t\t\tsendSSEEvent(w, flusher, \"message\", content)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"file.updated\", \"file.edited\":\n\t\t\tfilePath := getPropertyString(event.Properties, \"Path\", \"path\", \"File\", \"file\")\n\t\t\tif filePath != \"\" {\n\t\t\t\tlog.Printf(\"[OPENCODE] File updated: %s\", filePath)\n\t\t\t\tsendSSEEvent(w, flusher, \"file\", fmt.Sprintf(\"Updated: %s\", filePath))\n\t\t\t}\n\t\tcase \"tool.start\":\n\t\t\tif props, ok := event.Properties.(map[string]interface{}); ok {\n\t\t\t\tif toolName, ok := props[\"name\"].(string); ok {\n\t\t\t\t\tlog.Printf(\"[OPENCODE] Tool started: %s\", toolName)\n\t\t\t\t\tsendSSEEvent(w, flusher, \"tool\", fmt.Sprintf(\"Running: %s\", toolName))\n\t\t\t\t\tsendSSEEvent(w, flusher, \"progress\", fmt.Sprintf(\"Executing %s...\", toolName))\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"tool.end\":\n\t\t\tif props, ok := event.Properties.(map[string]interface{}); ok {\n\t\t\t\tif toolName, ok := props[\"name\"].(string); ok {\n\t\t\t\t\tlog.Printf(\"[OPENCODE] Tool completed: %s\", toolName)\n\t\t\t\t\tsendSSEEvent(w, flusher, \"tool_done\", fmt.Sprintf(\"Completed: %s\", toolName))\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.status\":\n\t\t\tdetails := extractSessionStatusMessage(event.Properties)\n\t\t\tif details == \"\" {\n\t\t\t\tif rawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON()); rawProps != nil {\n\t\t\t\t\tdetails = extractSessionStatusMessage(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\trawDetails := strings.TrimSpace(string(event.JSON.RawJSON()))\n\t\t\tdetails = usageLimitContext(details, rawDetails)\n\t\t\tif details != \"\" {\n\t\t\t\tif isUsageLimitErrorMessage(details) {\n\t\t\t\t\tsendSSEEvent(w, flusher, \"error\", userFacingAgentErrorMessage(details))\n\t\t\t\t\td.abortSessionBestEffort(sessionID, projectDir, \"usage limit in session.status\")\n\t\t\t\t\treturn\n\t\t\t\t} else {\n\t\t\t\t\tsendSSEEvent(w, flusher, \"status\", details)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.error\":\n\t\t\terrorMsg := extractSessionErrorMessage(event.Properties)\n\t\t\tif errorMsg == \"\" {\n\t\t\t\tif rawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON()); rawProps != nil {\n\t\t\t\t\terrorMsg = extractSessionErrorMessage(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\trawError := strings.TrimSpace(string(event.JSON.RawJSON()))\n\t\t\terrorMsg = usageLimitContext(errorMsg, rawError)\n\t\t\tif errorMsg == \"\" {\n\t\t\t\terrorMsg = \"Unknown error occurred\"\n\t\t\t}\n\t\t\tsendSSEEvent(w, flusher, \"error\", userFacingAgentErrorMessage(errorMsg))\n\t\t\tif isUsageLimitErrorMessage(errorMsg) {\n\t\t\t\td.abortSessionBestEffort(sessionID, projectDir, \"usage limit in session.error\")\n\t\t\t}\n\t\t\treturn\n\t\tdefault:\n\t\t\tlog.Printf(\"[OPENCODE] Unhandled event type: %s\", event.Type)\n\t\t}\n\t}\n\n\tif err := stream.Err(); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Event stream error: %v\", err)\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Event streaming ended\")\n\t}\n}\n\n// collectGeneratedFiles lists files created in the project directory\nfunc (d *OpenCodeDriver) collectGeneratedFiles(ctx context.Context, projectDir string) ([]string, error) {\n\tvar files []string\n\n\terr := filepath.Walk(projectDir, func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !info.IsDir() && info.Name() != \"prototype.html\" {\n\t\t\trelPath, _ := filepath.Rel(projectDir, path)\n\t\t\tfiles = append(files, relPath)\n\t\t}\n\t\treturn nil\n\t})\n\n\treturn files, err\n}\n\n// CheckHealth verifies OpenCode server is running\nfunc (d *OpenCodeDriver) CheckHealth(ctx context.Context) error {\n\tctx, cancel := context.WithTimeout(ctx, 5*time.Second)\n\tdefer cancel()\n\n\t// Try to list sessions as a health check\n\t_, err := d.client.Session.List(ctx, opencode.SessionListParams{})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"OpenCode server not responding at %s: %w\", d.serverURL, err)\n\t}\n\treturn nil\n}\n\n// buildTranslationPrompt creates the prompt for translation tasks\nfunc buildTranslationPrompt(sourceHTML, targetLang string) string {\n\tinstructions := stackInstructionsFor(targetLang, false)\n\n\treturn fmt.Sprintf(`Translate this HTML/Tailwind prototype into a production %s project.\n\n## Source Prototype\n%s\n\n## Requirements\n%s\n\n## Important\n- Create ALL necessary files for a complete, runnable project\n- Do NOT just generate a single file - create the full project structure\n- Verify the build passes before completing\n- If build fails, fix the errors and try again\n`, targetLang, sourceHTML, instructions)\n}\n\n// buildProjectTranslationPrompt creates a context-aware prompt for project-based translation\nfunc buildProjectTranslationPrompt(sourceHTML, targetLang, projectRoot, targetDir string) string {\n\tinstructions := stackInstructionsFor(targetLang, true)\n\ttargetDirName := filepath.Base(targetDir)\n\n\treturn fmt.Sprintf(`You are working in a Glowbom project at: %s\n\n## Project Structure\n- prototype/index.html - The HTML/Tailwind prototype (source)\n- prototype/assets/ - Images and other assets\n- %s/ - Target directory for %s code (create files here)\n\n## Source Prototype\n%s\n\n## Task\nTranslate the prototype into a production %s project. Report your progress and actions clearly.\n\n## Requirements\n%s\n\n## Instructions for Agent\n- Work exclusively in the target directory: %s\n- Preserve the visual design and layout from the prototype exactly\n- Include ALL assets - copy from prototype/assets/ to appropriate location\n- Create complete, runnable project structure\n- Report progress after each major step (e.g., \"Created main component\", \"Copied assets\", \"Running build\")\n- Verify the build passes before completing\n- If build fails, fix the errors and try again, reporting each attempt and fix\n- Be specific about what you're doing in the directory\n`, projectRoot, targetDirName, targetLang, sourceHTML, targetLang, instructions, targetDir)\n}\n\n// parseModel extracts provider and model ID from combined string\nfunc parseModel(model string) (modelID, providerID string) {\n\t// Default to Claude Sonnet 4.6\n\tif model == \"\" {\n\t\treturn \"claude-sonnet-4-6\", \"anthropic\"\n\t}\n\n\t// Handle \"provider/model\" format\n\tfor _, prefix := range []string{\"anthropic/\", \"openai/\", \"google/\", \"ollama/\", \"fireworks/\", \"fireworks-ai/\", \"openrouter/\", \"opencode/\", \"xai/\"} {\n\t\tif len(model) > len(prefix) && model[:len(prefix)] == prefix {\n\t\t\tmodelID = model[len(prefix):]\n\t\t\tproviderID = model[:len(prefix)-1]\n\t\t\tif providerID == \"openai\" {\n\t\t\t\tmodelID = normalizeOpenAIModelID(modelID)\n\t\t\t}\n\t\t\tif providerID == \"google\" {\n\t\t\t\tmodelID = normalizeGeminiModelID(modelID)\n\t\t\t}\n\t\t\tif providerID == \"fireworks\" || providerID == \"fireworks-ai\" {\n\t\t\t\tproviderID = \"fireworks-ai\"\n\t\t\t\tmodelID = normalizeFireworksModelID(modelID)\n\t\t\t}\n\t\t\tif providerID == \"openrouter\" {\n\t\t\t\tmodelID = normalizeOpenRouterModelID(modelID)\n\t\t\t}\n\t\t\tif providerID == \"opencode\" {\n\t\t\t\tmodelID = normalizeOpenCodeZenModelID(modelID)\n\t\t\t}\n\t\t\tif providerID == \"xai\" {\n\t\t\t\tmodelID = normalizeXAIModelID(modelID)\n\t\t\t}\n\t\t\treturn modelID, providerID\n\t\t}\n\t}\n\n\t// Pass through unknown provider/model strings so OpenCode can resolve custom providers.\n\tif slash := strings.Index(model, \"/\"); slash > 0 && slash+1 < len(model) {\n\t\treturn strings.TrimSpace(model[slash+1:]), strings.TrimSpace(model[:slash])\n\t}\n\n\t// Handle shorthand names\n\tswitch model {\n\tcase \"claude\", \"claude-sonnet\":\n\t\treturn \"claude-sonnet-4-6\", \"anthropic\"\n\tcase \"claude-opus\":\n\t\treturn \"claude-opus-4-6\", \"anthropic\"\n\tcase \"gpt-5\", \"gpt-5.1\", \"gpt-5.4\":\n\t\treturn \"gpt-5.4\", \"openai\"\n\tcase \"gpt-5.2\":\n\t\treturn \"gpt-5.2\", \"openai\"\n\tcase \"gpt-4o\":\n\t\treturn \"gpt-4o\", \"openai\"\n\tcase \"gemini\":\n\t\treturn \"gemini-3.1-pro-preview\", \"google\"\n\tcase \"grok\", \"xai\", \"grok-4.1\", \"grok-4-1\", \"grok-4.1-fast\", \"grok-4-1-fast\", \"grok-4.1-fast-reasoning\", \"grok-4-1-fast-reasoning\":\n\t\treturn normalizeXAIModelID(model), \"xai\"\n\tcase \"fireworks\", \"glm-5\":\n\t\treturn \"accounts/fireworks/models/glm-5\", \"fireworks-ai\"\n\tcase \"kimi-k2.5\", \"kimi-k2p5\":\n\t\treturn \"accounts/fireworks/models/kimi-k2p5\", \"fireworks-ai\"\n\tcase \"minimax-m2.5\", \"minimax-m2p5\", \"minimax-m2.5-free\", \"minimax-m2p5-free\":\n\t\treturn \"accounts/fireworks/models/minimax-m2p5\", \"fireworks-ai\"\n\tcase \"openrouter\", \"openrouter/glm-5\":\n\t\treturn \"z-ai/glm-5\", \"openrouter\"\n\tcase \"openrouter/kimi-k2\", \"openrouter/kimi-k2.5\", \"openrouter/kimi-k2p5\":\n\t\treturn \"moonshotai/kimi-k2.5\", \"openrouter\"\n\tcase \"openrouter/minimax-m2.5\", \"openrouter/minimax-m2p5\":\n\t\treturn \"minimax/minimax-m2.5\", \"openrouter\"\n\tcase \"opencode\":\n\t\treturn \"kimi-k2.5-free\", \"opencode\"\n\tcase \"opencode/kimi-k2\", \"opencode/kimi-k2.5\", \"opencode/kimi-k2p5\", \"opencode/kimi-k2.5-free\", \"opencode/kimi-k2p5-free\":\n\t\treturn \"kimi-k2.5-free\", \"opencode\"\n\tcase \"opencode/minimax-m2\", \"opencode/minimax-m2.5\", \"opencode/minimax-m2p5\", \"opencode/minimax-m2.5-free\", \"opencode/minimax-m2p5-free\":\n\t\treturn \"minimax-m2.5-free\", \"opencode\"\n\tcase \"opencode/glm-5\", \"opencode/glm-5-free\":\n\t\treturn \"glm-5-free\", \"opencode\"\n\tcase \"opencode/big-pickle\", \"big-pickle\", \"bigpickle\":\n\t\treturn \"big-pickle\", \"opencode\"\n\tdefault:\n\t\treturn model, \"anthropic\"\n\t}\n}\n\nfunc containsEmbeddedImageDataURI(content string) bool {\n\tlower := strings.ToLower(content)\n\treturn strings.Contains(lower, \"data:image/\") && strings.Contains(lower, \";base64,\")\n}\n\nfunc isIgnorablePromptParseError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tmsg := strings.ToLower(strings.TrimSpace(err.Error()))\n\treturn strings.Contains(msg, \"error parsing response json: eof\")\n}\n\nfunc (d *OpenCodeDriver) sendSessionPrompt(\n\tctx context.Context,\n\tsessionID string,\n\tparams opencode.SessionPromptParams,\n) (*opencode.SessionPromptResponse, error) {\n\tvar resp *http.Response\n\tout, err := d.client.Session.Prompt(ctx, sessionID, params, option.WithResponseInto(&resp))\n\tif err == nil {\n\t\treturn out, nil\n\t}\n\n\t// OpenCode may acknowledge async prompt submission with an empty JSON body.\n\t// Treat JSON EOF parse failures on 2xx responses as success.\n\tif isIgnorablePromptParseError(err) && (resp == nil || (resp.StatusCode >= 200 && resp.StatusCode < 300)) {\n\t\tstatus := 0\n\t\tif resp != nil {\n\t\t\tstatus = resp.StatusCode\n\t\t}\n\t\tlog.Printf(\"[OPENCODE] Prompt accepted with empty response body (status=%d)\", status)\n\t\treturn nil, nil\n\t}\n\n\treturn nil, err\n}\n\n// sendSSEEvent sends a Server-Sent Event\nfunc sendSSEEvent(w http.ResponseWriter, flusher http.Flusher, event, data string) {\n\tfmt.Fprintf(w, \"event: %s\\ndata: %s\\n\\n\", event, data)\n\tflusher.Flush()\n}\n\n// Global OpenCode driver instance\nvar openCodeDriver *OpenCodeDriver\n\n// GetOpenCodeDriver returns the singleton driver instance\nfunc GetOpenCodeDriver() *OpenCodeDriver {\n\tif openCodeDriver == nil {\n\t\topenCodeDriver = NewOpenCodeDriver(\"\")\n\t}\n\treturn openCodeDriver\n}\n\n// ============================================================\n// HTTP Handlers\n// ============================================================\n\n// openCodeTranslateHandler handles translation requests\nfunc openCodeTranslateHandler(w http.ResponseWriter, r *http.Request) {\n\tlog.Printf(\"[OPENCODE] Received translation request\")\n\tif r.Method != http.MethodPost {\n\t\tlog.Printf(\"[OPENCODE] Error: Method not allowed: %s\", r.Method)\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeTranslateRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Invalid JSON body: %v\", err)\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// Validate: need either projectPath or sourceHtml\n\tif req.ProjectPath == \"\" && req.SourceHTML == \"\" {\n\t\tlog.Printf(\"[OPENCODE] Error: Neither projectPath nor sourceHtml provided\")\n\t\thttp.Error(w, \"either projectPath or sourceHtml is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tif req.TargetLang == \"\" {\n\t\treq.TargetLang = \"swiftui\" // default\n\t}\n\n\t// Guardrail: never translate embedded base64 image HTML. It explodes token counts\n\t// and breaks provider limits (especially Fireworks). Require glowbyimage placeholders instead.\n\tif req.ProjectPath != \"\" {\n\t\tif html, err := LoadPrototype(req.ProjectPath); err == nil && containsEmbeddedImageDataURI(html) {\n\t\t\tmsg := \"translation blocked: prototype HTML contains embedded base64 images. Regenerate using glowbyimage placeholders before translation.\"\n\t\t\tlog.Printf(\"[OPENCODE] %s project=%s\", msg, req.ProjectPath)\n\t\t\thttp.Error(w, msg, http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t}\n\tif req.SourceHTML != \"\" && containsEmbeddedImageDataURI(req.SourceHTML) {\n\t\tmsg := \"translation blocked: source HTML contains embedded base64 images. Regenerate using glowbyimage placeholders before translation.\"\n\t\tlog.Printf(\"[OPENCODE] %s\", msg)\n\t\thttp.Error(w, msg, http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif err := ensureOpenCodeServerReady(req.ProjectPath, req.Model, req.OpenAIKey, req.AnthropicKey, req.GeminiKey, req.FireworksKey, req.OpenRouterKey, req.OpenCodeZenKey, req.XaiKey, req.OpenAIAuthMode, req.OpenAIRefreshToken, req.OpenAIExpiresAt); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Failed preparing OpenCode server: %v\", err)\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to prepare OpenCode server: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tctx := r.Context()\n\n\t// Check if streaming requested via query or SSE Accept header.\n\tacceptHeader := strings.ToLower(strings.TrimSpace(r.Header.Get(\"Accept\")))\n\tisStream := r.URL.Query().Get(\"stream\") == \"true\" || strings.Contains(acceptHeader, \"text/event-stream\")\n\n\tif isStream {\n\t\tlog.Printf(\"[OPENCODE] Starting streaming translation to %s\", req.TargetLang)\n\t\tif err := driver.TranslateToProductionStreaming(ctx, w, req); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Streaming error: %v\", err)\n\t\t}\n\t\treturn\n\t}\n\n\t// Non-streaming response\n\tlog.Printf(\"[OPENCODE] Starting non-streaming translation to %s\", req.TargetLang)\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tresponse, err := driver.TranslateToProduction(ctx, req)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Translation error: %v\", err)\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tlog.Printf(\"[OPENCODE] Translation completed successfully, session: %s\", response.SessionID)\n\tjson.NewEncoder(w).Encode(response)\n}\n\n// openCodeInitProjectHandler creates a new Glowbom project\nfunc openCodeInitProjectHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req struct {\n\t\tPath string `json:\"path\"`\n\t\tName string `json:\"name\"`\n\t\tHTML string `json:\"html,omitempty\"` // Optional: initial prototype HTML\n\t}\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif req.Path == \"\" || req.Name == \"\" {\n\t\thttp.Error(w, \"path and name are required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\t// Initialize project\n\tproject, err := InitProject(req.Path, req.Name)\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\t// Save initial prototype if provided\n\tif req.HTML != \"\" {\n\t\tif err := SavePrototype(req.Path, req.HTML, nil); err != nil {\n\t\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\t\"success\": false,\n\t\t\t\t\"error\":   fmt.Sprintf(\"project created but failed to save prototype: %v\", err),\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"success\": true,\n\t\t\"project\": project,\n\t\t\"paths\":   GetProjectPaths(req.Path),\n\t})\n}\n\n// openCodeGetProjectHandler loads project info\nfunc openCodeGetProjectHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tpath := r.URL.Query().Get(\"path\")\n\tif path == \"\" {\n\t\thttp.Error(w, \"path query parameter required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tpaths := GetProjectPaths(path)\n\tproject, err := LoadProject(paths.Manifest)\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\t// Check what exists\n\tvar existingTargets []string\n\tfor targetID, targetInfo := range project.Targets {\n\t\ttargetDir := GetTargetDir(path, targetID)\n\t\tif targetInfo.OutputDir != \"\" {\n\t\t\ttargetDir = filepath.Join(path, targetInfo.OutputDir)\n\t\t}\n\t\tif info, err := os.Stat(targetDir); err == nil && info.IsDir() {\n\t\t\texistingTargets = append(existingTargets, targetID)\n\t\t}\n\t}\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"success\":         true,\n\t\t\"project\":         project,\n\t\t\"paths\":           paths,\n\t\t\"existingTargets\": existingTargets,\n\t})\n}\n\n// openCodeRenameProjectHandler renames a project by updating its manifest\nfunc openCodeRenameProjectHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req struct {\n\t\tPath string `json:\"path\"`\n\t\tName string `json:\"name\"`\n\t}\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"invalid request body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tif req.Path == \"\" || req.Name == \"\" {\n\t\thttp.Error(w, \"path and name are required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tpaths := GetProjectPaths(req.Path)\n\tproject, err := LoadProject(paths.Manifest)\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tproject.Name = strings.TrimSpace(req.Name)\n\tif err := SaveProject(paths.Manifest, project); err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"success\": true,\n\t\t\"project\": project,\n\t})\n}\n\n// openCodeUpdateProjectSettingsHandler updates project metadata (bundleID, displayName, buildNumber, version)\nfunc openCodeUpdateProjectSettingsHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req struct {\n\t\tPath        string  `json:\"path\"`\n\t\tBundleID    *string `json:\"bundleID\"`\n\t\tDisplayName *string `json:\"displayName\"`\n\t\tBuildNumber *string `json:\"buildNumber\"`\n\t\tVersion     *string `json:\"version\"`\n\t}\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"invalid request body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tif req.Path == \"\" {\n\t\thttp.Error(w, \"path is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tpaths := GetProjectPaths(req.Path)\n\tproject, err := LoadProject(paths.Manifest)\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tif req.BundleID != nil {\n\t\tproject.BundleID = strings.TrimSpace(*req.BundleID)\n\t}\n\tif req.DisplayName != nil {\n\t\tproject.DisplayName = strings.TrimSpace(*req.DisplayName)\n\t}\n\tif req.BuildNumber != nil {\n\t\tproject.BuildNumber = strings.TrimSpace(*req.BuildNumber)\n\t}\n\tif req.Version != nil {\n\t\tproject.Version = strings.TrimSpace(*req.Version)\n\t}\n\n\tif err := SaveProject(paths.Manifest, project); err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"success\": true,\n\t\t\"project\": project,\n\t})\n}\n\n// openCodeGenerateIconHandler generates an app icon and saves it to the project root\nfunc openCodeGenerateIconHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req struct {\n\t\tPath           string  `json:\"path\"`\n\t\tPrompt         string  `json:\"prompt\"`\n\t\tImageSource    string  `json:\"imageSource,omitempty\"`\n\t\tOpenAIKey      string  `json:\"openaiKey,omitempty\"`\n\t\tGeminiKey      string  `json:\"geminiKey,omitempty\"`\n\t\tXaiKey         string  `json:\"xaiKey,omitempty\"`\n\t\tReferenceImage *string `json:\"referenceImage,omitempty\"`\n\t}\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"invalid request body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tif req.Path == \"\" || req.Prompt == \"\" {\n\t\thttp.Error(w, \"path and prompt are required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// Build a post-pass style request to reuse generateImageForPostPass\n\tpostPassReq := OpenCodeMediaPostPassRequest{\n\t\tProjectPath: req.Path,\n\t\tImageSource: req.ImageSource,\n\t\tOpenAIKey:   req.OpenAIKey,\n\t\tGeminiKey:   req.GeminiKey,\n\t\tXaiKey:      req.XaiKey,\n\t}\n\n\trefImage := \"\"\n\tif req.ReferenceImage != nil {\n\t\trefImage = *req.ReferenceImage\n\t\t// Strip data URI prefix — Gemini API expects raw base64\n\t\tif idx := strings.Index(refImage, \";base64,\"); idx >= 0 {\n\t\t\trefImage = refImage[idx+len(\";base64,\"):]\n\t\t}\n\t}\n\n\t// Enhance prompt for app icon generation\n\ticonPrompt := fmt.Sprintf(\"Generate a square app icon (1024x1024) for: %s. The icon should be simple, modern, and look great at small sizes. No text on the icon.\", req.Prompt)\n\n\tdataURI, sourceService, err := generateImageForPostPass(postPassReq, iconPrompt, refImage)\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   fmt.Sprintf(\"icon generation failed: %v\", err),\n\t\t})\n\t\treturn\n\t}\n\n\t// Decode data URI to bytes\n\timageBytes, _, err := decodeBase64Payload(dataURI, \"image/png\")\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   fmt.Sprintf(\"failed to decode generated image: %v\", err),\n\t\t})\n\t\treturn\n\t}\n\n\t// Write icon.png to project root\n\ticonPath := filepath.Join(req.Path, \"icon.png\")\n\tif err := os.WriteFile(iconPath, imageBytes, 0644); err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"error\":   fmt.Sprintf(\"failed to save icon: %v\", err),\n\t\t})\n\t\treturn\n\t}\n\n\tfmt.Printf(\"[ICON] Generated icon for project %s using %s\\n\", req.Path, sourceService)\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"success\":       true,\n\t\t\"iconPath\":      iconPath,\n\t\t\"sourceService\": sourceService,\n\t\t\"image\":         dataURI,\n\t})\n}\n\n// openCodeProjectIconHandler serves the current icon.png as a base64 data URI\nfunc openCodeProjectIconHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tpath := r.URL.Query().Get(\"path\")\n\tif path == \"\" {\n\t\thttp.Error(w, \"path query parameter required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\ticonPath := filepath.Join(path, \"icon.png\")\n\tdata, err := os.ReadFile(iconPath)\n\tif err != nil {\n\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\"success\": false,\n\t\t\t\"exists\":  false,\n\t\t})\n\t\treturn\n\t}\n\n\tencoded := base64.StdEncoding.EncodeToString(data)\n\tdataURI := fmt.Sprintf(\"data:image/png;base64,%s\", encoded)\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"success\": true,\n\t\t\"exists\":  true,\n\t\t\"image\":   dataURI,\n\t})\n}\n\ntype openCodeOpenAIOAuthCredential struct {\n\tAccessToken               string\n\tRefreshToken              string\n\tExpiresAtReferenceSeconds float64\n\tSource                    string\n}\n\nfunc parseRawJSONNumber(raw json.RawMessage) float64 {\n\ttrimmed := bytes.TrimSpace(raw)\n\tif len(trimmed) == 0 || bytes.Equal(trimmed, []byte(\"null\")) {\n\t\treturn 0\n\t}\n\n\tvar asNumber float64\n\tif err := json.Unmarshal(trimmed, &asNumber); err == nil {\n\t\treturn asNumber\n\t}\n\n\tvar asString string\n\tif err := json.Unmarshal(trimmed, &asString); err == nil {\n\t\tasString = strings.TrimSpace(asString)\n\t\tif asString == \"\" {\n\t\t\treturn 0\n\t\t}\n\t\tparsed, err := strconv.ParseFloat(asString, 64)\n\t\tif err == nil {\n\t\t\treturn parsed\n\t\t}\n\t}\n\n\treturn 0\n}\n\nfunc normalizeOAuthExpiresToReferenceSeconds(raw float64) float64 {\n\tif raw <= 0 || !isFinite(raw) {\n\t\treturn 0\n\t}\n\n\t// Unix milliseconds.\n\tif raw > 1_000_000_000_000 {\n\t\treturn (raw / 1000.0) - 978307200\n\t}\n\t// Unix seconds.\n\tif raw > 978307200 {\n\t\treturn raw - 978307200\n\t}\n\t// Already NSDate reference seconds.\n\treturn raw\n}\n\nfunc isFinite(v float64) bool {\n\treturn !math.IsInf(v, 0) && !math.IsNaN(v)\n}\n\nfunc readOpenAIOAuthCredentialFromOpenCodeAuthFile(authFilePath string) (openCodeOpenAIOAuthCredential, bool, error) {\n\ttrimmedPath := strings.TrimSpace(authFilePath)\n\tif trimmedPath == \"\" {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\n\tdata, err := os.ReadFile(trimmedPath)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t\t}\n\t\treturn openCodeOpenAIOAuthCredential{}, false, err\n\t}\n\n\tvar authMap map[string]json.RawMessage\n\tif err := json.Unmarshal(data, &authMap); err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, err\n\t}\n\n\traw, ok := authMap[\"openai\"]\n\tif !ok {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\traw = bytes.TrimSpace(raw)\n\tif len(raw) == 0 || bytes.Equal(raw, []byte(\"null\")) {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\n\tvar openAI struct {\n\t\tType    string          `json:\"type\"`\n\t\tAccess  string          `json:\"access\"`\n\t\tRefresh string          `json:\"refresh\"`\n\t\tExpires json.RawMessage `json:\"expires\"`\n\t}\n\tif err := json.Unmarshal(raw, &openAI); err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, err\n\t}\n\n\tif !strings.EqualFold(strings.TrimSpace(openAI.Type), \"oauth\") {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\n\taccess := strings.TrimSpace(openAI.Access)\n\tif access == \"\" {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\n\treturn openCodeOpenAIOAuthCredential{\n\t\tAccessToken:               access,\n\t\tRefreshToken:              strings.TrimSpace(openAI.Refresh),\n\t\tExpiresAtReferenceSeconds: normalizeOAuthExpiresToReferenceSeconds(parseRawJSONNumber(openAI.Expires)),\n\t\tSource:                    trimmedPath,\n\t}, true, nil\n}\n\nfunc readOpenAIOAuthCredentialFromCodexAuthFile() (openCodeOpenAIOAuthCredential, bool, error) {\n\thomeDir, err := os.UserHomeDir()\n\tif err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, err\n\t}\n\tcodexAuthPath := filepath.Join(homeDir, \".codex\", \"auth.json\")\n\n\tdata, err := os.ReadFile(codexAuthPath)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t\t}\n\t\treturn openCodeOpenAIOAuthCredential{}, false, err\n\t}\n\n\tvar decoded struct {\n\t\tTokens *struct {\n\t\t\tAccessToken  string `json:\"access_token\"`\n\t\t\tRefreshToken string `json:\"refresh_token\"`\n\t\t\tExpiresAt    any    `json:\"expires_at\"`\n\t\t} `json:\"tokens\"`\n\t}\n\tif err := json.Unmarshal(data, &decoded); err != nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, err\n\t}\n\n\tif decoded.Tokens == nil {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\n\taccess := strings.TrimSpace(decoded.Tokens.AccessToken)\n\tif access == \"\" {\n\t\treturn openCodeOpenAIOAuthCredential{}, false, nil\n\t}\n\n\texpiresAt := 0.0\n\tswitch value := decoded.Tokens.ExpiresAt.(type) {\n\tcase float64:\n\t\texpiresAt = normalizeOAuthExpiresToReferenceSeconds(value)\n\tcase string:\n\t\tparsed, parseErr := strconv.ParseFloat(strings.TrimSpace(value), 64)\n\t\tif parseErr == nil {\n\t\t\texpiresAt = normalizeOAuthExpiresToReferenceSeconds(parsed)\n\t\t}\n\t}\n\n\treturn openCodeOpenAIOAuthCredential{\n\t\tAccessToken:               access,\n\t\tRefreshToken:              strings.TrimSpace(decoded.Tokens.RefreshToken),\n\t\tExpiresAtReferenceSeconds: expiresAt,\n\t\tSource:                    codexAuthPath,\n\t}, true, nil\n}\n\nfunc resolveOpenAIOAuthCredentialForConnect(req OpenCodeAuthConnectRequest) (openCodeOpenAIOAuthCredential, error) {\n\taccess := strings.TrimSpace(req.OpenAIKey)\n\trefresh := strings.TrimSpace(req.OpenAIRefreshToken)\n\texpiresAt := normalizeOAuthExpiresToReferenceSeconds(req.OpenAIExpiresAt)\n\n\tif access != \"\" {\n\t\treturn openCodeOpenAIOAuthCredential{\n\t\t\tAccessToken:               access,\n\t\t\tRefreshToken:              refresh,\n\t\t\tExpiresAtReferenceSeconds: expiresAt,\n\t\t\tSource:                    \"request\",\n\t\t}, nil\n\t}\n\n\truntimePaths, err := glowbomOpenCodeRuntimePaths()\n\tif err == nil {\n\t\tfromOpenCodeAuth, ok, readErr := readOpenAIOAuthCredentialFromOpenCodeAuthFile(runtimePaths.AuthFile)\n\t\tif readErr != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed reading OpenCode auth file for connect fallback: %v\", readErr)\n\t\t}\n\t\tif ok {\n\t\t\treturn fromOpenCodeAuth, nil\n\t\t}\n\t}\n\n\tfromCodexAuth, ok, readErr := readOpenAIOAuthCredentialFromCodexAuthFile()\n\tif readErr != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: failed reading ~/.codex/auth.json for connect fallback: %v\", readErr)\n\t}\n\tif ok {\n\t\treturn fromCodexAuth, nil\n\t}\n\n\treturn openCodeOpenAIOAuthCredential{}, fmt.Errorf(\"no ChatGPT OAuth credential found. Run `codex login` first, or connect ChatGPT in Desktop\")\n}\n\nfunc clearOpenAIAuthFromAuthFile(authFilePath string) error {\n\ttrimmedPath := strings.TrimSpace(authFilePath)\n\tif trimmedPath == \"\" {\n\t\treturn nil\n\t}\n\n\tdata, err := os.ReadFile(trimmedPath)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\tvar authMap map[string]json.RawMessage\n\tif err := json.Unmarshal(data, &authMap); err != nil {\n\t\treturn err\n\t}\n\n\tif _, exists := authMap[\"openai\"]; !exists {\n\t\treturn nil\n\t}\n\n\tdelete(authMap, \"openai\")\n\tencoded, err := json.MarshalIndent(authMap, \"\", \"  \")\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn os.WriteFile(trimmedPath, encoded, 0600)\n}\n\nfunc persistOpenAIOAuthToAuthFile(authFilePath string, credential openCodeOpenAIOAuthCredential) error {\n\ttrimmedPath := strings.TrimSpace(authFilePath)\n\tif trimmedPath == \"\" {\n\t\treturn nil\n\t}\n\tif strings.TrimSpace(credential.AccessToken) == \"\" {\n\t\treturn fmt.Errorf(\"missing OAuth access token\")\n\t}\n\n\tauthMap := map[string]json.RawMessage{}\n\tdata, err := os.ReadFile(trimmedPath)\n\tif err == nil {\n\t\tif unmarshalErr := json.Unmarshal(data, &authMap); unmarshalErr != nil {\n\t\t\treturn unmarshalErr\n\t\t}\n\t} else if !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\texpiresAtReference := credential.ExpiresAtReferenceSeconds\n\tif expiresAtReference <= 0 {\n\t\texpiresAtReference = float64(time.Now().Add(time.Hour).Unix()) - 978307200\n\t}\n\texpiresAtUnixMs := int64((expiresAtReference + 978307200) * 1000)\n\n\topenAIPayload := map[string]any{\n\t\t\"type\":    \"oauth\",\n\t\t\"access\":  credential.AccessToken,\n\t\t\"refresh\": strings.TrimSpace(credential.RefreshToken),\n\t\t\"expires\": expiresAtUnixMs,\n\t}\n\tif openAIPayload[\"refresh\"] == \"\" {\n\t\topenAIPayload[\"refresh\"] = \"none\"\n\t}\n\n\tencodedOpenAI, err := json.Marshal(openAIPayload)\n\tif err != nil {\n\t\treturn err\n\t}\n\tauthMap[\"openai\"] = encodedOpenAI\n\n\tencoded, err := json.MarshalIndent(authMap, \"\", \"  \")\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := os.MkdirAll(filepath.Dir(trimmedPath), 0755); err != nil {\n\t\treturn err\n\t}\n\treturn os.WriteFile(trimmedPath, encoded, 0600)\n}\n\nfunc openAICredentialTypeFromAuthFile(authFilePath string) string {\n\tif strings.TrimSpace(authFilePath) == \"\" {\n\t\treturn \"unknown\"\n\t}\n\n\tdata, err := os.ReadFile(authFilePath)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn \"none\"\n\t\t}\n\t\tlog.Printf(\"[OPENCODE] Warning: failed reading auth file for diagnostics: %v\", err)\n\t\treturn \"unknown\"\n\t}\n\n\ttype authTypeProbe struct {\n\t\tType string `json:\"type\"`\n\t}\n\tvar authMap map[string]json.RawMessage\n\tif err := json.Unmarshal(data, &authMap); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: failed parsing auth file for diagnostics: %v\", err)\n\t\treturn \"unknown\"\n\t}\n\n\traw, ok := authMap[\"openai\"]\n\tif !ok {\n\t\treturn \"none\"\n\t}\n\tif len(bytes.TrimSpace(raw)) == 0 || bytes.Equal(bytes.TrimSpace(raw), []byte(\"null\")) {\n\t\treturn \"none\"\n\t}\n\n\tvar probe authTypeProbe\n\tif err := json.Unmarshal(raw, &probe); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: failed parsing OpenAI auth payload for diagnostics: %v\", err)\n\t\treturn \"unknown\"\n\t}\n\n\tswitch strings.ToLower(strings.TrimSpace(probe.Type)) {\n\tcase \"oauth\":\n\t\treturn \"oauth\"\n\tcase \"api\":\n\t\treturn \"api\"\n\tcase \"\":\n\t\treturn \"unknown\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\nfunc cachedGlowbomOpenAIAuthMode() string {\n\tstate := getOpenCodeOpenAIAuthState()\n\tif !state.known {\n\t\treturn \"unknown\"\n\t}\n\tmode := normalizeOpenAIAuthMode(state.mode)\n\tif mode == \"\" {\n\t\treturn \"unknown\"\n\t}\n\treturn mode\n}\n\nfunc currentOpenCodeAuthStatus() openCodeAuthStatusResponse {\n\truntimePaths, err := glowbomOpenCodeRuntimePaths()\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: failed resolving runtime paths for auth diagnostics: %v\", err)\n\t}\n\n\tserverURL := \"http://\" + openCodeServerHostname() + \":\" + getAgentPort()\n\treturn openCodeAuthStatusResponse{\n\t\tServerRunning:         isServerRunning(serverURL),\n\t\tConfiguredDataHome:    runtimePaths.DataHome,\n\t\tConfiguredStateHome:   runtimePaths.StateHome,\n\t\tAuthFilePath:          runtimePaths.AuthFile,\n\t\tOpenAICredentialType:  openAICredentialTypeFromAuthFile(runtimePaths.AuthFile),\n\t\tCachedGlowbomAuthMode: cachedGlowbomOpenAIAuthMode(),\n\t}\n}\n\nfunc openCodeAuthStatusHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tjson.NewEncoder(w).Encode(currentOpenCodeAuthStatus())\n}\n\nfunc openCodeOpenAIOAuthStartHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeAuthOAuthStartRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil && !errors.Is(err, io.EOF) {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tredirectURI := openAIOAuthRedirectURI()\n\tif strings.EqualFold(strings.TrimSpace(redirectURI), openAIOAuthDefaultRedirectURI) {\n\t\tif err := ensureOpenAIOAuthLoopbackServer(); err != nil {\n\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\t}\n\n\tcodeVerifier, err := randomURLSafeBase64(32)\n\tif err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed creating OAuth verifier: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\tstate, err := randomURLSafeBase64(32)\n\tif err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed creating OAuth state: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tparams := neturl.Values{}\n\tparams.Set(\"response_type\", \"code\")\n\tparams.Set(\"client_id\", openAIOAuthClientID())\n\tparams.Set(\"redirect_uri\", redirectURI)\n\tparams.Set(\"scope\", \"openid profile email offline_access\")\n\tparams.Set(\"code_challenge\", sha256Base64URL(codeVerifier))\n\tparams.Set(\"code_challenge_method\", \"S256\")\n\tparams.Set(\"id_token_add_organizations\", \"true\")\n\tparams.Set(\"codex_cli_simplified_flow\", \"true\")\n\tparams.Set(\"state\", state)\n\tparams.Set(\"originator\", openAIOAuthOriginator())\n\n\tauthorizationURL := openAIOAuthIssuer + \"/oauth/authorize?\" + params.Encode()\n\n\tensureOpenAIOAuthSessionStore()\n\tnow := time.Now()\n\topenCodeOpenAIOAuthSessions.mu.Lock()\n\tcleanupExpiredOpenAIOAuthSessionsLocked(now)\n\topenCodeOpenAIOAuthSessions.sessions[state] = &openCodeOpenAIOAuthSession{\n\t\tState:        state,\n\t\tCodeVerifier: codeVerifier,\n\t\tRedirectURI:  redirectURI,\n\t\tProjectPath:  strings.TrimSpace(req.ProjectPath),\n\t\tCreatedAt:    now,\n\t\tPhase:        \"pending\",\n\t\tConnected:    false,\n\t\tError:        \"\",\n\t\tStatus:       currentOpenCodeAuthStatus(),\n\t}\n\topenCodeOpenAIOAuthSessions.mu.Unlock()\n\n\twriteJSON(w, OpenCodeAuthOAuthStartResponse{\n\t\tSuccess:          true,\n\t\tProvider:         \"chatgpt\",\n\t\tState:            state,\n\t\tAuthorizationURL: authorizationURL,\n\t\tRedirectURI:      redirectURI,\n\t})\n}\n\nfunc openCodeOpenAIOAuthStatusHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tstate := strings.TrimSpace(r.URL.Query().Get(\"state\"))\n\tif state == \"\" {\n\t\thttp.Error(w, \"state query parameter required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tensureOpenAIOAuthSessionStore()\n\topenCodeOpenAIOAuthSessions.mu.Lock()\n\tcleanupExpiredOpenAIOAuthSessionsLocked(time.Now())\n\tsession := openCodeOpenAIOAuthSessions.sessions[state]\n\tvar sessionCopy openCodeOpenAIOAuthSession\n\tif session != nil {\n\t\tsessionCopy = *session\n\t}\n\topenCodeOpenAIOAuthSessions.mu.Unlock()\n\n\tif session == nil {\n\t\thttp.Error(w, \"OAuth session not found or expired\", http.StatusNotFound)\n\t\treturn\n\t}\n\n\twriteJSON(w, OpenCodeAuthOAuthStatusResponse{\n\t\tSuccess:   sessionCopy.Phase != \"failed\",\n\t\tProvider:  \"chatgpt\",\n\t\tState:     sessionCopy.State,\n\t\tPhase:     sessionCopy.Phase,\n\t\tConnected: sessionCopy.Connected,\n\t\tStatus:    sessionCopy.Status,\n\t\tError:     sessionCopy.Error,\n\t})\n}\n\nfunc setOpenAIOAuthSessionFailed(state, message string) {\n\topenCodeOpenAIOAuthSessions.mu.Lock()\n\tif target := openCodeOpenAIOAuthSessions.sessions[state]; target != nil {\n\t\ttarget.Phase = \"failed\"\n\t\ttarget.Connected = false\n\t\ttarget.Error = strings.TrimSpace(message)\n\t\ttarget.CompletedAt = time.Now()\n\t\ttarget.Status = currentOpenCodeAuthStatus()\n\t}\n\topenCodeOpenAIOAuthSessions.mu.Unlock()\n}\n\nfunc setOpenAIOAuthSessionSucceeded(state string, status openCodeAuthStatusResponse) {\n\topenCodeOpenAIOAuthSessions.mu.Lock()\n\tif target := openCodeOpenAIOAuthSessions.sessions[state]; target != nil {\n\t\ttarget.Phase = \"succeeded\"\n\t\ttarget.Connected = status.OpenAICredentialType == \"oauth\" || status.CachedGlowbomAuthMode == \"codex-jwt\"\n\t\ttarget.Error = \"\"\n\t\ttarget.CompletedAt = time.Now()\n\t\ttarget.Status = status\n\t}\n\topenCodeOpenAIOAuthSessions.mu.Unlock()\n}\n\nfunc finalizeOpenAIOAuthCallback(state, code, oauthError, oauthErrorDescription string) (bool, string) {\n\tif state == \"\" {\n\t\treturn false, \"Missing OAuth state. Please restart login from Glowby OSS.\"\n\t}\n\n\tensureOpenAIOAuthSessionStore()\n\topenCodeOpenAIOAuthSessions.mu.Lock()\n\tcleanupExpiredOpenAIOAuthSessionsLocked(time.Now())\n\tsession := openCodeOpenAIOAuthSessions.sessions[state]\n\tif session == nil {\n\t\topenCodeOpenAIOAuthSessions.mu.Unlock()\n\t\treturn false, \"OAuth session expired. Restart login from Glowby OSS.\"\n\t}\n\n\tif session.Phase == \"succeeded\" {\n\t\topenCodeOpenAIOAuthSessions.mu.Unlock()\n\t\treturn true, \"ChatGPT account is already connected.\"\n\t}\n\tif session.Phase == \"failed\" {\n\t\tmessage := strings.TrimSpace(session.Error)\n\t\topenCodeOpenAIOAuthSessions.mu.Unlock()\n\t\tif message == \"\" {\n\t\t\tmessage = \"OAuth session failed. Please restart login.\"\n\t\t}\n\t\treturn false, message\n\t}\n\n\tcodeVerifier := session.CodeVerifier\n\tredirectURI := session.RedirectURI\n\tprojectPath := session.ProjectPath\n\topenCodeOpenAIOAuthSessions.mu.Unlock()\n\n\tif oauthError != \"\" {\n\t\tmessage := oauthError\n\t\tif oauthErrorDescription != \"\" {\n\t\t\tmessage += \": \" + oauthErrorDescription\n\t\t}\n\t\tsetOpenAIOAuthSessionFailed(state, message)\n\t\treturn false, \"Login was canceled or rejected. \" + message\n\t}\n\n\tif code == \"\" {\n\t\tsetOpenAIOAuthSessionFailed(state, \"Missing OAuth authorization code\")\n\t\treturn false, \"Missing authorization code from callback.\"\n\t}\n\n\tcredential, err := exchangeOpenAIOAuthCodeForCredential(code, codeVerifier, redirectURI)\n\tif err != nil {\n\t\tsetOpenAIOAuthSessionFailed(state, err.Error())\n\t\treturn false, \"Could not complete ChatGPT login. \" + err.Error()\n\t}\n\n\tif err := ensureOpenCodeServerReady(\n\t\tprojectPath,\n\t\t\"\",\n\t\tcredential.AccessToken,\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"codex-jwt\",\n\t\tcredential.RefreshToken,\n\t\tcredential.ExpiresAtReferenceSeconds,\n\t); err != nil {\n\t\tsetOpenAIOAuthSessionFailed(state, err.Error())\n\t\treturn false, \"ChatGPT login completed, but backend sync failed. \" + err.Error()\n\t}\n\n\tif runtimePaths, err := glowbomOpenCodeRuntimePaths(); err == nil {\n\t\tif persistErr := persistOpenAIOAuthToAuthFile(runtimePaths.AuthFile, credential); persistErr != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed persisting OpenAI OAuth credential from callback: %v\", persistErr)\n\t\t}\n\t}\n\n\tstatus := currentOpenCodeAuthStatus()\n\tsetOpenAIOAuthSessionSucceeded(state, status)\n\treturn true, \"ChatGPT account is now connected.\"\n}\n\nfunc openCodeOpenAIOAuthCallbackHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tsuccess, message := finalizeOpenAIOAuthCallback(\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"state\")),\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"code\")),\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"error\")),\n\t\tstrings.TrimSpace(r.URL.Query().Get(\"error_description\")),\n\t)\n\twriteOpenAIOAuthCallbackHTML(w, success, message)\n}\n\nfunc openCodeOpenAIConnectHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeAuthConnectRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tresolvedCredential, err := resolveOpenAIOAuthCredentialForConnect(req)\n\tif err != nil {\n\t\thttp.Error(w, err.Error(), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif err := ensureOpenCodeServerReady(\n\t\tstrings.TrimSpace(req.ProjectPath),\n\t\t\"\",\n\t\tresolvedCredential.AccessToken,\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"codex-jwt\",\n\t\tresolvedCredential.RefreshToken,\n\t\tresolvedCredential.ExpiresAtReferenceSeconds,\n\t); err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to connect ChatGPT auth: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tif runtimePaths, err := glowbomOpenCodeRuntimePaths(); err == nil {\n\t\tif persistErr := persistOpenAIOAuthToAuthFile(runtimePaths.AuthFile, resolvedCredential); persistErr != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed persisting OpenAI OAuth credential: %v\", persistErr)\n\t\t}\n\t}\n\n\twriteJSON(w, OpenCodeAuthConnectionResponse{\n\t\tSuccess:   true,\n\t\tProvider:  \"chatgpt\",\n\t\tConnected: true,\n\t\tStatus:    currentOpenCodeAuthStatus(),\n\t})\n}\n\nfunc openCodeOpenAIDisconnectHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeAuthDisconnectRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil && !errors.Is(err, io.EOF) {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif err := ensureOpenCodeServerReady(\n\t\tstrings.TrimSpace(req.ProjectPath),\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"\",\n\t\t\"api-key\",\n\t\t\"\",\n\t\t0,\n\t); err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to disconnect ChatGPT auth: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tif runtimePaths, err := glowbomOpenCodeRuntimePaths(); err == nil {\n\t\tif clearErr := clearOpenAIAuthFromAuthFile(runtimePaths.AuthFile); clearErr != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed clearing OpenAI auth file after disconnect: %v\", clearErr)\n\t\t}\n\t}\n\n\twriteJSON(w, OpenCodeAuthConnectionResponse{\n\t\tSuccess:   true,\n\t\tProvider:  \"chatgpt\",\n\t\tConnected: false,\n\t\tStatus:    currentOpenCodeAuthStatus(),\n\t})\n}\n\n// openCodeHealthHandler checks if OpenCode server is running\nfunc openCodeHealthHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tdriver := GetOpenCodeDriver()\n\tctx := r.Context()\n\n\tif err := driver.CheckHealth(ctx); err != nil {\n\t\t// Try to start server automatically with env vars (fallback)\n\t\tlog.Printf(\"[OPENCODE] Server unhealthy, attempting auto-start...\")\n\t\tif startErr := startOpenCodeServer(os.Getenv(\"OPENAI_API_KEY\"), os.Getenv(\"ANTHROPIC_API_KEY\"), os.Getenv(\"GEMINI_API_KEY\"), os.Getenv(\"FIREWORKS_API_KEY\"), os.Getenv(\"OPENROUTER_API_KEY\"), os.Getenv(\"OPENCODE_API_KEY\"), os.Getenv(\"XAI_API_KEY\"), \"\", \"\"); startErr != nil {\n\t\t\tw.WriteHeader(http.StatusServiceUnavailable)\n\t\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\t\"healthy\": false,\n\t\t\t\t\"error\":   err.Error(),\n\t\t\t\t\"hint\":    \"Failed to auto-start server. Install OpenCode CLI and ensure API keys are set.\",\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Wait and retry health check\n\t\ttime.Sleep(3 * time.Second)\n\t\tif err := driver.CheckHealth(ctx); err != nil {\n\t\t\tw.WriteHeader(http.StatusServiceUnavailable)\n\t\t\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\t\t\"healthy\": false,\n\t\t\t\t\"error\":   err.Error(),\n\t\t\t\t\"hint\":    \"Server started but not responding. Check logs.\",\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n\n\tjson.NewEncoder(w).Encode(map[string]interface{}{\n\t\t\"healthy\": true,\n\t\t\"server\":  driver.serverURL,\n\t})\n}\n\nfunc openAIModelsHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenAIModelsRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif strings.TrimSpace(req.OpenAIAuthMode) == \"\" {\n\t\treq.OpenAIAuthMode = \"api-key\"\n\t}\n\n\tif normalizeOpenAIAuthMode(req.OpenAIAuthMode) == \"codex-jwt\" && strings.TrimSpace(req.OpenAIKey) == \"\" {\n\t\tresolvedCredential, err := resolveOpenAIOAuthCredentialForConnect(OpenCodeAuthConnectRequest{\n\t\t\tProjectPath:        req.ProjectPath,\n\t\t\tOpenAIKey:          req.OpenAIKey,\n\t\t\tOpenAIRefreshToken: req.OpenAIRefreshToken,\n\t\t\tOpenAIExpiresAt:    req.OpenAIExpiresAt,\n\t\t})\n\t\tif err != nil {\n\t\t\thttp.Error(w, \"ChatGPT account is not connected. Connect first.\", http.StatusBadRequest)\n\t\t\treturn\n\t\t}\n\t\treq.OpenAIKey = resolvedCredential.AccessToken\n\t\tif strings.TrimSpace(req.OpenAIRefreshToken) == \"\" {\n\t\t\treq.OpenAIRefreshToken = resolvedCredential.RefreshToken\n\t\t}\n\t\tif req.OpenAIExpiresAt <= 0 {\n\t\t\treq.OpenAIExpiresAt = resolvedCredential.ExpiresAtReferenceSeconds\n\t\t}\n\t}\n\n\tif err := ensureOpenCodeServerReady(req.ProjectPath, \"\", req.OpenAIKey, req.AnthropicKey, req.GeminiKey, \"\", \"\", \"\", \"\", req.OpenAIAuthMode, req.OpenAIRefreshToken, req.OpenAIExpiresAt); err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to prepare OpenCode server: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tparams := opencode.AppProvidersParams{}\n\tif dir := strings.TrimSpace(req.ProjectPath); dir != \"\" {\n\t\tparams.Directory = opencode.F(dir)\n\t}\n\n\tprovidersResp, err := driver.client.App.Providers(r.Context(), params)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Failed to fetch providers: %v\", err)\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to fetch provider models: %v\", err), http.StatusBadGateway)\n\t\treturn\n\t}\n\n\tvar openaiProvider *opencode.Provider\n\tfor i := range providersResp.Providers {\n\t\tp := &providersResp.Providers[i]\n\t\tif strings.EqualFold(p.ID, \"openai\") {\n\t\t\topenaiProvider = p\n\t\t\tbreak\n\t\t}\n\t}\n\n\tallowlistModelIDs := make([]string, 0, len(openAIChatGPTModelAllowlist))\n\tfor id := range openAIChatGPTModelAllowlist {\n\t\tallowlistModelIDs = append(allowlistModelIDs, id)\n\t}\n\tsort.Strings(allowlistModelIDs)\n\n\tproviderModelIDs := make([]string, 0)\n\tif openaiProvider != nil {\n\t\tproviderModelIDs = make([]string, 0, len(openaiProvider.Models))\n\t\tfor id := range openaiProvider.Models {\n\t\t\tproviderModelIDs = append(providerModelIDs, id)\n\t\t}\n\t\tsort.Strings(providerModelIDs)\n\t}\n\n\tmodels := make([]OpenAIModelOption, 0, len(openAIChatGPTModelAllowlist))\n\tif openaiProvider != nil {\n\t\tfor _, id := range allowlistModelIDs {\n\t\t\tmodel, ok := openaiProvider.Models[id]\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tallowName := openAIChatGPTModelAllowlist[id]\n\t\t\tname := strings.TrimSpace(model.Name)\n\t\t\tif name == \"\" {\n\t\t\t\tname = allowName\n\t\t\t}\n\t\t\tmodels = append(models, OpenAIModelOption{\n\t\t\t\tID:          id,\n\t\t\t\tDisplayName: name,\n\t\t\t})\n\t\t}\n\t}\n\n\tfallbackUsed := false\n\t// Fallback to allowlist defaults if provider call returns no matching models.\n\tif len(models) == 0 {\n\t\tfallbackUsed = true\n\t\tfor _, id := range allowlistModelIDs {\n\t\t\tname := openAIChatGPTModelAllowlist[id]\n\t\t\tmodels = append(models, OpenAIModelOption{\n\t\t\t\tID:          id,\n\t\t\t\tDisplayName: name,\n\t\t\t})\n\t\t}\n\t}\n\n\tmodels, addedForwardCompatIDs := appendOpenAICodexForwardCompatModels(models, providerModelIDs, req.OpenAIAuthMode)\n\n\tmatchedModelIDs := make([]string, 0, len(models))\n\tfor _, model := range models {\n\t\tmatchedModelIDs = append(matchedModelIDs, model.ID)\n\t}\n\tsort.Strings(matchedModelIDs)\n\n\tsort.Slice(models, func(i, j int) bool {\n\t\tif models[i].DisplayName == models[j].DisplayName {\n\t\t\treturn models[i].ID < models[j].ID\n\t\t}\n\t\treturn models[i].DisplayName < models[j].DisplayName\n\t})\n\n\tdebugInfo := OpenAIModelsDebug{\n\t\tAuthMode:              req.OpenAIAuthMode,\n\t\tProviderFound:         openaiProvider != nil,\n\t\tProviderModelCount:    len(providerModelIDs),\n\t\tProviderModelSample:   previewStringList(providerModelIDs, 12),\n\t\tAllowlistModelIDs:     allowlistModelIDs,\n\t\tMatchedModelIDs:       matchedModelIDs,\n\t\tAddedForwardCompatIDs: addedForwardCompatIDs,\n\t\tUsedFallbackAllowlist: fallbackUsed,\n\t}\n\n\tlog.Printf(\n\t\t\"[OPENCODE] OpenAI model fetch authMode=%s providerFound=%t providerModelCount=%d matched=%d fallback=%t addedForwardCompat=[%s] providerSample=[%s] matchedIDs=[%s]\",\n\t\tdebugInfo.AuthMode,\n\t\tdebugInfo.ProviderFound,\n\t\tdebugInfo.ProviderModelCount,\n\t\tlen(debugInfo.MatchedModelIDs),\n\t\tdebugInfo.UsedFallbackAllowlist,\n\t\tstrings.Join(debugInfo.AddedForwardCompatIDs, \", \"),\n\t\tstrings.Join(debugInfo.ProviderModelSample, \", \"),\n\t\tstrings.Join(debugInfo.MatchedModelIDs, \", \"),\n\t)\n\n\tresp := OpenAIModelsResponse{\n\t\tProvider:  \"openai\",\n\t\tSource:    \"opencode-config/providers\",\n\t\tModels:    models,\n\t\tFetchedAt: time.Now().UTC().Format(time.RFC3339),\n\t\tDebug:     debugInfo,\n\t}\n\n\twriteJSON(w, resp)\n}\n\nfunc openCodeAvailableModelsHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeAvailableModelsRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif strings.TrimSpace(req.OpenAIAuthMode) == \"\" {\n\t\treq.OpenAIAuthMode = \"opencode-config\"\n\t}\n\n\tif err := ensureOpenCodeServerReady(\n\t\treq.ProjectPath,\n\t\t\"\",\n\t\treq.OpenAIKey,\n\t\treq.AnthropicKey,\n\t\treq.GeminiKey,\n\t\treq.FireworksKey,\n\t\treq.OpenRouterKey,\n\t\treq.OpenCodeZenKey,\n\t\treq.XaiKey,\n\t\treq.OpenAIAuthMode,\n\t\treq.OpenAIRefreshToken,\n\t\treq.OpenAIExpiresAt,\n\t); err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to prepare OpenCode server: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tparams := opencode.AppProvidersParams{}\n\tif dir := strings.TrimSpace(req.ProjectPath); dir != \"\" {\n\t\tparams.Directory = opencode.F(dir)\n\t}\n\n\tprovidersResp, err := driver.client.App.Providers(r.Context(), params)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Failed to fetch providers for available model catalog: %v\", err)\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to fetch providers: %v\", err), http.StatusBadGateway)\n\t\treturn\n\t}\n\n\tproviders := make([]OpenCodeProviderOption, 0, len(providersResp.Providers))\n\tfor _, provider := range providersResp.Providers {\n\t\tmodels := make([]OpenCodeProviderModelOption, 0, len(provider.Models))\n\t\tfor modelID, model := range provider.Models {\n\t\t\tdisplayName := strings.TrimSpace(model.Name)\n\t\t\tif displayName == \"\" {\n\t\t\t\tdisplayName = modelID\n\t\t\t}\n\t\t\tmodels = append(models, OpenCodeProviderModelOption{\n\t\t\t\tID:          modelID,\n\t\t\t\tDisplayName: displayName,\n\t\t\t})\n\t\t}\n\n\t\tsort.Slice(models, func(i, j int) bool {\n\t\t\tif models[i].DisplayName == models[j].DisplayName {\n\t\t\t\treturn models[i].ID < models[j].ID\n\t\t\t}\n\t\t\treturn models[i].DisplayName < models[j].DisplayName\n\t\t})\n\n\t\tdisplayName := strings.TrimSpace(provider.Name)\n\t\tif displayName == \"\" {\n\t\t\tdisplayName = provider.ID\n\t\t}\n\n\t\tproviders = append(providers, OpenCodeProviderOption{\n\t\t\tID:          provider.ID,\n\t\t\tDisplayName: displayName,\n\t\t\tModels:      models,\n\t\t})\n\t}\n\n\tsort.Slice(providers, func(i, j int) bool {\n\t\tif providers[i].DisplayName == providers[j].DisplayName {\n\t\t\treturn providers[i].ID < providers[j].ID\n\t\t}\n\t\treturn providers[i].DisplayName < providers[j].DisplayName\n\t})\n\n\twriteJSON(w, OpenCodeAvailableModelsResponse{\n\t\tSource:    \"opencode-config/providers\",\n\t\tProviders: providers,\n\t\tFetchedAt: time.Now().UTC().Format(time.RFC3339),\n\t})\n}\n\n// OpenCodeAgentRequest represents a request for agent operations (refine/verify)\ntype OpenCodeAgentRequest struct {\n\tProjectPath                         string   `json:\"projectPath\"`\n\tSessionID                           string   `json:\"sessionID,omitempty\"`    // Reuse existing session if provided\n\tInstructions                        string   `json:\"instructions,omitempty\"` // Optional user instructions\n\tPersistCurrentInstructionsToHistory bool     `json:\"persistCurrentInstructionsToHistory,omitempty\"`\n\tInstructionAttachmentPaths          []string `json:\"instructionAttachmentPaths,omitempty\"`\n\tModel                               string   `json:\"model,omitempty\"`\n\tAnthropicKey                        string   `json:\"anthropicKey,omitempty\"`\n\tOpenAIKey                           string   `json:\"openaiKey,omitempty\"`\n\tOpenAIImageKey                      string   `json:\"openaiImageKey,omitempty\"` // plain API key for image gen (codex-jwt lacks image scope)\n\tGeminiKey                           string   `json:\"geminiKey,omitempty\"`\n\tFireworksKey                        string   `json:\"fireworksKey,omitempty\"`\n\tOpenRouterKey                       string   `json:\"openrouterKey,omitempty\"`\n\tOpenCodeZenKey                      string   `json:\"opencodeZenKey,omitempty\"`\n\tXaiKey                              string   `json:\"xaiKey,omitempty\"`\n\tVeoGeminiKey                        string   `json:\"veoGeminiKey,omitempty\"`\n\tElevenLabsKey                       string   `json:\"elevenLabsKey,omitempty\"`\n\tElevenLabsVoiceID                   string   `json:\"elevenLabsVoiceID,omitempty\"`\n\tElevenLabsVoiceModel                string   `json:\"elevenLabsVoiceModel,omitempty\"`\n\tImageSource                         string   `json:\"imageSource,omitempty\"`\n\tReferenceImagePath                  string   `json:\"referenceImagePath,omitempty\"`\n\tReferenceAssetID                    string   `json:\"referenceAssetID,omitempty\"`\n\tOpenAIAuthMode                      string   `json:\"openaiAuthMode,omitempty\"`     // \"api-key\" | \"codex-jwt\" | \"opencode-config\"\n\tOpenAIAccountID                     string   `json:\"openaiAccountID,omitempty\"`    // chatgpt_account_id for JWT mode\n\tOpenAIRefreshToken                  string   `json:\"openaiRefreshToken,omitempty\"` // refresh token for OpenCode auth sync\n\tOpenAIExpiresAt                     float64  `json:\"openaiExpiresAt,omitempty\"`    // token expiry (seconds since reference date)\n}\n\n// openCodeRefineHandler handles refine requests - uses agent to improve code\nfunc openCodeRefineHandler(w http.ResponseWriter, r *http.Request) {\n\tlog.Printf(\"[OPENCODE] Received refine request\")\n\tif r.Method != http.MethodPost {\n\t\tlog.Printf(\"[OPENCODE] Error: Method not allowed: %s\", r.Method)\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeAgentRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Invalid JSON body: %v\", err)\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif req.ProjectPath == \"\" {\n\t\tlog.Printf(\"[OPENCODE] Error: projectPath is required\")\n\t\thttp.Error(w, \"projectPath is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// Verify project exists\n\tpaths := GetProjectPaths(req.ProjectPath)\n\tif _, err := os.Stat(paths.Manifest); os.IsNotExist(err) {\n\t\tlog.Printf(\"[OPENCODE] Error: Not a Glowbom project at %s\", req.ProjectPath)\n\t\thttp.Error(w, \"Not a Glowbom project (missing glowbom.json)\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\ttrimmedInstructions := strings.TrimSpace(req.Instructions)\n\tshouldPrepareCurrentInstructions := trimmedInstructions != \"\" || hasAnyInstructionAttachmentPath(req.InstructionAttachmentPaths)\n\tif shouldPrepareCurrentInstructions {\n\t\tif err := resetCurrentInstructionsDirectory(req.ProjectPath); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Error: failed preparing current_instructions: %v\", err)\n\t\t\thttp.Error(w, fmt.Sprintf(\"Failed to prepare current_instructions: %v\", err), http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\t}\n\n\tstagedInstructionAttachments, err := stageInstructionAttachments(req.ProjectPath, req.InstructionAttachmentPaths)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: invalid instruction attachments: %v\", err)\n\t\thttp.Error(w, err.Error(), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tstagedInstructionPath, err := stageInstructionTextFile(req.ProjectPath, trimmedInstructions)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: invalid instructions file staging: %v\", err)\n\t\thttp.Error(w, err.Error(), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\teffectiveInstructions := req.Instructions\n\tif stagedInstructionPath != \"\" || len(stagedInstructionAttachments) > 0 {\n\t\teffectiveInstructions = mergeInstructionAttachmentContext(req.Instructions, stagedInstructionPath, stagedInstructionAttachments)\n\t}\n\n\tshouldPersistCurrentInstructionsHistory := req.PersistCurrentInstructionsToHistory && shouldPrepareCurrentInstructions\n\thistoryStatus := \"failed\"\n\thistorySummary := \"\"\n\tif shouldPersistCurrentInstructionsHistory {\n\t\tdefer func() {\n\t\t\tif err := persistCurrentInstructionsHistory(req.ProjectPath, trimmedInstructions, historyStatus, historySummary); err != nil {\n\t\t\t\tlog.Printf(\"[OPENCODE] Warning: failed archiving current_instructions to history: %v\", err)\n\t\t\t}\n\t\t}()\n\t}\n\n\tif err := ensureOpenCodeServerReady(req.ProjectPath, req.Model, req.OpenAIKey, req.AnthropicKey, req.GeminiKey, req.FireworksKey, req.OpenRouterKey, req.OpenCodeZenKey, req.XaiKey, req.OpenAIAuthMode, req.OpenAIRefreshToken, req.OpenAIExpiresAt); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Failed preparing OpenCode server: %v\", err)\n\t\thistorySummary = \"Failed to prepare OpenCode server.\"\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to prepare OpenCode server: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tlog.Printf(\"[OPENCODE] Starting refinement for project: %s\", req.ProjectPath)\n\tif req.Instructions != \"\" {\n\t\tlog.Printf(\"[OPENCODE] Custom instructions provided (%d chars)\", len(req.Instructions))\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] No custom instructions provided\")\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tctx := r.Context()\n\n\t// Set up SSE headers\n\tw.Header().Set(\"Content-Type\", \"text/event-stream\")\n\tw.Header().Set(\"Cache-Control\", \"no-cache\")\n\tw.Header().Set(\"Connection\", \"keep-alive\")\n\n\tflusher, ok := w.(http.Flusher)\n\tif !ok {\n\t\tlog.Printf(\"[OPENCODE] Error: Streaming not supported\")\n\t\thistorySummary = \"Streaming not supported by HTTP response writer.\"\n\t\thttp.Error(w, \"Streaming not supported\", http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Starting refinement with OpenCode agent...\"})\n\tif req.Instructions != \"\" {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📋 Custom instructions: %s\", req.Instructions)})\n\t}\n\tif stagedInstructionPath != \"\" {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": fmt.Sprintf(\"📝 Staged: %s\", stagedInstructionPath),\n\t\t})\n\t}\n\tfor _, attachment := range stagedInstructionAttachments {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": fmt.Sprintf(\"📎 Attached: %s (%s)\", attachment.RelativePath, humanReadableBytes(attachment.SizeBytes)),\n\t\t})\n\t}\n\n\t// Reuse existing session or create a new one\n\tsession, reusedSession, err := driver.resolveRefineSession(ctx, req.ProjectPath, req.SessionID)\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Failed to prepare session: %v\", err)\n\t\thistorySummary = userFacingAgentErrorMessage(err.Error())\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": userFacingAgentErrorMessage(err.Error())})\n\t\treturn\n\t}\n\tif reusedSession {\n\t\tlog.Printf(\"[OPENCODE] Reusing existing session: %s\", session.ID)\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Session resumed: %s\", session.ID)})\n\t} else {\n\t\tif strings.TrimSpace(req.SessionID) != \"\" {\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Previous session was unavailable. Starting a new session.\"})\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Session created: %s\", session.ID)})\n\t\tlog.Printf(\"[OPENCODE] Session created for refinement: %s\", session.ID)\n\t}\n\n\t// Build refine prompt\n\tprompt := buildRefinePrompt(req.ProjectPath, effectiveInstructions)\n\tlog.Printf(\"[OPENCODE] Built refine prompt (%d chars)\", len(prompt))\n\n\tauthMode := normalizeOpenAIAuthMode(req.OpenAIAuthMode)\n\trequestedModel := strings.TrimSpace(req.Model)\n\tuseConfiguredDefaultModel := requestedModel == \"\" && authMode == \"opencode-config\"\n\n\tmodelID := \"\"\n\tproviderID := \"\"\n\tfallbackNote := \"\"\n\tforwardCompatRegistryWarning := \"\"\n\n\tif useConfiguredDefaultModel {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Using OpenCode configured default model.\"})\n\t\tlog.Printf(\"[OPENCODE] Using OpenCode configured default model for refinement\")\n\t} else {\n\t\t// Determine model\n\t\tmodelID, providerID, fallbackNote = resolveSessionModelForRequest(req.ProjectPath, req.Model)\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Using model: %s/%s\", providerID, modelID)})\n\t\tlog.Printf(\"[OPENCODE] Using model for refinement: %s/%s\", providerID, modelID)\n\t\tif fallbackNote != \"\" {\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"⚠️ \" + fallbackNote})\n\t\t}\n\t\tif strings.EqualFold(providerID, \"openai\") && isOpenAICodexForwardCompatModelID(modelID) {\n\t\t\tprobe, probeErr := probeOpenCodeProviderModel(req.ProjectPath, providerID, modelID)\n\t\t\tif probeErr != nil {\n\t\t\t\tlog.Printf(\"[OPENCODE] Warning: failed probing provider registry for %s/%s: %v\", providerID, modelID, probeErr)\n\t\t\t} else if probe.ProviderFound && !probe.ModelRegistered {\n\t\t\t\tforwardCompatRegistryWarning = fmt.Sprintf(\"⚠️  OpenCode registry does not list %s yet; using forward-compat template. If this run no-ops, update OpenCode or fall back to openai/gpt-5.3-codex.\", modelID)\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": forwardCompatRegistryWarning})\n\t\t\t\tlog.Printf(\"[OPENCODE] Forward-compat registry miss for %s/%s providerSample=[%s]\", providerID, modelID, strings.Join(probe.ProviderModelSample, \", \"))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Capture a pre-run snapshot so we can recover changed files when stream file events are missing.\n\tpreRunSnapshot, snapshotErr := captureProjectFileSnapshot(req.ProjectPath)\n\tif snapshotErr != nil {\n\t\tlog.Printf(\"[OPENCODE] Warning: Failed to capture pre-run snapshot: %v\", snapshotErr)\n\t}\n\n\t// Start event stream in background BEFORE sending prompt to avoid race condition\n\tlog.Printf(\"[OPENCODE] Starting event stream listener...\")\n\ttype sessionStreamResult struct {\n\t\tcompleted    bool\n\t\tchangedFiles []string\n\t\thadActivity  bool\n\t\terrorMessage string\n\t}\n\teventStreamDone := make(chan sessionStreamResult, 1)\n\tpromptDispatched := make(chan struct{})\n\n\tgo func() {\n\t\tcompleted, changedFiles, hadActivity, errorMessage := driver.streamEventsAndWaitForCompletion(ctx, w, flusher, req.ProjectPath, session.ID, promptDispatched)\n\t\teventStreamDone <- sessionStreamResult{\n\t\t\tcompleted:    completed,\n\t\t\tchangedFiles: changedFiles,\n\t\t\thadActivity:  hadActivity,\n\t\t\terrorMessage: errorMessage,\n\t\t}\n\t}()\n\n\t// Small delay to ensure event stream connects first\n\ttime.Sleep(100 * time.Millisecond)\n\n\t// Now send the prompt (this returns immediately, agent works asynchronously)\n\tlog.Printf(\"[OPENCODE] Sending refine prompt\")\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Agent is analyzing and refining the project...\"})\n\n\tpromptParams := opencode.SessionPromptParams{\n\t\tParts: opencode.F([]opencode.SessionPromptParamsPartUnion{\n\t\t\topencode.TextPartInputParam{\n\t\t\t\tType: opencode.F(opencode.TextPartInputTypeText),\n\t\t\t\tText: opencode.F(prompt),\n\t\t\t},\n\t\t}),\n\t\tDirectory: opencode.F(req.ProjectPath),\n\t}\n\tif !useConfiguredDefaultModel {\n\t\tpromptParams.Model = opencode.F(opencode.SessionPromptParamsModel{\n\t\t\tModelID:    opencode.F(modelID),\n\t\t\tProviderID: opencode.F(providerID),\n\t\t})\n\t}\n\n\t_, err = driver.sendSessionPrompt(ctx, session.ID, promptParams)\n\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Refine failed: %v\", err)\n\t\thistorySummary = userFacingAgentErrorMessage(err.Error())\n\t\tif isUsageLimitErrorMessage(err.Error()) {\n\t\t\tgo driver.abortSessionBestEffort(session.ID, req.ProjectPath, \"usage limit while sending refine prompt\")\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": userFacingAgentErrorMessage(err.Error())})\n\t\treturn\n\t}\n\tclose(promptDispatched)\n\n\tlog.Printf(\"[OPENCODE] Prompt sent, agent is now working...\")\n\n\t// Wait for event stream goroutine to complete\n\tstreamResult := <-eventStreamDone\n\tsessionCompleted := streamResult.completed\n\tchangedFiles := streamResult.changedFiles\n\tsessionHadActivity := streamResult.hadActivity\n\n\tif !sessionCompleted {\n\t\tsessionErr := userFacingAgentErrorMessage(streamResult.errorMessage)\n\t\tif strings.TrimSpace(sessionErr) == \"\" || strings.EqualFold(sessionErr, \"Unknown error occurred\") {\n\t\t\tsessionErr = \"Session did not complete\"\n\t\t}\n\t\tlog.Printf(\"[OPENCODE] Session did not complete successfully\")\n\t\thistorySummary = sessionErr\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"done\":    true,\n\t\t\t\"success\": false,\n\t\t\t\"error\":   sessionErr,\n\t\t})\n\t\treturn\n\t}\n\n\tif !sessionHadActivity {\n\t\twarn := \"⚠️  Session reached idle without assistant/tool activity. The selected model may be only partially supported by this OpenCode server build.\"\n\t\tif forwardCompatRegistryWarning != \"\" {\n\t\t\twarn = \"⚠️  Session reached idle with no assistant/tool activity while using forward-compat model mapping. Try openai/gpt-5.3-codex or update OpenCode.\"\n\t\t}\n\t\tif useConfiguredDefaultModel {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: %s session=%s model=(configured default)\", warn, session.ID)\n\t\t} else {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: %s session=%s model=%s/%s\", warn, session.ID, providerID, modelID)\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": warn})\n\t}\n\n\tif len(changedFiles) == 0 && preRunSnapshot != nil {\n\t\tsnapshotChanges, err := detectChangedFilesFromSnapshot(req.ProjectPath, preRunSnapshot)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: Failed snapshot fallback: %v\", err)\n\t\t} else if len(snapshotChanges) > 0 {\n\t\t\tchangedFiles = snapshotChanges\n\t\t\tlog.Printf(\"[OPENCODE] Recovered changed files from snapshot fallback: %d\", len(changedFiles))\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📡 Recovered %d changed files via snapshot fallback\", len(changedFiles))})\n\t\t}\n\t}\n\n\tif len(changedFiles) > 0 {\n\t\tlog.Printf(\"[OPENCODE] Files changed from stream events: %d\", len(changedFiles))\n\t\tfor _, file := range changedFiles {\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📄 Modified: %s\", file)})\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] Warning: No files were modified\")\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"⚠️  No direct file updates detected in primary pass; running post-pass reconciliation checks...\"})\n\t}\n\n\tprototypeChanged := detectPrototypeChanged(changedFiles)\n\tshouldRunMediaPostPass := prototypeChanged || prototypeContainsMediaPlaceholders(req.ProjectPath)\n\tmediaPostPassSummary := map[string]interface{}{\n\t\t\"generated\": 0,\n\t\t\"reused\":    0,\n\t\t\"warnings\":  []string{},\n\t}\n\tassetPlacementSummary := map[string]interface{}{\n\t\t\"ran\":      false,\n\t\t\"success\":  false,\n\t\t\"files\":    []string{},\n\t\t\"warnings\": []string{},\n\t}\n\tplatformAssetsSynced := false\n\tmediaGeneratedCount := 0\n\tmediaReusedCount := 0\n\n\tif shouldRunMediaPostPass {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"🪄 Running media post-pass (image/video/audio materialization + platform sync)...\"})\n\n\t\t// Prefer plain API key for image generation (codex-jwt lacks image scope)\n\t\timageKey := strings.TrimSpace(req.OpenAIImageKey)\n\t\tif imageKey == \"\" {\n\t\t\timageKey = req.OpenAIKey\n\t\t}\n\t\tpostPassResp, postPassErr := runOpenCodeMediaPostPass(ctx, OpenCodeMediaPostPassRequest{\n\t\t\tProjectPath:          req.ProjectPath,\n\t\t\tImageSource:          req.ImageSource,\n\t\t\tOpenAIKey:            imageKey,\n\t\t\tGeminiKey:            req.GeminiKey,\n\t\t\tXaiKey:               req.XaiKey,\n\t\t\tVeoGeminiKey:         req.VeoGeminiKey,\n\t\t\tElevenLabsKey:        req.ElevenLabsKey,\n\t\t\tElevenLabsVoiceID:    req.ElevenLabsVoiceID,\n\t\t\tElevenLabsVoiceModel: req.ElevenLabsVoiceModel,\n\t\t\tReferenceImagePath:   req.ReferenceImagePath,\n\t\t\tReferenceAssetID:     req.ReferenceAssetID,\n\t\t\tScanTargets:          []string{\"prototype/index.html\"},\n\t\t})\n\t\tif postPassErr != nil {\n\t\t\twarning := sanitizeProviderError(postPassErr)\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"⚠️  Media post-pass failed: %s\", warning)})\n\t\t\tmediaPostPassSummary[\"warnings\"] = []string{warning}\n\t\t} else {\n\t\t\tprototypeChanged = prototypeChanged || postPassResp.PrototypeChanged\n\t\t\tplatformAssetsSynced = postPassResp.PlatformAssetsSynced\n\t\t\tmediaGeneratedCount = len(postPassResp.GeneratedAssets)\n\t\t\tmediaReusedCount = len(postPassResp.ReusedStudioAssets)\n\t\t\tmediaPostPassSummary = map[string]interface{}{\n\t\t\t\t\"generated\": mediaGeneratedCount,\n\t\t\t\t\"reused\":    mediaReusedCount,\n\t\t\t\t\"warnings\":  postPassResp.Warnings,\n\t\t\t}\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"output\": fmt.Sprintf(\"🧩 Media post-pass: generated %d, reused %d, platform copies %d\",\n\t\t\t\t\tmediaGeneratedCount,\n\t\t\t\t\tmediaReusedCount,\n\t\t\t\t\tlen(postPassResp.PlatformCopies),\n\t\t\t\t),\n\t\t\t})\n\t\t\tfor _, warning := range postPassResp.Warnings {\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"⚠️  %s\", warning)})\n\t\t\t}\n\t\t}\n\t}\n\n\tif mediaGeneratedCount+mediaReusedCount > 0 {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": \"🧭 Running asset placement reconciliation across prototype and platform code...\",\n\t\t})\n\t\tassetPlacementSummary[\"ran\"] = true\n\t\tif useConfiguredDefaultModel {\n\t\t\twarning := \"Asset placement reconciliation skipped when using OpenCode configured default model without explicit provider/model.\"\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"⚠️  \" + warning})\n\t\t\tassetPlacementSummary[\"warnings\"] = []string{warning}\n\t\t\tassetPlacementSummary[\"success\"] = true\n\t\t\tassetPlacementSummary[\"files\"] = []string{}\n\t\t} else {\n\t\t\treconciledFiles, reconcileWarnings, reconcileErr := driver.runAssetPlacementReconcilePass(\n\t\t\t\tctx,\n\t\t\t\treq.ProjectPath,\n\t\t\t\tsession.ID,\n\t\t\t\tmodelID,\n\t\t\t\tproviderID,\n\t\t\t\tw,\n\t\t\t\tflusher,\n\t\t\t)\n\t\t\tif reconcileErr != nil {\n\t\t\t\twarning := sanitizeProviderError(reconcileErr)\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\t\"output\": fmt.Sprintf(\"⚠️  Asset placement pass failed: %s\", warning),\n\t\t\t\t})\n\t\t\t\tassetPlacementSummary[\"warnings\"] = append(reconcileWarnings, warning)\n\t\t\t} else {\n\t\t\t\tassetPlacementSummary[\"success\"] = true\n\t\t\t\tif len(reconciledFiles) > 0 {\n\t\t\t\t\tchangedFiles = mergeChangedFiles(changedFiles, reconciledFiles)\n\t\t\t\t\tprototypeChanged = prototypeChanged || detectPrototypeChanged(reconciledFiles)\n\t\t\t\t\tfor _, file := range reconciledFiles {\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📌 Reconciled: %s\", file)})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif len(reconcileWarnings) > 0 {\n\t\t\t\t\tfor _, warning := range reconcileWarnings {\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"⚠️  %s\", warning)})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tassetPlacementSummary[\"warnings\"] = reconcileWarnings\n\t\t\t}\n\n\t\t\tif files, ok := assetPlacementSummary[\"files\"].([]string); ok {\n\t\t\t\tassetPlacementSummary[\"files\"] = append(files, reconciledFiles...)\n\t\t\t} else {\n\t\t\t\tassetPlacementSummary[\"files\"] = reconciledFiles\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for implementation report and display it\n\treportPath := filepath.Join(req.ProjectPath, \"IMPLEMENTATION_REPORT.md\")\n\tif reportContent, err := os.ReadFile(reportPath); err == nil {\n\t\tlog.Printf(\"[OPENCODE] Found implementation report at %s\", reportPath)\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": \"📋 Implementation Report:\",\n\t\t})\n\t\t// Send report content as separate lines for better readability\n\t\tlines := strings.Split(string(reportContent), \"\\n\")\n\t\tfor _, line := range lines {\n\t\t\tif line != \"\" {\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": line})\n\t\t\t}\n\t\t}\n\t}\n\n\t// Send completion\n\thistoryStatus = \"completed\"\n\thistorySummary = fmt.Sprintf(\"✅ Refinement completed. %d file(s) changed.\", len(changedFiles))\n\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\"done\":                 true,\n\t\t\"success\":              true,\n\t\t\"output\":               \"✅ Refinement completed!\",\n\t\t\"files\":                len(changedFiles),\n\t\t\"changedFiles\":         changedFiles,\n\t\t\"noActivityObserved\":   !sessionHadActivity,\n\t\t\"forwardCompatWarning\": forwardCompatRegistryWarning,\n\t\t\"prototypeChanged\":     prototypeChanged,\n\t\t\"platformAssetsSynced\": platformAssetsSynced,\n\t\t\"mediaPostPass\":        mediaPostPassSummary,\n\t\t\"assetPlacementPass\":   assetPlacementSummary,\n\t\t\"restartPrototype\":     prototypeChanged,\n\t})\n}\n\n// openCodeVerifyHandler handles verify requests - runs build and fixes issues\nfunc openCodeVerifyHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeAgentRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif req.ProjectPath == \"\" {\n\t\thttp.Error(w, \"projectPath is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// Verify project exists\n\tpaths := GetProjectPaths(req.ProjectPath)\n\tif _, err := os.Stat(paths.Manifest); os.IsNotExist(err) {\n\t\thttp.Error(w, \"Not a Glowbom project (missing glowbom.json)\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif err := ensureOpenCodeServerReady(req.ProjectPath, req.Model, req.OpenAIKey, req.AnthropicKey, req.GeminiKey, req.FireworksKey, req.OpenRouterKey, req.OpenCodeZenKey, req.XaiKey, req.OpenAIAuthMode, req.OpenAIRefreshToken, req.OpenAIExpiresAt); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Failed preparing OpenCode server: %v\", err)\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to prepare OpenCode server: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tctx := r.Context()\n\n\t// Set up SSE headers\n\tw.Header().Set(\"Content-Type\", \"text/event-stream\")\n\tw.Header().Set(\"Cache-Control\", \"no-cache\")\n\tw.Header().Set(\"Connection\", \"keep-alive\")\n\n\tflusher, ok := w.(http.Flusher)\n\tif !ok {\n\t\thttp.Error(w, \"Streaming not supported\", http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Starting build verification...\"})\n\n\t// Create a new session\n\tsession, err := driver.client.Session.New(ctx, opencode.SessionNewParams{\n\t\tTitle:     opencode.F(\"Verify Glowbom Build\"),\n\t\tDirectory: opencode.F(req.ProjectPath),\n\t})\n\tif err != nil {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": userFacingAgentErrorMessage(err.Error())})\n\t\treturn\n\t}\n\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Session created: %s\", session.ID)})\n\n\t// Build verify prompt\n\tprompt := buildVerifyPrompt(req.ProjectPath)\n\n\tauthMode := normalizeOpenAIAuthMode(req.OpenAIAuthMode)\n\trequestedModel := strings.TrimSpace(req.Model)\n\tuseConfiguredDefaultModel := requestedModel == \"\" && authMode == \"opencode-config\"\n\n\tmodelID := \"\"\n\tproviderID := \"\"\n\tfallbackNote := \"\"\n\tforwardCompatRegistryWarning := \"\"\n\n\tif useConfiguredDefaultModel {\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Using OpenCode configured default model.\"})\n\t\tlog.Printf(\"[OPENCODE] Using OpenCode configured default model for verify\")\n\t} else {\n\t\t// Determine model\n\t\tmodelID, providerID, fallbackNote = resolveSessionModelForRequest(req.ProjectPath, req.Model)\n\t\tif strings.EqualFold(providerID, \"openai\") && isOpenAICodexForwardCompatModelID(modelID) {\n\t\t\tprobe, probeErr := probeOpenCodeProviderModel(req.ProjectPath, providerID, modelID)\n\t\t\tif probeErr != nil {\n\t\t\t\tlog.Printf(\"[OPENCODE] Warning: failed probing provider registry for %s/%s: %v\", providerID, modelID, probeErr)\n\t\t\t} else if probe.ProviderFound && !probe.ModelRegistered {\n\t\t\t\tforwardCompatRegistryWarning = fmt.Sprintf(\"⚠️  OpenCode registry does not list %s yet; using forward-compat template. If this run no-ops, update OpenCode or fall back to openai/gpt-5.3-codex.\", modelID)\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": forwardCompatRegistryWarning})\n\t\t\t\tlog.Printf(\"[OPENCODE] Forward-compat registry miss for %s/%s providerSample=[%s]\", providerID, modelID, strings.Join(probe.ProviderModelSample, \", \"))\n\t\t\t}\n\t\t}\n\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"Using model: %s/%s\", providerID, modelID)})\n\t\tif fallbackNote != \"\" {\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"⚠️ \" + fallbackNote})\n\t\t}\n\t}\n\n\t// Start event stream in background BEFORE sending prompt to avoid race condition\n\tlog.Printf(\"[OPENCODE] Starting event stream listener...\")\n\ttype sessionStreamResult struct {\n\t\tcompleted    bool\n\t\tchangedFiles []string\n\t\thadActivity  bool\n\t\terrorMessage string\n\t}\n\teventStreamDone := make(chan sessionStreamResult, 1)\n\tpromptDispatched := make(chan struct{})\n\n\tgo func() {\n\t\tcompleted, changedFiles, hadActivity, errorMessage := driver.streamEventsAndWaitForCompletion(ctx, w, flusher, req.ProjectPath, session.ID, promptDispatched)\n\t\teventStreamDone <- sessionStreamResult{\n\t\t\tcompleted:    completed,\n\t\t\tchangedFiles: changedFiles,\n\t\t\thadActivity:  hadActivity,\n\t\t\terrorMessage: errorMessage,\n\t\t}\n\t}()\n\n\t// Small delay to ensure event stream connects first\n\ttime.Sleep(100 * time.Millisecond)\n\n\t// Now send the prompt\n\tlog.Printf(\"[OPENCODE] Sending verify prompt\")\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Agent is verifying and fixing build issues...\"})\n\n\tpromptParams := opencode.SessionPromptParams{\n\t\tParts: opencode.F([]opencode.SessionPromptParamsPartUnion{\n\t\t\topencode.TextPartInputParam{\n\t\t\t\tType: opencode.F(opencode.TextPartInputTypeText),\n\t\t\t\tText: opencode.F(prompt),\n\t\t\t},\n\t\t}),\n\t\tDirectory: opencode.F(req.ProjectPath),\n\t}\n\tif !useConfiguredDefaultModel {\n\t\tpromptParams.Model = opencode.F(opencode.SessionPromptParamsModel{\n\t\t\tModelID:    opencode.F(modelID),\n\t\t\tProviderID: opencode.F(providerID),\n\t\t})\n\t}\n\n\t_, err = driver.sendSessionPrompt(ctx, session.ID, promptParams)\n\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE] Error: Verify failed: %v\", err)\n\t\tif isUsageLimitErrorMessage(err.Error()) {\n\t\t\tgo driver.abortSessionBestEffort(session.ID, req.ProjectPath, \"usage limit while sending verify prompt\")\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"done\": true, \"success\": false, \"error\": userFacingAgentErrorMessage(err.Error())})\n\t\treturn\n\t}\n\tclose(promptDispatched)\n\n\tlog.Printf(\"[OPENCODE] Prompt sent, agent is now working...\")\n\n\t// Wait for event stream goroutine to complete\n\tstreamResult := <-eventStreamDone\n\tsessionCompleted := streamResult.completed\n\tchangedFiles := streamResult.changedFiles\n\tsessionHadActivity := streamResult.hadActivity\n\n\tif !sessionCompleted {\n\t\tsessionErr := userFacingAgentErrorMessage(streamResult.errorMessage)\n\t\tif strings.TrimSpace(sessionErr) == \"\" || strings.EqualFold(sessionErr, \"Unknown error occurred\") {\n\t\t\tsessionErr = \"Session did not complete\"\n\t\t}\n\t\tlog.Printf(\"[OPENCODE] Session did not complete successfully\")\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"done\":    true,\n\t\t\t\"success\": false,\n\t\t\t\"error\":   sessionErr,\n\t\t})\n\t\treturn\n\t}\n\n\tif !sessionHadActivity {\n\t\twarn := \"⚠️  Session reached idle without assistant/tool activity. The selected model may be only partially supported by this OpenCode server build.\"\n\t\tif forwardCompatRegistryWarning != \"\" {\n\t\t\twarn = \"⚠️  Session reached idle with no assistant/tool activity while using forward-compat model mapping. Try openai/gpt-5.3-codex or update OpenCode.\"\n\t\t}\n\t\tif useConfiguredDefaultModel {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: %s session=%s model=(configured default)\", warn, session.ID)\n\t\t} else {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: %s session=%s model=%s/%s\", warn, session.ID, providerID, modelID)\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": warn})\n\t}\n\n\t// Fall back to file-walk when stream did not emit file.updated events.\n\tif len(changedFiles) == 0 {\n\t\tfiles, err := driver.collectGeneratedFiles(ctx, req.ProjectPath)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: Failed to collect files: %v\", err)\n\t\t} else {\n\t\t\tchangedFiles = files\n\t\t}\n\t}\n\n\tif len(changedFiles) > 0 {\n\t\tlog.Printf(\"[OPENCODE] Files modified: %d\", len(changedFiles))\n\t\tfor _, file := range changedFiles {\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📄 Modified: %s\", file)})\n\t\t}\n\t}\n\n\t// Send completion\n\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\"done\":                 true,\n\t\t\"success\":              true,\n\t\t\"output\":               \"✅ Build verification completed!\",\n\t\t\"files\":                len(changedFiles),\n\t\t\"changedFiles\":         changedFiles,\n\t\t\"noActivityObserved\":   !sessionHadActivity,\n\t\t\"forwardCompatWarning\": forwardCompatRegistryWarning,\n\t})\n}\n\n// openCodeQuestionRespondHandler handles agent question responses\nfunc openCodeQuestionRespondHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeQuestionRespondRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif req.SessionID == \"\" {\n\t\thttp.Error(w, \"sessionID is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tsessionID := req.SessionID\n\tquestionID := req.QuestionID\n\tanswer := req.Answer\n\tprojectPath := req.ProjectPath\n\n\tctx, cancel := context.WithTimeout(r.Context(), 30*time.Second)\n\tdefer cancel()\n\n\tif err := driver.respondToQuestion(ctx, sessionID, questionID, answer, projectPath, req.Answers, req.AnswerByQuestionID); err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to respond to question: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\twriteJSON(w, map[string]interface{}{\"ok\": true})\n}\n\n// openCodePermissionRespondHandler handles agent permission responses\nfunc openCodePermissionRespondHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodePermissionRespondRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif req.SessionID == \"\" || req.PermissionID == \"\" || req.Response == \"\" {\n\t\thttp.Error(w, \"sessionID, permissionID, and response are required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tdriver := GetOpenCodeDriver()\n\tif err := driver.respondToPermission(r.Context(), req.SessionID, req.PermissionID, req.Response, req.ProjectPath); err != nil {\n\t\thttp.Error(w, fmt.Sprintf(\"Failed to respond to permission: %v\", err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\twriteJSON(w, map[string]interface{}{\"ok\": true})\n}\n\nconst (\n\tmaxInstructionAttachmentSizeBytes = int64(40 * 1024 * 1024)\n\tmaxInstructionAttachmentCount     = 20\n)\n\ntype stagedInstructionAttachment struct {\n\tAbsolutePath string\n\tRelativePath string\n\tSizeBytes    int64\n}\n\nfunc hasAnyInstructionAttachmentPath(requestedPaths []string) bool {\n\tfor _, rawPath := range requestedPaths {\n\t\tif strings.TrimSpace(rawPath) != \"\" {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc resetCurrentInstructionsDirectory(projectPath string) error {\n\tcurrentInstructionsDir := filepath.Join(projectPath, \"current_instructions\")\n\tif err := os.RemoveAll(currentInstructionsDir); err != nil {\n\t\treturn fmt.Errorf(\"failed to reset current_instructions folder: %w\", err)\n\t}\n\tif err := os.MkdirAll(currentInstructionsDir, 0755); err != nil {\n\t\treturn fmt.Errorf(\"failed to create current_instructions folder: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc stageInstructionAttachments(projectPath string, requestedPaths []string) ([]stagedInstructionAttachment, error) {\n\tnonEmptyPaths := make([]string, 0, len(requestedPaths))\n\tfor _, rawPath := range requestedPaths {\n\t\tif strings.TrimSpace(rawPath) == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tnonEmptyPaths = append(nonEmptyPaths, rawPath)\n\t}\n\n\tif len(nonEmptyPaths) == 0 {\n\t\treturn nil, nil\n\t}\n\tif len(nonEmptyPaths) > maxInstructionAttachmentCount {\n\t\treturn nil, fmt.Errorf(\"too many instruction attachments (max %d files)\", maxInstructionAttachmentCount)\n\t}\n\n\tcurrentInstructionsDir := filepath.Join(projectPath, \"current_instructions\")\n\tif err := os.MkdirAll(currentInstructionsDir, 0755); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create current_instructions folder: %w\", err)\n\t}\n\n\tseenSourcePaths := map[string]struct{}{}\n\tusedNames := map[string]struct{}{}\n\tif existingEntries, err := os.ReadDir(currentInstructionsDir); err == nil {\n\t\tfor _, entry := range existingEntries {\n\t\t\tusedNames[entry.Name()] = struct{}{}\n\t\t}\n\t}\n\tattachments := make([]stagedInstructionAttachment, 0, len(nonEmptyPaths))\n\n\tfor _, rawPath := range nonEmptyPaths {\n\t\ttrimmed := strings.TrimSpace(rawPath)\n\t\tcleanPath := filepath.Clean(trimmed)\n\t\tabsolutePath, err := filepath.Abs(cleanPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed resolving attachment path %q: %w\", trimmed, err)\n\t\t}\n\n\t\tif _, seen := seenSourcePaths[absolutePath]; seen {\n\t\t\tcontinue\n\t\t}\n\t\tseenSourcePaths[absolutePath] = struct{}{}\n\n\t\tinfo, err := os.Stat(absolutePath)\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) {\n\t\t\t\treturn nil, fmt.Errorf(\"attachment not found: %s\", absolutePath)\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"failed to access attachment %q: %w\", absolutePath, err)\n\t\t}\n\t\tif info.IsDir() {\n\t\t\treturn nil, fmt.Errorf(\"attachment must be a file, not folder: %s\", absolutePath)\n\t\t}\n\t\tif info.Size() > maxInstructionAttachmentSizeBytes {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"attachment %q exceeds the 40MB limit (%s)\",\n\t\t\t\tfilepath.Base(absolutePath),\n\t\t\t\thumanReadableBytes(info.Size()),\n\t\t\t)\n\t\t}\n\n\t\tbaseName := sanitizeAttachmentFilename(filepath.Base(absolutePath))\n\t\tif baseName == \"\" {\n\t\t\tbaseName = fmt.Sprintf(\"attachment-%d\", len(attachments)+1)\n\t\t}\n\t\ttargetName := uniqueAttachmentFilename(baseName, usedNames)\n\t\ttargetPath := filepath.Join(currentInstructionsDir, targetName)\n\n\t\tif err := copyLocalAttachmentFile(absolutePath, targetPath); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed copying attachment %q: %w\", absolutePath, err)\n\t\t}\n\n\t\tattachments = append(attachments, stagedInstructionAttachment{\n\t\t\tAbsolutePath: targetPath,\n\t\t\tRelativePath: filepath.ToSlash(filepath.Join(\"current_instructions\", targetName)),\n\t\t\tSizeBytes:    info.Size(),\n\t\t})\n\t}\n\n\tif len(attachments) == 0 {\n\t\treturn nil, nil\n\t}\n\n\treturn attachments, nil\n}\n\nfunc stageInstructionTextFile(projectPath, instructions string) (string, error) {\n\ttrimmed := strings.TrimSpace(instructions)\n\tif trimmed == \"\" {\n\t\treturn \"\", nil\n\t}\n\n\tcurrentInstructionsDir := filepath.Join(projectPath, \"current_instructions\")\n\tif err := os.MkdirAll(currentInstructionsDir, 0755); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create current_instructions folder: %w\", err)\n\t}\n\n\ttextPath := filepath.Join(currentInstructionsDir, \"instructions.txt\")\n\tif err := os.WriteFile(textPath, []byte(trimmed+\"\\n\"), 0644); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed writing instructions.txt: %w\", err)\n\t}\n\n\treturn filepath.ToSlash(filepath.Join(\"current_instructions\", \"instructions.txt\")), nil\n}\n\nfunc mergeInstructionAttachmentContext(\n\tuserInstructions string,\n\tinstructionsFilePath string,\n\tattachments []stagedInstructionAttachment,\n) string {\n\tif instructionsFilePath == \"\" && len(attachments) == 0 {\n\t\treturn userInstructions\n\t}\n\n\tlines := []string{\n\t\t\"[Local attachment context]\",\n\t\t\"PRIORITY: Start by reading files in current_instructions/ first. Treat them as the main instructions for this run.\",\n\t}\n\tif instructionsFilePath != \"\" {\n\t\tlines = append(lines, \"Primary file: \"+instructionsFilePath)\n\t}\n\tfor _, attachment := range attachments {\n\t\tlines = append(lines, \"Primary file: \"+attachment.RelativePath)\n\t}\n\tlines = append(lines, \"Use these files as source-of-truth context when details conflict with defaults.\")\n\tcontext := strings.Join(lines, \"\\n\")\n\n\ttrimmedInstructions := strings.TrimSpace(userInstructions)\n\tif trimmedInstructions == \"\" {\n\t\treturn context\n\t}\n\n\treturn trimmedInstructions + \"\\n\\n\" + context\n}\n\nfunc sanitizeAttachmentFilename(name string) string {\n\ttrimmed := strings.TrimSpace(name)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\n\tvar builder strings.Builder\n\tbuilder.Grow(len(trimmed))\n\tfor _, r := range trimmed {\n\t\tswitch {\n\t\tcase r >= 'a' && r <= 'z':\n\t\t\tbuilder.WriteRune(r)\n\t\tcase r >= 'A' && r <= 'Z':\n\t\t\tbuilder.WriteRune(r)\n\t\tcase r >= '0' && r <= '9':\n\t\t\tbuilder.WriteRune(r)\n\t\tcase r == '-', r == '_', r == '.', r == '(', r == ')', r == '[', r == ']', r == '+':\n\t\t\tbuilder.WriteRune(r)\n\t\tdefault:\n\t\t\tbuilder.WriteRune('_')\n\t\t}\n\t}\n\n\tclean := strings.Trim(builder.String(), \" .\")\n\tif clean == \"\" {\n\t\treturn \"\"\n\t}\n\tif strings.HasPrefix(clean, \".\") {\n\t\tclean = \"file\" + clean\n\t}\n\treturn clean\n}\n\nfunc uniqueAttachmentFilename(baseName string, used map[string]struct{}) string {\n\tif _, exists := used[baseName]; !exists {\n\t\tused[baseName] = struct{}{}\n\t\treturn baseName\n\t}\n\n\text := filepath.Ext(baseName)\n\tstem := strings.TrimSuffix(baseName, ext)\n\tif stem == \"\" {\n\t\tstem = \"attachment\"\n\t}\n\n\tfor idx := 2; ; idx++ {\n\t\tcandidate := fmt.Sprintf(\"%s-%d%s\", stem, idx, ext)\n\t\tif _, exists := used[candidate]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tused[candidate] = struct{}{}\n\t\treturn candidate\n\t}\n}\n\nfunc copyLocalAttachmentFile(sourcePath, targetPath string) error {\n\tsource, err := os.Open(sourcePath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer source.Close()\n\n\ttarget, err := os.Create(targetPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, copyErr := io.Copy(target, source)\n\tcloseErr := target.Close()\n\tif copyErr != nil {\n\t\treturn copyErr\n\t}\n\treturn closeErr\n}\n\nfunc humanReadableBytes(size int64) string {\n\tif size < 1024 {\n\t\treturn fmt.Sprintf(\"%d B\", size)\n\t}\n\n\tvalue := float64(size)\n\tunits := []string{\"KB\", \"MB\", \"GB\", \"TB\"}\n\tunit := \"B\"\n\tfor _, candidate := range units {\n\t\tvalue /= 1024\n\t\tunit = candidate\n\t\tif value < 1024 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif unit == \"KB\" {\n\t\treturn fmt.Sprintf(\"%.0f %s\", value, unit)\n\t}\n\treturn fmt.Sprintf(\"%.1f %s\", value, unit)\n}\n\ntype agentHistoryAttachmentRecord struct {\n\tID            string `json:\"id\"`\n\tMediaType     string `json:\"mediaType\"`\n\tFilename      string `json:\"filename\"`\n\tMimeType      string `json:\"mimeType,omitempty\"`\n\tFileSizeBytes int64  `json:\"fileSizeBytes,omitempty\"`\n}\n\ntype agentHistoryEntryRecord struct {\n\tID            string                         `json:\"id\"`\n\tTimestamp     string                         `json:\"timestamp\"`\n\tInstructions  string                         `json:\"instructions\"`\n\tTaskType      string                         `json:\"taskType\"`\n\tStatus        string                         `json:\"status,omitempty\"`\n\tOutputSummary string                         `json:\"outputSummary,omitempty\"`\n\tAttachments   []agentHistoryAttachmentRecord `json:\"attachments,omitempty\"`\n}\n\nfunc persistCurrentInstructionsHistory(\n\tprojectPath string,\n\tinstructions string,\n\tstatus string,\n\toutputSummary string,\n) error {\n\tcurrentInstructionsDir := filepath.Join(projectPath, \"current_instructions\")\n\tentries, err := os.ReadDir(currentInstructionsDir)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"failed reading current_instructions: %w\", err)\n\t}\n\n\tregularFiles := make([]os.DirEntry, 0, len(entries))\n\tfor _, entry := range entries {\n\t\tif entry.Type().IsRegular() {\n\t\t\tregularFiles = append(regularFiles, entry)\n\t\t\tcontinue\n\t\t}\n\t\tinfo, infoErr := entry.Info()\n\t\tif infoErr == nil && info.Mode().IsRegular() {\n\t\t\tregularFiles = append(regularFiles, entry)\n\t\t}\n\t}\n\tif len(regularFiles) == 0 {\n\t\treturn nil\n\t}\n\n\tsort.Slice(regularFiles, func(i, j int) bool {\n\t\treturn regularFiles[i].Name() < regularFiles[j].Name()\n\t})\n\n\thistoryRoot := filepath.Join(projectPath, \"history\")\n\tif err := os.MkdirAll(historyRoot, 0755); err != nil {\n\t\treturn fmt.Errorf(\"failed creating history folder: %w\", err)\n\t}\n\n\tnow := time.Now().UTC()\n\tentryID := randomUUIDString()\n\tshortID := strings.Split(entryID, \"-\")[0]\n\tfolderName := fmt.Sprintf(\"%s_%s\", now.Format(\"2006-01-02_150405\"), shortID)\n\tentryDir := filepath.Join(historyRoot, folderName)\n\tif err := os.MkdirAll(entryDir, 0755); err != nil {\n\t\treturn fmt.Errorf(\"failed creating history entry folder: %w\", err)\n\t}\n\n\tattachments := make([]agentHistoryAttachmentRecord, 0, len(regularFiles))\n\tfor _, entry := range regularFiles {\n\t\tname := entry.Name()\n\t\tsourcePath := filepath.Join(currentInstructionsDir, name)\n\t\ttargetPath := filepath.Join(entryDir, name)\n\t\tif err := copyLocalAttachmentFile(sourcePath, targetPath); err != nil {\n\t\t\treturn fmt.Errorf(\"failed copying %s to history: %w\", name, err)\n\t\t}\n\n\t\tinfo, err := os.Stat(sourcePath)\n\t\tsizeBytes := int64(0)\n\t\tif err == nil {\n\t\t\tsizeBytes = info.Size()\n\t\t}\n\t\tmimeType := inferMimeTypeForFilename(name)\n\n\t\tattachments = append(attachments, agentHistoryAttachmentRecord{\n\t\t\tID:            randomUUIDString(),\n\t\t\tMediaType:     inferHistoryMediaType(mimeType, name),\n\t\t\tFilename:      name,\n\t\t\tMimeType:      mimeType,\n\t\t\tFileSizeBytes: sizeBytes,\n\t\t})\n\t}\n\n\thistoryEntry := agentHistoryEntryRecord{\n\t\tID:            entryID,\n\t\tTimestamp:     now.Format(time.RFC3339),\n\t\tInstructions:  strings.TrimSpace(instructions),\n\t\tTaskType:      \"refine\",\n\t\tStatus:        normalizeHistoryStatus(status),\n\t\tOutputSummary: truncateText(outputSummary, 500),\n\t\tAttachments:   attachments,\n\t}\n\n\tentryData, err := json.MarshalIndent(historyEntry, \"\", \"  \")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed serializing history entry: %w\", err)\n\t}\n\n\tentryPath := filepath.Join(entryDir, \"entry.json\")\n\tif err := os.WriteFile(entryPath, entryData, 0644); err != nil {\n\t\treturn fmt.Errorf(\"failed writing history entry: %w\", err)\n\t}\n\n\tlog.Printf(\"[OPENCODE] Archived current instructions to history/%s\", folderName)\n\treturn nil\n}\n\nfunc inferMimeTypeForFilename(name string) string {\n\textension := strings.ToLower(filepath.Ext(name))\n\tif extension == \"\" {\n\t\treturn \"application/octet-stream\"\n\t}\n\tif mimeType := mime.TypeByExtension(extension); mimeType != \"\" {\n\t\treturn mimeType\n\t}\n\treturn \"application/octet-stream\"\n}\n\nfunc inferHistoryMediaType(mimeType, name string) string {\n\tlowerMime := strings.ToLower(strings.TrimSpace(mimeType))\n\tswitch {\n\tcase strings.HasPrefix(lowerMime, \"image/\"):\n\t\treturn \"screenshot\"\n\tcase strings.HasPrefix(lowerMime, \"video/\"):\n\t\treturn \"video\"\n\tcase strings.HasPrefix(lowerMime, \"audio/\"):\n\t\treturn \"audio\"\n\tcase strings.HasPrefix(lowerMime, \"text/\"):\n\t\treturn \"document\"\n\t}\n\n\textension := strings.ToLower(filepath.Ext(name))\n\tswitch extension {\n\tcase \".md\", \".txt\", \".json\", \".yaml\", \".yml\", \".xml\", \".csv\", \".pdf\":\n\t\treturn \"document\"\n\tdefault:\n\t\treturn \"other\"\n\t}\n}\n\nfunc normalizeHistoryStatus(status string) string {\n\tswitch strings.ToLower(strings.TrimSpace(status)) {\n\tcase \"running\":\n\t\treturn \"running\"\n\tcase \"completed\":\n\t\treturn \"completed\"\n\tcase \"failed\":\n\t\treturn \"failed\"\n\tcase \"cancelled\":\n\t\treturn \"cancelled\"\n\tdefault:\n\t\treturn \"failed\"\n\t}\n}\n\nfunc truncateText(value string, maxLen int) string {\n\tif maxLen <= 0 {\n\t\treturn \"\"\n\t}\n\ttrimmed := strings.TrimSpace(value)\n\tif len(trimmed) <= maxLen {\n\t\treturn trimmed\n\t}\n\treturn trimmed[:maxLen]\n}\n\nfunc randomUUIDString() string {\n\tbuffer := make([]byte, 16)\n\tif _, err := rand.Read(buffer); err != nil {\n\t\tfallback := fmt.Sprintf(\"%032x\", time.Now().UnixNano())\n\t\tif len(fallback) < 32 {\n\t\t\tfallback = strings.Repeat(\"0\", 32-len(fallback)) + fallback\n\t\t}\n\t\treturn fmt.Sprintf(\"%s-%s-%s-%s-%s\",\n\t\t\tfallback[0:8],\n\t\t\tfallback[8:12],\n\t\t\tfallback[12:16],\n\t\t\tfallback[16:20],\n\t\t\tfallback[20:32],\n\t\t)\n\t}\n\n\tbuffer[6] = (buffer[6] & 0x0f) | 0x40\n\tbuffer[8] = (buffer[8] & 0x3f) | 0x80\n\n\thexValue := hex.EncodeToString(buffer)\n\treturn fmt.Sprintf(\"%s-%s-%s-%s-%s\",\n\t\thexValue[0:8],\n\t\thexValue[8:12],\n\t\thexValue[12:16],\n\t\thexValue[16:20],\n\t\thexValue[20:32],\n\t)\n}\n\n// buildRefinePrompt creates the prompt for code refinement\nfunc buildRefinePrompt(projectRoot, instructions string) string {\n\tbasePrompt := fmt.Sprintf(`You are working in a Glowbom project at: %s\n\nYour task is to make this project production-ready and improve code quality. Report your actions clearly.\n\nIMPORTANT:\n- If AGENTS.md exists in the project root, read it first and follow it as the source of truth.\n- If AGENTS.md is missing but Agent.md exists, read and follow Agent.md.\n- If user instructions conflict with AGENTS.md (or Agent.md), follow the user instructions.\n\n## Project Structure\n- prototype/ - HTML/Tailwind source prototype\n- ios/ - SwiftUI code (if exists)\n- android/ - Kotlin code (if exists)\n- web/ - Next.js code (if exists)\n- godot/ - Godot code (if exists)\n\n## Instructions\n1. First, explore the project structure to understand what exists - report what you find\n2. Read the prototype HTML to understand the intended design - summarize key elements\n3. Review the generated platform code for issues:\n   - Code style and best practices - report improvements made\n   - Missing functionality from the prototype - add what's missing\n   - Error handling - enhance where needed\n   - Performance concerns - optimize if possible\n   - Accessibility issues - fix any found\n4. Make improvements while preserving the original design intent\n5. Verify any changes compile/build correctly - report build results and fixes\n6. If you add or change media in prototype/index.html, use placeholders so post-pass can materialize assets:\n   - Images: glowbyimage:<prompt>\n   - Videos: glowbyvideo:<prompt>|from:<image_key>|aspect:<ratio>\n   - Audio: glowbyaudio:<prompt>|type:<voice|sound|music>|voice:<voice_id>|model:<model_id>|duration:<seconds>\n   - For sound effects, ALWAYS set |type:sound explicitly.\n   - If you don't know a valid ElevenLabs model ID, OMIT model:<...>; never use model:standard.\n   - If voice/model are omitted, backend applies the user's configured ElevenLabs defaults.\n   - For voiceover/background music/sound effects requests, add glowbyaudio placeholders wherever those assets are needed so post-pass can generate and attach them.\n   - If the request is personalization (for example \"make this person the main character\"), you MUST add/update at least one glowbyimage placeholder that explicitly describes that person so backend post-pass can generate personalized assets.\n7. Report progress after each major step (e.g., \"Analyzed ios/ code\", \"Fixed error handling\", \"Build successful\")`, projectRoot)\n\n\t// Inject project metadata so the agent knows the app identity\n\tmanifestPath := filepath.Join(projectRoot, \"glowbom.json\")\n\tif project, err := LoadProject(manifestPath); err == nil {\n\t\tvar metaParts []string\n\t\tif project.DisplayName != \"\" {\n\t\t\tmetaParts = append(metaParts, fmt.Sprintf(\"- Display Name: %s\", project.DisplayName))\n\t\t}\n\t\tif project.BundleID != \"\" {\n\t\t\tmetaParts = append(metaParts, fmt.Sprintf(\"- Bundle ID: %s\", project.BundleID))\n\t\t}\n\t\tif project.Version != \"\" {\n\t\t\tmetaParts = append(metaParts, fmt.Sprintf(\"- Version: %s\", project.Version))\n\t\t}\n\t\tif project.BuildNumber != \"\" {\n\t\t\tmetaParts = append(metaParts, fmt.Sprintf(\"- Build Number: %s\", project.BuildNumber))\n\t\t}\n\t\tif len(metaParts) > 0 {\n\t\t\tbasePrompt += fmt.Sprintf(`\n\n## Project Identity (from glowbom.json)\nUse these values when configuring platform targets (Info.plist, build.gradle, package.json, etc.):\n%s`, strings.Join(metaParts, \"\\n\"))\n\t\t}\n\t}\n\n\tagentContent, agentFile := loadAgentInstructions(projectRoot)\n\tif agentContent != \"\" {\n\t\tbasePrompt += fmt.Sprintf(`\n\n## Agent Instructions (%s)\n%s`, agentFile, agentContent)\n\t}\n\n\tif instructions != \"\" {\n\t\tbasePrompt += fmt.Sprintf(`\n\n## User Instructions (override AGENTS.md if conflict)\n%s`, instructions)\n\t}\n\n\treturn basePrompt\n}\n\nfunc loadAgentInstructions(projectRoot string) (string, string) {\n\tfor _, name := range []string{\"AGENTS.md\", \"Agent.md\"} {\n\t\tpath := filepath.Join(projectRoot, name)\n\t\tcontent, err := os.ReadFile(path)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\ttext := strings.TrimSpace(string(content))\n\t\tif text == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\treturn text, name\n\t}\n\treturn \"\", \"\"\n}\n\n// buildAssetPlacementPrompt creates a strict post-media pass prompt to reconcile asset references.\nfunc buildAssetPlacementPrompt(projectRoot string) string {\n\treturn fmt.Sprintf(`You are running the final \"asset placement reconciliation\" pass for a Glowbom project at: %s\n\nGoal:\nEnsure newly materialized assets from prototype/assets are correctly referenced across prototype and all existing platform outputs (Apple/Android/Web/Godot) without changing core app logic.\n\nHard Rules:\n- Do NOT generate new images, videos, or audio in this pass.\n- Do NOT add new glowbyimage, glowbyvideo, or glowbyaudio placeholders.\n- Do NOT rewrite unrelated game/app logic.\n- Keep edits minimal and deterministic; only fix asset placement, references, and render-fit issues.\n\nRead these files first:\n1. AGENTS.md (if present)\n2. prototype/index.html\n3. prototype/assets.json\n4. prototype/platform_assets_map.json (if present)\n\nTasks:\n1. Prototype reference integrity\n   - Verify every prototype image/video/audio reference points to an existing file under prototype/assets.\n   - Replace stale legacy references with the best matching generated asset when intent clearly matches.\n   - Preserve IDs/classes/layout and existing behavior.\n\n2. Platform reference reconciliation (only for directories that exist)\n   - Apple: ensure SwiftUI/extension code references the correct asset catalog names from Assets.xcassets.\n   - Android: ensure resource names used in code map to existing drawable/raw files for image/video/audio.\n   - Web: ensure references map to existing web/public/assets/images, web/public/assets/videos, and web/public/assets/audio files.\n   - Godot: ensure resource paths map to existing godot/assets/sprites, godot/assets/videos, and godot/assets/audio files.\n\n3. Rendering quality checks\n   - Avatars/hero art: use cover/crop behavior, avoid distortion.\n   - Logos/icons/UI symbols: use fit/contain behavior.\n   - Keep responsive behavior intact.\n\n4. Size/compression guardrails\n   - Reuse existing generated assets by default.\n   - Only create a downscaled derivative if a very large image is used in a tiny slot and would be wasteful.\n   - If you create a derivative, update references deterministically and keep originals.\n\n5. Validation\n   - Ensure there are no broken asset references in modified files.\n   - If platform folders exist, make sure code references only assets that actually exist in that platform output.\n\nOutput requirements:\n- Report exactly which files were changed and why.\n- Include any remaining warnings if a platform path could not be reconciled cleanly.`, projectRoot)\n}\n\ntype openCodeSessionResult struct {\n\tcompleted    bool\n\tchangedFiles []string\n\thadActivity  bool\n\terrorMessage string\n}\n\nfunc (d *OpenCodeDriver) runAssetPlacementReconcilePass(\n\tctx context.Context,\n\tprojectPath string,\n\texistingSessionID string,\n\tmodelID string,\n\tproviderID string,\n\tw http.ResponseWriter,\n\tflusher http.Flusher,\n) ([]string, []string, error) {\n\twarnings := []string{}\n\n\tvar session *opencode.Session\n\tif existingSessionID != \"\" {\n\t\tsession = &opencode.Session{ID: existingSessionID}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": fmt.Sprintf(\"Asset placement using session: %s\", session.ID),\n\t\t})\n\t} else {\n\t\tvar err error\n\t\tsession, err = d.client.Session.New(ctx, opencode.SessionNewParams{\n\t\t\tTitle:     opencode.F(\"Reconcile Asset Placement\"),\n\t\t\tDirectory: opencode.F(projectPath),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, warnings, err\n\t\t}\n\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\"output\": fmt.Sprintf(\"Asset placement session created: %s\", session.ID),\n\t\t})\n\t}\n\n\tprompt := buildAssetPlacementPrompt(projectPath)\n\tpreRunSnapshot, snapshotErr := captureProjectFileSnapshot(projectPath)\n\tif snapshotErr != nil {\n\t\twarnings = append(warnings, fmt.Sprintf(\"asset placement snapshot unavailable: %s\", sanitizeProviderError(snapshotErr)))\n\t}\n\n\teventStreamDone := make(chan openCodeSessionResult, 1)\n\tpromptDispatched := make(chan struct{})\n\tgo func() {\n\t\tcompleted, changedFiles, hadActivity, errorMessage := d.streamEventsAndWaitForCompletion(ctx, w, flusher, projectPath, session.ID, promptDispatched)\n\t\teventStreamDone <- openCodeSessionResult{\n\t\t\tcompleted:    completed,\n\t\t\tchangedFiles: changedFiles,\n\t\t\thadActivity:  hadActivity,\n\t\t\terrorMessage: errorMessage,\n\t\t}\n\t}()\n\n\ttime.Sleep(100 * time.Millisecond)\n\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"Reconciling asset references and render fit across targets...\"})\n\n\t_, err := d.sendSessionPrompt(ctx, session.ID, opencode.SessionPromptParams{\n\t\tParts: opencode.F([]opencode.SessionPromptParamsPartUnion{\n\t\t\topencode.TextPartInputParam{\n\t\t\t\tType: opencode.F(opencode.TextPartInputTypeText),\n\t\t\t\tText: opencode.F(prompt),\n\t\t\t},\n\t\t}),\n\t\tModel: opencode.F(opencode.SessionPromptParamsModel{\n\t\t\tModelID:    opencode.F(modelID),\n\t\t\tProviderID: opencode.F(providerID),\n\t\t}),\n\t\tDirectory: opencode.F(projectPath),\n\t})\n\tif err != nil {\n\t\tif isUsageLimitErrorMessage(err.Error()) {\n\t\t\tgo d.abortSessionBestEffort(session.ID, projectPath, \"usage limit while sending asset placement prompt\")\n\t\t}\n\t\treturn nil, warnings, err\n\t}\n\tclose(promptDispatched)\n\n\tstreamResult := <-eventStreamDone\n\tif !streamResult.completed {\n\t\tsessionErr := userFacingAgentErrorMessage(streamResult.errorMessage)\n\t\tif strings.TrimSpace(sessionErr) == \"\" || strings.EqualFold(sessionErr, \"Unknown error occurred\") {\n\t\t\tsessionErr = \"asset placement session did not complete\"\n\t\t}\n\t\treturn nil, warnings, fmt.Errorf(\"%s\", sessionErr)\n\t}\n\tif !streamResult.hadActivity {\n\t\twarnings = append(warnings, \"asset placement session reported idle without assistant activity\")\n\t}\n\n\tchangedFiles := streamResult.changedFiles\n\tif len(changedFiles) == 0 && preRunSnapshot != nil {\n\t\tsnapshotChanges, err := detectChangedFilesFromSnapshot(projectPath, preRunSnapshot)\n\t\tif err != nil {\n\t\t\twarnings = append(warnings, fmt.Sprintf(\"asset placement fallback diff failed: %s\", sanitizeProviderError(err)))\n\t\t} else if len(snapshotChanges) > 0 {\n\t\t\tchangedFiles = snapshotChanges\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"output\": fmt.Sprintf(\"📡 Recovered %d asset-placement file changes via snapshot fallback\", len(changedFiles)),\n\t\t\t})\n\t\t}\n\t}\n\n\tif len(changedFiles) == 0 {\n\t\twarnings = append(warnings, \"asset placement pass completed with no file changes\")\n\t}\n\n\treturn changedFiles, dedupeWarnings(warnings), nil\n}\n\n// buildVerifyPrompt creates the prompt for build verification\nfunc buildVerifyPrompt(projectRoot string) string {\n\treturn fmt.Sprintf(`You are working in a Glowbom project at: %s\n\nYour task is to verify the project builds successfully and fix any issues. Report all actions and results clearly.\n\n## Project Structure\n- prototype/ - HTML/Tailwind source prototype\n- ios/ - SwiftUI code (if exists)\n- android/ - Kotlin code (if exists)\n- web/ - Next.js code (if exists)\n- godot/ - Godot code (if exists)\n\n## Instructions\n1. First, explore the project to see what target platforms exist - report findings\n2. For each platform that has code:\n\n   **iOS (SwiftUI)**:\n   - Navigate to ios/ directory\n   - Report current state of files\n   - Run 'swift build' to verify compilation - report output\n   - Fix any Swift compiler errors - report each fix made\n   - Re-run build to verify - report success/failure\n\n   **Android (Kotlin)**:\n   - Navigate to android/ directory\n   - Report current state of files\n   - Run './gradlew build' to verify compilation - report output\n   - Fix any Kotlin/Gradle errors - report each fix made\n   - Re-run build to verify - report success/failure\n\n   **Web (Next.js)**:\n   - Navigate to web/ directory\n   - Report current state of files\n   - Run 'npm install && npm run build' to verify - report output\n   - Fix any TypeScript/build errors - report each fix made\n   - Re-run build to verify - report success/failure\n\n   **Godot**:\n   - Navigate to godot/ directory\n   - Report current state of files\n   - Verify scene files are valid - report issues\n   - Fix any GDScript errors - report each fix made\n   - Re-verify - report success/failure\n\n3. For each error encountered:\n   - Analyze the root cause - explain what went wrong\n   - Make the minimal fix required - describe the change\n   - Re-run the build to verify the fix - report results\n\n4. Continue until all platforms build successfully - provide final status report\n5. Report progress after each major action (e.g., \"Checking ios/ build\", \"Fixed Swift error in ViewModel\", \"iOS build successful\")`, projectRoot)\n}\n\n// getPropertyValue searches for a property value in a map or struct, supporting nested paths like \"Part.Text\"\nfunc getPropertyValue(p interface{}, path string) interface{} {\n\tif p == nil {\n\t\treturn nil\n\t}\n\n\tparts := strings.Split(path, \".\")\n\tcurrent := p\n\n\tfor _, part := range parts {\n\t\tif current == nil {\n\t\t\treturn nil\n\t\t}\n\n\t\t// Handle map\n\t\tif m, ok := current.(map[string]interface{}); ok {\n\t\t\tfound := false\n\t\t\t// Case-insensitive search in map\n\t\t\tfor k, v := range m {\n\t\t\t\tif strings.EqualFold(k, part) {\n\t\t\t\t\tcurrent = v\n\t\t\t\t\tfound = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle struct via reflection\n\t\tv := reflect.ValueOf(current)\n\t\tif v.Kind() == reflect.Ptr {\n\t\t\tv = v.Elem()\n\t\t}\n\t\tif v.Kind() == reflect.Struct {\n\t\t\tf := v.FieldByName(strings.Title(part))\n\t\t\tif !f.IsValid() {\n\t\t\t\t// Try as-is\n\t\t\t\tf = v.FieldByName(part)\n\t\t\t}\n\t\t\tif f.IsValid() {\n\t\t\t\tcurrent = f.Interface()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\t}\n\n\treturn current\n}\n\n// getPropertyString returns a string value from an interface, handling multiple potential paths\nfunc getPropertyString(p interface{}, paths ...string) string {\n\tfor _, path := range paths {\n\t\tval := getPropertyValue(p, path)\n\t\tif val != nil {\n\t\t\tif s, ok := val.(string); ok && s != \"\" {\n\t\t\t\treturn s\n\t\t\t}\n\t\t\t// Fallback to string representation if not a string but exists\n\t\t\tif valStr := fmt.Sprintf(\"%v\", val); valStr != \"\" && valStr != \"<nil>\" {\n\t\t\t\treturn valStr\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// getPropertyMap returns a map representation of a property\nfunc getPropertyMap(p interface{}, path string) map[string]interface{} {\n\tval := getPropertyValue(p, path)\n\tif val == nil {\n\t\treturn nil\n\t}\n\n\tif m, ok := val.(map[string]interface{}); ok {\n\t\treturn m\n\t}\n\n\t// Try to convert struct to map via reflection if needed\n\tv := reflect.ValueOf(val)\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\tif v.Kind() == reflect.Struct {\n\t\tres := make(map[string]interface{})\n\t\tt := v.Type()\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tf := v.Field(i)\n\t\t\tif f.CanInterface() {\n\t\t\t\tres[t.Field(i).Name] = f.Interface()\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n\treturn nil\n}\n\nfunc getStringSlice(p interface{}, path string) []string {\n\tval := getPropertyValue(p, path)\n\tif val == nil {\n\t\treturn nil\n\t}\n\n\tswitch v := val.(type) {\n\tcase []string:\n\t\treturn v\n\tcase []interface{}:\n\t\tout := make([]string, 0, len(v))\n\t\tfor _, item := range v {\n\t\t\tif s, ok := item.(string); ok && s != \"\" {\n\t\t\t\tout = append(out, s)\n\t\t\t} else if item != nil {\n\t\t\t\tout = append(out, fmt.Sprintf(\"%v\", item))\n\t\t\t}\n\t\t}\n\t\treturn out\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// extractAssistantMessageText pulls assistant text from message.updated payloads.\n// OpenCode events often nest text under properties.info.parts[].text.\nfunc extractAssistantMessageText(props interface{}) string {\n\tif props == nil {\n\t\treturn \"\"\n\t}\n\n\t// Legacy/simple paths.\n\tif direct := getPropertyString(props, \"Content\", \"Text\", \"Part.Text\", \"Part.Content\"); direct != \"\" {\n\t\treturn direct\n\t}\n\n\t// Canonical path for message.updated: properties.info.parts[].text\n\tif info := getPropertyValue(props, \"Info\"); info != nil {\n\t\tif text := joinPartTexts(getPropertyValue(info, \"Parts\")); text != \"\" {\n\t\t\treturn text\n\t\t}\n\t}\n\n\t// Raw map fallback if structure differs by SDK/runtime.\n\tif info := getPropertyValue(props, \"info\"); info != nil {\n\t\tif text := joinPartTexts(getPropertyValue(info, \"parts\")); text != \"\" {\n\t\t\treturn text\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\nfunc extractMessageRole(props interface{}) string {\n\trole := strings.ToLower(strings.TrimSpace(getPropertyString(\n\t\tprops,\n\t\t\"Info.Role\",\n\t\t\"info.role\",\n\t\t\"Role\",\n\t\t\"role\",\n\t\t\"Message.Role\",\n\t\t\"message.role\",\n\t)))\n\treturn role\n}\n\nfunc looksLikeDriverPromptEcho(content string) bool {\n\tlower := strings.ToLower(strings.TrimSpace(content))\n\tif lower == \"\" {\n\t\treturn false\n\t}\n\t// Guardrail: when a user message.update is surfaced without role metadata,\n\t// avoid replaying the entire backend prompt template into the UI stream.\n\treturn strings.Contains(lower, \"you are working in a glowbom project at:\") &&\n\t\tstrings.Contains(lower, \"your task is to make this project production-ready\") &&\n\t\tstrings.Contains(lower, \"project structure\")\n}\n\nfunc getMapValueCaseInsensitive(m map[string]interface{}, key string) interface{} {\n\tfor candidate, value := range m {\n\t\tif strings.EqualFold(candidate, key) {\n\t\t\treturn value\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getMapStringCaseInsensitive(m map[string]interface{}, keys ...string) string {\n\tfor _, key := range keys {\n\t\tval := getMapValueCaseInsensitive(m, key)\n\t\tif val == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif s, ok := val.(string); ok {\n\t\t\ttrimmed := strings.TrimSpace(s)\n\t\t\tif trimmed != \"\" {\n\t\t\t\treturn trimmed\n\t\t\t}\n\t\t} else {\n\t\t\trendered := strings.TrimSpace(fmt.Sprintf(\"%v\", val))\n\t\t\tif rendered != \"\" && rendered != \"<nil>\" {\n\t\t\t\treturn rendered\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc summarizeToolInput(input map[string]interface{}) string {\n\tif len(input) == 0 {\n\t\treturn \"\"\n\t}\n\tif path := getMapStringCaseInsensitive(input, \"Path\", \"path\", \"File\", \"file\"); path != \"\" {\n\t\treturn fmt.Sprintf(\"(%s)\", filepath.Base(path))\n\t}\n\tif cmd := getMapStringCaseInsensitive(input, \"Command\", \"command\", \"Cmd\", \"cmd\"); cmd != \"\" {\n\t\tif len(cmd) > 50 {\n\t\t\tcmd = cmd[:47] + \"...\"\n\t\t}\n\t\treturn fmt.Sprintf(\"(%s)\", cmd)\n\t}\n\tif pattern := getMapStringCaseInsensitive(input, \"Pattern\", \"pattern\"); pattern != \"\" {\n\t\tif len(pattern) > 42 {\n\t\t\tpattern = pattern[:39] + \"...\"\n\t\t}\n\t\treturn fmt.Sprintf(\"(%s)\", pattern)\n\t}\n\treturn \"\"\n}\n\ntype toolPartProgress struct {\n\tkey      string\n\tstatus   string\n\tlabel    string\n\terrorMsg string\n}\n\nfunc extractToolPartProgress(props interface{}) (toolPartProgress, bool) {\n\tif props == nil {\n\t\treturn toolPartProgress{}, false\n\t}\n\n\tpartVal := getPropertyValue(props, \"Part\")\n\tif partVal == nil {\n\t\tpartVal = getPropertyValue(props, \"part\")\n\t}\n\tif partVal == nil {\n\t\treturn toolPartProgress{}, false\n\t}\n\n\tpartType := strings.ToLower(strings.TrimSpace(getPropertyString(partVal, \"Type\", \"type\")))\n\tif partType != \"tool\" {\n\t\treturn toolPartProgress{}, false\n\t}\n\n\tpartID := strings.TrimSpace(getPropertyString(partVal, \"ID\", \"Id\", \"id\"))\n\tcallID := strings.TrimSpace(getPropertyString(partVal, \"CallID\", \"CallId\", \"callID\", \"callId\"))\n\ttoolName := strings.TrimSpace(getPropertyString(partVal, \"Tool\", \"tool\", \"Name\", \"name\"))\n\n\tstateVal := getPropertyValue(partVal, \"State\")\n\tif stateVal == nil {\n\t\tstateVal = getPropertyValue(partVal, \"state\")\n\t}\n\tstatus := strings.ToLower(strings.TrimSpace(getPropertyString(stateVal, \"Status\", \"status\")))\n\tif status == \"\" {\n\t\tstatus = strings.ToLower(strings.TrimSpace(getPropertyString(partVal, \"State.Status\", \"state.status\")))\n\t}\n\tif status == \"\" {\n\t\tstatus = \"running\"\n\t}\n\n\ttitle := strings.TrimSpace(getPropertyString(stateVal, \"Title\", \"title\"))\n\tif title == \"\" {\n\t\ttitle = strings.TrimSpace(getPropertyString(partVal, \"Name\", \"name\"))\n\t}\n\n\tvar input map[string]interface{}\n\tif stateVal != nil {\n\t\tinput = getPropertyMap(stateVal, \"Input\")\n\t\tif input == nil {\n\t\t\tinput = getPropertyMap(stateVal, \"input\")\n\t\t}\n\t}\n\tif input == nil {\n\t\tif stateMap, ok := stateVal.(map[string]interface{}); ok {\n\t\t\tif nested, ok := getMapValueCaseInsensitive(stateMap, \"input\").(map[string]interface{}); ok {\n\t\t\t\tinput = nested\n\t\t\t}\n\t\t}\n\t}\n\n\tlabel := title\n\tif label == \"\" {\n\t\tlabel = toolName\n\t}\n\tif label == \"\" {\n\t\tlabel = \"tool\"\n\t}\n\tif suffix := summarizeToolInput(input); suffix != \"\" {\n\t\tlabel = label + \" \" + suffix\n\t}\n\n\terrMsg := strings.TrimSpace(getPropertyString(stateVal, \"Error\", \"error\"))\n\n\tkey := callID\n\tif key == \"\" {\n\t\tkey = partID\n\t}\n\tif key == \"\" {\n\t\tkey = label\n\t}\n\n\treturn toolPartProgress{\n\t\tkey:      key,\n\t\tstatus:   status,\n\t\tlabel:    label,\n\t\terrorMsg: errMsg,\n\t}, true\n}\n\nfunc formatToolPartProgressLine(progress toolPartProgress) string {\n\tswitch progress.status {\n\tcase \"pending\", \"running\":\n\t\treturn fmt.Sprintf(\"🔧 Running: %s\", progress.label)\n\tcase \"completed\":\n\t\treturn fmt.Sprintf(\"✅ Completed: %s\", progress.label)\n\tcase \"error\":\n\t\tif strings.TrimSpace(progress.errorMsg) != \"\" {\n\t\t\treturn fmt.Sprintf(\"❌ Tool failed: %s (%s)\", progress.label, progress.errorMsg)\n\t\t}\n\t\treturn fmt.Sprintf(\"❌ Tool failed: %s\", progress.label)\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc joinPartTexts(parts interface{}) string {\n\tif parts == nil {\n\t\treturn \"\"\n\t}\n\n\tvar chunks []string\n\tappendText := func(part interface{}) {\n\t\tif part == nil {\n\t\t\treturn\n\t\t}\n\t\tif text := getPropertyString(part, \"Text\", \"text\", \"Content\", \"content\", \"Snapshot\", \"snapshot\"); text != \"\" {\n\t\t\tchunks = append(chunks, text)\n\t\t}\n\t}\n\n\tswitch list := parts.(type) {\n\tcase []interface{}:\n\t\tfor _, part := range list {\n\t\t\tappendText(part)\n\t\t}\n\tcase []map[string]interface{}:\n\t\tfor _, part := range list {\n\t\t\tappendText(part)\n\t\t}\n\tdefault:\n\t\tv := reflect.ValueOf(parts)\n\t\tif v.Kind() == reflect.Ptr {\n\t\t\tv = v.Elem()\n\t\t}\n\t\tif v.Kind() == reflect.Slice || v.Kind() == reflect.Array {\n\t\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\t\tif v.Index(i).CanInterface() {\n\t\t\t\t\tappendText(v.Index(i).Interface())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(chunks) == 0 {\n\t\treturn \"\"\n\t}\n\treturn strings.Join(chunks, \"\")\n}\n\nfunc extractPartID(props interface{}) string {\n\treturn strings.TrimSpace(getPropertyString(\n\t\tprops,\n\t\t\"Part.ID\",\n\t\t\"Part.Id\",\n\t\t\"part.id\",\n\t\t\"PartID\",\n\t\t\"partID\",\n\t))\n}\n\nfunc extractPartMessageID(props interface{}) string {\n\treturn strings.TrimSpace(getPropertyString(\n\t\tprops,\n\t\t\"Part.MessageID\",\n\t\t\"Part.MessageId\",\n\t\t\"part.messageID\",\n\t\t\"part.messageId\",\n\t\t\"MessageID\",\n\t\t\"messageID\",\n\t))\n}\n\nfunc extractPartDelta(props interface{}) string {\n\treturn getPropertyString(\n\t\tprops,\n\t\t\"Delta\",\n\t\t\"delta\",\n\t\t\"Part.Delta\",\n\t\t\"part.delta\",\n\t)\n}\n\nfunc extractPartSnapshotText(props interface{}) string {\n\treturn getPropertyString(\n\t\tprops,\n\t\t\"Part.Text\",\n\t\t\"Part.Content\",\n\t\t\"Part.Snapshot\",\n\t\t\"part.text\",\n\t\t\"part.content\",\n\t\t\"part.snapshot\",\n\t\t\"Text\",\n\t\t\"text\",\n\t\t\"Content\",\n\t\t\"content\",\n\t\t\"Snapshot\",\n\t\t\"snapshot\",\n\t)\n}\n\nfunc longestCommonPrefix(left, right string) string {\n\tleftRunes := []rune(left)\n\trightRunes := []rune(right)\n\tn := len(leftRunes)\n\tif len(rightRunes) < n {\n\t\tn = len(rightRunes)\n\t}\n\n\ti := 0\n\tfor i < n && leftRunes[i] == rightRunes[i] {\n\t\ti++\n\t}\n\tif i == 0 {\n\t\treturn \"\"\n\t}\n\treturn string(leftRunes[:i])\n}\n\n// computePartChunk deduplicates mixed part.updated/delta streams by tracking\n// the latest known snapshot for each part and returning only incremental text.\nfunc computePartChunk(partID, explicitDelta, snapshotText string, snapshots map[string]string) string {\n\tif partID == \"\" {\n\t\tif explicitDelta != \"\" {\n\t\t\treturn explicitDelta\n\t\t}\n\t\treturn snapshotText\n\t}\n\n\tprev := snapshots[partID]\n\tif snapshotText != \"\" {\n\t\tif snapshotText == prev {\n\t\t\treturn \"\"\n\t\t}\n\t\tif prev == \"\" {\n\t\t\tsnapshots[partID] = snapshotText\n\t\t\treturn snapshotText\n\t\t}\n\t\tif strings.HasPrefix(snapshotText, prev) {\n\t\t\tchunk := strings.TrimPrefix(snapshotText, prev)\n\t\t\tsnapshots[partID] = snapshotText\n\t\t\tif chunk != \"\" {\n\t\t\t\treturn chunk\n\t\t\t}\n\t\t\tif explicitDelta != \"\" {\n\t\t\t\treturn explicitDelta\n\t\t\t}\n\t\t\treturn \"\"\n\t\t}\n\n\t\t// Snapshot was rewritten; emit only changed suffix to avoid replaying whole text.\n\t\tcommon := longestCommonPrefix(prev, snapshotText)\n\t\tchunk := strings.TrimPrefix(snapshotText, common)\n\t\tsnapshots[partID] = snapshotText\n\t\treturn chunk\n\t}\n\n\tif explicitDelta != \"\" {\n\t\tsnapshots[partID] = prev + explicitDelta\n\t\treturn explicitDelta\n\t}\n\n\treturn \"\"\n}\n\nfunc extractPartChunk(props interface{}, snapshots map[string]string) (chunk string, partID string, partMessageID string) {\n\tif props == nil {\n\t\treturn \"\", \"\", \"\"\n\t}\n\tpartID = extractPartID(props)\n\tpartMessageID = extractPartMessageID(props)\n\texplicitDelta := extractPartDelta(props)\n\tsnapshotText := extractPartSnapshotText(props)\n\t// Some providers emit snapshot-only part updates without a stable part ID.\n\t// Use message ID as a synthetic key so we can still compute deltas.\n\tif partID == \"\" && partMessageID != \"\" && (snapshotText != \"\" || explicitDelta != \"\") {\n\t\tpartID = \"message:\" + partMessageID\n\t}\n\tchunk = computePartChunk(partID, explicitDelta, snapshotText, snapshots)\n\treturn chunk, partID, partMessageID\n}\n\nfunc parseEventPropertiesFromRaw(raw string) map[string]interface{} {\n\tif raw == \"\" {\n\t\treturn nil\n\t}\n\tvar payload map[string]interface{}\n\tif err := json.Unmarshal([]byte(raw), &payload); err != nil {\n\t\treturn nil\n\t}\n\tif props, ok := payload[\"properties\"].(map[string]interface{}); ok {\n\t\treturn props\n\t}\n\treturn payload\n}\n\nfunc extractQuestionItems(props interface{}) []map[string]interface{} {\n\tif props == nil {\n\t\treturn nil\n\t}\n\n\tquestionsVal := getPropertyValue(props, \"Questions\")\n\tif questionsVal == nil {\n\t\tquestionsVal = getPropertyValue(props, \"questions\")\n\t}\n\tif questionsVal == nil {\n\t\tif questionMap := getPropertyMap(props, \"Question\"); questionMap != nil {\n\t\t\treturn []map[string]interface{}{\n\t\t\t\tquestionMap,\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tswitch v := questionsVal.(type) {\n\tcase []map[string]interface{}:\n\t\treturn v\n\tcase []interface{}:\n\t\titems := make([]map[string]interface{}, 0, len(v))\n\t\tfor _, item := range v {\n\t\t\tif m, ok := item.(map[string]interface{}); ok {\n\t\t\t\titems = append(items, m)\n\t\t\t} else if s, ok := item.(string); ok {\n\t\t\t\titems = append(items, map[string]interface{}{\"prompt\": s})\n\t\t\t}\n\t\t}\n\t\treturn items\n\tdefault:\n\t\treturn nil\n\t}\n}\n\nfunc extractQuestionFields(props interface{}) (string, string, string, []string) {\n\tif props == nil {\n\t\treturn \"\", \"\", \"\", nil\n\t}\n\n\tquestionID := getPropertyString(props, \"ID\", \"Id\", \"QuestionID\", \"questionID\", \"RequestID\", \"requestID\", \"Question.Id\", \"Question.ID\", \"QuestionID.Id\", \"Question.RequestID\")\n\tsessionID := getPropertyString(props, \"SessionID\", \"sessionID\", \"Session.Id\", \"Session.ID\", \"Question.SessionID\")\n\tprompt := getPropertyString(props, \"Prompt\", \"Question\", \"Text\", \"Message\", \"Content\", \"question\", \"Question.Text\", \"Question.Prompt\")\n\tchoices := getStringSlice(props, \"Choices\")\n\n\tif questionMap := getPropertyMap(props, \"Question\"); questionMap != nil {\n\t\tif questionID == \"\" {\n\t\t\tif val, ok := questionMap[\"id\"].(string); ok {\n\t\t\t\tquestionID = val\n\t\t\t} else if val, ok := questionMap[\"ID\"].(string); ok {\n\t\t\t\tquestionID = val\n\t\t\t} else if val, ok := questionMap[\"requestID\"].(string); ok {\n\t\t\t\tquestionID = val\n\t\t\t} else if val, ok := questionMap[\"RequestID\"].(string); ok {\n\t\t\t\tquestionID = val\n\t\t\t}\n\t\t}\n\t\tif sessionID == \"\" {\n\t\t\tif val, ok := questionMap[\"sessionID\"].(string); ok {\n\t\t\t\tsessionID = val\n\t\t\t} else if val, ok := questionMap[\"SessionID\"].(string); ok {\n\t\t\t\tsessionID = val\n\t\t\t}\n\t\t}\n\t\tif prompt == \"\" {\n\t\t\tif val, ok := questionMap[\"prompt\"].(string); ok {\n\t\t\t\tprompt = val\n\t\t\t} else if val, ok := questionMap[\"text\"].(string); ok {\n\t\t\t\tprompt = val\n\t\t\t}\n\t\t}\n\t\tif len(choices) == 0 {\n\t\t\tif val, ok := questionMap[\"choices\"].([]interface{}); ok {\n\t\t\t\tfor _, item := range val {\n\t\t\t\t\tchoices = append(choices, fmt.Sprintf(\"%v\", item))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif prompt == \"\" {\n\t\tprompt = \"Agent asked a question.\"\n\t}\n\n\treturn questionID, sessionID, prompt, choices\n}\n\nfunc extractPermissionFields(props interface{}) (string, string, string, string, string, string) {\n\tif props == nil {\n\t\treturn \"\", \"\", \"\", \"\", \"\", \"\"\n\t}\n\n\tpermissionID := getPropertyString(props, \"ID\", \"Id\", \"PermissionID\", \"permissionID\", \"RequestID\", \"requestID\")\n\tsessionID := getPropertyString(props, \"SessionID\", \"sessionID\")\n\ttitle := getPropertyString(props, \"Title\", \"title\")\n\tpermType := getPropertyString(props, \"Type\", \"type\", \"Permission\", \"permission\")\n\tmessage := getPropertyString(props, \"Message\", \"message\", \"Metadata.Message\")\n\tpatternVal := getPropertyValue(props, \"Pattern\")\n\tif patternVal == nil {\n\t\tpatternVal = getPropertyValue(props, \"Patterns\")\n\t}\n\tpattern := \"\"\n\tswitch v := patternVal.(type) {\n\tcase string:\n\t\tpattern = v\n\tcase []string:\n\t\tpattern = strings.Join(v, \", \")\n\tcase []interface{}:\n\t\tparts := make([]string, 0, len(v))\n\t\tfor _, item := range v {\n\t\t\tparts = append(parts, fmt.Sprintf(\"%v\", item))\n\t\t}\n\t\tpattern = strings.Join(parts, \", \")\n\t}\n\n\treturn permissionID, sessionID, title, permType, message, pattern\n}\n\nfunc eventSessionID(props interface{}) string {\n\treturn getPropertyString(\n\t\tprops,\n\t\t\"SessionID\",\n\t\t\"sessionID\",\n\t\t\"Info.SessionID\",\n\t\t\"info.sessionID\",\n\t\t\"Part.SessionID\",\n\t\t\"part.sessionID\",\n\t\t\"Message.SessionID\",\n\t\t\"message.sessionID\",\n\t\t\"Question.SessionID\",\n\t\t\"question.sessionID\",\n\t\t\"Permission.SessionID\",\n\t\t\"permission.sessionID\",\n\t)\n}\n\nfunc extractEventSessionID(event opencode.EventListResponse) string {\n\tif sid := strings.TrimSpace(eventSessionID(event.Properties)); sid != \"\" {\n\t\treturn sid\n\t}\n\tif rawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON()); rawProps != nil {\n\t\treturn strings.TrimSpace(eventSessionID(rawProps))\n\t}\n\treturn \"\"\n}\n\nvar usageLimitResetAtPattern = regexp.MustCompile(`(?i)(?:resets[_-]?at|reset[_-]?at|x-codex-primary-reset-at)[\"']?\\s*[:=]\\s*[\"']?(\\d{9,})`)\nvar usageLimitResetInSecondsPattern = regexp.MustCompile(`(?i)(?:resets[_-]?in[_-]?seconds|reset[_-]?after[_-]?seconds|x-codex-primary-reset-after-seconds)[\"']?\\s*[:=]\\s*[\"']?(\\d{1,10})`)\nvar usageLimitWindowMinutesPattern = regexp.MustCompile(`(?i)(?:x-codex-primary-window-minutes|window[_-]?minutes)[\"']?\\s*[:=]\\s*[\"']?(\\d{1,10})`)\nvar usageLimitUsedPercentPattern = regexp.MustCompile(`(?i)(?:x-codex-primary-used-percent|used[_-]?percent)[\"']?\\s*[:=]\\s*[\"']?(\\d{1,3})`)\nvar simpleStatusMapPattern = regexp.MustCompile(`(?i)^map\\[(?:type|status):([^\\]]+)\\]$`)\n\nfunc isUsageLimitErrorMessage(msg string) bool {\n\tlower := strings.ToLower(msg)\n\tif strings.Contains(lower, \"usage_limit_reached\") {\n\t\treturn true\n\t}\n\tif strings.Contains(lower, \"usage limit has been reached\") {\n\t\treturn true\n\t}\n\tif strings.Contains(lower, \"too many requests\") {\n\t\treturn true\n\t}\n\tif strings.Contains(lower, \"rate limit\") || strings.Contains(lower, \"quota\") {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc latestUsageLimitHint() (usageLimitHint, bool) {\n\tusageLimitHintState.mu.RLock()\n\thint := usageLimitHintState.hint\n\tusageLimitHintState.mu.RUnlock()\n\n\tif hint.UpdatedAt.IsZero() {\n\t\treturn usageLimitHint{}, false\n\t}\n\t// Avoid reusing stale quota metadata.\n\tif time.Since(hint.UpdatedAt) > 8*24*time.Hour {\n\t\treturn usageLimitHint{}, false\n\t}\n\n\thasAny := hint.HasResetAt || hint.HasResetInSeconds || hint.HasWindowMinutes || hint.HasUsedPercent\n\tif !hasAny {\n\t\treturn usageLimitHint{}, false\n\t}\n\treturn hint, true\n}\n\nfunc extractUsageLimitInt(raw string, pattern *regexp.Regexp) (int64, bool) {\n\tif raw == \"\" || pattern == nil {\n\t\treturn 0, false\n\t}\n\tif matches := pattern.FindStringSubmatch(raw); len(matches) == 2 {\n\t\tif value, err := strconv.ParseInt(matches[1], 10, 64); err == nil && value >= 0 {\n\t\t\treturn value, true\n\t\t}\n\t}\n\treturn 0, false\n}\n\nfunc extractUsageLimitResetInSeconds(raw string) (int64, bool) {\n\treturn extractUsageLimitInt(raw, usageLimitResetInSecondsPattern)\n}\n\nfunc extractUsageLimitWindowMinutes(raw string) (int64, bool) {\n\treturn extractUsageLimitInt(raw, usageLimitWindowMinutesPattern)\n}\n\nfunc extractUsageLimitUsedPercent(raw string) (int64, bool) {\n\treturn extractUsageLimitInt(raw, usageLimitUsedPercentPattern)\n}\n\nfunc recordUsageLimitHintFromText(raw string) {\n\ttext := strings.TrimSpace(raw)\n\tif text == \"\" {\n\t\treturn\n\t}\n\tif !isUsageLimitErrorMessage(text) &&\n\t\t!usageLimitResetAtPattern.MatchString(text) &&\n\t\t!usageLimitResetInSecondsPattern.MatchString(text) &&\n\t\t!usageLimitWindowMinutesPattern.MatchString(text) &&\n\t\t!usageLimitUsedPercentPattern.MatchString(text) {\n\t\treturn\n\t}\n\n\tusageLimitHintState.mu.Lock()\n\tdefer usageLimitHintState.mu.Unlock()\n\n\thint := usageLimitHintState.hint\n\tupdated := false\n\n\tif epoch, ok := extractUsageLimitInt(text, usageLimitResetAtPattern); ok && epoch > 0 {\n\t\thint.ResetAt = time.Unix(epoch, 0)\n\t\thint.HasResetAt = true\n\t\tupdated = true\n\t}\n\tif seconds, ok := extractUsageLimitResetInSeconds(text); ok && seconds > 0 {\n\t\thint.ResetInSeconds = seconds\n\t\thint.HasResetInSeconds = true\n\t\tif !hint.HasResetAt {\n\t\t\thint.ResetAt = time.Now().Add(time.Duration(seconds) * time.Second)\n\t\t\thint.HasResetAt = true\n\t\t}\n\t\tupdated = true\n\t}\n\tif windowMinutes, ok := extractUsageLimitWindowMinutes(text); ok && windowMinutes > 0 {\n\t\thint.WindowMinutes = windowMinutes\n\t\thint.HasWindowMinutes = true\n\t\tupdated = true\n\t}\n\tif usedPercent, ok := extractUsageLimitUsedPercent(text); ok && usedPercent >= 0 {\n\t\thint.UsedPercent = usedPercent\n\t\thint.HasUsedPercent = true\n\t\tupdated = true\n\t}\n\n\tif updated {\n\t\thint.UpdatedAt = time.Now()\n\t\tusageLimitHintState.hint = hint\n\t}\n}\n\nfunc extractUsageLimitResetTime(raw string) (time.Time, bool) {\n\tif raw == \"\" {\n\t\treturn time.Time{}, false\n\t}\n\n\tif epoch, ok := extractUsageLimitInt(raw, usageLimitResetAtPattern); ok && epoch > 0 {\n\t\treturn time.Unix(epoch, 0), true\n\t}\n\n\tif seconds, ok := extractUsageLimitResetInSeconds(raw); ok && seconds > 0 {\n\t\treturn time.Now().Add(time.Duration(seconds) * time.Second), true\n\t}\n\n\treturn time.Time{}, false\n}\n\nfunc formatApproxDuration(d time.Duration) string {\n\tif d <= 0 {\n\t\treturn \"<1m\"\n\t}\n\n\ttotalMinutes := int64(d.Round(time.Minute) / time.Minute)\n\tif totalMinutes <= 0 {\n\t\treturn \"<1m\"\n\t}\n\n\tdays := totalMinutes / (24 * 60)\n\ttotalMinutes %= 24 * 60\n\thours := totalMinutes / 60\n\tminutes := totalMinutes % 60\n\n\tparts := []string{}\n\tif days > 0 {\n\t\tparts = append(parts, fmt.Sprintf(\"%dd\", days))\n\t}\n\tif hours > 0 {\n\t\tparts = append(parts, fmt.Sprintf(\"%dh\", hours))\n\t}\n\tif minutes > 0 && len(parts) < 2 {\n\t\tparts = append(parts, fmt.Sprintf(\"%dm\", minutes))\n\t}\n\tif len(parts) == 0 {\n\t\treturn \"<1m\"\n\t}\n\treturn strings.Join(parts, \" \")\n}\n\nfunc formatQuotaWindow(windowMinutes int64) string {\n\tif windowMinutes <= 0 {\n\t\treturn \"quota\"\n\t}\n\tif windowMinutes%(24*60) == 0 {\n\t\tdays := windowMinutes / (24 * 60)\n\t\treturn fmt.Sprintf(\"%d-day\", days)\n\t}\n\tif windowMinutes%60 == 0 {\n\t\thours := windowMinutes / 60\n\t\treturn fmt.Sprintf(\"%d-hour\", hours)\n\t}\n\treturn fmt.Sprintf(\"%d-minute\", windowMinutes)\n}\n\nfunc isTransientSessionStatus(value string) bool {\n\tlower := strings.ToLower(strings.TrimSpace(value))\n\tswitch lower {\n\tcase \"\", \"busy\", \"running\", \"working\", \"started\", \"pending\", \"processing\", \"in_progress\", \"in-progress\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc isIgnorableSessionStatus(value string) bool {\n\ttrimmed := strings.TrimSpace(value)\n\tif trimmed == \"\" {\n\t\treturn true\n\t}\n\tif isTransientSessionStatus(trimmed) {\n\t\treturn true\n\t}\n\n\tif matches := simpleStatusMapPattern.FindStringSubmatch(trimmed); len(matches) == 2 {\n\t\treturn isTransientSessionStatus(matches[1])\n\t}\n\n\tvar statusMap map[string]interface{}\n\tif err := json.Unmarshal([]byte(trimmed), &statusMap); err == nil && len(statusMap) > 0 {\n\t\t// Ignore pure {\"type\":\"busy\"} / {\"status\":\"running\"} style payloads.\n\t\tif len(statusMap) <= 2 {\n\t\t\tnonTerminal := true\n\t\t\tseenStatusField := false\n\t\t\tfor key, rawVal := range statusMap {\n\t\t\t\tlowerKey := strings.ToLower(strings.TrimSpace(key))\n\t\t\t\tif lowerKey == \"type\" || lowerKey == \"status\" {\n\t\t\t\t\tseenStatusField = true\n\t\t\t\t\tif !isTransientSessionStatus(fmt.Sprintf(\"%v\", rawVal)) {\n\t\t\t\t\t\tnonTerminal = false\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnonTerminal = false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif seenStatusField && nonTerminal {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc usageLimitContext(message, rawEvent string) string {\n\tmsg := strings.TrimSpace(message)\n\traw := strings.TrimSpace(rawEvent)\n\tif msg == \"\" {\n\t\tif isUsageLimitErrorMessage(raw) {\n\t\t\treturn raw\n\t\t}\n\t\treturn \"\"\n\t}\n\tif raw == \"\" {\n\t\treturn msg\n\t}\n\tif !isUsageLimitErrorMessage(msg) && !isUsageLimitErrorMessage(raw) {\n\t\treturn msg\n\t}\n\tif strings.Contains(raw, msg) {\n\t\treturn raw\n\t}\n\tif strings.Contains(msg, raw) {\n\t\treturn msg\n\t}\n\treturn msg + \"\\n\" + raw\n}\n\nfunc userFacingAgentErrorMessage(raw string) string {\n\traw = strings.TrimSpace(raw)\n\tif raw == \"\" {\n\t\treturn \"Unknown error occurred\"\n\t}\n\trecordUsageLimitHintFromText(raw)\n\n\tclean := sanitizeProviderError(errors.New(raw))\n\tif clean == \"\" {\n\t\tclean = \"Unknown error occurred\"\n\t}\n\n\tif !isUsageLimitErrorMessage(raw) && !isUsageLimitErrorMessage(clean) {\n\t\treturn clean\n\t}\n\n\tusedPercent, hasUsedPercent := extractUsageLimitUsedPercent(raw)\n\twindowMinutes, hasWindowMinutes := extractUsageLimitWindowMinutes(raw)\n\tresetAt, hasResetAt := extractUsageLimitResetTime(raw)\n\tresetInSeconds, hasResetInSeconds := extractUsageLimitResetInSeconds(raw)\n\n\tif hint, ok := latestUsageLimitHint(); ok {\n\t\tif !hasUsedPercent && hint.HasUsedPercent {\n\t\t\tusedPercent = hint.UsedPercent\n\t\t\thasUsedPercent = true\n\t\t}\n\t\tif !hasWindowMinutes && hint.HasWindowMinutes {\n\t\t\twindowMinutes = hint.WindowMinutes\n\t\t\thasWindowMinutes = true\n\t\t}\n\t\tif !hasResetAt && hint.HasResetAt {\n\t\t\tresetAt = hint.ResetAt\n\t\t\thasResetAt = true\n\t\t}\n\t\tif !hasResetInSeconds && hint.HasResetInSeconds {\n\t\t\tresetInSeconds = hint.ResetInSeconds\n\t\t\thasResetInSeconds = true\n\t\t}\n\t}\n\n\tmsg := \"Usage limit reached for the selected model on the current plan. Try another model, or retry after your quota resets.\"\n\tif hasUsedPercent {\n\t\tif hasWindowMinutes && windowMinutes > 0 {\n\t\t\tmsg = fmt.Sprintf(\"%s Current usage: %d%% of your %s quota window.\", msg, usedPercent, formatQuotaWindow(windowMinutes))\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s Current usage: %d%% of your quota window.\", msg, usedPercent)\n\t\t}\n\t}\n\n\tif hasResetAt {\n\t\trelative := formatApproxDuration(time.Until(resetAt))\n\t\tmsg = fmt.Sprintf(\"%s Quota resets at %s (in about %s).\", msg, resetAt.Local().Format(\"2006-01-02 15:04 MST\"), relative)\n\t} else if hasResetInSeconds && resetInSeconds > 0 {\n\t\tmsg = fmt.Sprintf(\"%s Retry in about %s.\", msg, formatApproxDuration(time.Duration(resetInSeconds)*time.Second))\n\t}\n\treturn msg\n}\n\nfunc extractSessionErrorMessage(props interface{}) string {\n\tmsg := getPropertyString(\n\t\tprops,\n\t\t\"Error.Data.Message\",\n\t\t\"error.data.message\",\n\t\t\"Error.Message\",\n\t\t\"error.message\",\n\t\t\"Message\",\n\t\t\"message\",\n\t\t\"Details\",\n\t\t\"details\",\n\t\t\"Status\",\n\t\t\"status\",\n\t\t\"Error\",\n\t)\n\treturn strings.TrimSpace(msg)\n}\n\nfunc extractSessionStatusMessage(props interface{}) string {\n\tpaths := []string{\n\t\t\"Details.Message\",\n\t\t\"details.message\",\n\t\t\"Details.Description\",\n\t\t\"details.description\",\n\t\t\"Details.Detail\",\n\t\t\"details.detail\",\n\t\t\"Status.Message\",\n\t\t\"status.message\",\n\t\t\"Status.Description\",\n\t\t\"status.description\",\n\t\t\"Message.Text\",\n\t\t\"message.text\",\n\t\t\"Details\",\n\t\t\"details\",\n\t\t\"Status\",\n\t\t\"status\",\n\t\t\"Message\",\n\t\t\"message\",\n\t\t\"Error.Data.Message\",\n\t\t\"error.data.message\",\n\t\t\"Error.Message\",\n\t\t\"error.message\",\n\t\t\"Error\",\n\t\t\"error\",\n\t}\n\n\tfor _, path := range paths {\n\t\tval := getPropertyValue(props, path)\n\t\tif val == nil {\n\t\t\tcontinue\n\t\t}\n\t\tswitch v := val.(type) {\n\t\tcase string:\n\t\t\ttrimmed := strings.TrimSpace(v)\n\t\t\tif trimmed == \"\" || isIgnorableSessionStatus(trimmed) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn trimmed\n\t\tcase map[string]interface{}:\n\t\t\trawJSON, err := json.Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttrimmed := strings.TrimSpace(string(rawJSON))\n\t\t\tif trimmed == \"\" || isIgnorableSessionStatus(trimmed) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn trimmed\n\t\tdefault:\n\t\t\ttrimmed := strings.TrimSpace(fmt.Sprintf(\"%v\", val))\n\t\t\tif trimmed == \"\" || trimmed == \"<nil>\" || isIgnorableSessionStatus(trimmed) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn trimmed\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\nfunc (d *OpenCodeDriver) abortSessionBestEffort(sessionID, projectDir, reason string) {\n\tsid := strings.TrimSpace(sessionID)\n\tif sid == \"\" {\n\t\treturn\n\t}\n\n\tabortCtx, cancel := context.WithTimeout(context.Background(), 4*time.Second)\n\tdefer cancel()\n\n\tparams := opencode.SessionAbortParams{}\n\tif strings.TrimSpace(projectDir) != \"\" {\n\t\tparams.Directory = opencode.F(projectDir)\n\t}\n\n\tif _, err := d.client.Session.Abort(abortCtx, sid, params); err != nil {\n\t\tlog.Printf(\"[OPENCODE] Failed to abort session %s (%s): %v\", sid, reason, err)\n\t\treturn\n\t}\n\n\tlog.Printf(\"[OPENCODE] Aborted session %s (%s)\", sid, reason)\n}\n\n// streamEventsToSSE streams OpenCode events to the HTTP response as SSE\nfunc (d *OpenCodeDriver) streamEventsToSSE(ctx context.Context, w http.ResponseWriter, flusher http.Flusher, projectDir string) {\n\tlog.Printf(\"[OPENCODE] Starting SSE event streaming for directory: %s\", projectDir)\n\tstream := d.client.Event.ListStreaming(ctx, opencode.EventListParams{\n\t\tDirectory: opencode.F(projectDir),\n\t})\n\n\tlastToolName := \"\"\n\tlastAssistantMessageID := \"\"\n\ttotalTextSent := \"\"\n\tpartAccumulated := \"\"\n\tlastSessionStatus := \"\"\n\tpartSnapshots := make(map[string]string)\n\ttoolProgressByID := make(map[string]string)\n\tfor stream.Next() {\n\t\tevent := stream.Current()\n\t\teventSID := extractEventSessionID(event)\n\t\trawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON())\n\n\t\t// Stream relevant events to client\n\t\tswitch event.Type {\n\t\tcase \"message.updated\":\n\t\t\trole := extractMessageRole(event.Properties)\n\t\t\tif role == \"\" && rawProps != nil {\n\t\t\t\trole = extractMessageRole(rawProps)\n\t\t\t}\n\t\t\t// Skip non-assistant updates so we don't replay the original user prompt.\n\t\t\tif role != \"\" && role != \"assistant\" {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tmessageID := getPropertyString(event.Properties, \"Info.ID\", \"Info.Id\", \"ID\", \"id\")\n\t\t\tif messageID != \"\" && messageID != lastAssistantMessageID {\n\t\t\t\tlastAssistantMessageID = messageID\n\t\t\t\ttotalTextSent = \"\"\n\t\t\t\tpartAccumulated = \"\"\n\t\t\t\tpartSnapshots = make(map[string]string)\n\t\t\t}\n\n\t\t\tcontent := extractAssistantMessageText(event.Properties)\n\t\t\tif content == \"\" {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\tcontent = extractAssistantMessageText(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif content != \"\" {\n\t\t\t\tif role == \"\" && looksLikeDriverPromptEcho(content) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif len(content) > len(totalTextSent) && strings.HasPrefix(content, totalTextSent) {\n\t\t\t\t\tdelta := content[len(totalTextSent):]\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"outputChunk\": delta})\n\t\t\t\t\ttotalTextSent = content\n\t\t\t\t} else if len(content) > len(totalTextSent) {\n\t\t\t\t\t// Snapshot diverged (edit/rewrite); send full content as discrete output.\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": content})\n\t\t\t\t\ttotalTextSent = content\n\t\t\t\t}\n\t\t\t\t// else: stale snapshot (len <= totalTextSent), skip\n\t\t\t}\n\t\tcase \"message.part.updated\", \"message.part.delta\":\n\t\t\tprogress, hasProgress := extractToolPartProgress(event.Properties)\n\t\t\tif !hasProgress && rawProps != nil {\n\t\t\t\tprogress, hasProgress = extractToolPartProgress(rawProps)\n\t\t\t}\n\t\t\tif hasProgress {\n\t\t\t\tif lastStatus, exists := toolProgressByID[progress.key]; !exists || lastStatus != progress.status {\n\t\t\t\t\ttoolProgressByID[progress.key] = progress.status\n\t\t\t\t\tif line := formatToolPartProgressLine(progress); line != \"\" {\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": line})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Extract incremental thought/output text from part events (common in OpenAI/ChatGPT)\n\t\t\tchunk, _, partMessageID := extractPartChunk(event.Properties, partSnapshots)\n\t\t\tif rawProps != nil {\n\t\t\t\tif chunk == \"\" {\n\t\t\t\t\trawChunk, _, rawPartMessageID := extractPartChunk(rawProps, partSnapshots)\n\t\t\t\t\tchunk = rawChunk\n\t\t\t\t\tif partMessageID == \"\" {\n\t\t\t\t\t\tpartMessageID = rawPartMessageID\n\t\t\t\t\t}\n\t\t\t\t} else if partMessageID == \"\" {\n\t\t\t\t\tpartMessageID = extractPartMessageID(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif chunk != \"\" {\n\t\t\t\tif looksLikeDriverPromptEcho(chunk) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif partMessageID != \"\" && partMessageID != lastAssistantMessageID {\n\t\t\t\t\tlastAssistantMessageID = partMessageID\n\t\t\t\t\ttotalTextSent = \"\"\n\t\t\t\t\tpartAccumulated = \"\"\n\t\t\t\t\tpartSnapshots = make(map[string]string)\n\t\t\t\t}\n\t\t\t\tpartAccumulated += chunk\n\t\t\t\tif len(partAccumulated) > len(totalTextSent) && strings.HasPrefix(partAccumulated, totalTextSent) {\n\t\t\t\t\tdelta := partAccumulated[len(totalTextSent):]\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"outputChunk\": delta})\n\t\t\t\t\ttotalTextSent = partAccumulated\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.status\":\n\t\t\tdetails := extractSessionStatusMessage(event.Properties)\n\t\t\tif details == \"\" {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\tdetails = extractSessionStatusMessage(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\trawDetails := strings.TrimSpace(string(event.JSON.RawJSON()))\n\t\t\tdetails = usageLimitContext(details, rawDetails)\n\t\t\tif details != \"\" {\n\t\t\t\tif isUsageLimitErrorMessage(details) {\n\t\t\t\t\tfriendly := userFacingAgentErrorMessage(details)\n\t\t\t\t\tlog.Printf(\"[OPENCODE] Session status indicates usage limit: %s\", friendly)\n\t\t\t\t\td.abortSessionBestEffort(eventSID, projectDir, \"usage limit in streamEventsToSSE session.status\")\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\t\t\"output\":  fmt.Sprintf(\"❌ Error: %s\", friendly),\n\t\t\t\t\t\t\"done\":    true,\n\t\t\t\t\t\t\"success\": false,\n\t\t\t\t\t\t\"error\":   friendly,\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tnormalizedStatus := strings.TrimSpace(details)\n\t\t\t\tif normalizedStatus != \"\" && normalizedStatus != lastSessionStatus {\n\t\t\t\t\tlastSessionStatus = normalizedStatus\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"ℹ️ Status: %s\", normalizedStatus)})\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.error\":\n\t\t\terrorMsg := extractSessionErrorMessage(event.Properties)\n\t\t\tif errorMsg == \"\" {\n\t\t\t\tif rawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON()); rawProps != nil {\n\t\t\t\t\terrorMsg = extractSessionErrorMessage(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\trawError := strings.TrimSpace(string(event.JSON.RawJSON()))\n\t\t\terrorMsg = usageLimitContext(errorMsg, rawError)\n\t\t\tif errorMsg == \"\" {\n\t\t\t\terrorMsg = \"Unknown error occurred\"\n\t\t\t}\n\t\t\tfriendly := userFacingAgentErrorMessage(errorMsg)\n\t\t\tlog.Printf(\"[OPENCODE] Session error: %s\", friendly)\n\t\t\tif isUsageLimitErrorMessage(errorMsg) || isUsageLimitErrorMessage(friendly) {\n\t\t\t\td.abortSessionBestEffort(eventSID, projectDir, \"usage limit in streamEventsToSSE session.error\")\n\t\t\t}\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"output\":  fmt.Sprintf(\"❌ Error: %s\", friendly),\n\t\t\t\t\"done\":    true,\n\t\t\t\t\"success\": false,\n\t\t\t\t\"error\":   friendly,\n\t\t\t})\n\t\tcase \"question.asked\":\n\t\t\tquestionID, sessionID, prompt, choices := extractQuestionFields(event.Properties)\n\t\t\titems := extractQuestionItems(event.Properties)\n\t\t\tif questionID == \"\" || sessionID == \"\" || prompt == \"Agent asked a question.\" || len(items) == 0 {\n\t\t\t\tif rawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON()); rawProps != nil {\n\t\t\t\t\tquestionID, sessionID, prompt, choices = extractQuestionFields(rawProps)\n\t\t\t\t\titems = extractQuestionItems(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif prompt == \"Agent asked a question.\" && len(items) > 0 {\n\t\t\t\tif val, ok := items[0][\"prompt\"].(string); ok && val != \"\" {\n\t\t\t\t\tprompt = val\n\t\t\t\t} else if val, ok := items[0][\"question\"].(string); ok && val != \"\" {\n\t\t\t\t\tprompt = val\n\t\t\t\t}\n\t\t\t}\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"question\": map[string]interface{}{\n\t\t\t\t\t\"id\":        questionID,\n\t\t\t\t\t\"sessionID\": sessionID,\n\t\t\t\t\t\"prompt\":    prompt,\n\t\t\t\t\t\"choices\":   choices,\n\t\t\t\t\t\"questions\": items,\n\t\t\t\t},\n\t\t\t})\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"❓ Question: %s\", prompt)})\n\t\tcase \"permission.updated\", \"permission.asked\":\n\t\t\tpermissionID, sessionID, title, permType, message, pattern := extractPermissionFields(event.Properties)\n\t\t\tif permissionID == \"\" || sessionID == \"\" {\n\t\t\t\tif rawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON()); rawProps != nil {\n\t\t\t\t\tpermissionID, sessionID, title, permType, message, pattern = extractPermissionFields(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"permission\": map[string]interface{}{\n\t\t\t\t\t\"id\":        permissionID,\n\t\t\t\t\t\"sessionID\": sessionID,\n\t\t\t\t\t\"title\":     title,\n\t\t\t\t\t\"type\":      permType,\n\t\t\t\t\t\"pattern\":   pattern,\n\t\t\t\t\t\"message\":   message,\n\t\t\t\t},\n\t\t\t})\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"🔐 Permission requested by agent...\"})\n\t\tcase \"tool.start\":\n\t\t\ttoolName := getPropertyString(event.Properties, \"Name\")\n\t\t\tif toolName != \"\" {\n\t\t\t\tlastToolName = toolName\n\t\t\t\tvar argsStr string\n\t\t\t\tinput := getPropertyMap(event.Properties, \"Input\")\n\t\t\t\tif input != nil {\n\t\t\t\t\t// Handle common tool inputs\n\t\t\t\t\tif path, ok := input[\"Path\"].(string); ok {\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", filepath.Base(path))\n\t\t\t\t\t} else if path, ok := input[\"path\"].(string); ok {\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", filepath.Base(path))\n\t\t\t\t\t} else if cmd, ok := input[\"Command\"].(string); ok {\n\t\t\t\t\t\tif len(cmd) > 30 {\n\t\t\t\t\t\t\tcmd = cmd[:27] + \"...\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", cmd)\n\t\t\t\t\t} else if cmd, ok := input[\"command\"].(string); ok {\n\t\t\t\t\t\tif len(cmd) > 30 {\n\t\t\t\t\t\t\tcmd = cmd[:27] + \"...\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", cmd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"🔧 Running: %s%s\", toolName, argsStr)})\n\t\t\t}\n\t\tcase \"tool.end\":\n\t\t\ttoolName := getPropertyString(event.Properties, \"Name\")\n\t\t\tif toolName != \"\" {\n\t\t\t\tif lastToolName == toolName {\n\t\t\t\t\tlastToolName = \"\"\n\t\t\t\t}\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"✅ Completed: %s\", toolName)})\n\t\t\t}\n\t\tcase \"file.updated\", \"file.edited\":\n\t\t\tfilePath := getPropertyString(event.Properties, \"Path\", \"path\", \"File\", \"file\")\n\t\t\tif filePath != \"\" {\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📝 Updated: %s\", filePath)})\n\t\t\t}\n\t\tcase \"session.idle\", \"server.connected\", \"session.updated\", \"session.diff\", \"lsp.client.diagnostics\", \"server.heartbeat\", \"lsp.updated\", \"file.watcher.updated\":\n\t\t\t// Silence these frequent/internal events\n\t\tdefault:\n\t\t\tlog.Printf(\"[OPENCODE] Unhandled SSE event: %s\", event.Type)\n\t\t}\n\t}\n\n\tif err := stream.Err(); err != nil {\n\t\tlog.Printf(\"[OPENCODE] SSE stream error: %v\", err)\n\t} else {\n\t\tlog.Printf(\"[OPENCODE] SSE streaming ended successfully\")\n\t}\n}\n\n// streamEventsAndWaitForCompletion streams events and waits for the session to complete.\n// Returns:\n//   - completed: true if session completed successfully (idle), false otherwise\n//   - changedFiles: paths detected from file.updated/file.edited events\n//   - hadActivity: true if assistant/tool/question/permission/todo activity was observed\n//   - errorMessage: normalized session error when available\nfunc (d *OpenCodeDriver) streamEventsAndWaitForCompletion(\n\tctx context.Context,\n\tw http.ResponseWriter,\n\tflusher http.Flusher,\n\tprojectDir,\n\tsessionID string,\n\tpromptDispatched <-chan struct{},\n) (bool, []string, bool, string) {\n\tlog.Printf(\"[OPENCODE] Starting SSE event streaming and waiting for completion (session: %s)\", sessionID)\n\tstream := d.client.Event.ListStreaming(ctx, opencode.EventListParams{\n\t\tDirectory: opencode.F(projectDir),\n\t})\n\n\tsessionIdle := false\n\thadError := false\n\tsawSessionActivity := false\n\tpromptWasDispatched := false\n\tsessionEventCount := 0\n\tlastEventTime := time.Now()\n\tlastToolName := \"\"\n\tlastAssistantMessageID := \"\"\n\ttotalTextSent := \"\"\n\tpartAccumulated := \"\"\n\tlastSessionStatus := \"\"\n\tpartSnapshots := make(map[string]string)\n\ttoolProgressByID := make(map[string]string)\n\tchangedFilesSet := make(map[string]struct{})\n\tlastSessionError := \"\"\n\tabortRequested := false\n\n\trequestUsageLimitAbort := func(source string) {\n\t\tif abortRequested {\n\t\t\treturn\n\t\t}\n\t\tabortRequested = true\n\t\tgo d.abortSessionBestEffort(sessionID, projectDir, source)\n\t}\n\n\theartbeatTicker := time.NewTicker(10 * time.Second)\n\tdefer heartbeatTicker.Stop()\n\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-heartbeatTicker.C:\n\t\t\t\tif !sessionIdle {\n\t\t\t\t\telapsed := time.Since(lastEventTime)\n\t\t\t\t\tif elapsed.Seconds() > 10 {\n\t\t\t\t\t\tstatusMsg := fmt.Sprintf(\"⏳ Agent still working... (%.0fs since last update)\", elapsed.Seconds())\n\t\t\t\t\t\tif lastToolName != \"\" {\n\t\t\t\t\t\t\tstatusMsg += fmt.Sprintf(\" [Current task: %s]\", lastToolName)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": statusMsg})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase <-ctx.Done():\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\n\tfor stream.Next() {\n\t\tevent := stream.Current()\n\t\tif !promptWasDispatched && promptDispatched != nil {\n\t\t\tselect {\n\t\t\tcase <-promptDispatched:\n\t\t\t\tpromptWasDispatched = true\n\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\teventSID := extractEventSessionID(event)\n\t\tif eventSID != \"\" && eventSID != sessionID {\n\t\t\t// Directory-wide stream includes events from other sessions; ignore them.\n\t\t\tcontinue\n\t\t}\n\t\trawProps := parseEventPropertiesFromRaw(event.JSON.RawJSON())\n\t\tsessionEventCount++\n\t\tlastEventTime = time.Now()\n\n\t\t// Stream relevant events to client\n\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] event.Type=%q totalSent=%d partAcc=%d lastMsgID=%q\", event.Type, len(totalTextSent), len(partAccumulated), lastAssistantMessageID)\n\t\tswitch event.Type {\n\t\tcase \"message.updated\":\n\t\t\trole := extractMessageRole(event.Properties)\n\t\t\tif role == \"\" && rawProps != nil {\n\t\t\t\trole = extractMessageRole(rawProps)\n\t\t\t}\n\t\t\tif role != \"\" && role != \"assistant\" {\n\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated SKIPPED: role=%q (not assistant)\", role)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tmessageID := getPropertyString(event.Properties, \"Info.ID\", \"Info.Id\", \"ID\", \"id\")\n\t\t\tif messageID == \"\" && rawProps != nil {\n\t\t\t\tmessageID = getPropertyString(rawProps, \"Info.ID\", \"Info.Id\", \"ID\", \"id\")\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated: role=%q messageID=%q lastMsgID=%q totalSent=%d\", role, messageID, lastAssistantMessageID, len(totalTextSent))\n\t\t\tif messageID != \"\" && messageID != lastAssistantMessageID {\n\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated: NEW message ID detected\")\n\t\t\t\tlastAssistantMessageID = messageID\n\t\t\t\ttotalTextSent = \"\"\n\t\t\t\tpartAccumulated = \"\"\n\t\t\t\tpartSnapshots = make(map[string]string)\n\t\t\t}\n\n\t\t\tcontent := extractAssistantMessageText(event.Properties)\n\t\t\tif content == \"\" {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\tcontent = extractAssistantMessageText(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontentPreview := content\n\t\t\tif len(contentPreview) > 120 {\n\t\t\t\tcontentPreview = contentPreview[:120] + \"...\"\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated: contentLen=%d preview=%q\", len(content), contentPreview)\n\t\t\tif content != \"\" {\n\t\t\t\tif role == \"\" && looksLikeDriverPromptEcho(content) {\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated SUPPRESSED: looks like driver prompt echo\")\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tsawSessionActivity = true\n\t\t\t\tif len(content) > len(totalTextSent) && strings.HasPrefix(content, totalTextSent) {\n\t\t\t\t\tdelta := content[len(totalTextSent):]\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated FORWARDED delta (%d chars)\", len(delta))\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"outputChunk\": delta})\n\t\t\t\t\ttotalTextSent = content\n\t\t\t\t} else if len(content) > len(totalTextSent) {\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated FORWARDED rewrite (%d chars)\", len(content))\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": content})\n\t\t\t\t\ttotalTextSent = content\n\t\t\t\t} else {\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] message.updated SKIPPED: stale (contentLen=%d <= totalSentLen=%d)\", len(content), len(totalTextSent))\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"message.part.updated\", \"message.part.delta\":\n\t\t\tprogress, hasProgress := extractToolPartProgress(event.Properties)\n\t\t\tif !hasProgress && rawProps != nil {\n\t\t\t\tprogress, hasProgress = extractToolPartProgress(rawProps)\n\t\t\t}\n\t\t\tif hasProgress {\n\t\t\t\tif lastStatus, exists := toolProgressByID[progress.key]; !exists || lastStatus != progress.status {\n\t\t\t\t\ttoolProgressByID[progress.key] = progress.status\n\t\t\t\t\tif line := formatToolPartProgressLine(progress); line != \"\" {\n\t\t\t\t\t\tsawSessionActivity = true\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": line})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Extract incremental thought/output text from part events (common in OpenAI/ChatGPT)\n\t\t\tchunk, _, partMessageID := extractPartChunk(event.Properties, partSnapshots)\n\t\t\tif rawProps != nil {\n\t\t\t\tif chunk == \"\" {\n\t\t\t\t\trawChunk, _, rawPartMessageID := extractPartChunk(rawProps, partSnapshots)\n\t\t\t\t\tchunk = rawChunk\n\t\t\t\t\tif partMessageID == \"\" {\n\t\t\t\t\t\tpartMessageID = rawPartMessageID\n\t\t\t\t\t}\n\t\t\t\t} else if partMessageID == \"\" {\n\t\t\t\t\tpartMessageID = extractPartMessageID(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tchunkPreview := chunk\n\t\t\tif len(chunkPreview) > 120 {\n\t\t\t\tchunkPreview = chunkPreview[:120] + \"...\"\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] part event: type=%q hasProgress=%t chunkLen=%d partMsgID=%q preview=%q\", event.Type, hasProgress, len(chunk), partMessageID, chunkPreview)\n\t\t\tif chunk != \"\" {\n\t\t\t\tif looksLikeDriverPromptEcho(chunk) {\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] part chunk SUPPRESSED: looks like driver prompt echo (%d chars)\", len(chunk))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif partMessageID != \"\" && partMessageID != lastAssistantMessageID {\n\t\t\t\t\tlastAssistantMessageID = partMessageID\n\t\t\t\t\ttotalTextSent = \"\"\n\t\t\t\t\tpartAccumulated = \"\"\n\t\t\t\t\tpartSnapshots = make(map[string]string)\n\t\t\t\t}\n\t\t\t\tpartAccumulated += chunk\n\t\t\t\tif len(partAccumulated) > len(totalTextSent) && strings.HasPrefix(partAccumulated, totalTextSent) {\n\t\t\t\t\tdelta := partAccumulated[len(totalTextSent):]\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] part chunk FORWARDED delta (%d chars, totalSent now %d)\", len(delta), len(partAccumulated))\n\t\t\t\t\tsawSessionActivity = true\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"outputChunk\": delta})\n\t\t\t\t\ttotalTextSent = partAccumulated\n\t\t\t\t} else {\n\t\t\t\t\tlog.Printf(\"[OPENCODE-STREAM-DEBUG] part chunk SKIPPED: already covered (partAcc=%d, totalSent=%d)\", len(partAccumulated), len(totalTextSent))\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.status\":\n\t\t\tdetails := extractSessionStatusMessage(event.Properties)\n\t\t\tif details == \"\" {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\tdetails = extractSessionStatusMessage(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\trawDetails := strings.TrimSpace(string(event.JSON.RawJSON()))\n\t\t\tdetails = usageLimitContext(details, rawDetails)\n\t\t\tif details != \"\" {\n\t\t\t\tfriendlyStatus := userFacingAgentErrorMessage(details)\n\t\t\t\tif isUsageLimitErrorMessage(details) || isUsageLimitErrorMessage(friendlyStatus) {\n\t\t\t\t\tsawSessionActivity = true\n\t\t\t\t\thadError = true\n\t\t\t\t\tlastSessionError = details\n\t\t\t\t\trequestUsageLimitAbort(\"usage limit in streamEventsAndWaitForCompletion session.status\")\n\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"❌ Error: %s\", friendlyStatus)})\n\t\t\t\t\t// End stream early; caller will emit done=false with this error.\n\t\t\t\t\tsessionIdle = true\n\t\t\t\t} else {\n\t\t\t\t\tnormalizedStatus := strings.TrimSpace(details)\n\t\t\t\t\tif normalizedStatus != \"\" && normalizedStatus != lastSessionStatus {\n\t\t\t\t\t\tlastSessionStatus = normalizedStatus\n\t\t\t\t\t\tsawSessionActivity = true\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"ℹ️ Status: %s\", normalizedStatus)})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.error\":\n\t\t\tsawSessionActivity = true\n\t\t\thadError = true\n\t\t\terrorMsg := extractSessionErrorMessage(event.Properties)\n\t\t\tif errorMsg == \"\" {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\terrorMsg = extractSessionErrorMessage(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\trawError := strings.TrimSpace(string(event.JSON.RawJSON()))\n\t\t\terrorMsg = usageLimitContext(errorMsg, rawError)\n\t\t\tif errorMsg == \"\" {\n\t\t\t\terrorMsg = \"Unknown error occurred\"\n\t\t\t}\n\t\t\tfriendly := userFacingAgentErrorMessage(errorMsg)\n\t\t\tif isUsageLimitErrorMessage(errorMsg) || isUsageLimitErrorMessage(friendly) {\n\t\t\t\trequestUsageLimitAbort(\"usage limit in streamEventsAndWaitForCompletion session.error\")\n\t\t\t}\n\t\t\tlastSessionError = errorMsg\n\t\t\tlog.Printf(\"[OPENCODE] Session error: %s\", friendly)\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"❌ Error: %s\", friendly)})\n\t\tcase \"question.asked\":\n\t\t\tsawSessionActivity = true\n\t\t\tquestionID, questionSessionID, prompt, choices := extractQuestionFields(event.Properties)\n\t\t\titems := extractQuestionItems(event.Properties)\n\t\t\tif questionID == \"\" || questionSessionID == \"\" || prompt == \"Agent asked a question.\" || len(items) == 0 {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\tquestionID, questionSessionID, prompt, choices = extractQuestionFields(rawProps)\n\t\t\t\t\titems = extractQuestionItems(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif questionSessionID == \"\" {\n\t\t\t\tquestionSessionID = eventSID\n\t\t\t}\n\t\t\tif questionSessionID == \"\" {\n\t\t\t\tquestionSessionID = sessionID\n\t\t\t}\n\t\t\tif questionSessionID != sessionID {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif prompt == \"Agent asked a question.\" && len(items) > 0 {\n\t\t\t\tif val, ok := items[0][\"prompt\"].(string); ok && val != \"\" {\n\t\t\t\t\tprompt = val\n\t\t\t\t} else if val, ok := items[0][\"question\"].(string); ok && val != \"\" {\n\t\t\t\t\tprompt = val\n\t\t\t\t}\n\t\t\t}\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"question\": map[string]interface{}{\n\t\t\t\t\t\"id\":        questionID,\n\t\t\t\t\t\"sessionID\": questionSessionID,\n\t\t\t\t\t\"prompt\":    prompt,\n\t\t\t\t\t\"choices\":   choices,\n\t\t\t\t\t\"questions\": items,\n\t\t\t\t},\n\t\t\t})\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"❓ Question: %s\", prompt)})\n\t\tcase \"permission.updated\", \"permission.asked\":\n\t\t\tsawSessionActivity = true\n\t\t\tpermissionID, permissionSessionID, title, permType, message, pattern := extractPermissionFields(event.Properties)\n\t\t\tif permissionID == \"\" || permissionSessionID == \"\" {\n\t\t\t\tif rawProps != nil {\n\t\t\t\t\tpermissionID, permissionSessionID, title, permType, message, pattern = extractPermissionFields(rawProps)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif permissionSessionID == \"\" {\n\t\t\t\tpermissionSessionID = eventSID\n\t\t\t}\n\t\t\tif permissionSessionID == \"\" {\n\t\t\t\tpermissionSessionID = sessionID\n\t\t\t}\n\t\t\tif permissionSessionID != sessionID {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\n\t\t\t\t\"permission\": map[string]interface{}{\n\t\t\t\t\t\"id\":        permissionID,\n\t\t\t\t\t\"sessionID\": permissionSessionID,\n\t\t\t\t\t\"title\":     title,\n\t\t\t\t\t\"type\":      permType,\n\t\t\t\t\t\"pattern\":   pattern,\n\t\t\t\t\t\"message\":   message,\n\t\t\t\t},\n\t\t\t})\n\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": \"🔐 Permission requested by agent...\"})\n\t\tcase \"session.idle\":\n\t\t\tif !sawSessionActivity && !promptWasDispatched {\n\t\t\t\tlog.Printf(\"[OPENCODE] Ignoring pre-work session.idle for session %s\", sessionID)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsessionIdle = true\n\t\tcase \"tool.start\":\n\t\t\ttoolName := getPropertyString(event.Properties, \"Name\")\n\t\t\tif toolName != \"\" {\n\t\t\t\tsawSessionActivity = true\n\t\t\t\tlastToolName = toolName\n\t\t\t\tvar argsStr string\n\t\t\t\tinput := getPropertyMap(event.Properties, \"Input\")\n\t\t\t\tif input != nil {\n\t\t\t\t\tif path, ok := input[\"Path\"].(string); ok {\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", filepath.Base(path))\n\t\t\t\t\t} else if path, ok := input[\"path\"].(string); ok {\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", filepath.Base(path))\n\t\t\t\t\t} else if cmd, ok := input[\"Command\"].(string); ok {\n\t\t\t\t\t\tif len(cmd) > 30 {\n\t\t\t\t\t\t\tcmd = cmd[:27] + \"...\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", cmd)\n\t\t\t\t\t} else if cmd, ok := input[\"command\"].(string); ok {\n\t\t\t\t\t\tif len(cmd) > 30 {\n\t\t\t\t\t\t\tcmd = cmd[:27] + \"...\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\targsStr = fmt.Sprintf(\" (%s)\", cmd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"🔧 Running: %s%s\", toolName, argsStr)})\n\t\t\t}\n\t\tcase \"tool.end\":\n\t\t\ttoolName := getPropertyString(event.Properties, \"Name\")\n\t\t\tif toolName != \"\" {\n\t\t\t\tsawSessionActivity = true\n\t\t\t\tif lastToolName == toolName {\n\t\t\t\t\tlastToolName = \"\"\n\t\t\t\t}\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"✅ Completed: %s\", toolName)})\n\t\t\t}\n\t\tcase \"file.updated\", \"file.edited\":\n\t\t\tfilePath := getPropertyString(event.Properties, \"Path\", \"path\", \"File\", \"file\")\n\t\t\tif filePath != \"\" {\n\t\t\t\tsawSessionActivity = true\n\t\t\t\tnormalizedPath := normalizeChangedFilePath(projectDir, filePath)\n\t\t\t\tif normalizedPath == \"\" {\n\t\t\t\t\tnormalizedPath = filepath.ToSlash(filePath)\n\t\t\t\t}\n\t\t\t\tchangedFilesSet[normalizedPath] = struct{}{}\n\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": fmt.Sprintf(\"📝 Updated: %s\", normalizedPath)})\n\t\t\t}\n\t\tcase \"todo.updated\":\n\t\t\tval := reflect.ValueOf(event.Properties)\n\t\t\tif val.Kind() == reflect.Struct {\n\t\t\t\ttodosField := val.FieldByName(\"Todos\")\n\t\t\t\tif todosField.IsValid() && todosField.Kind() == reflect.Slice {\n\t\t\t\t\tsawSessionActivity = true\n\t\t\t\t\tcompletedCount := 0\n\t\t\t\t\ttotalCount := todosField.Len()\n\t\t\t\t\tvar currentTask string\n\t\t\t\t\tfor i := 0; i < todosField.Len(); i++ {\n\t\t\t\t\t\ttodoItem := todosField.Index(i)\n\t\t\t\t\t\tstatus := fmt.Sprintf(\"%v\", todoItem.FieldByName(\"Status\").Interface())\n\t\t\t\t\t\tcontent := fmt.Sprintf(\"%v\", todoItem.FieldByName(\"Content\").Interface())\n\t\t\t\t\t\tif status == \"completed\" {\n\t\t\t\t\t\t\tcompletedCount++\n\t\t\t\t\t\t} else if status == \"in_progress\" {\n\t\t\t\t\t\t\tcurrentTask = content\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif totalCount > 0 {\n\t\t\t\t\t\tprogressMsg := fmt.Sprintf(\"📊 Progress: %d/%d tasks completed\", completedCount, totalCount)\n\t\t\t\t\t\tif currentTask != \"\" {\n\t\t\t\t\t\t\tprogressMsg += fmt.Sprintf(\" - Working on: %s\", currentTask)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsendSSEData(w, flusher, map[string]interface{}{\"output\": progressMsg})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"session.diff\", \"lsp.client.diagnostics\", \"server.connected\", \"session.updated\", \"server.heartbeat\", \"lsp.updated\", \"file.watcher.updated\":\n\t\t\t// Skip\n\t\tdefault:\n\t\t\tlog.Printf(\"[OPENCODE] Unhandled SSE event: %s\", event.Type)\n\t\t}\n\n\t\tif sessionIdle {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif err := stream.Err(); err != nil {\n\t\tif lastSessionError == \"\" {\n\t\t\tlastSessionError = userFacingAgentErrorMessage(err.Error())\n\t\t}\n\t\tif errors.Is(err, context.Canceled) || errors.Is(ctx.Err(), context.Canceled) {\n\t\t\tlog.Printf(\n\t\t\t\t\"[OPENCODE] SSE stream canceled for session %s (client request canceled) events=%d promptDispatched=%t sawActivity=%t idle=%t\",\n\t\t\t\tsessionID,\n\t\t\t\tsessionEventCount,\n\t\t\t\tpromptWasDispatched,\n\t\t\t\tsawSessionActivity,\n\t\t\t\tsessionIdle,\n\t\t\t)\n\t\t} else {\n\t\t\tlog.Printf(\"[OPENCODE] SSE stream error: %v\", err)\n\t\t}\n\t\treturn false, nil, sawSessionActivity, lastSessionError\n\t}\n\n\tchangedFiles := make([]string, 0, len(changedFilesSet))\n\tfor path := range changedFilesSet {\n\t\tchangedFiles = append(changedFiles, path)\n\t}\n\tsort.Strings(changedFiles)\n\tlog.Printf(\n\t\t\"[OPENCODE] Session stream summary session=%s completed=%t hadError=%t events=%d activity=%t changedFiles=%d\",\n\t\tsessionID,\n\t\t!hadError && sessionIdle,\n\t\thadError,\n\t\tsessionEventCount,\n\t\tsawSessionActivity,\n\t\tlen(changedFiles),\n\t)\n\n\treturn !hadError && sessionIdle, changedFiles, sawSessionActivity, lastSessionError\n}\n\nfunc normalizeChangedFilePath(projectDir, filePath string) string {\n\ttrimmed := strings.TrimSpace(filePath)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\n\tif filepath.IsAbs(trimmed) {\n\t\tif rel, err := filepath.Rel(projectDir, trimmed); err == nil {\n\t\t\treturn filepath.ToSlash(filepath.Clean(rel))\n\t\t}\n\t}\n\n\treturn filepath.ToSlash(filepath.Clean(trimmed))\n}\n\ntype projectFileSnapshotEntry struct {\n\tSize            int64\n\tModTimeUnixNano int64\n}\n\nfunc captureProjectFileSnapshot(projectDir string) (map[string]projectFileSnapshotEntry, error) {\n\tsnapshot := make(map[string]projectFileSnapshotEntry)\n\n\terr := filepath.Walk(projectDir, func(path string, info os.FileInfo, walkErr error) error {\n\t\tif walkErr != nil {\n\t\t\treturn walkErr\n\t\t}\n\n\t\tif info.IsDir() {\n\t\t\tif shouldSkipSnapshotDirectory(info.Name()) {\n\t\t\t\treturn filepath.SkipDir\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\trelPath, err := filepath.Rel(projectDir, path)\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tcleanRel := filepath.ToSlash(filepath.Clean(relPath))\n\t\tif cleanRel == \"\" || cleanRel == \".\" {\n\t\t\treturn nil\n\t\t}\n\n\t\tsnapshot[cleanRel] = projectFileSnapshotEntry{\n\t\t\tSize:            info.Size(),\n\t\t\tModTimeUnixNano: info.ModTime().UnixNano(),\n\t\t}\n\t\treturn nil\n\t})\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn snapshot, nil\n}\n\nfunc detectChangedFilesFromSnapshot(projectDir string, before map[string]projectFileSnapshotEntry) ([]string, error) {\n\tafter, err := captureProjectFileSnapshot(projectDir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tchangedSet := make(map[string]struct{})\n\tfor path, afterEntry := range after {\n\t\tbeforeEntry, exists := before[path]\n\t\tif !exists || beforeEntry.Size != afterEntry.Size || beforeEntry.ModTimeUnixNano != afterEntry.ModTimeUnixNano {\n\t\t\tchangedSet[path] = struct{}{}\n\t\t}\n\t}\n\n\tfor path := range before {\n\t\tif _, exists := after[path]; !exists {\n\t\t\tchangedSet[path] = struct{}{}\n\t\t}\n\t}\n\n\tchangedFiles := make([]string, 0, len(changedSet))\n\tfor path := range changedSet {\n\t\tchangedFiles = append(changedFiles, path)\n\t}\n\tsort.Strings(changedFiles)\n\treturn changedFiles, nil\n}\n\nfunc shouldSkipSnapshotDirectory(name string) bool {\n\tswitch name {\n\tcase \".git\", \"history\", \"current_instructions\", \"node_modules\", \".gradle\", \".next\", \"build\", \"dist\", \".idea\", \".vscode\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc mergeChangedFiles(existing []string, incoming []string) []string {\n\tmergedSet := make(map[string]struct{}, len(existing)+len(incoming))\n\tfor _, path := range existing {\n\t\tclean := filepath.ToSlash(filepath.Clean(path))\n\t\tif clean == \"\" || clean == \".\" {\n\t\t\tcontinue\n\t\t}\n\t\tmergedSet[clean] = struct{}{}\n\t}\n\tfor _, path := range incoming {\n\t\tclean := filepath.ToSlash(filepath.Clean(path))\n\t\tif clean == \"\" || clean == \".\" {\n\t\t\tcontinue\n\t\t}\n\t\tmergedSet[clean] = struct{}{}\n\t}\n\n\tmerged := make([]string, 0, len(mergedSet))\n\tfor path := range mergedSet {\n\t\tmerged = append(merged, path)\n\t}\n\tsort.Strings(merged)\n\treturn merged\n}\n\nfunc detectPrototypeChanged(changedFiles []string) bool {\n\tfor _, path := range changedFiles {\n\t\tclean := filepath.ToSlash(filepath.Clean(path))\n\t\tif clean == \"prototype/index.html\" || strings.HasPrefix(clean, \"prototype/assets/\") {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc prototypeContainsMediaPlaceholders(projectPath string) bool {\n\tindexPath := filepath.Join(projectPath, \"prototype\", \"index.html\")\n\tcontent, err := os.ReadFile(indexPath)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\thtml := string(content)\n\treturn strings.Contains(html, \"glowbyimage:\") ||\n\t\tstrings.Contains(html, \"glowbyvideo:\") ||\n\t\tstrings.Contains(html, \"glowbyaudio:\")\n}\n\n// sendSSEData sends a JSON object as SSE data.\n// Recovers from panics caused by writing to a closed connection.\nfunc sendSSEData(w http.ResponseWriter, flusher http.Flusher, data map[string]interface{}) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tlog.Printf(\"[OPENCODE] sendSSEData: recovered from write panic (client disconnected): %v\", r)\n\t\t}\n\t}()\n\tjsonData, err := json.Marshal(data)\n\tif err != nil {\n\t\treturn\n\t}\n\tfmt.Fprintf(w, \"data: %s\\n\\n\", string(jsonData))\n\tflusher.Flush()\n}\n\nfunc (d *OpenCodeDriver) resolveQuestionEndpoint(_ context.Context) string {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\tif d.questionReplyPath == \"\" {\n\t\td.questionReplyPath = \"/question/{requestID}/reply\"\n\t}\n\treturn d.questionReplyPath\n}\n\nfunc (d *OpenCodeDriver) hasRecentQuestionReply(questionID string) bool {\n\tif questionID == \"\" {\n\t\treturn false\n\t}\n\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\t// Keep map bounded in long-running sessions.\n\tcutoff := time.Now().Add(-10 * time.Minute)\n\tfor id, at := range d.repliedQuestions {\n\t\tif at.Before(cutoff) {\n\t\t\tdelete(d.repliedQuestions, id)\n\t\t}\n\t}\n\n\t_, exists := d.repliedQuestions[questionID]\n\treturn exists\n}\n\nfunc (d *OpenCodeDriver) beginQuestionReply(questionID string) bool {\n\tif questionID == \"\" {\n\t\treturn true\n\t}\n\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\tcutoff := time.Now().Add(-10 * time.Minute)\n\tfor id, at := range d.repliedQuestions {\n\t\tif at.Before(cutoff) {\n\t\t\tdelete(d.repliedQuestions, id)\n\t\t}\n\t}\n\n\tif _, exists := d.repliedQuestions[questionID]; exists {\n\t\treturn false\n\t}\n\n\t// Mark as in-flight immediately so concurrent duplicate submissions are ignored.\n\td.repliedQuestions[questionID] = time.Now()\n\treturn true\n}\n\nfunc (d *OpenCodeDriver) markQuestionReplied(questionID string) {\n\tif questionID == \"\" {\n\t\treturn\n\t}\n\td.mu.Lock()\n\td.repliedQuestions[questionID] = time.Now()\n\td.mu.Unlock()\n}\n\nfunc (d *OpenCodeDriver) clearQuestionReply(questionID string) {\n\tif questionID == \"\" {\n\t\treturn\n\t}\n\td.mu.Lock()\n\tdelete(d.repliedQuestions, questionID)\n\td.mu.Unlock()\n}\n\nfunc (d *OpenCodeDriver) respondToQuestion(ctx context.Context, sessionID, questionID, answer, projectDir string, answers [][]string, answersByID map[string][]string) error {\n\tif d.hasRecentQuestionReply(questionID) {\n\t\tlog.Printf(\"[OPENCODE] Skipping duplicate reply for question %s\", questionID)\n\t\treturn nil\n\t}\n\tif !d.beginQuestionReply(questionID) {\n\t\tlog.Printf(\"[OPENCODE] Skipping in-flight duplicate reply for question %s\", questionID)\n\t\treturn nil\n\t}\n\tsuccess := false\n\tdefer func() {\n\t\t// If we fail, clear so a legitimate retry can be attempted.\n\t\tif !success {\n\t\t\td.clearQuestionReply(questionID)\n\t\t}\n\t}()\n\n\tendpoint := \"\"\n\tif questionID != \"\" {\n\t\tendpoint = d.resolveQuestionEndpoint(ctx)\n\t}\n\tif endpoint != \"\" {\n\t\tpath := endpoint\n\t\tpath = strings.ReplaceAll(path, \"{questionID}\", questionID)\n\t\tpath = strings.ReplaceAll(path, \"{id}\", questionID)\n\t\tpath = strings.ReplaceAll(path, \"{requestID}\", questionID)\n\t\tpath = strings.ReplaceAll(path, \":questionID\", questionID)\n\t\tpath = strings.ReplaceAll(path, \":id\", questionID)\n\t\tpath = strings.ReplaceAll(path, \":requestID\", questionID)\n\t\tif strings.Contains(path, \"{\") {\n\t\t\tpath = strings.TrimRight(path, \"/\") + \"/\" + questionID\n\t\t}\n\t\turl := fmt.Sprintf(\"%s%s\", d.serverURL, path)\n\t\tif projectDir != \"\" {\n\t\t\tif parsedURL, err := neturl.Parse(url); err == nil {\n\t\t\t\tquery := parsedURL.Query()\n\t\t\t\tquery.Set(\"directory\", projectDir)\n\t\t\t\tparsedURL.RawQuery = query.Encode()\n\t\t\t\turl = parsedURL.String()\n\t\t\t}\n\t\t}\n\t\tpayloads := buildQuestionReplyPayloads(sessionID, questionID, answer, answers, answersByID)\n\t\tif len(payloads) == 0 {\n\t\t\treturn fmt.Errorf(\"question reply payload is empty\")\n\t\t}\n\n\t\tpayload := payloads[0]\n\t\tbody, _ := json.Marshal(payload)\n\t\treq, err := http.NewRequestWithContext(ctx, \"POST\", url, bytes.NewBuffer(body))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treq.Header.Set(\"Content-Type\", \"application/json\")\n\t\tapplyOpenCodeServerAuthorization(req)\n\n\t\tresp, err := http.DefaultClient.Do(req)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer resp.Body.Close()\n\n\t\trespBlob, _ := io.ReadAll(io.LimitReader(resp.Body, 1024))\n\t\trespBody := strings.TrimSpace(string(respBlob))\n\n\t\tif resp.StatusCode >= 200 && resp.StatusCode < 300 {\n\t\t\td.markQuestionReplied(questionID)\n\t\t\tsuccess = true\n\t\t\treturn nil\n\t\t}\n\t\tlog.Printf(\"[OPENCODE] Question reply payload keys: %v\", mapKeys(payload))\n\t\tif respBody != \"\" {\n\t\t\tlog.Printf(\"[OPENCODE] Question reply returned status %d for %s: %s\", resp.StatusCode, path, respBody)\n\t\t} else {\n\t\t\tlog.Printf(\"[OPENCODE] Question reply returned status %d for %s\", resp.StatusCode, path)\n\t\t}\n\t\treturn fmt.Errorf(\"question reply rejected (status %d)\", resp.StatusCode)\n\t}\n\n\t// Legacy fallback for cases where questionID isn't available.\n\tparams := opencode.SessionPromptParams{\n\t\tParts: opencode.F([]opencode.SessionPromptParamsPartUnion{\n\t\t\topencode.TextPartInputParam{\n\t\t\t\tType: opencode.F(opencode.TextPartInputTypeText),\n\t\t\t\tText: opencode.F(answer),\n\t\t\t},\n\t\t}),\n\t}\n\tif projectDir != \"\" {\n\t\tparams.Directory = opencode.F(projectDir)\n\t}\n\t_, err := d.sendSessionPrompt(ctx, sessionID, params)\n\tif err == nil {\n\t\td.markQuestionReplied(questionID)\n\t\tsuccess = true\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc buildQuestionReplyPayloads(sessionID, questionID, answer string, answers [][]string, answersByID map[string][]string) []map[string]interface{} {\n\tnormalizedAnswers := answers\n\tif len(normalizedAnswers) == 0 && len(answersByID) > 0 {\n\t\tif questionID != \"\" {\n\t\t\tif selected, ok := answersByID[questionID]; ok {\n\t\t\t\tnormalizedAnswers = append(normalizedAnswers, selected)\n\t\t\t}\n\t\t}\n\t\tif len(normalizedAnswers) == 0 {\n\t\t\tkeys := make([]string, 0, len(answersByID))\n\t\t\tfor key := range answersByID {\n\t\t\t\tkeys = append(keys, key)\n\t\t\t}\n\t\t\tsort.Strings(keys)\n\t\t\tfor _, key := range keys {\n\t\t\t\tnormalizedAnswers = append(normalizedAnswers, answersByID[key])\n\t\t\t}\n\t\t}\n\t}\n\tif len(normalizedAnswers) == 0 && answer != \"\" {\n\t\tnormalizedAnswers = [][]string{{answer}}\n\t}\n\n\t// OpenCode expects: { \"answers\": [[\"label-1\"], [\"label-2\",\"label-3\"]] }\n\t// (array of answer arrays, in order of asked questions).\n\tpayload := map[string]interface{}{\"answers\": normalizedAnswers}\n\tif sessionID != \"\" {\n\t\tpayload[\"sessionID\"] = sessionID\n\t\tpayload[\"sessionId\"] = sessionID\n\t}\n\tif questionID != \"\" {\n\t\tpayload[\"requestID\"] = questionID\n\t\tpayload[\"questionID\"] = questionID\n\t\tpayload[\"id\"] = questionID\n\t}\n\treturn []map[string]interface{}{payload}\n}\n\nfunc copyStringMap(src map[string]interface{}) map[string]interface{} {\n\tdst := make(map[string]interface{}, len(src))\n\tfor key, value := range src {\n\t\tdst[key] = value\n\t}\n\treturn dst\n}\n\nfunc mapKeys(src map[string]interface{}) []string {\n\tkeys := make([]string, 0, len(src))\n\tfor key := range src {\n\t\tkeys = append(keys, key)\n\t}\n\tsort.Strings(keys)\n\treturn keys\n}\n\nfunc (d *OpenCodeDriver) resolvePermissionEndpoint(ctx context.Context) string {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\tif d.permissionReplyPath == \"\" {\n\t\td.permissionReplyPath = \"/permission/{requestID}/reply\"\n\t}\n\treturn d.permissionReplyPath\n}\n\nfunc (d *OpenCodeDriver) respondToPermission(ctx context.Context, sessionID, permissionID, response, projectDir string) error {\n\tendpoint := d.resolvePermissionEndpoint(ctx)\n\tif endpoint != \"\" {\n\t\tpath := endpoint\n\t\tpath = strings.ReplaceAll(path, \"{requestID}\", permissionID)\n\t\tpath = strings.ReplaceAll(path, \"{permissionID}\", permissionID)\n\t\tpath = strings.ReplaceAll(path, \":requestID\", permissionID)\n\t\tpath = strings.ReplaceAll(path, \":permissionID\", permissionID)\n\t\tif strings.Contains(path, \"{\") {\n\t\t\t// Fallback to append if token replacement failed\n\t\t\tpath = strings.TrimRight(path, \"/\") + \"/\" + permissionID\n\t\t}\n\n\t\turl := fmt.Sprintf(\"%s%s\", d.serverURL, path)\n\t\tif projectDir != \"\" {\n\t\t\tif parsedURL, err := neturl.Parse(url); err == nil {\n\t\t\t\tquery := parsedURL.Query()\n\t\t\t\tquery.Set(\"directory\", projectDir)\n\t\t\t\tparsedURL.RawQuery = query.Encode()\n\t\t\t\turl = parsedURL.String()\n\t\t\t}\n\t\t}\n\t\tpayload := map[string]string{\n\t\t\t\"reply\":    response,\n\t\t\t\"response\": response,\n\t\t}\n\t\tbody, _ := json.Marshal(payload)\n\t\treq, err := http.NewRequestWithContext(ctx, \"POST\", url, bytes.NewBuffer(body))\n\t\tif err == nil {\n\t\t\treq.Header.Set(\"Content-Type\", \"application/json\")\n\t\t\tapplyOpenCodeServerAuthorization(req)\n\t\t\tresp, err := http.DefaultClient.Do(req)\n\t\t\tif err == nil {\n\t\t\t\tdefer resp.Body.Close()\n\t\t\t\tif resp.StatusCode >= 200 && resp.StatusCode < 300 {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tparams := opencode.SessionPermissionRespondParams{\n\t\tResponse: opencode.F(opencode.SessionPermissionRespondParamsResponse(response)),\n\t}\n\tif projectDir != \"\" {\n\t\tparams.Directory = opencode.F(projectDir)\n\t}\n\t_, err := d.client.Session.Permissions.Respond(ctx, sessionID, permissionID, params)\n\treturn err\n}\n"
  },
  {
    "path": "backend/opencode_folder_picker.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"mime\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nconst folderPickerCanceledToken = \"__GLOWBOM_PICKER_CANCELED__\"\n\ntype openCodeProjectPickResponse struct {\n\tSuccess  bool   `json:\"success\"`\n\tPath     string `json:\"path,omitempty\"`\n\tCanceled bool   `json:\"canceled,omitempty\"`\n\tSource   string `json:\"source,omitempty\"`\n\tError    string `json:\"error,omitempty\"`\n}\n\ntype openCodeInstructionPickedFile struct {\n\tPath      string `json:\"path\"`\n\tName      string `json:\"name\"`\n\tSizeBytes int64  `json:\"sizeBytes\"`\n\tMimeType  string `json:\"mimeType,omitempty\"`\n}\n\ntype openCodeInstructionFilesPickResponse struct {\n\tSuccess  bool                            `json:\"success\"`\n\tFiles    []openCodeInstructionPickedFile `json:\"files,omitempty\"`\n\tCanceled bool                            `json:\"canceled,omitempty\"`\n\tSource   string                          `json:\"source,omitempty\"`\n\tError    string                          `json:\"error,omitempty\"`\n}\n\ntype nativePickerCommand struct {\n\tExecutable      string\n\tArgs            []string\n\tCancelExitCodes []int\n}\n\nfunc openCodePickProjectFolderHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodGet && r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar (\n\t\tpath     string\n\t\tcanceled bool\n\t\terr      error\n\t)\n\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tpath, canceled, err = pickProjectFolderMacOS()\n\tcase \"windows\":\n\t\tpath, canceled, err = pickProjectFolderWindows()\n\tcase \"linux\":\n\t\tpath, canceled, err = pickProjectFolderLinux()\n\tdefault:\n\t\tw.WriteHeader(http.StatusNotImplemented)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectPickResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Native folder picker is only available on macOS, Windows, and Linux.\",\n\t\t})\n\t\treturn\n\t}\n\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusInternalServerError)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectPickResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Failed to open native folder picker: \" + err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tif canceled {\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectPickResponse{\n\t\t\tSuccess:  true,\n\t\t\tCanceled: true,\n\t\t\tSource:   \"native\",\n\t\t})\n\t\treturn\n\t}\n\n\tinfo, statErr := os.Stat(path)\n\tif statErr != nil || !info.IsDir() {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectPickResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Selected path is not a valid folder.\",\n\t\t})\n\t\treturn\n\t}\n\n\t_ = json.NewEncoder(w).Encode(openCodeProjectPickResponse{\n\t\tSuccess: true,\n\t\tPath:    path,\n\t\tSource:  \"native\",\n\t})\n}\n\nfunc openCodePickInstructionFilesHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodGet && r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar (\n\t\tpaths    []string\n\t\tcanceled bool\n\t\terr      error\n\t)\n\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tpaths, canceled, err = pickInstructionFilesMacOS()\n\tcase \"windows\":\n\t\tpaths, canceled, err = pickInstructionFilesWindows()\n\tcase \"linux\":\n\t\tpaths, canceled, err = pickInstructionFilesLinux()\n\tdefault:\n\t\tw.WriteHeader(http.StatusNotImplemented)\n\t\t_ = json.NewEncoder(w).Encode(openCodeInstructionFilesPickResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Native file picker is only available on macOS, Windows, and Linux.\",\n\t\t})\n\t\treturn\n\t}\n\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusInternalServerError)\n\t\t_ = json.NewEncoder(w).Encode(openCodeInstructionFilesPickResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Failed to open native file picker: \" + err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tif canceled {\n\t\t_ = json.NewEncoder(w).Encode(openCodeInstructionFilesPickResponse{\n\t\t\tSuccess:  true,\n\t\t\tCanceled: true,\n\t\t\tSource:   \"native\",\n\t\t})\n\t\treturn\n\t}\n\n\tfiles := make([]openCodeInstructionPickedFile, 0, len(paths))\n\tfor _, rawPath := range paths {\n\t\tpath := strings.TrimSpace(rawPath)\n\t\tif path == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tinfo, statErr := os.Stat(path)\n\t\tif statErr != nil || info.IsDir() {\n\t\t\tcontinue\n\t\t}\n\n\t\tabsPath, absErr := filepath.Abs(path)\n\t\tif absErr != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tfiles = append(files, openCodeInstructionPickedFile{\n\t\t\tPath:      absPath,\n\t\t\tName:      filepath.Base(absPath),\n\t\t\tSizeBytes: info.Size(),\n\t\t\tMimeType:  inferMimeTypeForPath(absPath),\n\t\t})\n\t}\n\n\t_ = json.NewEncoder(w).Encode(openCodeInstructionFilesPickResponse{\n\t\tSuccess: true,\n\t\tFiles:   files,\n\t\tSource:  \"native\",\n\t})\n}\n\nfunc pickProjectFolderMacOS() (string, bool, error) {\n\tcmd := exec.Command(\n\t\t\"osascript\",\n\t\t\"-e\", \"try\",\n\t\t\"-e\", `set selectedFolder to POSIX path of (choose folder with prompt \"Select local Glowbom project folder\")`,\n\t\t\"-e\", \"return selectedFolder\",\n\t\t\"-e\", \"on error number -128\",\n\t\t\"-e\", `return \"__GLOWBOM_PICKER_CANCELED__\"`,\n\t\t\"-e\", \"end try\",\n\t)\n\n\tselected, err := runPickerCommand(cmd)\n\tif err != nil {\n\t\tif strings.Contains(strings.ToLower(err.Error()), \"user canceled\") {\n\t\t\treturn \"\", true, nil\n\t\t}\n\t\treturn \"\", false, err\n\t}\n\tif selected == \"\" {\n\t\treturn \"\", false, errors.New(\"no folder path returned\")\n\t}\n\n\tif selected == folderPickerCanceledToken {\n\t\treturn \"\", true, nil\n\t}\n\n\treturn selected, false, nil\n}\n\nfunc pickInstructionFilesMacOS() ([]string, bool, error) {\n\tcmd := exec.Command(\n\t\t\"osascript\",\n\t\t\"-e\", \"try\",\n\t\t\"-e\", `set selectedFiles to choose file with prompt \"Select local files for custom instructions\" with multiple selections allowed`,\n\t\t\"-e\", \"set outputPaths to {}\",\n\t\t\"-e\", \"repeat with selectedFile in selectedFiles\",\n\t\t\"-e\", \"set end of outputPaths to POSIX path of selectedFile\",\n\t\t\"-e\", \"end repeat\",\n\t\t\"-e\", \"set AppleScript's text item delimiters to linefeed\",\n\t\t\"-e\", \"set outputText to outputPaths as text\",\n\t\t\"-e\", \"set AppleScript's text item delimiters to \\\"\\\"\",\n\t\t\"-e\", \"return outputText\",\n\t\t\"-e\", \"on error number -128\",\n\t\t\"-e\", `return \"__GLOWBOM_PICKER_CANCELED__\"`,\n\t\t\"-e\", \"end try\",\n\t)\n\n\tselected, err := runPickerCommand(cmd)\n\tif err != nil {\n\t\tif strings.Contains(strings.ToLower(err.Error()), \"user canceled\") {\n\t\t\treturn nil, true, nil\n\t\t}\n\t\treturn nil, false, err\n\t}\n\tif selected == \"\" {\n\t\treturn nil, false, errors.New(\"no file paths returned\")\n\t}\n\n\tif selected == folderPickerCanceledToken {\n\t\treturn nil, true, nil\n\t}\n\n\tlines := strings.Split(selected, \"\\n\")\n\tpaths := make([]string, 0, len(lines))\n\tfor _, line := range lines {\n\t\tpath := strings.TrimSpace(line)\n\t\tif path == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tpaths = append(paths, path)\n\t}\n\tif len(paths) == 0 {\n\t\treturn nil, false, errors.New(\"no valid file paths returned\")\n\t}\n\n\treturn paths, false, nil\n}\n\nfunc pickProjectFolderLinux() (string, bool, error) {\n\tstartDir := defaultPickerStartDir()\n\tselected, canceled, err := runLinuxPicker([]nativePickerCommand{\n\t\t{\n\t\t\tExecutable:      \"zenity\",\n\t\t\tArgs:            []string{\"--file-selection\", \"--directory\", \"--title=Select local Glowbom project folder\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t\t{\n\t\t\tExecutable:      \"qarma\",\n\t\t\tArgs:            []string{\"--file-selection\", \"--directory\", \"--title=Select local Glowbom project folder\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t\t{\n\t\t\tExecutable:      \"yad\",\n\t\t\tArgs:            []string{\"--file-selection\", \"--directory\", \"--title=Select local Glowbom project folder\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t\t{\n\t\t\tExecutable:      \"kdialog\",\n\t\t\tArgs:            []string{\"--getexistingdirectory\", startDir},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t}, \"No supported Linux folder picker found. Install zenity, kdialog, yad, or qarma.\")\n\tif err != nil || canceled {\n\t\treturn \"\", canceled, err\n\t}\n\tif selected == \"\" {\n\t\treturn \"\", false, errors.New(\"no folder path returned\")\n\t}\n\n\treturn selected, false, nil\n}\n\nfunc pickInstructionFilesLinux() ([]string, bool, error) {\n\tstartDir := defaultPickerStartDir()\n\tselected, canceled, err := runLinuxPicker([]nativePickerCommand{\n\t\t{\n\t\t\tExecutable:      \"zenity\",\n\t\t\tArgs:            []string{\"--file-selection\", \"--multiple\", \"--separator=\\n\", \"--title=Select local files for custom instructions\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t\t{\n\t\t\tExecutable:      \"qarma\",\n\t\t\tArgs:            []string{\"--file-selection\", \"--multiple\", \"--separator=\\n\", \"--title=Select local files for custom instructions\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t\t{\n\t\t\tExecutable:      \"yad\",\n\t\t\tArgs:            []string{\"--file-selection\", \"--multiple\", \"--separator=\\n\", \"--title=Select local files for custom instructions\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t\t{\n\t\t\tExecutable:      \"kdialog\",\n\t\t\tArgs:            []string{\"--getopenfilename\", startDir, \"\", \"--multiple\", \"--separate-output\"},\n\t\t\tCancelExitCodes: []int{1},\n\t\t},\n\t}, \"No supported Linux file picker found. Install zenity, kdialog, yad, or qarma.\")\n\tif err != nil || canceled {\n\t\treturn nil, canceled, err\n\t}\n\tif selected == \"\" {\n\t\treturn nil, false, errors.New(\"no file paths returned\")\n\t}\n\n\tlines := strings.Split(selected, \"\\n\")\n\tpaths := make([]string, 0, len(lines))\n\tfor _, line := range lines {\n\t\tpath := strings.TrimSpace(line)\n\t\tif path == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tpaths = append(paths, path)\n\t}\n\tif len(paths) == 0 {\n\t\treturn nil, false, errors.New(\"no valid file paths returned\")\n\t}\n\n\treturn paths, false, nil\n}\n\nfunc pickProjectFolderWindows() (string, bool, error) {\n\tcmd := exec.Command(\n\t\t\"powershell.exe\",\n\t\t\"-NoProfile\",\n\t\t\"-STA\",\n\t\t\"-Command\",\n\t\t`Add-Type -AssemblyName System.Windows.Forms\n$dialog = New-Object System.Windows.Forms.FolderBrowserDialog\n$dialog.Description = 'Select local Glowbom project folder'\n$dialog.ShowNewFolderButton = $false\n$result = $dialog.ShowDialog()\nif ($result -ne [System.Windows.Forms.DialogResult]::OK -or [string]::IsNullOrWhiteSpace($dialog.SelectedPath)) {\n  Write-Output '__GLOWBOM_PICKER_CANCELED__'\n  exit 0\n}\nWrite-Output $dialog.SelectedPath`,\n\t)\n\n\tselected, err := runPickerCommand(cmd)\n\tif err != nil {\n\t\treturn \"\", false, err\n\t}\n\tif selected == \"\" {\n\t\treturn \"\", false, errors.New(\"no folder path returned\")\n\t}\n\tif selected == folderPickerCanceledToken {\n\t\treturn \"\", true, nil\n\t}\n\n\treturn selected, false, nil\n}\n\nfunc pickInstructionFilesWindows() ([]string, bool, error) {\n\tcmd := exec.Command(\n\t\t\"powershell.exe\",\n\t\t\"-NoProfile\",\n\t\t\"-STA\",\n\t\t\"-Command\",\n\t\t`Add-Type -AssemblyName System.Windows.Forms\n$dialog = New-Object System.Windows.Forms.OpenFileDialog\n$dialog.Title = 'Select local files for custom instructions'\n$dialog.Multiselect = $true\n$dialog.CheckFileExists = $true\n$dialog.CheckPathExists = $true\n$result = $dialog.ShowDialog()\nif ($result -ne [System.Windows.Forms.DialogResult]::OK -or $dialog.FileNames.Count -eq 0) {\n  Write-Output '__GLOWBOM_PICKER_CANCELED__'\n  exit 0\n}\n$dialog.FileNames | ForEach-Object { Write-Output $_ }`,\n\t)\n\n\tselected, err := runPickerCommand(cmd)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\tif selected == \"\" {\n\t\treturn nil, false, errors.New(\"no file paths returned\")\n\t}\n\tif selected == folderPickerCanceledToken {\n\t\treturn nil, true, nil\n\t}\n\n\tlines := strings.Split(selected, \"\\n\")\n\tpaths := make([]string, 0, len(lines))\n\tfor _, line := range lines {\n\t\tpath := strings.TrimSpace(line)\n\t\tif path == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tpaths = append(paths, path)\n\t}\n\tif len(paths) == 0 {\n\t\treturn nil, false, errors.New(\"no valid file paths returned\")\n\t}\n\n\treturn paths, false, nil\n}\n\nfunc runPickerCommand(cmd *exec.Cmd) (string, error) {\n\toutput, err := cmd.Output()\n\tif err != nil {\n\t\tvar exitErr *exec.ExitError\n\t\tif errors.As(err, &exitErr) {\n\t\t\tstderr := strings.TrimSpace(string(exitErr.Stderr))\n\t\t\tif stderr != \"\" {\n\t\t\t\treturn \"\", errors.New(stderr)\n\t\t\t}\n\t\t}\n\t\treturn \"\", err\n\t}\n\n\treturn strings.TrimSpace(string(output)), nil\n}\n\nfunc runPickerCommandWithCancel(cmd *exec.Cmd, cancelExitCodes ...int) (string, bool, error) {\n\toutput, err := cmd.Output()\n\tif err != nil {\n\t\tvar exitErr *exec.ExitError\n\t\tif errors.As(err, &exitErr) {\n\t\t\tfor _, code := range cancelExitCodes {\n\t\t\t\tif exitErr.ExitCode() == code {\n\t\t\t\t\treturn \"\", true, nil\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstderr := strings.TrimSpace(string(exitErr.Stderr))\n\t\t\tif stderr != \"\" {\n\t\t\t\treturn \"\", false, errors.New(stderr)\n\t\t\t}\n\t\t}\n\t\treturn \"\", false, err\n\t}\n\n\tselected := strings.TrimSpace(string(output))\n\tif selected == folderPickerCanceledToken {\n\t\treturn \"\", true, nil\n\t}\n\n\treturn selected, false, nil\n}\n\nfunc runLinuxPicker(commands []nativePickerCommand, missingMessage string) (string, bool, error) {\n\tfor _, candidate := range commands {\n\t\texecutable, err := exec.LookPath(candidate.Executable)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tselected, canceled, runErr := runPickerCommandWithCancel(\n\t\t\texec.Command(executable, candidate.Args...),\n\t\t\tcandidate.CancelExitCodes...,\n\t\t)\n\t\tif runErr != nil || canceled {\n\t\t\treturn \"\", canceled, runErr\n\t\t}\n\t\treturn selected, false, nil\n\t}\n\n\treturn \"\", false, errors.New(missingMessage)\n}\n\nfunc defaultPickerStartDir() string {\n\thomeDir, err := os.UserHomeDir()\n\tif err == nil && strings.TrimSpace(homeDir) != \"\" {\n\t\treturn homeDir\n\t}\n\treturn \".\"\n}\n\nfunc inferMimeTypeForPath(path string) string {\n\text := strings.ToLower(filepath.Ext(path))\n\tif ext == \"\" {\n\t\treturn \"application/octet-stream\"\n\t}\n\n\tif mimeType := mime.TypeByExtension(ext); mimeType != \"\" {\n\t\treturn mimeType\n\t}\n\n\treturn \"application/octet-stream\"\n}\n"
  },
  {
    "path": "backend/opencode_media_postpass.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"crypto/sha1\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\tneturl \"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst (\n\tmaxGeneratedImageBytes = 25 * 1024 * 1024  // 25 MB\n\tmaxGeneratedVideoBytes = 120 * 1024 * 1024 // 120 MB\n\tmaxGeneratedAudioBytes = 40 * 1024 * 1024  // 40 MB\n)\n\nvar (\n\tglowbyImagePlaceholderRegex = regexp.MustCompile(`glowbyimage:([^\"'<>]+)`)\n\tglowbyVideoPlaceholderRegex = regexp.MustCompile(`glowbyvideo:([^\"'<>]+)`)\n\tglowbyAudioPlaceholderRegex = regexp.MustCompile(`glowbyaudio:([^\"'<>]+)`)\n\tsensitiveValueRegex         = regexp.MustCompile(`(?i)(api[_-]?key|authorization|bearer)\\s*[:=]\\s*[^,\\s]+`)\n)\n\ntype OpenCodeMediaPostPassRequest struct {\n\tProjectPath          string   `json:\"projectPath\"`\n\tImageSource          string   `json:\"imageSource,omitempty\"`\n\tOpenAIKey            string   `json:\"openaiKey,omitempty\"`\n\tGeminiKey            string   `json:\"geminiKey,omitempty\"`\n\tXaiKey               string   `json:\"xaiKey,omitempty\"`\n\tVeoGeminiKey         string   `json:\"veoGeminiKey,omitempty\"`\n\tElevenLabsKey        string   `json:\"elevenLabsKey,omitempty\"`\n\tElevenLabsVoiceID    string   `json:\"elevenLabsVoiceID,omitempty\"`\n\tElevenLabsVoiceModel string   `json:\"elevenLabsVoiceModel,omitempty\"`\n\tReferenceImagePath   string   `json:\"referenceImagePath,omitempty\"`\n\tReferenceAssetID     string   `json:\"referenceAssetID,omitempty\"`\n\tScanTargets          []string `json:\"scanTargets,omitempty\"`\n}\n\ntype OpenCodeMediaPostPassResponse struct {\n\tPrototypeChanged     bool                   `json:\"prototypeChanged\"`\n\tGeneratedAssets      []OpenCodeMediaAsset   `json:\"generatedAssets\"`\n\tReusedStudioAssets   []OpenCodeMediaAsset   `json:\"reusedStudioAssets\"`\n\tPlatformCopies       []OpenCodePlatformCopy `json:\"platformCopies\"`\n\tWarnings             []string               `json:\"warnings\"`\n\tPlatformAssetsSynced bool                   `json:\"platformAssetsSynced\"`\n}\n\ntype OpenCodeMediaAsset struct {\n\tPrompt        string `json:\"prompt\"`\n\tPlaceholder   string `json:\"placeholder,omitempty\"`\n\tMediaType     string `json:\"mediaType\"`\n\tFilename      string `json:\"filename\"`\n\tRelativePath  string `json:\"relativePath\"`\n\tSourceService string `json:\"sourceService,omitempty\"`\n\tStudioAssetID string `json:\"studioAssetId,omitempty\"`\n}\n\ntype OpenCodePlatformCopy struct {\n\tPlatform    string `json:\"platform\"`\n\tSource      string `json:\"source\"`\n\tDestination string `json:\"destination\"`\n}\n\ntype postPassImageRef struct {\n\tasset    OpenCodeMediaAsset\n\tbytes    []byte\n\tmimeType string\n}\n\ntype postPassVideoPlaceholder struct {\n\ttoken       string\n\tprompt      string\n\tfromKey     string\n\taspectRatio string\n}\n\ntype postPassAudioPlaceholder struct {\n\ttoken             string\n\tprompt            string\n\taudioType         string\n\tvoiceID           string\n\tmodelID           string\n\tdurationSeconds   float64\n\tpromptInfluence   *float64\n\tloop              bool\n\tforceInstrumental bool\n}\n\ntype studioAssetRecord struct {\n\tID            string `json:\"id\"`\n\tMediaType     string `json:\"mediaType\"`\n\tDataBase64    string `json:\"dataBase64\"`\n\tPrompt        string `json:\"prompt\"`\n\tSourceService string `json:\"sourceService\"`\n}\n\ntype prototypeAssetsManifest struct {\n\tVersion    string                        `json:\"version\"`\n\tExportedAt string                        `json:\"exportedAt\"`\n\tAssets     []prototypeAssetsManifestItem `json:\"assets\"`\n}\n\ntype prototypeAssetsManifestItem struct {\n\tFilename      string         `json:\"filename\"`\n\tPrompt        string         `json:\"prompt\"`\n\tDimensions    map[string]int `json:\"dimensions,omitempty\"`\n\tSourceService string         `json:\"sourceService,omitempty\"`\n\tMediaType     string         `json:\"mediaType,omitempty\"`\n}\n\ntype platformAssetsMap struct {\n\tGeneratedAt string                 `json:\"generatedAt\"`\n\tAssets      []platformAssetsMapRow `json:\"assets\"`\n}\n\ntype platformAssetsMapRow struct {\n\tSource       string                       `json:\"source\"`\n\tMediaType    string                       `json:\"mediaType\"`\n\tDestinations []platformAssetsMapTargetRow `json:\"destinations\"`\n}\n\ntype platformAssetsMapTargetRow struct {\n\tPlatform string `json:\"platform\"`\n\tPath     string `json:\"path\"`\n}\n\nfunc openCodeMediaPostPassHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req OpenCodeMediaPostPassRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\thttp.Error(w, \"Invalid JSON body\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif strings.TrimSpace(req.ProjectPath) == \"\" {\n\t\thttp.Error(w, \"projectPath is required\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tlog.Printf(\"[OPENCODE][MEDIA] post-pass requested: project=%s, scanTargets=%d\", req.ProjectPath, len(req.ScanTargets))\n\n\tresp, err := runOpenCodeMediaPostPass(r.Context(), req)\n\tif err != nil {\n\t\thttp.Error(w, sanitizeProviderError(err), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\twriteJSON(w, resp)\n}\n\nfunc runOpenCodeMediaPostPass(ctx context.Context, req OpenCodeMediaPostPassRequest) (*OpenCodeMediaPostPassResponse, error) {\n\tresp := &OpenCodeMediaPostPassResponse{\n\t\tGeneratedAssets:    []OpenCodeMediaAsset{},\n\t\tReusedStudioAssets: []OpenCodeMediaAsset{},\n\t\tPlatformCopies:     []OpenCodePlatformCopy{},\n\t\tWarnings:           []string{},\n\t}\n\n\tprojectPath := strings.TrimSpace(req.ProjectPath)\n\tif projectPath == \"\" {\n\t\treturn nil, fmt.Errorf(\"projectPath is required\")\n\t}\n\n\tprojectAbs, err := filepath.Abs(projectPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to resolve project path: %w\", err)\n\t}\n\tprojectPath = projectAbs\n\n\tif req.ImageSource == \"\" {\n\t\treq.ImageSource = \"Glowby Images (gpt-image-1.5)\"\n\t}\n\tif req.VeoGeminiKey == \"\" {\n\t\treq.VeoGeminiKey = req.GeminiKey\n\t}\n\tif strings.TrimSpace(req.ElevenLabsVoiceModel) == \"\" {\n\t\treq.ElevenLabsVoiceModel = defaultElevenVoiceModel\n\t}\n\tif len(req.ScanTargets) == 0 {\n\t\treq.ScanTargets = []string{\"prototype/index.html\"}\n\t}\n\n\tif _, err := os.Stat(projectPath); err != nil {\n\t\treturn nil, fmt.Errorf(\"project path not found: %w\", err)\n\t}\n\n\tstudioAssets, studioErr := loadStudioAssets()\n\tif studioErr != nil {\n\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Studio assets unavailable: %s\", sanitizeProviderError(studioErr)))\n\t}\n\n\treferenceImageBase64, _, refErr := resolveReferenceImage(req, projectPath, studioAssets)\n\tif refErr != nil {\n\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Reference image unavailable: %s\", sanitizeProviderError(refErr)))\n\t}\n\n\timageRefsByPrompt := make(map[string]postPassImageRef)\n\timageRefsByKey := make(map[string]postPassImageRef)\n\tvideoCache := make(map[string]OpenCodeMediaAsset)\n\taudioCache := make(map[string]OpenCodeMediaAsset)\n\n\tif strings.TrimSpace(req.ElevenLabsKey) != \"\" && strings.TrimSpace(req.ElevenLabsVoiceID) == \"\" {\n\t\tvoices, voiceErr := fetchElevenLabsVoices(strings.TrimSpace(req.ElevenLabsKey))\n\t\tif voiceErr != nil {\n\t\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Could not preload ElevenLabs default voice: %s\", sanitizeProviderError(voiceErr)))\n\t\t} else if len(voices) > 0 {\n\t\t\treq.ElevenLabsVoiceID = strings.TrimSpace(voices[0].VoiceID)\n\t\t\tlog.Printf(\"[OPENCODE][MEDIA][AUDIO] using account default voice_id=%s for post-pass\", req.ElevenLabsVoiceID)\n\t\t}\n\t}\n\n\tfor _, rawTarget := range req.ScanTargets {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil, ctx.Err()\n\t\tdefault:\n\t\t}\n\n\t\ttargetPath, err := resolveScanTargetPath(projectPath, rawTarget)\n\t\tif err != nil {\n\t\t\tresp.Warnings = append(resp.Warnings, err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tdata, err := os.ReadFile(targetPath)\n\t\tif err != nil {\n\t\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Failed to read %s: %s\", rawTarget, sanitizeProviderError(err)))\n\t\t\tcontinue\n\t\t}\n\n\t\toriginal := string(data)\n\t\tupdated := original\n\n\t\timagePlaceholders := extractImagePlaceholders(updated)\n\t\tfor _, placeholder := range imagePlaceholders {\n\t\t\tprompt := strings.TrimSpace(placeholder.Prompt)\n\t\t\tif prompt == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tref, ok := imageRefsByPrompt[normalizedLookupKey(prompt)]\n\t\t\tif !ok {\n\t\t\t\tref, err = materializeImagePlaceholder(req, projectPath, prompt, placeholder.Token, referenceImageBase64, studioAssets, resp)\n\t\t\t\tif err != nil {\n\t\t\t\t\tresp.Warnings = append(resp.Warnings, err.Error())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\timageRefsByPrompt[normalizedLookupKey(prompt)] = ref\n\t\t\t\tregisterImageRefKeys(imageRefsByKey, ref)\n\t\t\t}\n\n\t\t\tupdated = strings.ReplaceAll(updated, placeholder.Token, \"assets/\"+ref.asset.Filename)\n\t\t}\n\n\t\tvideoPlaceholders := extractVideoPlaceholders(updated)\n\t\tfor _, placeholder := range videoPlaceholders {\n\t\t\tcacheKey := normalizedLookupKey(fmt.Sprintf(\"%s|%s|%s\", placeholder.prompt, placeholder.fromKey, placeholder.aspectRatio))\n\t\t\tif existing, ok := videoCache[cacheKey]; ok {\n\t\t\t\tupdated = strings.ReplaceAll(updated, placeholder.token, \"assets/\"+existing.Filename)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvideoAsset, err := materializeVideoPlaceholder(ctx, req, projectPath, placeholder, imageRefsByKey, studioAssets, resp)\n\t\t\tif err != nil {\n\t\t\t\tresp.Warnings = append(resp.Warnings, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvideoCache[cacheKey] = videoAsset\n\t\t\tupdated = strings.ReplaceAll(updated, placeholder.token, \"assets/\"+videoAsset.Filename)\n\t\t}\n\n\t\taudioPlaceholders := extractAudioPlaceholders(updated)\n\t\tfor _, placeholder := range audioPlaceholders {\n\t\t\tcacheKey := normalizedLookupKey(fmt.Sprintf(\n\t\t\t\t\"%s|%s|%s|%s|%s|%.3f|%t|%t\",\n\t\t\t\tplaceholder.prompt,\n\t\t\t\tplaceholder.audioType,\n\t\t\t\tplaceholder.voiceID,\n\t\t\t\tplaceholder.modelID,\n\t\t\t\tfloatPointerKey(placeholder.promptInfluence),\n\t\t\t\tplaceholder.durationSeconds,\n\t\t\t\tplaceholder.loop,\n\t\t\t\tplaceholder.forceInstrumental,\n\t\t\t))\n\t\t\tif existing, ok := audioCache[cacheKey]; ok {\n\t\t\t\tupdated = strings.ReplaceAll(updated, placeholder.token, \"assets/\"+existing.Filename)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\taudioAsset, err := materializeAudioPlaceholder(req, projectPath, placeholder, studioAssets, resp)\n\t\t\tif err != nil {\n\t\t\t\tresp.Warnings = append(resp.Warnings, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\taudioCache[cacheKey] = audioAsset\n\t\t\tupdated = strings.ReplaceAll(updated, placeholder.token, \"assets/\"+audioAsset.Filename)\n\t\t}\n\n\t\tif updated != original {\n\t\t\tif err := os.WriteFile(targetPath, []byte(updated), 0644); err != nil {\n\t\t\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Failed to update %s: %s\", rawTarget, sanitizeProviderError(err)))\n\t\t\t} else {\n\t\t\t\tresp.PrototypeChanged = true\n\t\t\t}\n\t\t}\n\t}\n\n\tallAssets := make([]OpenCodeMediaAsset, 0, len(resp.GeneratedAssets)+len(resp.ReusedStudioAssets))\n\tallAssets = append(allAssets, resp.GeneratedAssets...)\n\tallAssets = append(allAssets, resp.ReusedStudioAssets...)\n\n\tif len(allAssets) > 0 {\n\t\tif err := writePrototypeAssetsManifest(projectPath, allAssets, req.ImageSource); err != nil {\n\t\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Failed to update assets manifest: %s\", sanitizeProviderError(err)))\n\t\t}\n\t}\n\n\tcopies, synced, syncWarnings, err := syncAssetsToPlatforms(projectPath)\n\tif err != nil {\n\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Platform sync failed: %s\", sanitizeProviderError(err)))\n\t} else {\n\t\tresp.PlatformCopies = copies\n\t\tresp.PlatformAssetsSynced = synced\n\t\tresp.Warnings = append(resp.Warnings, syncWarnings...)\n\t\tif synced {\n\t\t\tresp.PrototypeChanged = true\n\t\t}\n\t}\n\n\tif err := writePlatformAssetsMap(projectPath, resp.PlatformCopies); err != nil {\n\t\tresp.Warnings = append(resp.Warnings, fmt.Sprintf(\"Failed to write platform assets map: %s\", sanitizeProviderError(err)))\n\t}\n\n\tresp.Warnings = dedupeWarnings(resp.Warnings)\n\treturn resp, nil\n}\n\nfunc materializeImagePlaceholder(\n\treq OpenCodeMediaPostPassRequest,\n\tprojectPath string,\n\tprompt string,\n\tplaceholderToken string,\n\treferenceImageBase64 string,\n\tstudioAssets []studioAssetRecord,\n\tresp *OpenCodeMediaPostPassResponse,\n) (postPassImageRef, error) {\n\tif strings.TrimSpace(referenceImageBase64) == \"\" {\n\t\tif studioAsset, ok := findStudioAssetByPrompt(studioAssets, \"image\", prompt, req.ImageSource); ok {\n\t\t\tbytes, mimeType, err := decodeBase64Payload(studioAsset.DataBase64, \"image/png\")\n\t\t\tif err == nil {\n\t\t\t\text := imageExtensionForMimeType(mimeType)\n\t\t\t\tfilename := deterministicAssetFilename(\"img\", prompt, ext)\n\t\t\t\trelativePath, err := writePrototypeAsset(projectPath, filename, bytes, map[string]struct{}{\n\t\t\t\t\t\".png\":  {},\n\t\t\t\t\t\".jpg\":  {},\n\t\t\t\t\t\".jpeg\": {},\n\t\t\t\t\t\".webp\": {},\n\t\t\t\t}, maxGeneratedImageBytes)\n\t\t\t\tif err == nil {\n\t\t\t\t\tasset := OpenCodeMediaAsset{\n\t\t\t\t\t\tPrompt:        prompt,\n\t\t\t\t\t\tPlaceholder:   placeholderToken,\n\t\t\t\t\t\tMediaType:     \"image\",\n\t\t\t\t\t\tFilename:      filename,\n\t\t\t\t\t\tRelativePath:  relativePath,\n\t\t\t\t\t\tSourceService: studioAsset.SourceService,\n\t\t\t\t\t\tStudioAssetID: studioAsset.ID,\n\t\t\t\t\t}\n\t\t\t\t\tresp.ReusedStudioAssets = append(resp.ReusedStudioAssets, asset)\n\t\t\t\t\treturn postPassImageRef{asset: asset, bytes: bytes, mimeType: mimeType}, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdataURI, sourceService, err := generateImageForPostPass(req, prompt, referenceImageBase64)\n\tif err != nil {\n\t\treturn postPassImageRef{}, fmt.Errorf(\"image generation failed for %q: %s\", prompt, sanitizeProviderError(err))\n\t}\n\n\tbytes, mimeType, err := decodeBase64Payload(dataURI, \"image/png\")\n\tif err != nil {\n\t\treturn postPassImageRef{}, fmt.Errorf(\"generated image decode failed for %q: %s\", prompt, sanitizeProviderError(err))\n\t}\n\n\text := imageExtensionForMimeType(mimeType)\n\tfilename := deterministicAssetFilename(\"img\", prompt, ext)\n\trelativePath, err := writePrototypeAsset(projectPath, filename, bytes, map[string]struct{}{\n\t\t\".png\":  {},\n\t\t\".jpg\":  {},\n\t\t\".jpeg\": {},\n\t\t\".webp\": {},\n\t}, maxGeneratedImageBytes)\n\tif err != nil {\n\t\treturn postPassImageRef{}, fmt.Errorf(\"failed to write generated image for %q: %s\", prompt, sanitizeProviderError(err))\n\t}\n\n\tasset := OpenCodeMediaAsset{\n\t\tPrompt:        prompt,\n\t\tPlaceholder:   placeholderToken,\n\t\tMediaType:     \"image\",\n\t\tFilename:      filename,\n\t\tRelativePath:  relativePath,\n\t\tSourceService: sourceService,\n\t}\n\tresp.GeneratedAssets = append(resp.GeneratedAssets, asset)\n\treturn postPassImageRef{asset: asset, bytes: bytes, mimeType: mimeType}, nil\n}\n\nfunc materializeVideoPlaceholder(\n\tctx context.Context,\n\treq OpenCodeMediaPostPassRequest,\n\tprojectPath string,\n\tplaceholder postPassVideoPlaceholder,\n\timageRefsByKey map[string]postPassImageRef,\n\tstudioAssets []studioAssetRecord,\n\tresp *OpenCodeMediaPostPassResponse,\n) (OpenCodeMediaAsset, error) {\n\tif req.VeoGeminiKey == \"\" {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"missing veoGeminiKey for glowbyvideo:%s\", placeholder.prompt)\n\t}\n\n\tfromRef, err := resolveVideoStartFrame(placeholder.fromKey, imageRefsByKey, studioAssets, req.ImageSource)\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"video source resolution failed for %q: %s\", placeholder.prompt, sanitizeProviderError(err))\n\t}\n\n\tvideoBytes, err := generateVeoVideoFromImage(ctx, placeholder.prompt, placeholder.aspectRatio, req.VeoGeminiKey, fromRef.bytes, fromRef.mimeType)\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"video generation failed for %q: %s\", placeholder.prompt, sanitizeProviderError(err))\n\t}\n\n\tfilename := deterministicAssetFilename(\"video\", placeholder.prompt, \".mp4\")\n\trelativePath, err := writePrototypeAsset(projectPath, filename, videoBytes, map[string]struct{}{\n\t\t\".mp4\": {},\n\t}, maxGeneratedVideoBytes)\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"failed to write generated video for %q: %s\", placeholder.prompt, sanitizeProviderError(err))\n\t}\n\n\tasset := OpenCodeMediaAsset{\n\t\tPrompt:        placeholder.prompt,\n\t\tPlaceholder:   placeholder.token,\n\t\tMediaType:     \"video\",\n\t\tFilename:      filename,\n\t\tRelativePath:  relativePath,\n\t\tSourceService: \"Veo\",\n\t}\n\tresp.GeneratedAssets = append(resp.GeneratedAssets, asset)\n\treturn asset, nil\n}\n\nfunc materializeAudioPlaceholder(\n\treq OpenCodeMediaPostPassRequest,\n\tprojectPath string,\n\tplaceholder postPassAudioPlaceholder,\n\tstudioAssets []studioAssetRecord,\n\tresp *OpenCodeMediaPostPassResponse,\n) (OpenCodeMediaAsset, error) {\n\tif strings.TrimSpace(placeholder.prompt) == \"\" {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"audio placeholder prompt is empty\")\n\t}\n\n\tif studioAsset, ok := findStudioAssetByPrompt(studioAssets, \"audio\", placeholder.prompt, \"ElevenLabs\"); ok {\n\t\tbytes, mimeType, err := decodeBase64Payload(studioAsset.DataBase64, \"audio/mpeg\")\n\t\tif err == nil {\n\t\t\text := audioExtensionForMimeType(mimeType)\n\t\t\tfilename := deterministicAssetFilename(\"audio\", placeholder.prompt, ext)\n\t\t\trelativePath, err := writePrototypeAsset(projectPath, filename, bytes, map[string]struct{}{\n\t\t\t\t\".mp3\":  {},\n\t\t\t\t\".wav\":  {},\n\t\t\t\t\".ogg\":  {},\n\t\t\t\t\".flac\": {},\n\t\t\t\t\".m4a\":  {},\n\t\t\t\t\".aac\":  {},\n\t\t\t}, maxGeneratedAudioBytes)\n\t\t\tif err == nil {\n\t\t\t\tasset := OpenCodeMediaAsset{\n\t\t\t\t\tPrompt:        placeholder.prompt,\n\t\t\t\t\tPlaceholder:   placeholder.token,\n\t\t\t\t\tMediaType:     \"audio\",\n\t\t\t\t\tFilename:      filename,\n\t\t\t\t\tRelativePath:  relativePath,\n\t\t\t\t\tSourceService: studioAsset.SourceService,\n\t\t\t\t\tStudioAssetID: studioAsset.ID,\n\t\t\t\t}\n\t\t\t\tresp.ReusedStudioAssets = append(resp.ReusedStudioAssets, asset)\n\t\t\t\treturn asset, nil\n\t\t\t}\n\t\t}\n\t}\n\n\taudioBytes, mimeType, sourceService, err := generateElevenLabsAudioForPostPass(\n\t\tplaceholder,\n\t\tstrings.TrimSpace(req.ElevenLabsKey),\n\t\tstrings.TrimSpace(req.ElevenLabsVoiceID),\n\t\tstrings.TrimSpace(req.ElevenLabsVoiceModel),\n\t)\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"audio generation failed for %q: %s\", placeholder.prompt, sanitizeProviderError(err))\n\t}\n\n\text := audioExtensionForMimeType(mimeType)\n\tfilename := deterministicAssetFilename(\"audio\", placeholder.prompt, ext)\n\trelativePath, err := writePrototypeAsset(projectPath, filename, audioBytes, map[string]struct{}{\n\t\t\".mp3\":  {},\n\t\t\".wav\":  {},\n\t\t\".ogg\":  {},\n\t\t\".flac\": {},\n\t\t\".m4a\":  {},\n\t\t\".aac\":  {},\n\t}, maxGeneratedAudioBytes)\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, fmt.Errorf(\"failed to write generated audio for %q: %s\", placeholder.prompt, sanitizeProviderError(err))\n\t}\n\n\tasset := OpenCodeMediaAsset{\n\t\tPrompt:        placeholder.prompt,\n\t\tPlaceholder:   placeholder.token,\n\t\tMediaType:     \"audio\",\n\t\tFilename:      filename,\n\t\tRelativePath:  relativePath,\n\t\tSourceService: sourceService,\n\t}\n\tresp.GeneratedAssets = append(resp.GeneratedAssets, asset)\n\treturn asset, nil\n}\n\nfunc generateElevenLabsAudioForPostPass(\n\tplaceholder postPassAudioPlaceholder,\n\tapiKey string,\n\tdefaultVoiceID string,\n\tdefaultVoiceModel string,\n) ([]byte, string, string, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn nil, \"\", \"\", fmt.Errorf(\"missing elevenLabsKey for glowbyaudio:%s\", placeholder.prompt)\n\t}\n\n\taudioType := normalizePostPassAudioType(placeholder.audioType, placeholder.prompt)\n\tvoiceID := strings.TrimSpace(placeholder.voiceID)\n\tif voiceID == \"\" {\n\t\tvoiceID = strings.TrimSpace(defaultVoiceID)\n\t}\n\tvoiceModel := normalizeElevenLabsVoiceModel(placeholder.modelID)\n\tif strings.TrimSpace(voiceModel) == \"\" {\n\t\tvoiceModel = normalizeElevenLabsVoiceModel(defaultVoiceModel)\n\t}\n\tif strings.TrimSpace(voiceModel) == \"\" {\n\t\tvoiceModel = defaultElevenVoiceModel\n\t}\n\tmodelID := strings.TrimSpace(placeholder.modelID)\n\tif strings.EqualFold(modelID, \"standard\") || strings.EqualFold(modelID, \"default\") {\n\t\tmodelID = \"\"\n\t}\n\n\treq := ElevenLabsAudioRequest{\n\t\tPrompt:            placeholder.prompt,\n\t\tAudioType:         audioType,\n\t\tVoiceID:           voiceID,\n\t\tDurationSeconds:   placeholder.durationSeconds,\n\t\tPromptInfluence:   placeholder.promptInfluence,\n\t\tLoop:              placeholder.loop,\n\t\tForceInstrumental: placeholder.forceInstrumental,\n\t}\n\n\tswitch audioType {\n\tcase \"voice\":\n\t\treq.VoiceModel = voiceModel\n\tcase \"sound\":\n\t\treq.SoundModel = modelID\n\tcase \"music\":\n\t\treq.MusicModel = modelID\n\t}\n\n\tvar (\n\t\taudioBytes []byte\n\t\tmimeType   string\n\t\terr        error\n\t)\n\n\tswitch audioType {\n\tcase \"voice\":\n\t\tlog.Printf(\"[OPENCODE][MEDIA][AUDIO] generating voice prompt=%q voice_id=%s model=%s\", req.Prompt, req.VoiceID, req.VoiceModel)\n\t\taudioBytes, mimeType, err = callElevenLabsVoice(req, apiKey)\n\tcase \"sound\":\n\t\tlog.Printf(\"[OPENCODE][MEDIA][AUDIO] generating sound prompt=%q model=%s\", req.Prompt, req.SoundModel)\n\t\taudioBytes, mimeType, err = callElevenLabsSound(req, apiKey)\n\tcase \"music\":\n\t\tlog.Printf(\"[OPENCODE][MEDIA][AUDIO] generating music prompt=%q model=%s\", req.Prompt, req.MusicModel)\n\t\taudioBytes, mimeType, err = callElevenLabsMusic(req, apiKey)\n\tdefault:\n\t\treturn nil, \"\", \"\", fmt.Errorf(\"unsupported audio type: %s\", audioType)\n\t}\n\tif err != nil {\n\t\tlog.Printf(\"[OPENCODE][MEDIA][AUDIO] generation failed type=%s err=%s\", audioType, sanitizeProviderError(err))\n\t\treturn nil, \"\", \"\", err\n\t}\n\tlog.Printf(\"[OPENCODE][MEDIA][AUDIO] generation succeeded type=%s bytes=%d mime=%s\", audioType, len(audioBytes), mimeType)\n\n\tsourceService := \"ElevenLabs\"\n\tswitch audioType {\n\tcase \"voice\":\n\t\tsourceService = \"ElevenLabs (Voice)\"\n\tcase \"sound\":\n\t\tsourceService = \"ElevenLabs (Sound FX)\"\n\tcase \"music\":\n\t\tsourceService = \"ElevenLabs (Music)\"\n\t}\n\n\treturn audioBytes, mimeType, sourceService, nil\n}\n\nfunc generateImageForPostPass(req OpenCodeMediaPostPassRequest, prompt, referenceImageBase64 string) (string, string, error) {\n\tsource := strings.TrimSpace(req.ImageSource)\n\tif source == \"\" {\n\t\tsource = \"Glowby Images (gpt-image-1.5)\"\n\t}\n\tlowerSource := strings.ToLower(source)\n\tuseReference := strings.TrimSpace(referenceImageBase64) != \"\"\n\n\tswitch {\n\tcase strings.Contains(lowerSource, \"gpt-image-1\"):\n\t\tif req.OpenAIKey == \"\" {\n\t\t\treturn \"\", source, fmt.Errorf(\"openai key is required for %s\", source)\n\t\t}\n\t\tif useReference {\n\t\t\tdataURI, err := callOpenAIImageGenerationWithReference(prompt, referenceImageBase64, \"\", \"\", req.OpenAIKey)\n\t\t\treturn dataURI, source, err\n\t\t}\n\t\tdataURI, err := callOpenAIImageGeneration(prompt, \"\", \"\", req.OpenAIKey)\n\t\treturn dataURI, source, err\n\tcase strings.Contains(lowerSource, \"nano banana\"):\n\t\tif req.GeminiKey == \"\" {\n\t\t\treturn \"\", source, fmt.Errorf(\"gemini key is required for %s\", source)\n\t\t}\n\t\tif useReference {\n\t\t\tdataURI, err := callGeminiImageGenerationWithReference(prompt, referenceImageBase64, \"\", \"\", req.GeminiKey)\n\t\t\treturn dataURI, source, err\n\t\t}\n\t\tdataURI, err := callGeminiImageGeneration(prompt, \"\", \"\", req.GeminiKey)\n\t\treturn dataURI, source, err\n\tcase strings.Contains(lowerSource, \"grok imagine image\"), strings.Contains(lowerSource, \"grok-imagine-image\"), strings.Contains(lowerSource, \"grok 2 image gen\"):\n\t\tif req.XaiKey == \"\" {\n\t\t\treturn \"\", source, fmt.Errorf(\"xai key is required for %s\", source)\n\t\t}\n\t\tif useReference {\n\t\t\tif dataURI, err := callGrokImageGenerationWithReference(prompt, referenceImageBase64, req.XaiKey, \"\"); err == nil {\n\t\t\t\treturn dataURI, source, nil\n\t\t\t}\n\t\t}\n\t\tdataURI, err := callGrokImageGeneration(prompt, req.XaiKey, \"\")\n\t\treturn dataURI, source, err\n\tdefault:\n\t\tif req.OpenAIKey != \"\" {\n\t\t\tif useReference {\n\t\t\t\tdataURI, err := callOpenAIImageGenerationWithReference(prompt, referenceImageBase64, \"\", \"\", req.OpenAIKey)\n\t\t\t\treturn dataURI, \"Glowby Images (gpt-image-1.5)\", err\n\t\t\t}\n\t\t\tdataURI, err := callOpenAIImageGeneration(prompt, \"\", \"\", req.OpenAIKey)\n\t\t\treturn dataURI, \"Glowby Images (gpt-image-1.5)\", err\n\t\t}\n\t\tif req.GeminiKey != \"\" {\n\t\t\tif useReference {\n\t\t\t\tdataURI, err := callGeminiImageGenerationWithReference(prompt, referenceImageBase64, \"\", \"\", req.GeminiKey)\n\t\t\t\treturn dataURI, \"Glowby Images (Nano Banana 2)\", err\n\t\t\t}\n\t\t\tdataURI, err := callGeminiImageGeneration(prompt, \"\", \"\", req.GeminiKey)\n\t\t\treturn dataURI, \"Glowby Images (Nano Banana 2)\", err\n\t\t}\n\t\tif req.XaiKey != \"\" {\n\t\t\tdataURI, err := callGrokImageGeneration(prompt, req.XaiKey, \"\")\n\t\t\treturn dataURI, \"Glowby Images (Grok Imagine Image Pro)\", err\n\t\t}\n\t\treturn \"\", source, fmt.Errorf(\"no image provider key available\")\n\t}\n}\n\nfunc generateVeoVideoFromImage(ctx context.Context, prompt, aspectRatio, geminiKey string, imageBytes []byte, mimeType string) ([]byte, error) {\n\tif geminiKey == \"\" {\n\t\treturn nil, fmt.Errorf(\"gemini key is required for Veo generation\")\n\t}\n\tif len(imageBytes) == 0 {\n\t\treturn nil, fmt.Errorf(\"image bytes are required for Veo generation\")\n\t}\n\n\tif aspectRatio == \"\" {\n\t\taspectRatio = \"16:9\"\n\t}\n\n\trequest := VeoGenerationRequest{\n\t\tPrompt: prompt,\n\t\tImages: []VeoImageInput{\n\t\t\t{\n\t\t\t\tData:     base64.StdEncoding.EncodeToString(imageBytes),\n\t\t\t\tMimeType: mimeType,\n\t\t\t},\n\t\t},\n\t\tAspectRatio:  aspectRatio,\n\t\tUseKeyframes: false,\n\t\tGeminiKey:    geminiKey,\n\t}\n\n\tstartResp, err := startVeoVideoGeneration(request)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdeadline := time.Now().Add(10 * time.Minute)\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil, ctx.Err()\n\t\tdefault:\n\t\t}\n\n\t\tif time.Now().After(deadline) {\n\t\t\treturn nil, fmt.Errorf(\"video generation timed out\")\n\t\t}\n\n\t\tpollResp, err := pollVeoOperation(startResp.OperationID, geminiKey)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif pollResp.Error != \"\" {\n\t\t\treturn nil, fmt.Errorf(\"%s\", pollResp.Error)\n\t\t}\n\n\t\tif pollResp.Done {\n\t\t\tif pollResp.Status != \"completed\" || pollResp.VideoURL == \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"video generation finished without output\")\n\t\t\t}\n\t\t\treturn downloadVeoVideoBinary(pollResp.VideoURL, geminiKey)\n\t\t}\n\n\t\ttime.Sleep(8 * time.Second)\n\t}\n}\n\nfunc downloadVeoVideoBinary(videoURL, apiKey string) ([]byte, error) {\n\tparsed, err := neturl.Parse(videoURL)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid video url: %w\", err)\n\t}\n\n\tquery := parsed.Query()\n\tif query.Get(\"key\") == \"\" {\n\t\tquery.Set(\"key\", apiKey)\n\t}\n\tparsed.RawQuery = query.Encode()\n\n\treq, err := http.NewRequest(http.MethodGet, parsed.String(), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(io.LimitReader(resp.Body, 2048))\n\t\treturn nil, fmt.Errorf(\"video download failed (%d): %s\", resp.StatusCode, strings.TrimSpace(string(body)))\n\t}\n\n\tdata, err := io.ReadAll(io.LimitReader(resp.Body, maxGeneratedVideoBytes+1))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(data) > maxGeneratedVideoBytes {\n\t\treturn nil, fmt.Errorf(\"video exceeds maximum allowed size\")\n\t}\n\treturn data, nil\n}\n\nfunc writePrototypeAssetsManifest(projectPath string, assets []OpenCodeMediaAsset, defaultImageSource string) error {\n\tmanifestPath, err := safeProjectPath(projectPath, \"prototype\", \"assets.json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmanifest := prototypeAssetsManifest{\n\t\tVersion:    \"1.0\",\n\t\tExportedAt: time.Now().UTC().Format(time.RFC3339),\n\t\tAssets:     []prototypeAssetsManifestItem{},\n\t}\n\n\tif existingData, err := os.ReadFile(manifestPath); err == nil {\n\t\t_ = json.Unmarshal(existingData, &manifest)\n\t\tif manifest.Version == \"\" {\n\t\t\tmanifest.Version = \"1.0\"\n\t\t}\n\t\tif manifest.Assets == nil {\n\t\t\tmanifest.Assets = []prototypeAssetsManifestItem{}\n\t\t}\n\t}\n\n\tbyFilename := make(map[string]prototypeAssetsManifestItem)\n\tfor _, item := range manifest.Assets {\n\t\tbyFilename[item.Filename] = item\n\t}\n\n\tfor _, asset := range assets {\n\t\tsourceService := asset.SourceService\n\t\tif sourceService == \"\" {\n\t\t\tif asset.MediaType == \"video\" {\n\t\t\t\tsourceService = \"Veo\"\n\t\t\t} else if asset.MediaType == \"audio\" {\n\t\t\t\tsourceService = \"ElevenLabs\"\n\t\t\t} else {\n\t\t\t\tsourceService = defaultImageSource\n\t\t\t}\n\t\t}\n\n\t\tbyFilename[asset.Filename] = prototypeAssetsManifestItem{\n\t\t\tFilename:      asset.Filename,\n\t\t\tPrompt:        asset.Prompt,\n\t\t\tSourceService: sourceService,\n\t\t\tMediaType:     asset.MediaType,\n\t\t}\n\t}\n\n\tmanifest.Assets = make([]prototypeAssetsManifestItem, 0, len(byFilename))\n\tfor _, item := range byFilename {\n\t\tmanifest.Assets = append(manifest.Assets, item)\n\t}\n\tsort.Slice(manifest.Assets, func(i, j int) bool {\n\t\treturn manifest.Assets[i].Filename < manifest.Assets[j].Filename\n\t})\n\n\tpayload, err := json.MarshalIndent(manifest, \"\", \"  \")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn os.WriteFile(manifestPath, payload, 0644)\n}\n\nfunc writePlatformAssetsMap(projectPath string, copies []OpenCodePlatformCopy) error {\n\tmapPath, err := safeProjectPath(projectPath, \"prototype\", \"platform_assets_map.json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trowsBySource := make(map[string]*platformAssetsMapRow)\n\tfor _, copy := range copies {\n\t\trow, ok := rowsBySource[copy.Source]\n\t\tif !ok {\n\t\t\trow = &platformAssetsMapRow{\n\t\t\t\tSource:       copy.Source,\n\t\t\t\tMediaType:    classifyMediaTypeByExt(filepath.Ext(copy.Source)),\n\t\t\t\tDestinations: []platformAssetsMapTargetRow{},\n\t\t\t}\n\t\t\trowsBySource[copy.Source] = row\n\t\t}\n\t\trow.Destinations = append(row.Destinations, platformAssetsMapTargetRow{\n\t\t\tPlatform: copy.Platform,\n\t\t\tPath:     copy.Destination,\n\t\t})\n\t}\n\n\trows := make([]platformAssetsMapRow, 0, len(rowsBySource))\n\tfor _, row := range rowsBySource {\n\t\tsort.Slice(row.Destinations, func(i, j int) bool {\n\t\t\tif row.Destinations[i].Platform == row.Destinations[j].Platform {\n\t\t\t\treturn row.Destinations[i].Path < row.Destinations[j].Path\n\t\t\t}\n\t\t\treturn row.Destinations[i].Platform < row.Destinations[j].Platform\n\t\t})\n\t\trows = append(rows, *row)\n\t}\n\tsort.Slice(rows, func(i, j int) bool {\n\t\treturn rows[i].Source < rows[j].Source\n\t})\n\n\tpayload, err := json.MarshalIndent(platformAssetsMap{\n\t\tGeneratedAt: time.Now().UTC().Format(time.RFC3339),\n\t\tAssets:      rows,\n\t}, \"\", \"  \")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn os.WriteFile(mapPath, payload, 0644)\n}\n\nfunc syncAssetsToPlatforms(projectPath string) ([]OpenCodePlatformCopy, bool, []string, error) {\n\tassetsDir, err := safeProjectPath(projectPath, \"prototype\", \"assets\")\n\tif err != nil {\n\t\treturn nil, false, nil, err\n\t}\n\tif _, err := os.Stat(assetsDir); err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn []OpenCodePlatformCopy{}, false, []string{}, nil\n\t\t}\n\t\treturn nil, false, nil, err\n\t}\n\n\ttype platformTarget struct {\n\t\tname      string\n\t\timagePath string\n\t\tvideoPath string\n\t\taudioPath string\n\t\tenabled   bool\n\t\tspecial   string\n\t}\n\n\tappleRoot, _ := safeProjectPath(projectPath, \"apple\", \"Custom\", \"Assets.xcassets\")\n\tandroidRoot, _ := safeProjectPath(projectPath, \"android\", \"app\", \"src\", \"main\", \"res\")\n\twebRoot, _ := safeProjectPath(projectPath, \"web\", \"public\")\n\tgodotRoot, _ := safeProjectPath(projectPath, \"godot\", \"assets\")\n\n\ttargets := []platformTarget{\n\t\t{\n\t\t\tname:    \"apple\",\n\t\t\tenabled: directoryExists(appleRoot),\n\t\t\tspecial: \"apple\",\n\t\t},\n\t\t{\n\t\t\tname:      \"android\",\n\t\t\timagePath: filepath.Join(androidRoot, \"drawable\"),\n\t\t\tvideoPath: filepath.Join(androidRoot, \"raw\"),\n\t\t\taudioPath: filepath.Join(androidRoot, \"raw\"),\n\t\t\tenabled:   directoryExists(androidRoot),\n\t\t},\n\t\t{\n\t\t\tname:      \"web\",\n\t\t\timagePath: filepath.Join(webRoot, \"assets\", \"images\"),\n\t\t\tvideoPath: filepath.Join(webRoot, \"assets\", \"videos\"),\n\t\t\taudioPath: filepath.Join(webRoot, \"assets\", \"audio\"),\n\t\t\tenabled:   directoryExists(webRoot),\n\t\t},\n\t\t{\n\t\t\tname:      \"godot\",\n\t\t\timagePath: filepath.Join(godotRoot, \"sprites\"),\n\t\t\tvideoPath: filepath.Join(godotRoot, \"videos\"),\n\t\t\taudioPath: filepath.Join(godotRoot, \"audio\"),\n\t\t\tenabled:   directoryExists(godotRoot),\n\t\t},\n\t}\n\n\tsynced := false\n\twarnings := []string{}\n\tcopies := []OpenCodePlatformCopy{}\n\n\terr = filepath.WalkDir(assetsDir, func(path string, d os.DirEntry, walkErr error) error {\n\t\tif walkErr != nil {\n\t\t\treturn walkErr\n\t\t}\n\t\tif d.IsDir() {\n\t\t\treturn nil\n\t\t}\n\n\t\text := strings.ToLower(filepath.Ext(path))\n\t\tmediaType := classifyMediaTypeByExt(ext)\n\t\tif mediaType == \"\" {\n\t\t\treturn nil\n\t\t}\n\n\t\trelSource, err := filepath.Rel(projectPath, path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trelSource = filepath.ToSlash(relSource)\n\n\t\tfor _, target := range targets {\n\t\t\tif !target.enabled {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar destinationPath string\n\t\t\tif target.special == \"apple\" {\n\t\t\t\tdestinationPath, err = copyToAppleAssetCatalog(path, appleRoot, mediaType)\n\t\t\t\tif err != nil {\n\t\t\t\t\twarnings = append(warnings, fmt.Sprintf(\"Apple sync failed for %s: %s\", relSource, sanitizeProviderError(err)))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbaseName := resourceSafeName(strings.TrimSuffix(filepath.Base(path), filepath.Ext(path)))\n\t\t\t\tvar platformDir string\n\t\t\t\tif mediaType == \"video\" {\n\t\t\t\t\tplatformDir = target.videoPath\n\t\t\t\t} else if mediaType == \"audio\" {\n\t\t\t\t\tplatformDir = target.audioPath\n\t\t\t\t} else {\n\t\t\t\t\tplatformDir = target.imagePath\n\t\t\t\t}\n\n\t\t\t\tif err := os.MkdirAll(platformDir, 0755); err != nil {\n\t\t\t\t\twarnings = append(warnings, fmt.Sprintf(\"%s sync failed for %s: %s\", strings.Title(target.name), relSource, sanitizeProviderError(err)))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tvar fileName string\n\t\t\t\tif mediaType == \"video\" {\n\t\t\t\t\tfileName = baseName + \".mp4\"\n\t\t\t\t} else if mediaType == \"audio\" {\n\t\t\t\t\tfileName = baseName + ext\n\t\t\t\t} else {\n\t\t\t\t\tfileName = baseName + ext\n\t\t\t\t}\n\n\t\t\t\tdestinationPath = filepath.Join(platformDir, fileName)\n\t\t\t\tif err := copyFile(path, destinationPath, maxAssetBytesForMediaType(mediaType)); err != nil {\n\t\t\t\t\twarnings = append(warnings, fmt.Sprintf(\"%s sync failed for %s: %s\", strings.Title(target.name), relSource, sanitizeProviderError(err)))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trelDest, relErr := filepath.Rel(projectPath, destinationPath)\n\t\t\tif relErr != nil {\n\t\t\t\twarnings = append(warnings, fmt.Sprintf(\"sync path error for %s: %s\", relSource, sanitizeProviderError(relErr)))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tsynced = true\n\t\t\tcopies = append(copies, OpenCodePlatformCopy{\n\t\t\t\tPlatform:    target.name,\n\t\t\t\tSource:      relSource,\n\t\t\t\tDestination: filepath.ToSlash(relDest),\n\t\t\t})\n\t\t}\n\n\t\treturn nil\n\t})\n\n\tif err != nil {\n\t\treturn nil, synced, warnings, err\n\t}\n\n\tsort.Slice(copies, func(i, j int) bool {\n\t\tif copies[i].Platform == copies[j].Platform {\n\t\t\tif copies[i].Source == copies[j].Source {\n\t\t\t\treturn copies[i].Destination < copies[j].Destination\n\t\t\t}\n\t\t\treturn copies[i].Source < copies[j].Source\n\t\t}\n\t\treturn copies[i].Platform < copies[j].Platform\n\t})\n\n\treturn copies, synced, dedupeWarnings(warnings), nil\n}\n\nfunc copyToAppleAssetCatalog(sourcePath, assetCatalogRoot, mediaType string) (string, error) {\n\text := strings.ToLower(filepath.Ext(sourcePath))\n\tbaseName := strings.TrimSuffix(filepath.Base(sourcePath), ext)\n\tsetName := resourceSafeName(baseName)\n\n\tvar setDir string\n\tvar outputName string\n\tvar contents map[string]interface{}\n\n\tif mediaType == \"video\" || mediaType == \"audio\" {\n\t\tsetDir = filepath.Join(assetCatalogRoot, setName+\".dataset\")\n\t\tif mediaType == \"video\" {\n\t\t\toutputName = setName + \".mp4\"\n\t\t} else {\n\t\t\toutputName = setName + ext\n\t\t}\n\t\tcontents = map[string]interface{}{\n\t\t\t\"data\": []map[string]string{\n\t\t\t\t{\n\t\t\t\t\t\"idiom\":    \"universal\",\n\t\t\t\t\t\"filename\": outputName,\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"author\":  \"xcode\",\n\t\t\t\t\"version\": 1,\n\t\t\t},\n\t\t}\n\t} else {\n\t\tsetDir = filepath.Join(assetCatalogRoot, setName+\".imageset\")\n\t\toutputName = setName + ext\n\t\tcontents = map[string]interface{}{\n\t\t\t\"images\": []map[string]string{\n\t\t\t\t{\n\t\t\t\t\t\"idiom\":    \"universal\",\n\t\t\t\t\t\"filename\": outputName,\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"author\":  \"xcode\",\n\t\t\t\t\"version\": 1,\n\t\t\t},\n\t\t}\n\t}\n\n\tif err := os.MkdirAll(setDir, 0755); err != nil {\n\t\treturn \"\", err\n\t}\n\n\ttargetPath := filepath.Join(setDir, outputName)\n\tif err := copyFile(sourcePath, targetPath, maxAssetBytesForMediaType(mediaType)); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tcontentsPath := filepath.Join(setDir, \"Contents.json\")\n\tpayload, err := json.MarshalIndent(contents, \"\", \"  \")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif err := os.WriteFile(contentsPath, payload, 0644); err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn targetPath, nil\n}\n\nfunc materializeFromStudioAsset(asset studioAssetRecord, mediaType string, prompt string, placeholder string, projectPath string, sourceService string, maxBytes int, allowed map[string]struct{}) (OpenCodeMediaAsset, []byte, string, error) {\n\tbytes, mimeType, err := decodeBase64Payload(asset.DataBase64, \"application/octet-stream\")\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, nil, \"\", err\n\t}\n\n\text := \".bin\"\n\tif mediaType == \"image\" {\n\t\text = imageExtensionForMimeType(mimeType)\n\t} else if mediaType == \"video\" {\n\t\text = \".mp4\"\n\t} else if mediaType == \"audio\" {\n\t\text = audioExtensionForMimeType(mimeType)\n\t}\n\n\tfilename := deterministicAssetFilename(mediaType, prompt, ext)\n\trelativePath, err := writePrototypeAsset(projectPath, filename, bytes, allowed, maxBytes)\n\tif err != nil {\n\t\treturn OpenCodeMediaAsset{}, nil, \"\", err\n\t}\n\n\treturn OpenCodeMediaAsset{\n\t\tPrompt:        prompt,\n\t\tPlaceholder:   placeholder,\n\t\tMediaType:     mediaType,\n\t\tFilename:      filename,\n\t\tRelativePath:  relativePath,\n\t\tSourceService: sourceService,\n\t\tStudioAssetID: asset.ID,\n\t}, bytes, mimeType, nil\n}\n\nfunc resolveVideoStartFrame(fromKey string, imageRefsByKey map[string]postPassImageRef, studioAssets []studioAssetRecord, imageSource string) (postPassImageRef, error) {\n\tnormalized := normalizedLookupKey(fromKey)\n\tif ref, ok := imageRefsByKey[normalized]; ok {\n\t\treturn ref, nil\n\t}\n\n\tif studioAsset, ok := findStudioAssetByKey(studioAssets, \"image\", fromKey, imageSource); ok {\n\t\tbytes, mimeType, err := decodeBase64Payload(studioAsset.DataBase64, \"image/png\")\n\t\tif err != nil {\n\t\t\treturn postPassImageRef{}, err\n\t\t}\n\n\t\tfilename := deterministicAssetFilename(\"img\", studioAsset.Prompt, imageExtensionForMimeType(mimeType))\n\t\treturn postPassImageRef{\n\t\t\tasset: OpenCodeMediaAsset{\n\t\t\t\tPrompt:        studioAsset.Prompt,\n\t\t\t\tMediaType:     \"image\",\n\t\t\t\tFilename:      filename,\n\t\t\t\tRelativePath:  filepath.ToSlash(filepath.Join(\"prototype\", \"assets\", filename)),\n\t\t\t\tSourceService: studioAsset.SourceService,\n\t\t\t\tStudioAssetID: studioAsset.ID,\n\t\t\t},\n\t\t\tbytes:    bytes,\n\t\t\tmimeType: mimeType,\n\t\t}, nil\n\t}\n\n\treturn postPassImageRef{}, fmt.Errorf(\"from:%s does not match any image generated in this pass or Studio image\", fromKey)\n}\n\nfunc registerImageRefKeys(index map[string]postPassImageRef, ref postPassImageRef) {\n\tindex[normalizedLookupKey(ref.asset.Prompt)] = ref\n\tindex[normalizedLookupKey(strings.TrimSuffix(ref.asset.Filename, filepath.Ext(ref.asset.Filename)))] = ref\n\tindex[normalizedLookupKey(resourceSafeName(ref.asset.Prompt))] = ref\n}\n\ntype imagePlaceholder struct {\n\tToken  string\n\tPrompt string\n}\n\nfunc extractImagePlaceholders(content string) []imagePlaceholder {\n\tmatches := glowbyImagePlaceholderRegex.FindAllStringSubmatch(content, -1)\n\tresult := []imagePlaceholder{}\n\tseen := make(map[string]struct{})\n\n\tfor _, match := range matches {\n\t\tif len(match) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\ttoken := strings.TrimSpace(match[0])\n\t\tprompt := strings.TrimSpace(match[1])\n\t\tif token == \"\" || prompt == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := seen[token]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[token] = struct{}{}\n\t\tresult = append(result, imagePlaceholder{Token: token, Prompt: prompt})\n\t}\n\n\treturn result\n}\n\nfunc extractVideoPlaceholders(content string) []postPassVideoPlaceholder {\n\tmatches := glowbyVideoPlaceholderRegex.FindAllStringSubmatch(content, -1)\n\tresult := []postPassVideoPlaceholder{}\n\tseen := make(map[string]struct{})\n\n\tfor _, match := range matches {\n\t\tif len(match) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\ttoken := strings.TrimSpace(match[0])\n\t\tpayload := strings.TrimSpace(match[1])\n\t\tif token == \"\" || payload == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := seen[token]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[token] = struct{}{}\n\n\t\tplaceholder := parseGlowbyVideoPayload(token, payload)\n\t\tif placeholder.prompt == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tresult = append(result, placeholder)\n\t}\n\n\treturn result\n}\n\nfunc parseGlowbyVideoPayload(token, payload string) postPassVideoPlaceholder {\n\tparts := strings.Split(payload, \"|\")\n\tplaceholder := postPassVideoPlaceholder{\n\t\ttoken:       token,\n\t\tprompt:      strings.TrimSpace(parts[0]),\n\t\taspectRatio: \"16:9\",\n\t}\n\n\tfor _, part := range parts[1:] {\n\t\tpart = strings.TrimSpace(part)\n\t\tlowerPart := strings.ToLower(part)\n\t\tif strings.HasPrefix(lowerPart, \"from:\") {\n\t\t\tplaceholder.fromKey = strings.TrimSpace(part[len(\"from:\"):])\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(lowerPart, \"aspect:\") {\n\t\t\tplaceholder.aspectRatio = normalizeAspectRatio(strings.TrimSpace(part[len(\"aspect:\"):]))\n\t\t}\n\t}\n\n\treturn placeholder\n}\n\nfunc extractAudioPlaceholders(content string) []postPassAudioPlaceholder {\n\tmatches := glowbyAudioPlaceholderRegex.FindAllStringSubmatch(content, -1)\n\tresult := []postPassAudioPlaceholder{}\n\tseen := make(map[string]struct{})\n\n\tfor _, match := range matches {\n\t\tif len(match) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\ttoken := strings.TrimSpace(match[0])\n\t\tpayload := strings.TrimSpace(match[1])\n\t\tif token == \"\" || payload == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := seen[token]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[token] = struct{}{}\n\n\t\tplaceholder := parseGlowbyAudioPayload(token, payload)\n\t\tif placeholder.prompt == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tresult = append(result, placeholder)\n\t}\n\n\treturn result\n}\n\nfunc parseGlowbyAudioPayload(token, payload string) postPassAudioPlaceholder {\n\tparts := strings.Split(payload, \"|\")\n\tplaceholder := postPassAudioPlaceholder{\n\t\ttoken:     token,\n\t\tprompt:    strings.TrimSpace(parts[0]),\n\t\taudioType: inferAudioTypeFromPrompt(strings.TrimSpace(parts[0])),\n\t}\n\n\tfor _, part := range parts[1:] {\n\t\tpart = strings.TrimSpace(part)\n\t\tif part == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tlowerPart := strings.ToLower(part)\n\t\tswitch {\n\t\tcase strings.HasPrefix(lowerPart, \"type:\"):\n\t\t\tplaceholder.audioType = normalizePostPassAudioType(strings.TrimSpace(part[len(\"type:\"):]), placeholder.prompt)\n\t\tcase strings.HasPrefix(lowerPart, \"voice:\"):\n\t\t\tplaceholder.voiceID = strings.TrimSpace(part[len(\"voice:\"):])\n\t\tcase strings.HasPrefix(lowerPart, \"voiceid:\"):\n\t\t\tplaceholder.voiceID = strings.TrimSpace(part[len(\"voiceid:\"):])\n\t\tcase strings.HasPrefix(lowerPart, \"voice_id:\"):\n\t\t\tplaceholder.voiceID = strings.TrimSpace(part[len(\"voice_id:\"):])\n\t\tcase strings.HasPrefix(lowerPart, \"model:\"):\n\t\t\tplaceholder.modelID = strings.TrimSpace(part[len(\"model:\"):])\n\t\tcase strings.HasPrefix(lowerPart, \"modelid:\"):\n\t\t\tplaceholder.modelID = strings.TrimSpace(part[len(\"modelid:\"):])\n\t\tcase strings.HasPrefix(lowerPart, \"model_id:\"):\n\t\t\tplaceholder.modelID = strings.TrimSpace(part[len(\"model_id:\"):])\n\t\tcase strings.HasPrefix(lowerPart, \"duration:\"):\n\t\t\tif seconds, err := strconv.ParseFloat(strings.TrimSpace(part[len(\"duration:\"):]), 64); err == nil && seconds > 0 {\n\t\t\t\tplaceholder.durationSeconds = seconds\n\t\t\t}\n\t\tcase strings.HasPrefix(lowerPart, \"durationseconds:\"):\n\t\t\tif seconds, err := strconv.ParseFloat(strings.TrimSpace(part[len(\"durationseconds:\"):]), 64); err == nil && seconds > 0 {\n\t\t\t\tplaceholder.durationSeconds = seconds\n\t\t\t}\n\t\tcase strings.HasPrefix(lowerPart, \"promptinfluence:\"):\n\t\t\tif influence, err := strconv.ParseFloat(strings.TrimSpace(part[len(\"promptinfluence:\"):]), 64); err == nil {\n\t\t\t\tplaceholder.promptInfluence = &influence\n\t\t\t}\n\t\tcase strings.HasPrefix(lowerPart, \"influence:\"):\n\t\t\tif influence, err := strconv.ParseFloat(strings.TrimSpace(part[len(\"influence:\"):]), 64); err == nil {\n\t\t\t\tplaceholder.promptInfluence = &influence\n\t\t\t}\n\t\tcase strings.HasPrefix(lowerPart, \"loop:\"):\n\t\t\tplaceholder.loop = parseBoolOption(strings.TrimSpace(part[len(\"loop:\"):]))\n\t\tcase strings.HasPrefix(lowerPart, \"instrumental:\"):\n\t\t\tplaceholder.forceInstrumental = parseBoolOption(strings.TrimSpace(part[len(\"instrumental:\"):]))\n\t\tcase strings.HasPrefix(lowerPart, \"forceinstrumental:\"):\n\t\t\tplaceholder.forceInstrumental = parseBoolOption(strings.TrimSpace(part[len(\"forceinstrumental:\"):]))\n\t\t}\n\t}\n\n\tplaceholder.audioType = normalizePostPassAudioType(placeholder.audioType, placeholder.prompt)\n\treturn placeholder\n}\n\nfunc normalizePostPassAudioType(audioType string, prompt string) string {\n\tnormalized := normalizeAudioType(audioType)\n\tif normalized == \"\" {\n\t\treturn inferAudioTypeFromPrompt(prompt)\n\t}\n\tswitch normalized {\n\tcase \"voice\", \"sound\", \"music\":\n\t\treturn normalized\n\tdefault:\n\t\treturn inferAudioTypeFromPrompt(prompt)\n\t}\n}\n\nfunc inferAudioTypeFromPrompt(prompt string) string {\n\tlower := strings.ToLower(strings.TrimSpace(prompt))\n\tif lower == \"\" {\n\t\treturn \"voice\"\n\t}\n\n\tvoiceHints := []string{\"voice\", \"voiceover\", \"narration\", \"narrator\", \"spoken\", \"dialogue\", \"read aloud\", \"tts\"}\n\tfor _, hint := range voiceHints {\n\t\tif strings.Contains(lower, hint) {\n\t\t\treturn \"voice\"\n\t\t}\n\t}\n\n\tmusicHints := []string{\"music\", \"song\", \"soundtrack\", \"background track\", \"melody\", \"instrumental\", \"beat\"}\n\tfor _, hint := range musicHints {\n\t\tif strings.Contains(lower, hint) {\n\t\t\treturn \"music\"\n\t\t}\n\t}\n\n\tsoundHints := []string{\n\t\t\"sound effect\",\n\t\t\"sfx\",\n\t\t\"fx\",\n\t\t\"effect\",\n\t\t\"ambient\",\n\t\t\"foley\",\n\t\t\"explosion\",\n\t\t\"whoosh\",\n\t\t\"footstep\",\n\t\t\"door slam\",\n\t\t\"meow\",\n\t\t\"bark\",\n\t\t\"woof\",\n\t\t\"chirp\",\n\t\t\"scream\",\n\t\t\"thunder\",\n\t\t\"rain\",\n\t\t\"wind\",\n\t\t\"gunshot\",\n\t\t\"impact\",\n\t}\n\tfor _, hint := range soundHints {\n\t\tif strings.Contains(lower, hint) {\n\t\t\treturn \"sound\"\n\t\t}\n\t}\n\n\treturn \"voice\"\n}\n\nfunc parseBoolOption(value string) bool {\n\tswitch strings.ToLower(strings.TrimSpace(value)) {\n\tcase \"1\", \"true\", \"yes\", \"y\", \"on\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc floatPointerKey(value *float64) string {\n\tif value == nil {\n\t\treturn \"\"\n\t}\n\treturn fmt.Sprintf(\"%.3f\", *value)\n}\n\nfunc normalizeAspectRatio(value string) string {\n\tswitch strings.TrimSpace(value) {\n\tcase \"16:9\", \"9:16\", \"1:1\", \"4:3\", \"3:4\":\n\t\treturn value\n\tdefault:\n\t\treturn \"16:9\"\n\t}\n}\n\nfunc resolveReferenceImage(req OpenCodeMediaPostPassRequest, projectPath string, studioAssets []studioAssetRecord) (string, string, error) {\n\tif strings.TrimSpace(req.ReferenceImagePath) != \"\" {\n\t\trefPath := strings.TrimSpace(req.ReferenceImagePath)\n\t\tvar absPath string\n\t\tvar err error\n\t\tif filepath.IsAbs(refPath) {\n\t\t\tabsPath = refPath\n\t\t} else {\n\t\t\tabsPath, err = safeProjectPath(projectPath, refPath)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", \"\", err\n\t\t\t}\n\t\t}\n\n\t\tdata, err := os.ReadFile(absPath)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\t\tif len(data) > maxGeneratedImageBytes {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"reference image is too large\")\n\t\t}\n\n\t\tmimeType := detectMimeType(data, \"image/png\")\n\t\treturn base64.StdEncoding.EncodeToString(data), mimeType, nil\n\t}\n\n\tif strings.TrimSpace(req.ReferenceAssetID) != \"\" {\n\t\tassetID := normalizedLookupKey(req.ReferenceAssetID)\n\t\tfor _, asset := range studioAssets {\n\t\t\tif normalizedLookupKey(asset.ID) != assetID {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif asset.DataBase64 == \"\" {\n\t\t\t\treturn \"\", \"\", fmt.Errorf(\"reference asset has no image data\")\n\t\t\t}\n\t\t\tbytes, mimeType, err := decodeBase64Payload(asset.DataBase64, \"image/png\")\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", \"\", err\n\t\t\t}\n\t\t\treturn base64.StdEncoding.EncodeToString(bytes), mimeType, nil\n\t\t}\n\t\treturn \"\", \"\", fmt.Errorf(\"reference asset not found in Studio\")\n\t}\n\n\treturn \"\", \"\", nil\n}\n\nfunc loadStudioAssets() ([]studioAssetRecord, error) {\n\tuserConfigDir, err := os.UserConfigDir()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tassetsDir := filepath.Join(userConfigDir, \"Glowbom\", \"Studio\", \"Assets\")\n\tentries, err := os.ReadDir(assetsDir)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn []studioAssetRecord{}, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tsort.Slice(entries, func(i, j int) bool {\n\t\treturn entries[i].Name() > entries[j].Name()\n\t})\n\n\trecords := []studioAssetRecord{}\n\tfor _, entry := range entries {\n\t\tif entry.IsDir() || !strings.HasSuffix(strings.ToLower(entry.Name()), \".json\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tpath := filepath.Join(assetsDir, entry.Name())\n\t\tdata, err := os.ReadFile(path)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar record studioAssetRecord\n\t\tif err := json.Unmarshal(data, &record); err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif strings.TrimSpace(record.ID) == \"\" || strings.TrimSpace(record.Prompt) == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\trecords = append(records, record)\n\t}\n\n\treturn records, nil\n}\n\nfunc findStudioAssetByPrompt(assets []studioAssetRecord, mediaType, prompt, preferredSource string) (studioAssetRecord, bool) {\n\tnormalizedPrompt := normalizedLookupKey(prompt)\n\tnormalizedSource := normalizedLookupKey(preferredSource)\n\n\tvar fallback studioAssetRecord\n\tfoundFallback := false\n\n\tfor _, asset := range assets {\n\t\tif normalizedLookupKey(asset.MediaType) != normalizedLookupKey(mediaType) {\n\t\t\tcontinue\n\t\t}\n\t\tif normalizedLookupKey(asset.Prompt) != normalizedPrompt {\n\t\t\tcontinue\n\t\t}\n\t\tif asset.DataBase64 == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif normalizedSource != \"\" && normalizedLookupKey(asset.SourceService) == normalizedSource {\n\t\t\treturn asset, true\n\t\t}\n\t\tif !foundFallback {\n\t\t\tfallback = asset\n\t\t\tfoundFallback = true\n\t\t}\n\t}\n\n\treturn fallback, foundFallback\n}\n\nfunc findStudioAssetByKey(assets []studioAssetRecord, mediaType, key, preferredSource string) (studioAssetRecord, bool) {\n\tnormalizedKey := normalizedLookupKey(key)\n\tnormalizedSource := normalizedLookupKey(preferredSource)\n\n\tvar fallback studioAssetRecord\n\tfoundFallback := false\n\n\tfor _, asset := range assets {\n\t\tif normalizedLookupKey(asset.MediaType) != normalizedLookupKey(mediaType) {\n\t\t\tcontinue\n\t\t}\n\t\tif asset.DataBase64 == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tpromptKey := normalizedLookupKey(asset.Prompt)\n\t\tderivedKey := normalizedLookupKey(resourceSafeName(asset.Prompt))\n\t\tidKey := normalizedLookupKey(asset.ID)\n\n\t\tif normalizedKey != promptKey && normalizedKey != derivedKey && normalizedKey != idKey {\n\t\t\tcontinue\n\t\t}\n\n\t\tif normalizedSource != \"\" && normalizedLookupKey(asset.SourceService) == normalizedSource {\n\t\t\treturn asset, true\n\t\t}\n\t\tif !foundFallback {\n\t\t\tfallback = asset\n\t\t\tfoundFallback = true\n\t\t}\n\t}\n\n\treturn fallback, foundFallback\n}\n\nfunc resolveScanTargetPath(projectPath, rawTarget string) (string, error) {\n\ttarget := strings.TrimSpace(rawTarget)\n\tif target == \"\" {\n\t\ttarget = \"prototype/index.html\"\n\t}\n\n\tif filepath.IsAbs(target) {\n\t\tabsTarget, err := filepath.Abs(target)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif !isPathWithin(projectPath, absTarget) {\n\t\t\treturn \"\", fmt.Errorf(\"scan target escapes project root: %s\", rawTarget)\n\t\t}\n\t\treturn absTarget, nil\n\t}\n\n\treturn safeProjectPath(projectPath, target)\n}\n\nfunc writePrototypeAsset(projectPath, filename string, data []byte, allowedExtensions map[string]struct{}, maxSize int) (string, error) {\n\tassetsDir, err := safeProjectPath(projectPath, \"prototype\", \"assets\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif err := os.MkdirAll(assetsDir, 0755); err != nil {\n\t\treturn \"\", err\n\t}\n\n\ttargetPath, err := safeProjectPath(projectPath, \"prototype\", \"assets\", filename)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\text := strings.ToLower(filepath.Ext(targetPath))\n\tif _, ok := allowedExtensions[ext]; !ok {\n\t\treturn \"\", fmt.Errorf(\"extension %s is not allowed\", ext)\n\t}\n\tif len(data) > maxSize {\n\t\treturn \"\", fmt.Errorf(\"asset exceeds maximum size\")\n\t}\n\n\tif err := os.WriteFile(targetPath, data, 0644); err != nil {\n\t\treturn \"\", err\n\t}\n\n\trel, err := filepath.Rel(projectPath, targetPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn filepath.ToSlash(rel), nil\n}\n\nfunc copyFile(sourcePath, destinationPath string, maxSize int64) error {\n\tinfo, err := os.Stat(sourcePath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif info.Size() > maxSize {\n\t\treturn fmt.Errorf(\"source file exceeds max size\")\n\t}\n\n\tdata, err := os.ReadFile(sourcePath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif int64(len(data)) > maxSize {\n\t\treturn fmt.Errorf(\"source file exceeds max size\")\n\t}\n\n\treturn os.WriteFile(destinationPath, data, 0644)\n}\n\nfunc safeProjectPath(projectPath string, pathSegments ...string) (string, error) {\n\tbaseAbs, err := filepath.Abs(projectPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tall := append([]string{baseAbs}, pathSegments...)\n\ttarget := filepath.Join(all...)\n\ttargetAbs, err := filepath.Abs(target)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif !isPathWithin(baseAbs, targetAbs) {\n\t\treturn \"\", fmt.Errorf(\"path escapes project root: %s\", filepath.Join(pathSegments...))\n\t}\n\treturn targetAbs, nil\n}\n\nfunc isPathWithin(basePath, targetPath string) bool {\n\trel, err := filepath.Rel(basePath, targetPath)\n\tif err != nil {\n\t\treturn false\n\t}\n\trel = filepath.Clean(rel)\n\treturn rel == \".\" || (!strings.HasPrefix(rel, \"..\"+string(os.PathSeparator)) && rel != \"..\")\n}\n\nfunc decodeBase64Payload(value string, fallbackMime string) ([]byte, string, error) {\n\ttrimmed := strings.TrimSpace(value)\n\tif trimmed == \"\" {\n\t\treturn nil, \"\", fmt.Errorf(\"empty payload\")\n\t}\n\n\tmimeType := fallbackMime\n\tbase64Payload := trimmed\n\n\tif strings.HasPrefix(trimmed, \"data:\") {\n\t\tparts := strings.SplitN(trimmed, \",\", 2)\n\t\tif len(parts) != 2 {\n\t\t\treturn nil, \"\", fmt.Errorf(\"invalid data URI\")\n\t\t}\n\t\tmeta := strings.TrimPrefix(parts[0], \"data:\")\n\t\tif idx := strings.Index(meta, \";\"); idx >= 0 {\n\t\t\tmeta = meta[:idx]\n\t\t}\n\t\tif strings.TrimSpace(meta) != \"\" {\n\t\t\tmimeType = meta\n\t\t}\n\t\tbase64Payload = parts[1]\n\t}\n\n\tdata, err := base64.StdEncoding.DecodeString(base64Payload)\n\tif err != nil {\n\t\tdata, err = base64.StdEncoding.DecodeString(strings.TrimSpace(base64Payload))\n\t\tif err != nil {\n\t\t\treturn nil, \"\", err\n\t\t}\n\t}\n\n\tif mimeType == \"\" || mimeType == \"application/octet-stream\" {\n\t\tmimeType = detectMimeType(data, fallbackMime)\n\t}\n\n\treturn data, mimeType, nil\n}\n\nfunc detectMimeType(data []byte, fallback string) string {\n\tif len(data) == 0 {\n\t\treturn fallback\n\t}\n\tdetected := http.DetectContentType(data)\n\tif detected == \"\" {\n\t\treturn fallback\n\t}\n\tif strings.HasPrefix(detected, \"application/octet-stream\") {\n\t\treturn fallback\n\t}\n\treturn detected\n}\n\nfunc imageExtensionForMimeType(mimeType string) string {\n\tswitch strings.ToLower(strings.TrimSpace(mimeType)) {\n\tcase \"image/jpeg\", \"image/jpg\":\n\t\treturn \".jpg\"\n\tcase \"image/webp\":\n\t\treturn \".webp\"\n\tdefault:\n\t\treturn \".png\"\n\t}\n}\n\nfunc audioExtensionForMimeType(mimeType string) string {\n\tswitch strings.ToLower(strings.TrimSpace(mimeType)) {\n\tcase \"audio/wav\", \"audio/wave\", \"audio/x-wav\":\n\t\treturn \".wav\"\n\tcase \"audio/ogg\":\n\t\treturn \".ogg\"\n\tcase \"audio/flac\":\n\t\treturn \".flac\"\n\tcase \"audio/mp4\", \"audio/x-m4a\":\n\t\treturn \".m4a\"\n\tcase \"audio/aac\", \"audio/x-aac\":\n\t\treturn \".aac\"\n\tdefault:\n\t\treturn \".mp3\"\n\t}\n}\n\nfunc classifyMediaTypeByExt(ext string) string {\n\tswitch strings.ToLower(strings.TrimSpace(ext)) {\n\tcase \".png\", \".jpg\", \".jpeg\", \".webp\", \".gif\", \".svg\":\n\t\treturn \"image\"\n\tcase \".mp4\", \".webm\", \".mov\":\n\t\treturn \"video\"\n\tcase \".mp3\", \".wav\", \".ogg\", \".flac\", \".m4a\", \".aac\":\n\t\treturn \"audio\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc maxAssetBytesForMediaType(mediaType string) int64 {\n\tswitch strings.ToLower(strings.TrimSpace(mediaType)) {\n\tcase \"image\":\n\t\treturn maxGeneratedImageBytes\n\tcase \"audio\":\n\t\treturn maxGeneratedAudioBytes\n\tdefault:\n\t\treturn maxGeneratedVideoBytes\n\t}\n}\n\nfunc deterministicAssetFilename(prefix, prompt, ext string) string {\n\tcleanPrefix := resourceSafeName(prefix)\n\tif cleanPrefix == \"\" {\n\t\tcleanPrefix = \"asset\"\n\t}\n\tcleanPrompt := resourceSafeName(prompt)\n\tif cleanPrompt == \"\" {\n\t\tcleanPrompt = \"item\"\n\t}\n\tif len(cleanPrompt) > 36 {\n\t\tcleanPrompt = cleanPrompt[:36]\n\t}\n\n\thash := sha1.Sum([]byte(strings.ToLower(strings.TrimSpace(prompt))))\n\tshortHash := fmt.Sprintf(\"%x\", hash[:4])\n\treturn fmt.Sprintf(\"%s_%s_%s%s\", cleanPrefix, cleanPrompt, shortHash, ext)\n}\n\nfunc resourceSafeName(value string) string {\n\tvalue = strings.ToLower(strings.TrimSpace(value))\n\tif value == \"\" {\n\t\treturn \"asset\"\n\t}\n\n\tbuilder := strings.Builder{}\n\tlastUnderscore := false\n\tfor _, r := range value {\n\t\tif (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') {\n\t\t\tbuilder.WriteRune(r)\n\t\t\tlastUnderscore = false\n\t\t\tcontinue\n\t\t}\n\t\tif !lastUnderscore {\n\t\t\tbuilder.WriteRune('_')\n\t\t\tlastUnderscore = true\n\t\t}\n\t}\n\n\tresult := strings.Trim(builder.String(), \"_\")\n\tif result == \"\" {\n\t\tresult = \"asset\"\n\t}\n\tif result[0] >= '0' && result[0] <= '9' {\n\t\tresult = \"asset_\" + result\n\t}\n\treturn result\n}\n\nfunc normalizedLookupKey(value string) string {\n\treturn strings.TrimSpace(strings.ToLower(value))\n}\n\nfunc sanitizeProviderError(err error) string {\n\tif err == nil {\n\t\treturn \"\"\n\t}\n\tmsg := strings.TrimSpace(err.Error())\n\tif msg == \"\" {\n\t\treturn \"unknown error\"\n\t}\n\tmsg = sensitiveValueRegex.ReplaceAllString(msg, \"$1:[redacted]\")\n\tmsg = strings.ReplaceAll(msg, \"\\n\", \" \")\n\tmsg = strings.ReplaceAll(msg, \"\\r\", \" \")\n\tmsg = strings.TrimSpace(msg)\n\tif len(msg) > 220 {\n\t\tmsg = msg[:220] + \"...\"\n\t}\n\treturn msg\n}\n\nfunc dedupeWarnings(warnings []string) []string {\n\tseen := make(map[string]struct{})\n\tresult := []string{}\n\tfor _, warning := range warnings {\n\t\tclean := strings.TrimSpace(warning)\n\t\tif clean == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := seen[clean]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[clean] = struct{}{}\n\t\tresult = append(result, clean)\n\t}\n\treturn result\n}\n\nfunc directoryExists(path string) bool {\n\tinfo, err := os.Stat(path)\n\treturn err == nil && info.IsDir()\n}\n"
  },
  {
    "path": "backend/opencode_project_history.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype openCodeProjectHistoryAttachmentResponse struct {\n\tPath         string `json:\"path\"`\n\tName         string `json:\"name\"`\n\tFilename     string `json:\"filename\"`\n\tSizeBytes    int64  `json:\"sizeBytes\"`\n\tMimeType     string `json:\"mimeType,omitempty\"`\n\tMediaType    string `json:\"mediaType,omitempty\"`\n\tRelativePath string `json:\"relativePath,omitempty\"`\n}\n\ntype openCodeProjectHistoryEntryResponse struct {\n\tID                     string                                     `json:\"id\"`\n\tTimestamp              string                                     `json:\"timestamp\"`\n\tInstructions           string                                     `json:\"instructions\"`\n\tTaskType               string                                     `json:\"taskType\"`\n\tStatus                 string                                     `json:\"status,omitempty\"`\n\tOutputSummary          string                                     `json:\"outputSummary,omitempty\"`\n\tFolderName             string                                     `json:\"folderName\"`\n\tMissingAttachmentCount int                                        `json:\"missingAttachmentCount,omitempty\"`\n\tAttachments            []openCodeProjectHistoryAttachmentResponse `json:\"attachments,omitempty\"`\n}\n\ntype openCodeProjectHistoryResponse struct {\n\tSuccess bool                                  `json:\"success\"`\n\tPath    string                                `json:\"path,omitempty\"`\n\tEntries []openCodeProjectHistoryEntryResponse `json:\"entries,omitempty\"`\n\tError   string                                `json:\"error,omitempty\"`\n}\n\nfunc openCodeProjectHistoryHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tprojectPath, err := readProjectPathFromRequest(r)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\twriteJSON(w, openCodeProjectHistoryResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tnormalizedPath, err := normalizeExistingDirectoryPath(projectPath)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\twriteJSON(w, openCodeProjectHistoryResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tpaths := GetProjectPaths(normalizedPath)\n\tif _, err := os.Stat(paths.Manifest); os.IsNotExist(err) {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\twriteJSON(w, openCodeProjectHistoryResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Not a Glowbom project (missing glowbom.json)\",\n\t\t})\n\t\treturn\n\t}\n\n\tentries, err := loadProjectHistoryEntries(normalizedPath)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusInternalServerError)\n\t\twriteJSON(w, openCodeProjectHistoryResponse{\n\t\t\tSuccess: false,\n\t\t\tPath:    normalizedPath,\n\t\t\tError:   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\twriteJSON(w, openCodeProjectHistoryResponse{\n\t\tSuccess: true,\n\t\tPath:    normalizedPath,\n\t\tEntries: entries,\n\t})\n}\n\nfunc loadProjectHistoryEntries(projectPath string) ([]openCodeProjectHistoryEntryResponse, error) {\n\thistoryRoot := filepath.Join(projectPath, \"history\")\n\tentries, err := os.ReadDir(historyRoot)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn []openCodeProjectHistoryEntryResponse{}, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\n\ttype sortableHistoryEntry struct {\n\t\tentry      openCodeProjectHistoryEntryResponse\n\t\tsortTime   time.Time\n\t\tfolderName string\n\t}\n\n\tloaded := make([]sortableHistoryEntry, 0, len(entries))\n\tfor _, entry := range entries {\n\t\tif !entry.IsDir() {\n\t\t\tcontinue\n\t\t}\n\n\t\tfolderName := strings.TrimSpace(entry.Name())\n\t\tif folderName == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tentryDir := filepath.Join(historyRoot, folderName)\n\t\tentryPath := filepath.Join(entryDir, \"entry.json\")\n\t\tdata, err := os.ReadFile(entryPath)\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed reading history entry %s: %v\", entryPath, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tvar record agentHistoryEntryRecord\n\t\tif err := json.Unmarshal(data, &record); err != nil {\n\t\t\tlog.Printf(\"[OPENCODE] Warning: failed decoding history entry %s: %v\", entryPath, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tsortTime := historyEntrySortTime(record.Timestamp, folderName)\n\t\ttimestamp := strings.TrimSpace(record.Timestamp)\n\t\tif timestamp == \"\" && !sortTime.IsZero() {\n\t\t\ttimestamp = sortTime.UTC().Format(time.RFC3339)\n\t\t}\n\n\t\tattachments := make([]openCodeProjectHistoryAttachmentResponse, 0, len(record.Attachments))\n\t\tmissingAttachmentCount := 0\n\t\tfor _, attachment := range record.Attachments {\n\t\t\tfilename := strings.TrimSpace(attachment.Filename)\n\t\t\tif filename == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tarchivedPath := filepath.Join(entryDir, filename)\n\t\t\tinfo, statErr := os.Stat(archivedPath)\n\t\t\tif statErr != nil || info.IsDir() {\n\t\t\t\tmissingAttachmentCount += 1\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tsizeBytes := attachment.FileSizeBytes\n\t\t\tif sizeBytes <= 0 {\n\t\t\t\tsizeBytes = info.Size()\n\t\t\t}\n\n\t\t\tmimeType := strings.TrimSpace(attachment.MimeType)\n\t\t\tif mimeType == \"\" {\n\t\t\t\tmimeType = inferMimeTypeForFilename(filename)\n\t\t\t}\n\n\t\t\tmediaType := strings.TrimSpace(attachment.MediaType)\n\t\t\tif mediaType == \"\" {\n\t\t\t\tmediaType = inferHistoryMediaType(mimeType, filename)\n\t\t\t}\n\n\t\t\tattachments = append(attachments, openCodeProjectHistoryAttachmentResponse{\n\t\t\t\tPath:         archivedPath,\n\t\t\t\tName:         filename,\n\t\t\t\tFilename:     filename,\n\t\t\t\tSizeBytes:    sizeBytes,\n\t\t\t\tMimeType:     mimeType,\n\t\t\t\tMediaType:    mediaType,\n\t\t\t\tRelativePath: filepath.ToSlash(filepath.Join(\"history\", folderName, filename)),\n\t\t\t})\n\t\t}\n\n\t\ttaskType := strings.TrimSpace(record.TaskType)\n\t\tif taskType == \"\" {\n\t\t\ttaskType = \"refine\"\n\t\t}\n\n\t\tloaded = append(loaded, sortableHistoryEntry{\n\t\t\tentry: openCodeProjectHistoryEntryResponse{\n\t\t\t\tID:                     strings.TrimSpace(record.ID),\n\t\t\t\tTimestamp:              timestamp,\n\t\t\t\tInstructions:           strings.TrimSpace(record.Instructions),\n\t\t\t\tTaskType:               taskType,\n\t\t\t\tStatus:                 normalizeHistoryStatus(record.Status),\n\t\t\t\tOutputSummary:          strings.TrimSpace(record.OutputSummary),\n\t\t\t\tFolderName:             folderName,\n\t\t\t\tMissingAttachmentCount: missingAttachmentCount,\n\t\t\t\tAttachments:            attachments,\n\t\t\t},\n\t\t\tsortTime:   sortTime,\n\t\t\tfolderName: folderName,\n\t\t})\n\t}\n\n\tsort.Slice(loaded, func(i, j int) bool {\n\t\tleft := loaded[i]\n\t\tright := loaded[j]\n\t\tif left.sortTime.Equal(right.sortTime) {\n\t\t\treturn left.folderName > right.folderName\n\t\t}\n\t\treturn left.sortTime.After(right.sortTime)\n\t})\n\n\tresult := make([]openCodeProjectHistoryEntryResponse, 0, len(loaded))\n\tfor _, item := range loaded {\n\t\tresult = append(result, item.entry)\n\t}\n\n\treturn result, nil\n}\n\nfunc historyEntrySortTime(timestamp string, folderName string) time.Time {\n\ttrimmedTimestamp := strings.TrimSpace(timestamp)\n\tif trimmedTimestamp != \"\" {\n\t\tif parsed, err := time.Parse(time.RFC3339, trimmedTimestamp); err == nil {\n\t\t\treturn parsed\n\t\t}\n\t}\n\n\tprefix := folderName\n\tif underscore := strings.Index(prefix, \"_\"); underscore >= 0 {\n\t\tif second := strings.Index(prefix[underscore+1:], \"_\"); second >= 0 {\n\t\t\tprefix = prefix[:underscore+1+second]\n\t\t}\n\t}\n\n\tif parsed, err := time.Parse(\"2006-01-02_150405\", prefix); err == nil {\n\t\treturn parsed.UTC()\n\t}\n\n\treturn time.Time{}\n}\n"
  },
  {
    "path": "backend/opencode_project_open.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nconst (\n\topenCodeIDEFinder        = \"finder\"\n\topenCodeIDEXcode         = \"xcode\"\n\topenCodeIDEAndroidStudio = \"android-studio\"\n\topenCodeIDEVSCode        = \"vscode\"\n)\n\ntype openCodeProjectIDERequest struct {\n\tPath string `json:\"path\"`\n}\n\ntype openCodeProjectIDEAction struct {\n\tIDE       string `json:\"ide\"`\n\tLabel     string `json:\"label\"`\n\tAvailable bool   `json:\"available\"`\n\tPath      string `json:\"path,omitempty\"`\n\tReason    string `json:\"reason,omitempty\"`\n}\n\ntype openCodeProjectIDEStatusResponse struct {\n\tSuccess bool                       `json:\"success\"`\n\tPath    string                     `json:\"path,omitempty\"`\n\tActions []openCodeProjectIDEAction `json:\"actions,omitempty\"`\n\tError   string                     `json:\"error,omitempty\"`\n}\n\ntype openCodeProjectOpenRequest struct {\n\tPath string `json:\"path\"`\n\tIDE  string `json:\"ide\"`\n}\n\ntype openCodeProjectOpenResponse struct {\n\tSuccess    bool   `json:\"success\"`\n\tIDE        string `json:\"ide,omitempty\"`\n\tOpenedPath string `json:\"openedPath,omitempty\"`\n\tError      string `json:\"error,omitempty\"`\n}\n\ntype openCodeLaunchCommand struct {\n\tExecutable string\n\tArgs       []string\n}\n\nfunc openCodeProjectIDEStatusHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodGet && r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tprojectPath, err := readProjectPathFromRequest(r)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectIDEStatusResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tnormalizedPath, err := normalizeExistingDirectoryPath(projectPath)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectIDEStatusResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tactions := inspectProjectIDEActions(normalizedPath)\n\t_ = json.NewEncoder(w).Encode(openCodeProjectIDEStatusResponse{\n\t\tSuccess: true,\n\t\tPath:    normalizedPath,\n\t\tActions: actions,\n\t})\n}\n\nfunc openCodeProjectOpenHandler(w http.ResponseWriter, r *http.Request) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\n\tif r.Method != http.MethodPost {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tvar req openCodeProjectOpenRequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectOpenResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   \"Invalid JSON body\",\n\t\t})\n\t\treturn\n\t}\n\n\tnormalizedPath, err := normalizeExistingDirectoryPath(req.Path)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectOpenResponse{\n\t\t\tSuccess: false,\n\t\t\tError:   err.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\tide := strings.TrimSpace(strings.ToLower(req.IDE))\n\topenedPath, openErr := openProjectInIDE(normalizedPath, ide)\n\tif openErr != nil {\n\t\tstatusCode := http.StatusInternalServerError\n\t\tif isPlatformUnsupportedOpenError(openErr) {\n\t\t\tstatusCode = http.StatusNotImplemented\n\t\t}\n\t\tif errors.Is(openErr, os.ErrNotExist) || strings.Contains(strings.ToLower(openErr.Error()), \"not found\") {\n\t\t\tstatusCode = http.StatusBadRequest\n\t\t}\n\t\tif strings.Contains(strings.ToLower(openErr.Error()), \"unsupported ide\") {\n\t\t\tstatusCode = http.StatusBadRequest\n\t\t}\n\t\tw.WriteHeader(statusCode)\n\t\t_ = json.NewEncoder(w).Encode(openCodeProjectOpenResponse{\n\t\t\tSuccess: false,\n\t\t\tIDE:     ide,\n\t\t\tError:   openErr.Error(),\n\t\t})\n\t\treturn\n\t}\n\n\t_ = json.NewEncoder(w).Encode(openCodeProjectOpenResponse{\n\t\tSuccess:    true,\n\t\tIDE:        ide,\n\t\tOpenedPath: openedPath,\n\t})\n}\n\nfunc readProjectPathFromRequest(r *http.Request) (string, error) {\n\tif r.Method == http.MethodGet {\n\t\tpath := strings.TrimSpace(r.URL.Query().Get(\"path\"))\n\t\tif path == \"\" {\n\t\t\treturn \"\", errors.New(\"path query parameter required\")\n\t\t}\n\t\treturn path, nil\n\t}\n\n\tvar req openCodeProjectIDERequest\n\tif err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n\t\treturn \"\", errors.New(\"Invalid JSON body\")\n\t}\n\n\tpath := strings.TrimSpace(req.Path)\n\tif path == \"\" {\n\t\treturn \"\", errors.New(\"path is required\")\n\t}\n\treturn path, nil\n}\n\nfunc normalizeExistingDirectoryPath(path string) (string, error) {\n\ttrimmed := strings.TrimSpace(path)\n\tif trimmed == \"\" {\n\t\treturn \"\", errors.New(\"path is required\")\n\t}\n\n\tcleaned := filepath.Clean(trimmed)\n\tabsolute, err := filepath.Abs(cleaned)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to resolve path: %w\", err)\n\t}\n\n\tinfo, err := os.Stat(absolute)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn \"\", errors.New(\"project path not found\")\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"failed to access project path: %w\", err)\n\t}\n\tif !info.IsDir() {\n\t\treturn \"\", errors.New(\"project path must be a directory\")\n\t}\n\treturn absolute, nil\n}\n\nfunc inspectProjectIDEActions(projectPath string) []openCodeProjectIDEAction {\n\treturn []openCodeProjectIDEAction{\n\t\tinspectFinderAction(projectPath),\n\t\tinspectXcodeAction(projectPath),\n\t\tinspectAndroidStudioAction(projectPath),\n\t\tinspectVSCodeAction(projectPath),\n\t}\n}\n\nfunc inspectFinderAction(projectPath string) openCodeProjectIDEAction {\n\tconst label = \"Open Folder\"\n\tif !projectDirectoryExists(projectPath) {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEFinder,\n\t\t\tLabel:     label,\n\t\t\tAvailable: false,\n\t\t\tPath:      projectPath,\n\t\t\tReason:    \"Project folder not found.\",\n\t\t}\n\t}\n\n\tif _, ok := folderOpenLaunchCommand(); !ok {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEFinder,\n\t\t\tLabel:     label,\n\t\t\tAvailable: false,\n\t\t\tPath:      projectPath,\n\t\t\tReason:    folderOpenUnavailableReason(),\n\t\t}\n\t}\n\n\treturn openCodeProjectIDEAction{\n\t\tIDE:       openCodeIDEFinder,\n\t\tLabel:     label,\n\t\tAvailable: true,\n\t\tPath:      projectPath,\n\t\tReason:    folderOpenReason(),\n\t}\n}\n\nfunc inspectXcodeAction(projectPath string) openCodeProjectIDEAction {\n\tconst label = \"Open in Xcode\"\n\tapplePath := destinationPathForProject(projectPath, []string{\n\t\t\"apple\", \"ios\", \"ipados\", \"macos\", \"visionos\", \"watchos\", \"tvos\",\n\t}, \"apple\")\n\n\tif runtime.GOOS != \"darwin\" {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEXcode,\n\t\t\tLabel:     label,\n\t\t\tAvailable: false,\n\t\t\tPath:      applePath,\n\t\t\tReason:    \"Xcode is only available on macOS.\",\n\t\t}\n\t}\n\n\tif !projectDirectoryExists(applePath) {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEXcode,\n\t\t\tLabel:     label,\n\t\t\tAvailable: false,\n\t\t\tPath:      applePath,\n\t\t\tReason:    \"No Apple project output folder found.\",\n\t\t}\n\t}\n\n\tif workspaceOrProject := preferredXcodePath(applePath); workspaceOrProject != \"\" {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEXcode,\n\t\t\tLabel:     label,\n\t\t\tAvailable: true,\n\t\t\tPath:      workspaceOrProject,\n\t\t\tReason:    \"Detected Xcode workspace/project.\",\n\t\t}\n\t}\n\n\treturn openCodeProjectIDEAction{\n\t\tIDE:       openCodeIDEXcode,\n\t\tLabel:     label,\n\t\tAvailable: true,\n\t\tPath:      applePath,\n\t\tReason:    \"No .xcworkspace/.xcodeproj found yet; folder will open.\",\n\t}\n}\n\nfunc inspectAndroidStudioAction(projectPath string) openCodeProjectIDEAction {\n\tconst label = \"Open in Android Studio\"\n\tandroidPath := destinationPathForProject(projectPath, []string{\n\t\t\"android\", \"wearos\", \"androidtv\", \"androidauto\",\n\t}, \"android\")\n\n\tif !projectDirectoryExists(androidPath) {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEAndroidStudio,\n\t\t\tLabel:     label,\n\t\t\tAvailable: false,\n\t\t\tPath:      androidPath,\n\t\t\tReason:    \"No Android project output folder found.\",\n\t\t}\n\t}\n\n\tif _, ok := androidStudioLaunchCommand(); ok {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEAndroidStudio,\n\t\t\tLabel:     label,\n\t\t\tAvailable: true,\n\t\t\tPath:      androidPath,\n\t\t\tReason:    \"Detected Android Studio launcher for this platform.\",\n\t\t}\n\t}\n\n\tif _, ok := folderOpenLaunchCommand(); ok {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEAndroidStudio,\n\t\t\tLabel:     label,\n\t\t\tAvailable: true,\n\t\t\tPath:      androidPath,\n\t\t\tReason:    \"Android Studio launcher not found; folder will open instead.\",\n\t\t}\n\t}\n\n\treturn openCodeProjectIDEAction{\n\t\tIDE:       openCodeIDEAndroidStudio,\n\t\tLabel:     label,\n\t\tAvailable: false,\n\t\tPath:      androidPath,\n\t\tReason:    \"No Android Studio launcher or folder opener found for this platform.\",\n\t}\n}\n\nfunc inspectVSCodeAction(projectPath string) openCodeProjectIDEAction {\n\tconst label = \"Open in VS Code\"\n\twebPath := destinationPathForProject(projectPath, []string{\"web\"}, \"web\")\n\n\tif !projectDirectoryExists(webPath) {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEVSCode,\n\t\t\tLabel:     label,\n\t\t\tAvailable: false,\n\t\t\tPath:      webPath,\n\t\t\tReason:    \"No Web project output folder found.\",\n\t\t}\n\t}\n\n\tif _, ok := vsCodeLaunchCommand(); ok {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEVSCode,\n\t\t\tLabel:     label,\n\t\t\tAvailable: true,\n\t\t\tPath:      webPath,\n\t\t\tReason:    \"Detected VS Code launcher for this platform.\",\n\t\t}\n\t}\n\n\tif _, ok := folderOpenLaunchCommand(); ok {\n\t\treturn openCodeProjectIDEAction{\n\t\t\tIDE:       openCodeIDEVSCode,\n\t\t\tLabel:     label,\n\t\t\tAvailable: true,\n\t\t\tPath:      webPath,\n\t\t\tReason:    \"VS Code launcher not found; folder will open instead.\",\n\t\t}\n\t}\n\n\treturn openCodeProjectIDEAction{\n\t\tIDE:       openCodeIDEVSCode,\n\t\tLabel:     label,\n\t\tAvailable: false,\n\t\tPath:      webPath,\n\t\tReason:    \"No VS Code launcher or folder opener found for this platform.\",\n\t}\n}\n\nfunc destinationPathForProject(projectPath string, outputDirs []string, fallback string) string {\n\tfor _, dirName := range outputDirs {\n\t\tcandidate := filepath.Join(projectPath, dirName)\n\t\tif projectDirectoryExists(candidate) {\n\t\t\treturn candidate\n\t\t}\n\t}\n\treturn filepath.Join(projectPath, fallback)\n}\n\nfunc preferredXcodePath(basePath string) string {\n\tentries, err := os.ReadDir(basePath)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\tfor _, entry := range entries {\n\t\tname := entry.Name()\n\t\tif strings.HasSuffix(name, \".xcworkspace\") {\n\t\t\treturn filepath.Join(basePath, name)\n\t\t}\n\t}\n\n\tfor _, entry := range entries {\n\t\tname := entry.Name()\n\t\tif strings.HasSuffix(name, \".xcodeproj\") {\n\t\t\treturn filepath.Join(basePath, name)\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\nfunc projectDirectoryExists(path string) bool {\n\tinfo, err := os.Stat(path)\n\treturn err == nil && info.IsDir()\n}\n\nfunc applicationExists(path string) bool {\n\tinfo, err := os.Stat(path)\n\treturn err == nil && info.IsDir()\n}\n\nfunc openProjectInIDE(projectPath, ide string) (string, error) {\n\tswitch ide {\n\tcase openCodeIDEFinder:\n\t\treturn openProjectFolder(projectPath)\n\tcase openCodeIDEXcode:\n\t\treturn openInXcode(projectPath)\n\tcase openCodeIDEAndroidStudio:\n\t\treturn openInAndroidStudio(projectPath)\n\tcase openCodeIDEVSCode:\n\t\treturn openInVSCode(projectPath)\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unsupported IDE: %s\", ide)\n\t}\n}\n\nfunc openProjectFolder(projectPath string) (string, error) {\n\tif !projectDirectoryExists(projectPath) {\n\t\treturn \"\", errors.New(\"Project folder not found\")\n\t}\n\n\tif err := openFolderWithSystemDefault(projectPath); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn projectPath, nil\n}\n\nfunc openInXcode(projectPath string) (string, error) {\n\tif runtime.GOOS != \"darwin\" {\n\t\treturn \"\", errors.New(\"Xcode opening is only available on macOS.\")\n\t}\n\n\tapplePath := destinationPathForProject(projectPath, []string{\n\t\t\"apple\", \"ios\", \"ipados\", \"macos\", \"visionos\", \"watchos\", \"tvos\",\n\t}, \"apple\")\n\n\tif !projectDirectoryExists(applePath) {\n\t\treturn \"\", errors.New(\"Apple output folder not found\")\n\t}\n\n\topenPath := preferredXcodePath(applePath)\n\tif openPath == \"\" {\n\t\topenPath = applePath\n\t}\n\n\tif err := runMacOpenCommand(openPath); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn openPath, nil\n}\n\nfunc openInAndroidStudio(projectPath string) (string, error) {\n\tandroidPath := destinationPathForProject(projectPath, []string{\n\t\t\"android\", \"wearos\", \"androidtv\", \"androidauto\",\n\t}, \"android\")\n\n\tif !projectDirectoryExists(androidPath) {\n\t\treturn \"\", errors.New(\"Android output folder not found\")\n\t}\n\n\tif command, ok := androidStudioLaunchCommand(); ok {\n\t\tif err := runLaunchCommand(command, androidPath); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn androidPath, nil\n\t}\n\n\tif err := openFolderWithSystemDefault(androidPath); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn androidPath, nil\n}\n\nfunc openInVSCode(projectPath string) (string, error) {\n\twebPath := destinationPathForProject(projectPath, []string{\"web\"}, \"web\")\n\n\tif !projectDirectoryExists(webPath) {\n\t\treturn \"\", errors.New(\"Web output folder not found\")\n\t}\n\n\tif command, ok := vsCodeLaunchCommand(); ok {\n\t\tif err := runLaunchCommand(command, webPath); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn webPath, nil\n\t}\n\n\tif err := openFolderWithSystemDefault(webPath); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn webPath, nil\n}\n\nfunc runMacOpenWithApp(appPath, targetPath string) error {\n\topenExecutable := resolveLaunchExecutable(\"open\")\n\tif openExecutable == \"\" {\n\t\treturn errors.New(\"open command not found\")\n\t}\n\treturn runLaunchCommand(openCodeLaunchCommand{\n\t\tExecutable: openExecutable,\n\t\tArgs:       []string{\"-a\", appPath},\n\t}, targetPath)\n}\n\nfunc runMacOpenCommand(targetPath string) error {\n\topenExecutable := resolveLaunchExecutable(\"open\")\n\tif openExecutable == \"\" {\n\t\treturn errors.New(\"open command not found\")\n\t}\n\treturn runLaunchCommand(openCodeLaunchCommand{\n\t\tExecutable: openExecutable,\n\t}, targetPath)\n}\n\nfunc folderOpenLaunchCommand() (openCodeLaunchCommand, bool) {\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tif openExecutable := resolveLaunchExecutable(\"open\"); openExecutable != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: openExecutable}, true\n\t\t}\n\tcase \"windows\":\n\t\tif explorerExecutable := resolveLaunchExecutable(\"explorer.exe\"); explorerExecutable != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: explorerExecutable}, true\n\t\t}\n\tcase \"linux\":\n\t\tif xdgOpen := resolveLaunchExecutable(\"xdg-open\"); xdgOpen != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: xdgOpen}, true\n\t\t}\n\t\tif gio := resolveLaunchExecutable(\"gio\"); gio != \"\" {\n\t\t\treturn openCodeLaunchCommand{\n\t\t\t\tExecutable: gio,\n\t\t\t\tArgs:       []string{\"open\"},\n\t\t\t}, true\n\t\t}\n\t}\n\n\treturn openCodeLaunchCommand{}, false\n}\n\nfunc androidStudioLaunchCommand() (openCodeLaunchCommand, bool) {\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tif applicationExists(\"/Applications/Android Studio.app\") {\n\t\t\tif openExecutable := resolveLaunchExecutable(\"open\"); openExecutable != \"\" {\n\t\t\t\treturn openCodeLaunchCommand{\n\t\t\t\t\tExecutable: openExecutable,\n\t\t\t\t\tArgs:       []string{\"-a\", \"/Applications/Android Studio.app\"},\n\t\t\t\t}, true\n\t\t\t}\n\t\t}\n\tcase \"windows\":\n\t\tcandidates := []string{\"studio64.exe\", \"studio.exe\", \"studio64\", \"studio\"}\n\t\tif programFiles := os.Getenv(\"ProgramFiles\"); programFiles != \"\" {\n\t\t\tcandidates = append(candidates,\n\t\t\t\tfilepath.Join(programFiles, \"Android\", \"Android Studio\", \"bin\", \"studio64.exe\"),\n\t\t\t\tfilepath.Join(programFiles, \"Android\", \"Android Studio\", \"bin\", \"studio.exe\"),\n\t\t\t)\n\t\t}\n\t\tif localAppData := os.Getenv(\"LocalAppData\"); localAppData != \"\" {\n\t\t\tcandidates = append(candidates,\n\t\t\t\tfilepath.Join(localAppData, \"Programs\", \"Android Studio\", \"bin\", \"studio64.exe\"),\n\t\t\t\tfilepath.Join(localAppData, \"Programs\", \"Android Studio\", \"bin\", \"studio.exe\"),\n\t\t\t)\n\t\t}\n\t\tif executable := firstResolvedExecutable(candidates); executable != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: executable}, true\n\t\t}\n\tcase \"linux\":\n\t\tif executable := firstResolvedExecutable([]string{\n\t\t\t\"android-studio\",\n\t\t\t\"studio.sh\",\n\t\t\t\"studio\",\n\t\t\t\"/opt/android-studio/bin/studio.sh\",\n\t\t\t\"/usr/local/android-studio/bin/studio.sh\",\n\t\t\t\"/snap/bin/android-studio\",\n\t\t}); executable != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: executable}, true\n\t\t}\n\t}\n\n\treturn openCodeLaunchCommand{}, false\n}\n\nfunc vsCodeLaunchCommand() (openCodeLaunchCommand, bool) {\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tif applicationExists(\"/Applications/Visual Studio Code.app\") {\n\t\t\tif openExecutable := resolveLaunchExecutable(\"open\"); openExecutable != \"\" {\n\t\t\t\treturn openCodeLaunchCommand{\n\t\t\t\t\tExecutable: openExecutable,\n\t\t\t\t\tArgs:       []string{\"-a\", \"/Applications/Visual Studio Code.app\"},\n\t\t\t\t}, true\n\t\t\t}\n\t\t}\n\tcase \"windows\":\n\t\tcandidates := []string{\"code.cmd\", \"code.exe\", \"code\"}\n\t\tif localAppData := os.Getenv(\"LocalAppData\"); localAppData != \"\" {\n\t\t\tcandidates = append(candidates,\n\t\t\t\tfilepath.Join(localAppData, \"Programs\", \"Microsoft VS Code\", \"Code.exe\"),\n\t\t\t)\n\t\t}\n\t\tif programFiles := os.Getenv(\"ProgramFiles\"); programFiles != \"\" {\n\t\t\tcandidates = append(candidates,\n\t\t\t\tfilepath.Join(programFiles, \"Microsoft VS Code\", \"Code.exe\"),\n\t\t\t)\n\t\t}\n\t\tif programFilesX86 := os.Getenv(\"ProgramFiles(x86)\"); programFilesX86 != \"\" {\n\t\t\tcandidates = append(candidates,\n\t\t\t\tfilepath.Join(programFilesX86, \"Microsoft VS Code\", \"Code.exe\"),\n\t\t\t)\n\t\t}\n\t\tif executable := firstResolvedExecutable(candidates); executable != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: executable}, true\n\t\t}\n\tcase \"linux\":\n\t\tif executable := firstResolvedExecutable([]string{\n\t\t\t\"code\",\n\t\t\t\"code-insiders\",\n\t\t\t\"codium\",\n\t\t\t\"code-oss\",\n\t\t}); executable != \"\" {\n\t\t\treturn openCodeLaunchCommand{Executable: executable}, true\n\t\t}\n\t}\n\n\treturn openCodeLaunchCommand{}, false\n}\n\nfunc folderOpenReason() string {\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\treturn \"Open project folder in Finder.\"\n\tcase \"windows\":\n\t\treturn \"Open project folder in File Explorer.\"\n\tcase \"linux\":\n\t\treturn \"Open project folder in your file manager.\"\n\tdefault:\n\t\treturn \"Open project folder.\"\n\t}\n}\n\nfunc folderOpenUnavailableReason() string {\n\tswitch runtime.GOOS {\n\tcase \"darwin\", \"windows\", \"linux\":\n\t\treturn \"No supported folder opener found for this platform.\"\n\tdefault:\n\t\treturn \"Project folder opening is not available on this platform.\"\n\t}\n}\n\nfunc openFolderWithSystemDefault(targetPath string) error {\n\tcommand, ok := folderOpenLaunchCommand()\n\tif !ok {\n\t\treturn errors.New(\"Project opening is not available on this platform.\")\n\t}\n\n\treturn runLaunchCommand(command, targetPath)\n}\n\nfunc runLaunchCommand(command openCodeLaunchCommand, targetPath string) error {\n\targs := append([]string{}, command.Args...)\n\targs = append(args, targetPath)\n\n\tcmd := exec.Command(command.Executable, args...)\n\toutput, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\tmessage := strings.TrimSpace(string(output))\n\t\tif message != \"\" {\n\t\t\treturn fmt.Errorf(\"failed to open path: %s\", message)\n\t\t}\n\t\treturn fmt.Errorf(\"failed to open path: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc resolveLaunchExecutable(candidate string) string {\n\tif strings.TrimSpace(candidate) == \"\" {\n\t\treturn \"\"\n\t}\n\n\tif filepath.IsAbs(candidate) || strings.ContainsAny(candidate, `/\\`) {\n\t\tinfo, err := os.Stat(candidate)\n\t\tif err == nil && !info.IsDir() {\n\t\t\treturn candidate\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tresolved, err := exec.LookPath(candidate)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn resolved\n}\n\nfunc firstResolvedExecutable(candidates []string) string {\n\tfor _, candidate := range candidates {\n\t\tif executable := resolveLaunchExecutable(candidate); executable != \"\" {\n\t\t\treturn executable\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc isPlatformUnsupportedOpenError(err error) bool {\n\tmessage := strings.ToLower(strings.TrimSpace(err.Error()))\n\treturn strings.Contains(message, \"only available on\") || strings.Contains(message, \"not available on this platform\")\n}\n"
  },
  {
    "path": "backend/opencode_zen.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst openCodeZenChatCompletionsURL = \"https://opencode.ai/zen/v1/chat/completions\"\n\nconst (\n\topenCodeZenChatMaxTokens       = 4096\n\topenCodeZenDrawToCodeMaxTokens = 16384\n\topenCodeZenDefaultTemperature  = 0.6\n\topenCodeZenHeaderTimeout       = 90 * time.Second\n)\n\nvar openCodeZenHTTPClient = newOpenCodeZenHTTPClient()\n\ntype openCodeZenAPIError struct {\n\tStatus  int\n\tModel   string\n\tMessage string\n}\n\nfunc (e *openCodeZenAPIError) Error() string {\n\tif strings.TrimSpace(e.Message) != \"\" {\n\t\treturn e.Message\n\t}\n\treturn fmt.Sprintf(\"OpenCode Zen API error (%d) for %s\", e.Status, e.Model)\n}\n\nfunc newOpenCodeZenHTTPClient() *http.Client {\n\tif base, ok := http.DefaultTransport.(*http.Transport); ok {\n\t\ttransport := base.Clone()\n\t\ttransport.ResponseHeaderTimeout = openCodeZenHeaderTimeout\n\t\treturn &http.Client{Transport: transport}\n\t}\n\treturn &http.Client{Timeout: openCodeZenHeaderTimeout}\n}\n\nfunc openCodeZenModelCandidates(modelID string, allowCrossModelFallback bool) []string {\n\tnormalized := normalizeOpenCodeZenModelID(modelID)\n\tcandidates := []string{normalized}\n\n\tif allowCrossModelFallback {\n\t\tswitch normalized {\n\t\tcase \"glm-5-free\", \"minimax-m2.5-free\", \"big-pickle\":\n\t\t\t// Free-tier fallback that is currently the most stable in practice.\n\t\t\tcandidates = append(candidates, \"kimi-k2.5-free\")\n\t\t}\n\t}\n\n\tseen := make(map[string]struct{})\n\tout := make([]string, 0, len(candidates))\n\tfor _, c := range candidates {\n\t\tc = strings.TrimSpace(c)\n\t\tif c == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := seen[c]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[c] = struct{}{}\n\t\tout = append(out, c)\n\t}\n\treturn out\n}\n\nfunc openCodeZenShouldTryFallbackModel(err error) bool {\n\tvar apiErr *openCodeZenAPIError\n\tif errors.As(err, &apiErr) {\n\t\tswitch apiErr.Status {\n\t\tcase http.StatusTooManyRequests, http.StatusRequestTimeout, http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout:\n\t\t\treturn true\n\t\t}\n\t\tif strings.Contains(strings.ToLower(apiErr.Message), \"rate limit\") {\n\t\t\treturn true\n\t\t}\n\t\tif strings.Contains(strings.ToLower(apiErr.Message), \"timeout\") {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\tlower := strings.ToLower(err.Error())\n\treturn strings.Contains(lower, \"rate limit\") ||\n\t\tstrings.Contains(lower, \"timeout\") ||\n\t\tstrings.Contains(lower, \"deadline exceeded\") ||\n\t\tstrings.Contains(lower, \"temporarily unavailable\")\n}\n\nfunc openCodeZenExtractProviderErrorMessage(bodyText string) string {\n\ttrimmed := strings.TrimSpace(bodyText)\n\tif trimmed == \"\" {\n\t\treturn \"\"\n\t}\n\n\textractFromObject := func(obj map[string]interface{}) string {\n\t\tif errVal, ok := obj[\"error\"]; ok {\n\t\t\tswitch e := errVal.(type) {\n\t\t\tcase string:\n\t\t\t\tif strings.TrimSpace(e) != \"\" {\n\t\t\t\t\treturn strings.TrimSpace(e)\n\t\t\t\t}\n\t\t\tcase map[string]interface{}:\n\t\t\t\tif msg, ok := e[\"message\"].(string); ok && strings.TrimSpace(msg) != \"\" {\n\t\t\t\t\treturn strings.TrimSpace(msg)\n\t\t\t\t}\n\t\t\t\tif msg, ok := e[\"type\"].(string); ok && strings.TrimSpace(msg) != \"\" {\n\t\t\t\t\treturn strings.TrimSpace(msg)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif msg, ok := obj[\"message\"].(string); ok && strings.TrimSpace(msg) != \"\" {\n\t\t\treturn strings.TrimSpace(msg)\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tlines := strings.Split(trimmed, \"\\n\")\n\tfor _, rawLine := range lines {\n\t\tline := strings.TrimSpace(rawLine)\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(strings.ToLower(line), \"data:\") {\n\t\t\tline = strings.TrimSpace(line[5:])\n\t\t}\n\t\tvar obj map[string]interface{}\n\t\tif err := json.Unmarshal([]byte(line), &obj); err == nil {\n\t\t\tif msg := extractFromObject(obj); msg != \"\" {\n\t\t\t\treturn msg\n\t\t\t}\n\t\t}\n\t}\n\n\tvar obj map[string]interface{}\n\tif err := json.Unmarshal([]byte(trimmed), &obj); err == nil {\n\t\tif msg := extractFromObject(obj); msg != \"\" {\n\t\t\treturn msg\n\t\t}\n\t}\n\n\tif idx := strings.Index(strings.ToLower(trimmed), \"\\ndata:\"); idx >= 0 {\n\t\ttrimmed = strings.TrimSpace(trimmed[:idx])\n\t}\n\tif len(trimmed) > 400 {\n\t\treturn trimmed[:400] + \"...\"\n\t}\n\treturn trimmed\n}\n\nfunc openCodeZenStatusError(status int, model, bodyText string) error {\n\tproviderMessage := openCodeZenExtractProviderErrorMessage(bodyText)\n\tif providerMessage == \"\" {\n\t\tproviderMessage = fmt.Sprintf(\"HTTP %d\", status)\n\t}\n\n\tlower := strings.ToLower(providerMessage)\n\tif status == http.StatusTooManyRequests || strings.Contains(lower, \"rate limit\") {\n\t\treturn &openCodeZenAPIError{\n\t\t\tStatus:  http.StatusTooManyRequests,\n\t\t\tModel:   model,\n\t\t\tMessage: fmt.Sprintf(\"OpenCode Zen rate limit for %s: %s\", model, providerMessage),\n\t\t}\n\t}\n\n\tif status == http.StatusUnauthorized || status == http.StatusForbidden {\n\t\treturn &openCodeZenAPIError{\n\t\t\tStatus:  status,\n\t\t\tModel:   model,\n\t\t\tMessage: fmt.Sprintf(\"OpenCode Zen authentication failed for %s: %s\", model, providerMessage),\n\t\t}\n\t}\n\n\tif status == http.StatusRequestTimeout || status == http.StatusBadGateway || status == http.StatusServiceUnavailable || status == http.StatusGatewayTimeout || strings.Contains(lower, \"timeout\") {\n\t\treturn &openCodeZenAPIError{\n\t\t\tStatus:  status,\n\t\t\tModel:   model,\n\t\t\tMessage: fmt.Sprintf(\"OpenCode Zen temporary timeout for %s: %s\", model, providerMessage),\n\t\t}\n\t}\n\n\treturn &openCodeZenAPIError{\n\t\tStatus:  status,\n\t\tModel:   model,\n\t\tMessage: fmt.Sprintf(\"OpenCode Zen API error (%d) for %s: %s\", status, model, providerMessage),\n\t}\n}\n\nfunc setOpenCodeZenRequestHeaders(req *http.Request, apiKey string, accept string) {\n\treq.Header.Set(\"Accept\", accept)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n}\n\nfunc openCodeZenAPIModelID(modelID string) string {\n\t// Zen OpenAI-compatible endpoints expect bare model ids (for example \"kimi-k2.5\"),\n\t// not OpenCode config ids like \"opencode/kimi-k2.5\".\n\treturn normalizeOpenCodeZenModelID(modelID)\n}\n\nfunc callOpenCodeZenDrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey, openCodeZenModel string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenCode Zen API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tmessages := buildOpenCodeZenDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, openCodeZenModel, apiKey)\n\taiResp, inputTokens, outputTokens, err := callOpenCodeZenChatCompletions(messages, apiKey, openCodeZenDrawToCodeMaxTokens, openCodeZenDefaultTemperature, openCodeZenModel, true, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\nfunc callOpenCodeZenDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey, openCodeZenModel string) error {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn fmt.Errorf(\"no OpenCode Zen API key provided\")\n\t}\n\n\tmessages := buildOpenCodeZenDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, openCodeZenModel, apiKey)\n\treturn callOpenCodeZenChatCompletionsStreaming(w, messages, apiKey, openCodeZenDrawToCodeMaxTokens, openCodeZenDefaultTemperature, openCodeZenModel, true, true)\n}\n\nfunc callOpenCodeZenApiGo(prevMsgs []ChatMessage, newMsg, apiKey, openCodeZenModel, attachmentBase64, attachmentMime string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenCode Zen API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tmessages := buildOpenCodeZenChatMessages(prevMsgs, newMsg, openCodeZenModel, attachmentBase64, attachmentMime)\n\taiResp, inputTokens, outputTokens, err := callOpenCodeZenChatCompletions(messages, apiKey, openCodeZenChatMaxTokens, openCodeZenDefaultTemperature, openCodeZenModel, false, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\nfunc callOpenCodeZenChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, openCodeZenModel, attachmentBase64, attachmentMime string) error {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn fmt.Errorf(\"no OpenCode Zen API key provided\")\n\t}\n\tmessages := buildOpenCodeZenChatMessages(prevMsgs, newMsg, openCodeZenModel, attachmentBase64, attachmentMime)\n\treturn callOpenCodeZenChatCompletionsStreaming(w, messages, apiKey, openCodeZenChatMaxTokens, openCodeZenDefaultTemperature, openCodeZenModel, false, false)\n}\n\nfunc buildOpenCodeZenChatMessages(prevMsgs []ChatMessage, newMsg, openCodeZenModel, attachmentBase64, attachmentMime string) []map[string]interface{} {\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemMsg,\n\t\t},\n\t}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\tuserContent := interface{}(newMsg)\n\ttrimmedAttachment := strings.TrimSpace(attachmentBase64)\n\ttrimmedMime := strings.TrimSpace(attachmentMime)\n\tif trimmedAttachment != \"\" && trimmedMime != \"\" {\n\t\tresolvedModel := normalizeOpenCodeZenModelID(openCodeZenModel)\n\t\tif openCodeZenModelSupportsImageInput(resolvedModel) && strings.HasPrefix(strings.ToLower(trimmedMime), \"image/\") {\n\t\t\tuserContent = []interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": newMsg,\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\"url\": openCodeZenAttachmentDataURI(trimmedAttachment, trimmedMime),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tfmt.Printf(\"[OpenCode Zen DEBUG] inline image attachment enabled model=%s mime=%s\\n\", resolvedModel, trimmedMime)\n\t\t} else {\n\t\t\tfmt.Printf(\"[OpenCode Zen DEBUG] attachment ignored for model=%s mime=%q\\n\", resolvedModel, trimmedMime)\n\t\t}\n\t}\n\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": userContent,\n\t})\n\treturn messages\n}\n\nfunc callOpenCodeZenChatCompletions(messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, openCodeZenModel string, enforceNoEmbeddedImageData bool, allowCrossModelFallback bool) (string, int, int, error) {\n\tcandidates := openCodeZenModelCandidates(openCodeZenModel, allowCrossModelFallback)\n\tvar lastErr error\n\tfor idx, candidate := range candidates {\n\t\tcontent, inputTokens, outputTokens, err := callOpenCodeZenChatCompletionsSingle(messages, apiKey, maxTokens, temperature, candidate, enforceNoEmbeddedImageData)\n\t\tif err == nil {\n\t\t\tif idx > 0 {\n\t\t\t\tfmt.Printf(\"[OpenCode Zen] fallback model used original=%s fallback=%s\\n\", normalizeOpenCodeZenModelID(openCodeZenModel), candidate)\n\t\t\t}\n\t\t\treturn content, inputTokens, outputTokens, nil\n\t\t}\n\t\tlastErr = err\n\t\tif idx < len(candidates)-1 && openCodeZenShouldTryFallbackModel(err) {\n\t\t\tfmt.Printf(\"[OpenCode Zen WARN] model=%s failed (%v); trying fallback model=%s\\n\", candidate, err, candidates[idx+1])\n\t\t\tcontinue\n\t\t}\n\t\treturn \"\", 0, 0, err\n\t}\n\tif lastErr == nil {\n\t\tlastErr = fmt.Errorf(\"OpenCode Zen request failed\")\n\t}\n\treturn \"\", 0, 0, lastErr\n}\n\nfunc callOpenCodeZenChatCompletionsSingle(messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, zenModelToUse string, enforceNoEmbeddedImageData bool) (string, int, int, error) {\n\tresolvedModel := normalizeOpenCodeZenModelID(zenModelToUse)\n\tapiModel := openCodeZenAPIModelID(resolvedModel)\n\thasImage := openCodeZenMessagesContainImage(messages)\n\tlogOpenCodeZenRequestSummary(apiModel, false, hasImage, maxTokens, messages)\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":       apiModel,\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"temperature\": temperature,\n\t\t\"messages\":    messages,\n\t}\n\tif prettyBody, err := json.MarshalIndent(reqBody, \"\", \"  \"); err == nil {\n\t\tfmt.Printf(\"[OpenCode Zen DEBUG] request body stream=false >>>\\n%s\\n<<< END OpenCode Zen request body\\n\", string(prettyBody))\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", openCodeZenChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tsetOpenCodeZenRequestHeaders(req, apiKey, \"application/json\")\n\n\tresp, err := openCodeZenHTTPClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[OpenCode Zen ERROR] model=%s stream=false status=%d hasImage=%v body=%s\\n\", apiModel, resp.StatusCode, hasImage, truncateForLog(bodyText))\n\t\treturn \"\", 0, 0, openCodeZenStatusError(resp.StatusCode, apiModel, bodyText)\n\t}\n\n\tvar completion struct {\n\t\tError   interface{} `json:\"error\"`\n\t\tChoices []struct {\n\t\t\tMessage struct {\n\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t} `json:\"message\"`\n\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t} `json:\"choices\"`\n\t\tUsage struct {\n\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t} `json:\"usage\"`\n\t}\n\n\tif err := json.NewDecoder(resp.Body).Decode(&completion); err != nil {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"failed to parse OpenCode Zen response: %w\", err)\n\t}\n\tif len(completion.Choices) == 0 {\n\t\tif completion.Error != nil {\n\t\t\traw, _ := json.Marshal(map[string]interface{}{\"error\": completion.Error})\n\t\t\treturn \"\", 0, 0, openCodeZenStatusError(http.StatusBadGateway, apiModel, string(raw))\n\t\t}\n\t\treturn \"\", 0, 0, fmt.Errorf(\"no choices in OpenCode Zen response\")\n\t}\n\n\tcontent := fireworkContentToText(completion.Choices[0].Message.Content)\n\treasoning := fireworkContentToText(completion.Choices[0].Message.ReasoningContent)\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = fireworkContentToText(completion.Choices[0].ReasoningContent)\n\t}\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = openRouterReasoningToText(completion.Choices[0].Message.Reasoning)\n\t}\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = openRouterReasoningToText(completion.Choices[0].Reasoning)\n\t}\n\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoning) != \"\" {\n\t\tcontent = \"<think>\" + strings.TrimSpace(reasoning) + \"</think>\" + content\n\t}\n\tif enforceNoEmbeddedImageData {\n\t\tcontent = normalizeFireworksDrawToCodeOutput(content)\n\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(content); blocked {\n\t\t\treturn \"\", 0, 0, embeddedImagePayloadError(reason)\n\t\t}\n\t}\n\n\tfinishReason := normalizeFinishReason(completion.Choices[0].FinishReason)\n\tif finishReason != \"\" {\n\t\tfmt.Printf(\"[OpenCode Zen] completion finish_reason=%s model=%s stream=false\\n\", finishReason, apiModel)\n\t}\n\tif strings.EqualFold(finishReason, \"length\") {\n\t\tfmt.Printf(\"[OpenCode Zen WARN] completion reached max_tokens=%d model=%s stream=false\\n\", maxTokens, apiModel)\n\t}\n\n\tinputTokens := completion.Usage.PromptTokens\n\toutputTokens := completion.Usage.CompletionTokens\n\tif inputTokens == 0 && outputTokens == 0 {\n\t\tinputTokens = estimateTokenCountForMessages(messages)\n\t\toutputTokens = estimateTokenCount(content)\n\t}\n\n\treturn content, inputTokens, outputTokens, nil\n}\n\nfunc callOpenCodeZenChatCompletionsStreaming(w http.ResponseWriter, messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, openCodeZenModel string, enforceNoEmbeddedImageData bool, allowCrossModelFallback bool) error {\n\tcandidates := openCodeZenModelCandidates(openCodeZenModel, allowCrossModelFallback)\n\tvar lastErr error\n\tfor idx, candidate := range candidates {\n\t\terr := callOpenCodeZenChatCompletionsStreamingSingle(w, messages, apiKey, maxTokens, temperature, candidate, enforceNoEmbeddedImageData)\n\t\tif err == nil {\n\t\t\tif idx > 0 {\n\t\t\t\tfmt.Printf(\"[OpenCode Zen] fallback model used original=%s fallback=%s\\n\", normalizeOpenCodeZenModelID(openCodeZenModel), candidate)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\tlastErr = err\n\t\tif idx < len(candidates)-1 && openCodeZenShouldTryFallbackModel(err) {\n\t\t\tfmt.Printf(\"[OpenCode Zen WARN] stream model=%s failed (%v); trying fallback model=%s\\n\", candidate, err, candidates[idx+1])\n\t\t\tcontinue\n\t\t}\n\t\treturn err\n\t}\n\tif lastErr == nil {\n\t\tlastErr = fmt.Errorf(\"OpenCode Zen stream request failed\")\n\t}\n\treturn lastErr\n}\n\nfunc callOpenCodeZenChatCompletionsStreamingSingle(w http.ResponseWriter, messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, zenModelToUse string, enforceNoEmbeddedImageData bool) error {\n\tresolvedModel := normalizeOpenCodeZenModelID(zenModelToUse)\n\tapiModel := openCodeZenAPIModelID(resolvedModel)\n\thasImage := openCodeZenMessagesContainImage(messages)\n\tlogOpenCodeZenRequestSummary(apiModel, true, hasImage, maxTokens, messages)\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":       apiModel,\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"temperature\": temperature,\n\t\t\"messages\":    messages,\n\t\t\"stream\":      true,\n\t}\n\tif prettyBody, err := json.MarshalIndent(reqBody, \"\", \"  \"); err == nil {\n\t\tfmt.Printf(\"[OpenCode Zen DEBUG] request body stream=true >>>\\n%s\\n<<< END OpenCode Zen request body\\n\", string(prettyBody))\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", openCodeZenChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\tsetOpenCodeZenRequestHeaders(req, apiKey, \"text/event-stream, application/json\")\n\n\tresp, err := openCodeZenHTTPClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[OpenCode Zen ERROR] model=%s stream=true status=%d hasImage=%v body=%s\\n\", apiModel, resp.StatusCode, hasImage, truncateForLog(bodyText))\n\t\treturn openCodeZenStatusError(resp.StatusCode, apiModel, bodyText)\n\t}\n\n\tcontentType := strings.ToLower(strings.TrimSpace(resp.Header.Get(\"Content-Type\")))\n\tfmt.Printf(\"[OpenCode Zen] stream response model=%s hasImage=%v contentType=%q\\n\", apiModel, hasImage, contentType)\n\tif !strings.Contains(contentType, \"text/event-stream\") {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[OpenCode Zen] stream fallback model=%s hasImage=%v contentType=%q body=%s\\n\", apiModel, hasImage, contentType, truncateForLog(bodyText))\n\t\tvar completion struct {\n\t\t\tError   interface{} `json:\"error\"`\n\t\t\tChoices []struct {\n\t\t\t\tMessage struct {\n\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t} `json:\"message\"`\n\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t\t} `json:\"choices\"`\n\t\t\tUsage struct {\n\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t} `json:\"usage\"`\n\t\t}\n\t\tif err := json.Unmarshal(body, &completion); err != nil {\n\t\t\treturn fmt.Errorf(\"OpenCode Zen stream fallback parse error: %w\", err)\n\t\t}\n\t\tif len(completion.Choices) == 0 {\n\t\t\tif completion.Error != nil {\n\t\t\t\traw, _ := json.Marshal(map[string]interface{}{\"error\": completion.Error})\n\t\t\t\treturn openCodeZenStatusError(http.StatusBadGateway, apiModel, string(raw))\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"OpenCode Zen stream fallback returned no choices\")\n\t\t}\n\n\t\tcontent := fireworkContentToText(completion.Choices[0].Message.Content)\n\t\treasoning := fireworkContentToText(completion.Choices[0].Message.ReasoningContent)\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = fireworkContentToText(completion.Choices[0].ReasoningContent)\n\t\t}\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = openRouterReasoningToText(completion.Choices[0].Message.Reasoning)\n\t\t}\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = openRouterReasoningToText(completion.Choices[0].Reasoning)\n\t\t}\n\t\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoning) != \"\" {\n\t\t\tcontent = \"<think>\" + strings.TrimSpace(reasoning) + \"</think>\" + content\n\t\t}\n\t\tif enforceNoEmbeddedImageData {\n\t\t\tcontent = normalizeFireworksDrawToCodeOutput(content)\n\t\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(content); blocked {\n\t\t\t\treturn embeddedImagePayloadError(reason)\n\t\t\t}\n\t\t}\n\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\treturn fmt.Errorf(\"OpenCode Zen stream fallback returned empty content\")\n\t\t}\n\t\tif err := emitFireworksStreamChunk(w, content); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfinishReason := \"\"\n\t\tif len(completion.Choices) > 0 {\n\t\t\tfinishReason = normalizeFinishReason(completion.Choices[0].FinishReason)\n\t\t}\n\t\tif strings.EqualFold(finishReason, \"length\") {\n\t\t\tfmt.Printf(\"[OpenCode Zen WARN] stream fallback reached max_tokens=%d model=%s\\n\", maxTokens, apiModel)\n\t\t}\n\n\t\tpromptTokens := completion.Usage.PromptTokens\n\t\tcompletionTokens := completion.Usage.CompletionTokens\n\t\tif promptTokens == 0 && completionTokens == 0 {\n\t\t\tpromptTokens = estimateTokenCountForMessages(messages)\n\t\t\tcompletionTokens = estimateTokenCount(content)\n\t\t}\n\t\treturn emitFireworksStreamDone(w, promptTokens, completionTokens)\n\t}\n\n\treader := bufio.NewReader(resp.Body)\n\tvar responseBuilder strings.Builder\n\tpromptTokens := 0\n\tcompletionTokens := 0\n\tdataEvents := 0\n\tparseErrors := 0\n\tfinishReasonLength := false\n\tseenFinishReason := \"\"\n\trollingTail := \"\"\n\tnormalizedEmitted := 0\n\tvar reasoningBuilder strings.Builder\n\tvar reasoningSent bool\n\tvar reasoningStartTimeSet bool\n\tvar reasoningStartTimestamp int64\n\tvar reasoningDurationSent bool\n\tlastThinkingStep := \"\"\n\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\ttrimmedLine := strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(trimmedLine, \"data:\") {\n\t\t\t\tdataEvents++\n\t\t\t\tdataStr := strings.TrimSpace(trimmedLine[5:])\n\t\t\t\tif dataStr == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t\tMessage struct {\n\t\t\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"message\"`\n\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif unmarshalErr := json.Unmarshal([]byte(dataStr), &chunk); unmarshalErr != nil {\n\t\t\t\t\tparseErrors++\n\t\t\t\t\tif parseErrors <= 3 {\n\t\t\t\t\t\tfmt.Printf(\"[OpenCode Zen WARN] stream chunk parse failed model=%s hasImage=%v err=%v raw=%s\\n\", apiModel, hasImage, unmarshalErr, truncateForLog(dataStr))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif chunk.Usage.PromptTokens > 0 {\n\t\t\t\t\tpromptTokens = chunk.Usage.PromptTokens\n\t\t\t\t\tcompletionTokens = chunk.Usage.CompletionTokens\n\t\t\t\t}\n\n\t\t\t\tif len(chunk.Choices) == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\treasoningChunk := fireworkContentToText(chunk.Choices[0].Delta.ReasoningContent)\n\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\treasoningChunk = fireworkContentToText(chunk.Choices[0].Message.ReasoningContent)\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\treasoningChunk = fireworkContentToText(chunk.Choices[0].ReasoningContent)\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\treasoningChunk = openRouterReasoningToText(chunk.Choices[0].Delta.Reasoning)\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\treasoningChunk = openRouterReasoningToText(chunk.Choices[0].Message.Reasoning)\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\treasoningChunk = openRouterReasoningToText(chunk.Choices[0].Reasoning)\n\t\t\t\t}\n\t\t\t\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoningChunk) != \"\" {\n\t\t\t\t\tif !reasoningStartTimeSet {\n\t\t\t\t\t\treasoningStartTimeSet = true\n\t\t\t\t\t\treasoningStartTimestamp = time.Now().UnixMilli()\n\t\t\t\t\t\tplaceholderStep := \"Thinking...\"\n\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": placeholderStep}\n\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastThinkingStep = placeholderStep\n\t\t\t\t\t}\n\t\t\t\t\treasoningBuilder.WriteString(reasoningChunk)\n\n\t\t\t\t\tstepTitle := extractFireworksThinkingStepTitle(reasoningBuilder.String())\n\t\t\t\t\tif isMeaningfulThinkingStepTitle(stepTitle) && stepTitle != lastThinkingStep {\n\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastThinkingStep = stepTitle\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treason := normalizeFinishReason(chunk.Choices[0].FinishReason)\n\t\t\t\tif reason != \"\" {\n\t\t\t\t\tseenFinishReason = reason\n\t\t\t\t\tif strings.EqualFold(reason, \"length\") {\n\t\t\t\t\t\tfinishReasonLength = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontent := fireworkContentToText(chunk.Choices[0].Delta.Content)\n\t\t\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\t\t\tcontent = fireworkContentToText(chunk.Choices[0].Message.Content)\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif !enforceNoEmbeddedImageData && !reasoningSent && reasoningBuilder.Len() > 0 {\n\t\t\t\t\tthinkingText := \"<think>\" + strings.TrimSpace(reasoningBuilder.String()) + \"</think>\"\n\t\t\t\t\tif err := emitFireworksStreamChunk(w, thinkingText); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\treasoningSent = true\n\t\t\t\t}\n\t\t\t\tif enforceNoEmbeddedImageData {\n\t\t\t\t\tcandidate := rollingTail + content\n\t\t\t\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(candidate); blocked {\n\t\t\t\t\t\treturn embeddedImagePayloadError(reason)\n\t\t\t\t\t}\n\t\t\t\t\tif len(candidate) > 4096 {\n\t\t\t\t\t\trollingTail = candidate[len(candidate)-4096:]\n\t\t\t\t\t} else {\n\t\t\t\t\t\trollingTail = candidate\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresponseBuilder.WriteString(content)\n\t\t\t\tchunkToEmit := content\n\t\t\t\tif enforceNoEmbeddedImageData {\n\t\t\t\t\tnormalizedCurrent := normalizeFireworksDrawToCodeOutput(responseBuilder.String())\n\t\t\t\t\tsafeLen := len(normalizedCurrent) - fireworksStreamNormalizeHoldback\n\t\t\t\t\tif safeLen < 0 {\n\t\t\t\t\t\tsafeLen = 0\n\t\t\t\t\t}\n\t\t\t\t\tif safeLen > normalizedEmitted {\n\t\t\t\t\t\tchunkToEmit = normalizedCurrent[normalizedEmitted:safeLen]\n\t\t\t\t\t\tnormalizedEmitted = safeLen\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunkToEmit = \"\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif chunkToEmit != \"\" {\n\t\t\t\t\tif err := emitFireworksStreamChunk(w, chunkToEmit); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif !enforceNoEmbeddedImageData && !reasoningDurationSent && reasoningStartTimeSet {\n\t\t\t\t\tdurationSeconds := float64(time.Now().UnixMilli()-reasoningStartTimestamp) / 1000.0\n\t\t\t\t\tmetaData := map[string]interface{}{\n\t\t\t\t\t\t\"meta\": map[string]float64{\n\t\t\t\t\t\t\t\"thinkingSeconds\": durationSeconds,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t}\n\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfinalContent := responseBuilder.String()\n\tif enforceNoEmbeddedImageData {\n\t\tfinalContent = normalizeFireworksDrawToCodeOutput(finalContent)\n\t\tif normalizedEmitted < len(finalContent) {\n\t\t\tif err := emitFireworksStreamChunk(w, finalContent[normalizedEmitted:]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tnormalizedEmitted = len(finalContent)\n\t\t}\n\t\tresponseBuilder.Reset()\n\t\tresponseBuilder.WriteString(finalContent)\n\t}\n\n\tif promptTokens == 0 && completionTokens == 0 {\n\t\tpromptTokens = estimateTokenCountForMessages(messages)\n\t\tcompletionTokens = estimateTokenCount(responseBuilder.String())\n\t}\n\tif strings.TrimSpace(responseBuilder.String()) == \"\" {\n\t\treturn fmt.Errorf(\"OpenCode Zen stream ended without content (model=%s, hasImage=%v, events=%d)\", apiModel, hasImage, dataEvents)\n\t}\n\n\tif !enforceNoEmbeddedImageData && !reasoningDurationSent && reasoningStartTimeSet {\n\t\tdurationSeconds := float64(time.Now().UnixMilli()-reasoningStartTimestamp) / 1000.0\n\t\tmetaData := map[string]interface{}{\n\t\t\t\"meta\": map[string]float64{\n\t\t\t\t\"thinkingSeconds\": durationSeconds,\n\t\t\t},\n\t\t}\n\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\tf.Flush()\n\t\t}\n\t}\n\n\tif enforceNoEmbeddedImageData {\n\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(responseBuilder.String()); blocked {\n\t\t\treturn embeddedImagePayloadError(reason)\n\t\t}\n\t}\n\n\tif seenFinishReason != \"\" {\n\t\tfmt.Printf(\"[OpenCode Zen] stream finish_reason=%s model=%s\\n\", seenFinishReason, apiModel)\n\t}\n\tif finishReasonLength {\n\t\tfmt.Printf(\"[OpenCode Zen WARN] stream reached max_tokens=%d model=%s\\n\", maxTokens, apiModel)\n\t}\n\n\tfmt.Printf(\"[OpenCode Zen] stream complete model=%s hasImage=%v events=%d parseErrors=%d chars=%d\\n\",\n\t\tapiModel, hasImage, dataEvents, parseErrors, responseBuilder.Len())\n\treturn emitFireworksStreamDone(w, promptTokens, completionTokens)\n}\n\nfunc openCodeZenMessagesContainImage(messages []map[string]interface{}) bool {\n\tfor _, msg := range messages {\n\t\tcontent, ok := msg[\"content\"]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tparts, ok := content.([]interface{})\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, part := range parts {\n\t\t\tpartMap, ok := part.(map[string]interface{})\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif partType, _ := partMap[\"type\"].(string); strings.EqualFold(partType, \"image_url\") {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc openCodeZenModelSupportsImageInput(modelID string) bool {\n\tresolved := strings.ToLower(strings.TrimSpace(normalizeOpenCodeZenModelID(modelID)))\n\tswitch resolved {\n\tcase \"kimi-k2.5\", \"kimi-k2.5-free\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc openCodeZenAttachmentDataURI(attachmentBase64, attachmentMime string) string {\n\ttrimmed := strings.TrimSpace(attachmentBase64)\n\tif strings.HasPrefix(strings.ToLower(trimmed), \"data:\") {\n\t\treturn trimmed\n\t}\n\tmime := strings.TrimSpace(attachmentMime)\n\tif mime == \"\" {\n\t\tmime = \"image/jpeg\"\n\t}\n\treturn fmt.Sprintf(\"data:%s;base64,%s\", mime, trimmed)\n}\n\nfunc buildOpenCodeZenDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, openCodeZenModel, apiKey string) []map[string]interface{} {\n\teffectiveImageSource := imageSource\n\tif !strings.EqualFold(strings.TrimSpace(effectiveImageSource), \"Glowby Images\") {\n\t\teffectiveImageSource = \"Glowby Images\"\n\t\tfmt.Printf(\"[OpenCode Zen DEBUG] forcing imageSource to Glowby Images for safe placeholder output (was=%q)\\n\", imageSource)\n\t}\n\tresolvedModel := normalizeOpenCodeZenModelID(openCodeZenModel)\n\n\tsystemPrompt := getSystemPrompt(template, effectiveImageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\tsystemPrompt += \" Glowby Images mode is strict: NEVER embed image bytes in output. NEVER output data: URIs, base64 blobs, blob: URLs, object URLs, or inline binary arrays.\"\n\tsystemPrompt += \" Use glowbyimage:<prompt> placeholders ONLY. Every <img> must start with src='about:blank', then JavaScript assigns .src from a glowbyimage variable.\"\n\tsystemPrompt += \" If you are uncertain about an image, create another descriptive glowbyimage:<prompt> placeholder instead of embedding bytes.\"\n\tsystemPrompt += \" Return a COMPLETE, valid HTML document from <!DOCTYPE html> through </html>. Never truncate output.\"\n\tsystemPrompt += \" Do NOT minify. Format output for humans with consistent indentation and spacing in CSS/JS (example: transition: all 0.3s ease; and color stops like #1a1a2e 0%).\"\n\tsystemPrompt += \" Never put JavaScript code on the same line as // comments. If comments are used, they must be standalone lines.\"\n\tsystemPrompt += \" Glowby image wiring contract: in one plain <script> block, first declare const image variables (each starting with glowbyimage:), then assign each to its matching img id via document.getElementById('...').src = ....\"\n\tsystemPrompt += \" The image wiring script must contain ONLY: const image declarations and document.getElementById(...).src assignments. No other logic, no function definitions, no event handlers, no extra words.\"\n\tsystemPrompt += \" Put interactive JavaScript in a separate second <script> block so image assignment always works even if other logic has issues.\"\n\tsystemPrompt += \" Do not put declarations or assignments on the same line as comments. Keep one statement per line.\"\n\tsystemPrompt += \" Leave one blank line between major HTML sections so the output stays readable in code view.\"\n\tsystemPrompt += \" JavaScript must be syntactically valid. Never emit stray tokens before declarations (for example: 'functionality const').\"\n\tsystemPrompt += \" Validate that every glowbyimage variable is assigned to an existing img id via document.getElementById(...).src before finishing.\"\n\n\tdetailedTask := buildDetailedTaskDescription(template, effectiveImageSource, userPrompt)\n\tlines := []string{\n\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t}\n\tusedImageDescription := false\n\timageDescriptionSource := \"none\"\n\tuseNativeImageInput := false\n\n\tif strings.TrimSpace(imageBase64) != \"\" {\n\t\tif openCodeZenModelSupportsImageInput(resolvedModel) {\n\t\t\tuseNativeImageInput = true\n\t\t\tfmt.Printf(\"[OpenCode Zen DEBUG] draw received image payload (base64_len=%d), using native image_url input for model=%s\\n\", len(imageBase64), resolvedModel)\n\t\t} else {\n\t\t\tdesc, err := describeImageWithOpenCodeZenKimi(imageBase64, apiKey)\n\t\t\tif err != nil {\n\t\t\t\t// Keep fallback so draw-to-code doesn't hard-fail if Zen vision is temporarily unavailable.\n\t\t\t\tfmt.Printf(\"[OpenCode Zen WARN] Kimi image description unavailable; falling back to Ollama llama3.2-vision: %v\\n\", err)\n\t\t\t\tdesc, err = getImageDescription(imageBase64)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Printf(\"[OpenCode Zen WARN] image description unavailable; proceeding text-only: %v\\n\", err)\n\t\t\t\t} else if trimmed := strings.TrimSpace(desc); trimmed != \"\" {\n\t\t\t\t\tusedImageDescription = true\n\t\t\t\t\timageDescriptionSource = \"ollama-llama3.2-vision\"\n\t\t\t\t\tfmt.Printf(\"[OpenCode Zen DEBUG] draw image description (%s) >>>\\n%s\\n<<< END image description\\n\", imageDescriptionSource, trimmed)\n\t\t\t\t\tlines = append([]string{fmt.Sprintf(\"Image description: %s\", trimmed)}, lines...)\n\t\t\t\t}\n\t\t\t} else if trimmed := strings.TrimSpace(desc); trimmed != \"\" {\n\t\t\t\tusedImageDescription = true\n\t\t\t\timageDescriptionSource = \"opencode-zen-kimi-k2.5\"\n\t\t\t\tfmt.Printf(\"[OpenCode Zen DEBUG] draw image description (%s) >>>\\n%s\\n<<< END image description\\n\", imageDescriptionSource, trimmed)\n\t\t\t\tlines = append([]string{fmt.Sprintf(\"Image description: %s\", trimmed)}, lines...)\n\t\t\t}\n\t\t}\n\t}\n\n\tuserContent := strings.Join(lines, \"\\n\")\n\tfmt.Printf(\"[OpenCode Zen DEBUG] draw prompt usesImageDescription=%v imageDescriptionSource=%s nativeImageInput=%v\\n\", usedImageDescription, imageDescriptionSource, useNativeImageInput)\n\tfmt.Printf(\"[OpenCode Zen DEBUG] draw system prompt >>>\\n%s\\n<<< END system prompt\\n\", systemPrompt)\n\tfmt.Printf(\"[OpenCode Zen DEBUG] draw user prompt >>>\\n%s\\n<<< END user prompt\\n\", userContent)\n\n\tfinalUserContent := interface{}(userContent)\n\tif useNativeImageInput {\n\t\tfinalUserContent = []interface{}{\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"type\": \"text\",\n\t\t\t\t\"text\": userContent,\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\"url\": openCodeZenAttachmentDataURI(imageBase64, \"image/jpeg\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\treturn []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\":    \"user\",\n\t\t\t\"content\": finalUserContent,\n\t\t},\n\t}\n}\n\nfunc describeImageWithOpenCodeZenKimi(imageBase64, apiKey string) (string, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"missing OpenCode Zen API key\")\n\t}\n\tif strings.TrimSpace(imageBase64) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"missing image payload\")\n\t}\n\n\tconst visionModel = \"kimi-k2.5-free\"\n\tpayload := map[string]interface{}{\n\t\t\"model\":       visionModel,\n\t\t\"max_tokens\":  700,\n\t\t\"temperature\": 0.2,\n\t\t\"messages\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"role\": \"system\",\n\t\t\t\t\"content\": \"Describe the image clearly in plain English. \" +\n\t\t\t\t\t\"Return only the description text. Do not use markdown, XML, JSON, or <think> tags.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"text\": \"Describe this image in human language. \" +\n\t\t\t\t\t\t\t\"If text appears in a foreign language, keep it as-is and mention it. \" +\n\t\t\t\t\t\t\t\"Include people, objects, setting, style, and notable details.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\t\"url\": openCodeZenAttachmentDataURI(imageBase64, \"image/jpeg\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tjsonBytes, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treq, err := http.NewRequest(\"POST\", openCodeZenChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tsetOpenCodeZenRequestHeaders(req, apiKey, \"application/json\")\n\n\tresp, err := openCodeZenHTTPClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", fmt.Errorf(\"OpenCode Zen Kimi vision API error (%d): %s\", resp.StatusCode, strings.TrimSpace(string(body)))\n\t}\n\n\tvar completion struct {\n\t\tChoices []struct {\n\t\t\tMessage struct {\n\t\t\t\tContent interface{} `json:\"content\"`\n\t\t\t} `json:\"message\"`\n\t\t} `json:\"choices\"`\n\t}\n\tif err := json.NewDecoder(resp.Body).Decode(&completion); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse OpenCode Zen Kimi vision response: %w\", err)\n\t}\n\tif len(completion.Choices) == 0 {\n\t\treturn \"\", fmt.Errorf(\"OpenCode Zen Kimi vision returned no choices\")\n\t}\n\n\tdescription := strings.TrimSpace(fireworkContentToText(completion.Choices[0].Message.Content))\n\tdescription = fireworksThinkTagRegex.ReplaceAllString(description, \"\")\n\tdescription = strings.TrimSpace(description)\n\tif description == \"\" {\n\t\treturn \"\", fmt.Errorf(\"OpenCode Zen Kimi vision returned empty description\")\n\t}\n\treturn description, nil\n}\n\nfunc logOpenCodeZenRequestSummary(model string, stream bool, hasImage bool, maxTokens int, messages []map[string]interface{}) {\n\tpreview := truncateForLog(fireworksLatestUserPreview(messages))\n\tfmt.Printf(\"[OpenCode Zen] request model=%s stream=%v hasImage=%v max_tokens=%d user=%q\\n\", model, stream, hasImage, maxTokens, preview)\n}\n"
  },
  {
    "path": "backend/openrouter_openrouter.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst openRouterChatCompletionsURL = \"https://openrouter.ai/api/v1/chat/completions\"\nconst openRouterHTTPReferer = \"https://glowbom.com\"\nconst openRouterXTitle = \"Glowbom\"\n\nconst (\n\topenRouterChatMaxTokens       = 4096\n\topenRouterDrawToCodeMaxTokens = 16384\n\topenRouterDefaultTemperature  = 0.6\n)\n\nfunc setOpenRouterRequestHeaders(req *http.Request, apiKey string, accept string) {\n\treq.Header.Set(\"Accept\", accept)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\treq.Header.Set(\"HTTP-Referer\", openRouterHTTPReferer)\n\treq.Header.Set(\"X-Title\", openRouterXTitle)\n}\n\nfunc callOpenRouterDrawToCodeApiFull(imageBase64, userPrompt, template, imageSource, apiKey, openRouterModel string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenRouter API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tmessages := buildOpenRouterDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, openRouterModel, apiKey)\n\taiResp, inputTokens, outputTokens, err := callOpenRouterChatCompletions(messages, apiKey, openRouterDrawToCodeMaxTokens, openRouterDefaultTemperature, openRouterModel, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\nfunc callOpenRouterDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, apiKey, openRouterModel string) error {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn fmt.Errorf(\"no OpenRouter API key provided\")\n\t}\n\n\tmessages := buildOpenRouterDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, openRouterModel, apiKey)\n\treturn callOpenRouterChatCompletionsStreaming(w, messages, apiKey, openRouterDrawToCodeMaxTokens, openRouterDefaultTemperature, openRouterModel, true)\n}\n\nfunc callOpenRouterApiGo(prevMsgs []ChatMessage, newMsg, apiKey, openRouterModel, attachmentBase64, attachmentMime string) (*R1Response, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No OpenRouter API key provided. Please add your key in Settings.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\tmessages := buildOpenRouterChatMessages(prevMsgs, newMsg, openRouterModel, attachmentBase64, attachmentMime)\n\taiResp, inputTokens, outputTokens, err := callOpenRouterChatCompletions(messages, apiKey, openRouterChatMaxTokens, openRouterDefaultTemperature, openRouterModel, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\nfunc callOpenRouterChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, apiKey, openRouterModel, attachmentBase64, attachmentMime string) error {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn fmt.Errorf(\"no OpenRouter API key provided\")\n\t}\n\tmessages := buildOpenRouterChatMessages(prevMsgs, newMsg, openRouterModel, attachmentBase64, attachmentMime)\n\treturn callOpenRouterChatCompletionsStreaming(w, messages, apiKey, openRouterChatMaxTokens, openRouterDefaultTemperature, openRouterModel, false)\n}\n\nfunc buildOpenRouterChatMessages(prevMsgs []ChatMessage, newMsg, openRouterModel, attachmentBase64, attachmentMime string) []map[string]interface{} {\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\n\tmessages := []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemMsg,\n\t\t},\n\t}\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"user\" || m.Role == \"assistant\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\n\tuserContent := interface{}(newMsg)\n\ttrimmedAttachment := strings.TrimSpace(attachmentBase64)\n\ttrimmedMime := strings.TrimSpace(attachmentMime)\n\tif trimmedAttachment != \"\" && trimmedMime != \"\" {\n\t\tresolvedModel := normalizeOpenRouterModelID(openRouterModel)\n\t\tif openRouterModelSupportsImageInput(resolvedModel) && strings.HasPrefix(strings.ToLower(trimmedMime), \"image/\") {\n\t\t\tuserContent = []interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": newMsg,\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\"url\": openRouterAttachmentDataURI(trimmedAttachment, trimmedMime),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tfmt.Printf(\"[OpenRouter DEBUG] inline image attachment enabled model=%s mime=%s\\n\", resolvedModel, trimmedMime)\n\t\t} else {\n\t\t\tfmt.Printf(\"[OpenRouter DEBUG] attachment ignored for model=%s mime=%q\\n\", resolvedModel, trimmedMime)\n\t\t}\n\t}\n\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": userContent,\n\t})\n\treturn messages\n}\n\nfunc callOpenRouterChatCompletions(messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, openRouterModel string, enforceNoEmbeddedImageData bool) (string, int, int, error) {\n\tresolvedModel := normalizeOpenRouterModelID(openRouterModel)\n\thasImage := openRouterMessagesContainImage(messages)\n\tlogOpenRouterRequestSummary(resolvedModel, false, hasImage, maxTokens, messages)\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":       resolvedModel,\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"temperature\": temperature,\n\t\t\"messages\":    messages,\n\t}\n\tif prettyBody, err := json.MarshalIndent(reqBody, \"\", \"  \"); err == nil {\n\t\tfmt.Printf(\"[OpenRouter DEBUG] request body stream=false >>>\\n%s\\n<<< END OpenRouter request body\\n\", string(prettyBody))\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", openRouterChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\n\tsetOpenRouterRequestHeaders(req, apiKey, \"application/json\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", 0, 0, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[OpenRouter ERROR] model=%s stream=false status=%d hasImage=%v body=%s\\n\", resolvedModel, resp.StatusCode, hasImage, truncateForLog(bodyText))\n\t\treturn \"\", 0, 0, fmt.Errorf(\"OpenRouter API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\tvar completion struct {\n\t\tChoices []struct {\n\t\t\tMessage struct {\n\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t} `json:\"message\"`\n\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t} `json:\"choices\"`\n\t\tUsage struct {\n\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\tTotalTokens      int `json:\"total_tokens\"`\n\t\t} `json:\"usage\"`\n\t}\n\n\tif err := json.NewDecoder(resp.Body).Decode(&completion); err != nil {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"failed to parse OpenRouter response: %w\", err)\n\t}\n\tif len(completion.Choices) == 0 {\n\t\treturn \"\", 0, 0, fmt.Errorf(\"no choices in OpenRouter response\")\n\t}\n\n\tcontent := fireworkContentToText(completion.Choices[0].Message.Content)\n\treasoning := fireworkContentToText(completion.Choices[0].Message.ReasoningContent)\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = fireworkContentToText(completion.Choices[0].ReasoningContent)\n\t}\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = openRouterReasoningToText(completion.Choices[0].Message.Reasoning)\n\t}\n\tif strings.TrimSpace(reasoning) == \"\" {\n\t\treasoning = openRouterReasoningToText(completion.Choices[0].Reasoning)\n\t}\n\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoning) != \"\" {\n\t\tcontent = \"<think>\" + strings.TrimSpace(reasoning) + \"</think>\" + content\n\t}\n\tif enforceNoEmbeddedImageData {\n\t\tcontent = normalizeFireworksDrawToCodeOutput(content)\n\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(content); blocked {\n\t\t\treturn \"\", 0, 0, embeddedImagePayloadError(reason)\n\t\t}\n\t}\n\n\tfinishReason := normalizeFinishReason(completion.Choices[0].FinishReason)\n\tif finishReason != \"\" {\n\t\tfmt.Printf(\"[OpenRouter] completion finish_reason=%s model=%s stream=false\\n\", finishReason, resolvedModel)\n\t}\n\tif strings.EqualFold(finishReason, \"length\") {\n\t\tfmt.Printf(\"[OpenRouter WARN] completion reached max_tokens=%d model=%s stream=false\\n\", maxTokens, resolvedModel)\n\t\tif enforceNoEmbeddedImageData {\n\t\t\treturn \"\", 0, 0, fmt.Errorf(\"OpenRouter draw-to-code output was truncated at max_tokens=%d. Please regenerate with a shorter prompt.\", maxTokens)\n\t\t}\n\t}\n\n\tinputTokens := completion.Usage.PromptTokens\n\toutputTokens := completion.Usage.CompletionTokens\n\tif inputTokens == 0 && outputTokens == 0 {\n\t\tinputTokens = estimateTokenCountForMessages(messages)\n\t\toutputTokens = estimateTokenCount(content)\n\t}\n\n\treturn content, inputTokens, outputTokens, nil\n}\n\nfunc callOpenRouterChatCompletionsStreaming(w http.ResponseWriter, messages []map[string]interface{}, apiKey string, maxTokens int, temperature float64, openRouterModel string, enforceNoEmbeddedImageData bool) error {\n\tresolvedModel := normalizeOpenRouterModelID(openRouterModel)\n\thasImage := openRouterMessagesContainImage(messages)\n\tlogOpenRouterRequestSummary(resolvedModel, true, hasImage, maxTokens, messages)\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":       resolvedModel,\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"temperature\": temperature,\n\t\t\"messages\":    messages,\n\t\t\"stream\":      true,\n\t}\n\tif prettyBody, err := json.MarshalIndent(reqBody, \"\", \"  \"); err == nil {\n\t\tfmt.Printf(\"[OpenRouter DEBUG] request body stream=true >>>\\n%s\\n<<< END OpenRouter request body\\n\", string(prettyBody))\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", openRouterChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsetOpenRouterRequestHeaders(req, apiKey, \"text/event-stream, application/json\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[OpenRouter ERROR] model=%s stream=true status=%d hasImage=%v body=%s\\n\", resolvedModel, resp.StatusCode, hasImage, truncateForLog(bodyText))\n\t\treturn fmt.Errorf(\"OpenRouter API error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\tcontentType := strings.ToLower(strings.TrimSpace(resp.Header.Get(\"Content-Type\")))\n\tfmt.Printf(\"[OpenRouter] stream response model=%s hasImage=%v contentType=%q\\n\", resolvedModel, hasImage, contentType)\n\n\tif !strings.Contains(contentType, \"text/event-stream\") {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := strings.TrimSpace(string(body))\n\t\tfmt.Printf(\"[OpenRouter] stream fallback model=%s hasImage=%v contentType=%q body=%s\\n\", resolvedModel, hasImage, contentType, truncateForLog(bodyText))\n\n\t\tvar completion struct {\n\t\t\tChoices []struct {\n\t\t\t\tMessage struct {\n\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t} `json:\"message\"`\n\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t} `json:\"choices\"`\n\t\t\tUsage struct {\n\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t} `json:\"usage\"`\n\t\t}\n\t\tif err := json.Unmarshal(body, &completion); err != nil {\n\t\t\treturn fmt.Errorf(\"OpenRouter stream fallback parse error: %w\", err)\n\t\t}\n\t\tif len(completion.Choices) == 0 {\n\t\t\treturn fmt.Errorf(\"OpenRouter stream fallback returned no choices\")\n\t\t}\n\n\t\tcontent := fireworkContentToText(completion.Choices[0].Message.Content)\n\t\treasoning := fireworkContentToText(completion.Choices[0].Message.ReasoningContent)\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = fireworkContentToText(completion.Choices[0].ReasoningContent)\n\t\t}\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = openRouterReasoningToText(completion.Choices[0].Message.Reasoning)\n\t\t}\n\t\tif strings.TrimSpace(reasoning) == \"\" {\n\t\t\treasoning = openRouterReasoningToText(completion.Choices[0].Reasoning)\n\t\t}\n\t\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoning) != \"\" {\n\t\t\tcontent = \"<think>\" + strings.TrimSpace(reasoning) + \"</think>\" + content\n\t\t}\n\t\tif enforceNoEmbeddedImageData {\n\t\t\tcontent = normalizeFireworksDrawToCodeOutput(content)\n\t\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(content); blocked {\n\t\t\t\treturn embeddedImagePayloadError(reason)\n\t\t\t}\n\t\t}\n\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\treturn fmt.Errorf(\"OpenRouter stream fallback returned empty content\")\n\t\t}\n\t\tif err := emitFireworksStreamChunk(w, content); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tpromptTokens := completion.Usage.PromptTokens\n\t\tcompletionTokens := completion.Usage.CompletionTokens\n\t\tif promptTokens == 0 && completionTokens == 0 {\n\t\t\tpromptTokens = estimateTokenCountForMessages(messages)\n\t\t\tcompletionTokens = estimateTokenCount(content)\n\t\t}\n\t\treturn emitFireworksStreamDone(w, promptTokens, completionTokens)\n\t}\n\n\treader := bufio.NewReader(resp.Body)\n\tvar responseBuilder strings.Builder\n\tpromptTokens := 0\n\tcompletionTokens := 0\n\tdataEvents := 0\n\tparseErrors := 0\n\tfinishReasonLength := false\n\tseenFinishReason := \"\"\n\trollingTail := \"\"\n\tnormalizedEmitted := 0\n\tvar reasoningBuilder strings.Builder\n\tvar reasoningSent bool\n\tvar reasoningStartTimeSet bool\n\tvar reasoningStartTimestamp int64\n\tvar reasoningDurationSent bool\n\tlastThinkingStep := \"\"\n\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\ttrimmedLine := strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(trimmedLine, \"data:\") {\n\t\t\t\tdataEvents++\n\t\t\t\tdataStr := strings.TrimSpace(trimmedLine[5:])\n\t\t\t\tif dataStr == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t\tMessage struct {\n\t\t\t\t\t\t\tContent          interface{} `json:\"content\"`\n\t\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"message\"`\n\t\t\t\t\t\tReasoningContent interface{} `json:\"reasoning_content\"`\n\t\t\t\t\t\tReasoning        interface{} `json:\"reasoning\"`\n\t\t\t\t\t\tFinishReason     interface{} `json:\"finish_reason\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t\tUsage struct {\n\t\t\t\t\t\tPromptTokens     int `json:\"prompt_tokens\"`\n\t\t\t\t\t\tCompletionTokens int `json:\"completion_tokens\"`\n\t\t\t\t\t} `json:\"usage\"`\n\t\t\t\t}\n\n\t\t\t\tif unmarshalErr := json.Unmarshal([]byte(dataStr), &chunk); unmarshalErr != nil {\n\t\t\t\t\tparseErrors++\n\t\t\t\t\tif parseErrors <= 3 {\n\t\t\t\t\t\tfmt.Printf(\"[OpenRouter WARN] stream chunk parse failed model=%s hasImage=%v err=%v raw=%s\\n\", resolvedModel, hasImage, unmarshalErr, truncateForLog(dataStr))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif chunk.Usage.PromptTokens > 0 {\n\t\t\t\t\tpromptTokens = chunk.Usage.PromptTokens\n\t\t\t\t\tcompletionTokens = chunk.Usage.CompletionTokens\n\t\t\t\t}\n\n\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\treasoningChunk := fireworkContentToText(chunk.Choices[0].Delta.ReasoningContent)\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = fireworkContentToText(chunk.Choices[0].Message.ReasoningContent)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = fireworkContentToText(chunk.Choices[0].ReasoningContent)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = openRouterReasoningToText(chunk.Choices[0].Delta.Reasoning)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = openRouterReasoningToText(chunk.Choices[0].Message.Reasoning)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(reasoningChunk) == \"\" {\n\t\t\t\t\t\treasoningChunk = openRouterReasoningToText(chunk.Choices[0].Reasoning)\n\t\t\t\t\t}\n\t\t\t\t\tif !enforceNoEmbeddedImageData && strings.TrimSpace(reasoningChunk) != \"\" {\n\t\t\t\t\t\tif !reasoningStartTimeSet {\n\t\t\t\t\t\t\treasoningStartTimeSet = true\n\t\t\t\t\t\t\treasoningStartTimestamp = time.Now().UnixMilli()\n\t\t\t\t\t\t\tplaceholderStep := \"Thinking...\"\n\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": placeholderStep}\n\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastThinkingStep = placeholderStep\n\t\t\t\t\t\t}\n\t\t\t\t\t\treasoningBuilder.WriteString(reasoningChunk)\n\n\t\t\t\t\t\tstepTitle := extractFireworksThinkingStepTitle(reasoningBuilder.String())\n\t\t\t\t\t\tif isMeaningfulThinkingStepTitle(stepTitle) && stepTitle != lastThinkingStep {\n\t\t\t\t\t\t\tthinkingStepData := map[string]string{\"thinkingStep\": stepTitle}\n\t\t\t\t\t\t\tthinkingStepBytes, _ := json.Marshal(thinkingStepData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", thinkingStepBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastThinkingStep = stepTitle\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treason := normalizeFinishReason(chunk.Choices[0].FinishReason)\n\t\t\t\t\tif reason != \"\" {\n\t\t\t\t\t\tseenFinishReason = reason\n\t\t\t\t\t\tif strings.EqualFold(reason, \"length\") {\n\t\t\t\t\t\t\tfinishReasonLength = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent := fireworkContentToText(chunk.Choices[0].Delta.Content)\n\t\t\t\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\t\t\t\tcontent = fireworkContentToText(chunk.Choices[0].Message.Content)\n\t\t\t\t\t}\n\t\t\t\t\tif strings.TrimSpace(content) == \"\" {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif !enforceNoEmbeddedImageData && !reasoningSent && reasoningBuilder.Len() > 0 {\n\t\t\t\t\t\tthinkingText := \"<think>\" + strings.TrimSpace(reasoningBuilder.String()) + \"</think>\"\n\t\t\t\t\t\tif err := emitFireworksStreamChunk(w, thinkingText); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\treasoningSent = true\n\t\t\t\t\t}\n\t\t\t\t\tif enforceNoEmbeddedImageData {\n\t\t\t\t\t\tcandidate := rollingTail + content\n\t\t\t\t\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(candidate); blocked {\n\t\t\t\t\t\t\treturn embeddedImagePayloadError(reason)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif len(candidate) > 4096 {\n\t\t\t\t\t\t\trollingTail = candidate[len(candidate)-4096:]\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trollingTail = candidate\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresponseBuilder.WriteString(content)\n\t\t\t\t\tchunkToEmit := content\n\t\t\t\t\tif enforceNoEmbeddedImageData {\n\t\t\t\t\t\tnormalizedCurrent := normalizeFireworksDrawToCodeOutput(responseBuilder.String())\n\t\t\t\t\t\tsafeLen := len(normalizedCurrent) - fireworksStreamNormalizeHoldback\n\t\t\t\t\t\tif safeLen < 0 {\n\t\t\t\t\t\t\tsafeLen = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif safeLen > normalizedEmitted {\n\t\t\t\t\t\t\tchunkToEmit = normalizedCurrent[normalizedEmitted:safeLen]\n\t\t\t\t\t\t\tnormalizedEmitted = safeLen\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchunkToEmit = \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif chunkToEmit != \"\" {\n\t\t\t\t\t\tif err := emitFireworksStreamChunk(w, chunkToEmit); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif !enforceNoEmbeddedImageData && !reasoningDurationSent && reasoningStartTimeSet {\n\t\t\t\t\t\tdurationSeconds := float64(time.Now().UnixMilli()-reasoningStartTimestamp) / 1000.0\n\t\t\t\t\t\tmetaData := map[string]interface{}{\n\t\t\t\t\t\t\t\"meta\": map[string]float64{\n\t\t\t\t\t\t\t\t\"thinkingSeconds\": durationSeconds,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treasoningDurationSent = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfinalText := responseBuilder.String()\n\tif enforceNoEmbeddedImageData {\n\t\tfinalText = normalizeFireworksDrawToCodeOutput(finalText)\n\t\tif normalizedEmitted < len(finalText) {\n\t\t\tif err := emitFireworksStreamChunk(w, finalText[normalizedEmitted:]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tnormalizedEmitted = len(finalText)\n\t\t}\n\t\tresponseBuilder.Reset()\n\t\tresponseBuilder.WriteString(finalText)\n\t}\n\n\tif promptTokens == 0 && completionTokens == 0 {\n\t\tpromptTokens = estimateTokenCountForMessages(messages)\n\t\tcompletionTokens = estimateTokenCount(responseBuilder.String())\n\t}\n\tif strings.TrimSpace(responseBuilder.String()) == \"\" {\n\t\treturn fmt.Errorf(\"OpenRouter stream ended without content (model=%s, hasImage=%v, events=%d)\", resolvedModel, hasImage, dataEvents)\n\t}\n\n\tif !enforceNoEmbeddedImageData && !reasoningDurationSent && reasoningStartTimeSet {\n\t\tdurationSeconds := float64(time.Now().UnixMilli()-reasoningStartTimestamp) / 1000.0\n\t\tmetaData := map[string]interface{}{\n\t\t\t\"meta\": map[string]float64{\n\t\t\t\t\"thinkingSeconds\": durationSeconds,\n\t\t\t},\n\t\t}\n\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\tf.Flush()\n\t\t}\n\t}\n\n\tif enforceNoEmbeddedImageData {\n\t\tif reason, blocked := detectFireworksEmbeddedImagePayload(responseBuilder.String()); blocked {\n\t\t\treturn embeddedImagePayloadError(reason)\n\t\t}\n\t}\n\tif seenFinishReason != \"\" {\n\t\tfmt.Printf(\"[OpenRouter] stream finish_reason=%s model=%s\\n\", seenFinishReason, resolvedModel)\n\t}\n\tif finishReasonLength {\n\t\tfmt.Printf(\"[OpenRouter WARN] stream reached max_tokens=%d model=%s\\n\", maxTokens, resolvedModel)\n\t\tif enforceNoEmbeddedImageData {\n\t\t\treturn fmt.Errorf(\"OpenRouter draw-to-code output was truncated at max_tokens=%d. Please regenerate with a shorter prompt.\", maxTokens)\n\t\t}\n\t}\n\n\tfmt.Printf(\"[OpenRouter] stream complete model=%s hasImage=%v events=%d parseErrors=%d chars=%d\\n\",\n\t\tresolvedModel, hasImage, dataEvents, parseErrors, responseBuilder.Len())\n\treturn emitFireworksStreamDone(w, promptTokens, completionTokens)\n}\n\nfunc openRouterMessagesContainImage(messages []map[string]interface{}) bool {\n\tfor _, msg := range messages {\n\t\tcontent, ok := msg[\"content\"]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tparts, ok := content.([]interface{})\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, part := range parts {\n\t\t\tpartMap, ok := part.(map[string]interface{})\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif partType, _ := partMap[\"type\"].(string); strings.EqualFold(partType, \"image_url\") {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc openRouterModelSupportsImageInput(modelID string) bool {\n\tresolved := strings.ToLower(strings.TrimSpace(normalizeOpenRouterModelID(modelID)))\n\tswitch resolved {\n\tcase \"moonshotai/kimi-k2.5\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc openRouterAttachmentDataURI(attachmentBase64, attachmentMime string) string {\n\ttrimmed := strings.TrimSpace(attachmentBase64)\n\tif strings.HasPrefix(strings.ToLower(trimmed), \"data:\") {\n\t\treturn trimmed\n\t}\n\tmime := strings.TrimSpace(attachmentMime)\n\tif mime == \"\" {\n\t\tmime = \"image/jpeg\"\n\t}\n\treturn fmt.Sprintf(\"data:%s;base64,%s\", mime, trimmed)\n}\n\nfunc buildOpenRouterDrawToCodeMessages(imageBase64, userPrompt, template, imageSource, openRouterModel, apiKey string) []map[string]interface{} {\n\teffectiveImageSource := imageSource\n\tif !strings.EqualFold(strings.TrimSpace(effectiveImageSource), \"Glowby Images\") {\n\t\teffectiveImageSource = \"Glowby Images\"\n\t\tfmt.Printf(\"[OpenRouter DEBUG] forcing imageSource to Glowby Images for safe placeholder output (was=%q)\\n\", imageSource)\n\t}\n\tresolvedModel := normalizeOpenRouterModelID(openRouterModel)\n\n\tsystemPrompt := getSystemPrompt(template, effectiveImageSource)\n\tsystemPrompt += \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\tsystemPrompt += \" Glowby Images mode is strict: NEVER embed image bytes in output. NEVER output data: URIs, base64 blobs, blob: URLs, object URLs, or inline binary arrays.\"\n\tsystemPrompt += \" Use glowbyimage:<prompt> placeholders ONLY. Every <img> must start with src='about:blank', then JavaScript assigns .src from a glowbyimage variable.\"\n\tsystemPrompt += \" If you are uncertain about an image, create another descriptive glowbyimage:<prompt> placeholder instead of embedding bytes.\"\n\tsystemPrompt += \" Return a COMPLETE, valid HTML document from <!DOCTYPE html> through </html>. Never truncate output.\"\n\tsystemPrompt += \" Do NOT minify. Format output for humans with consistent indentation and spacing in CSS/JS (example: transition: all 0.3s ease; and color stops like #1a1a2e 0%).\"\n\tsystemPrompt += \" Never put JavaScript code on the same line as // comments. If comments are used, they must be standalone lines.\"\n\tsystemPrompt += \" Glowby image wiring contract: in one plain <script> block, first declare const image variables (each starting with glowbyimage:), then assign each to its matching img id via document.getElementById('...').src = ....\"\n\tsystemPrompt += \" The image wiring script must contain ONLY: const image declarations and document.getElementById(...).src assignments. No other logic, no function definitions, no event handlers, no extra words.\"\n\tsystemPrompt += \" Put interactive JavaScript in a separate second <script> block so image assignment always works even if other logic has issues.\"\n\tsystemPrompt += \" Do not put declarations or assignments on the same line as comments. Keep one statement per line.\"\n\tsystemPrompt += \" Leave one blank line between major HTML sections so the output stays readable in code view.\"\n\tsystemPrompt += \" JavaScript must be syntactically valid. Never emit stray tokens before declarations (for example: 'functionality const').\"\n\tsystemPrompt += \" Validate that every glowbyimage variable is assigned to an existing img id via document.getElementById(...).src before finishing.\"\n\n\tdetailedTask := buildDetailedTaskDescription(template, effectiveImageSource, userPrompt)\n\tlines := []string{\n\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t}\n\tusedImageDescription := false\n\timageDescriptionSource := \"none\"\n\tuseNativeImageInput := false\n\n\tif strings.TrimSpace(imageBase64) != \"\" {\n\t\tif openRouterModelSupportsImageInput(resolvedModel) {\n\t\t\tuseNativeImageInput = true\n\t\t\tfmt.Printf(\"[OpenRouter DEBUG] draw received image payload (base64_len=%d), using native image_url input for model=%s\\n\", len(imageBase64), resolvedModel)\n\t\t} else {\n\t\t\tdesc, err := describeImageWithOpenRouterKimi(imageBase64, apiKey)\n\t\t\tif err != nil {\n\t\t\t\t// Keep fallback so draw-to-code doesn't hard-fail if OpenRouter vision is temporarily unavailable.\n\t\t\t\tfmt.Printf(\"[OpenRouter WARN] Kimi image description unavailable; falling back to Ollama llama3.2-vision: %v\\n\", err)\n\t\t\t\tdesc, err = getImageDescription(imageBase64)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Printf(\"[OpenRouter WARN] image description unavailable; proceeding text-only: %v\\n\", err)\n\t\t\t\t} else if trimmed := strings.TrimSpace(desc); trimmed != \"\" {\n\t\t\t\t\tusedImageDescription = true\n\t\t\t\t\timageDescriptionSource = \"ollama-llama3.2-vision\"\n\t\t\t\t\tfmt.Printf(\"[OpenRouter DEBUG] draw image description (%s) >>>\\n%s\\n<<< END image description\\n\", imageDescriptionSource, trimmed)\n\t\t\t\t\tlines = append([]string{fmt.Sprintf(\"Image description: %s\", trimmed)}, lines...)\n\t\t\t\t}\n\t\t\t} else if trimmed := strings.TrimSpace(desc); trimmed != \"\" {\n\t\t\t\tusedImageDescription = true\n\t\t\t\timageDescriptionSource = \"openrouter-kimi-k2.5\"\n\t\t\t\tfmt.Printf(\"[OpenRouter DEBUG] draw image description (%s) >>>\\n%s\\n<<< END image description\\n\", imageDescriptionSource, trimmed)\n\t\t\t\tlines = append([]string{fmt.Sprintf(\"Image description: %s\", trimmed)}, lines...)\n\t\t\t}\n\t\t}\n\t}\n\n\tuserContent := strings.Join(lines, \"\\n\")\n\tfmt.Printf(\"[OpenRouter DEBUG] draw prompt usesImageDescription=%v imageDescriptionSource=%s nativeImageInput=%v\\n\", usedImageDescription, imageDescriptionSource, useNativeImageInput)\n\tfmt.Printf(\"[OpenRouter DEBUG] draw system prompt >>>\\n%s\\n<<< END system prompt\\n\", systemPrompt)\n\tfmt.Printf(\"[OpenRouter DEBUG] draw user prompt >>>\\n%s\\n<<< END user prompt\\n\", userContent)\n\n\tfinalUserContent := interface{}(userContent)\n\tif useNativeImageInput {\n\t\tfinalUserContent = []interface{}{\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"type\": \"text\",\n\t\t\t\t\"text\": userContent,\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\"url\": openRouterAttachmentDataURI(imageBase64, \"image/jpeg\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\treturn []map[string]interface{}{\n\t\t{\n\t\t\t\"role\":    \"system\",\n\t\t\t\"content\": systemPrompt,\n\t\t},\n\t\t{\n\t\t\t\"role\":    \"user\",\n\t\t\t\"content\": finalUserContent,\n\t\t},\n\t}\n}\n\nfunc describeImageWithOpenRouterKimi(imageBase64, apiKey string) (string, error) {\n\tif strings.TrimSpace(apiKey) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"missing OpenRouter API key\")\n\t}\n\tif strings.TrimSpace(imageBase64) == \"\" {\n\t\treturn \"\", fmt.Errorf(\"missing image payload\")\n\t}\n\n\tconst visionModel = \"moonshotai/kimi-k2.5\"\n\tpayload := map[string]interface{}{\n\t\t\"model\":       visionModel,\n\t\t\"max_tokens\":  700,\n\t\t\"temperature\": 0.2,\n\t\t\"messages\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"role\": \"system\",\n\t\t\t\t\"content\": \"Describe the image clearly in plain English. \" +\n\t\t\t\t\t\"Return only the description text. Do not use markdown, XML, JSON, or <think> tags.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"role\": \"user\",\n\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"text\": \"Describe this image in human language. \" +\n\t\t\t\t\t\t\t\"If text appears in a foreign language, keep it as-is and mention it. \" +\n\t\t\t\t\t\t\t\"Include people, objects, setting, style, and notable details.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"image_url\",\n\t\t\t\t\t\t\"image_url\": map[string]interface{}{\n\t\t\t\t\t\t\t\"url\": openRouterAttachmentDataURI(imageBase64, \"image/jpeg\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tjsonBytes, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treq, err := http.NewRequest(\"POST\", openRouterChatCompletionsURL, bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tsetOpenRouterRequestHeaders(req, apiKey, \"application/json\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", fmt.Errorf(\"OpenRouter Kimi vision API error (%d): %s\", resp.StatusCode, strings.TrimSpace(string(body)))\n\t}\n\n\tvar completion struct {\n\t\tChoices []struct {\n\t\t\tMessage struct {\n\t\t\t\tContent interface{} `json:\"content\"`\n\t\t\t} `json:\"message\"`\n\t\t} `json:\"choices\"`\n\t}\n\tif err := json.NewDecoder(resp.Body).Decode(&completion); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to parse OpenRouter Kimi vision response: %w\", err)\n\t}\n\tif len(completion.Choices) == 0 {\n\t\treturn \"\", fmt.Errorf(\"OpenRouter Kimi vision returned no choices\")\n\t}\n\n\tdescription := strings.TrimSpace(fireworkContentToText(completion.Choices[0].Message.Content))\n\tdescription = fireworksThinkTagRegex.ReplaceAllString(description, \"\")\n\tdescription = strings.TrimSpace(description)\n\tif description == \"\" {\n\t\treturn \"\", fmt.Errorf(\"OpenRouter Kimi vision returned empty description\")\n\t}\n\treturn description, nil\n}\n\nfunc openRouterReasoningToText(reasoning interface{}) string {\n\tswitch v := reasoning.(type) {\n\tcase string:\n\t\treturn v\n\tcase map[string]interface{}:\n\t\tif text, ok := v[\"text\"].(string); ok {\n\t\t\treturn text\n\t\t}\n\t\tif content, ok := v[\"content\"]; ok {\n\t\t\treturn fireworkContentToText(content)\n\t\t}\n\t\tif summary, ok := v[\"summary\"].([]interface{}); ok {\n\t\t\tvar builder strings.Builder\n\t\t\tfor _, item := range summary {\n\t\t\t\titemMap, ok := item.(map[string]interface{})\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif text, ok := itemMap[\"text\"].(string); ok {\n\t\t\t\t\tbuilder.WriteString(text)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn builder.String()\n\t\t}\n\t\treturn \"\"\n\tcase []interface{}:\n\t\tvar builder strings.Builder\n\t\tfor _, item := range v {\n\t\t\tbuilder.WriteString(openRouterReasoningToText(item))\n\t\t}\n\t\treturn builder.String()\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc logOpenRouterRequestSummary(model string, stream bool, hasImage bool, maxTokens int, messages []map[string]interface{}) {\n\tpromptChars := 0\n\tfor _, message := range messages {\n\t\tcontent, ok := message[\"content\"]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tpromptChars += len(fireworkContentToText(content))\n\t}\n\tpreview := truncateForLog(openRouterLatestUserPreview(messages))\n\tfmt.Printf(\"[OpenRouter] request model=%s stream=%v hasImage=%v max_tokens=%d messages=%d prompt_chars=%d preview=%q\\n\",\n\t\tmodel, stream, hasImage, maxTokens, len(messages), promptChars, preview)\n}\n\nfunc openRouterLatestUserPreview(messages []map[string]interface{}) string {\n\tfor i := len(messages) - 1; i >= 0; i-- {\n\t\trole, _ := messages[i][\"role\"].(string)\n\t\tif strings.ToLower(strings.TrimSpace(role)) != \"user\" {\n\t\t\tcontinue\n\t\t}\n\t\tcontent := fireworkContentToText(messages[i][\"content\"])\n\t\tif strings.TrimSpace(content) != \"\" {\n\t\t\treturn content\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "backend/prompts.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\nfunc isGlowbyImagesSource(imageSource string) bool {\n\ttrimmed := strings.TrimSpace(imageSource)\n\treturn strings.HasPrefix(trimmed, \"Glowby Images\")\n}\n\n// =========== PROMPT STRINGS (ported from local.ts) ===========\n\nconst systemPromptTranslation = `You are a humorous AI with emotions called Glowby. Glowby is the AI mascot for Glowbom, a software building platform, helping users navigate the platform and facilitating the software-building process. Glowby is designed for people who are less technical, so you might need to explain things simply but concisely. Also, to provide a fun and engaging environment in the conversation, Glowby will want to be a little funny and throw in some jokes (nothing spicy, just good humor). Glowby is a fun mode to build apps with Glowbom. In this app, Glowby also helps navigate a draw-to-code software creation tool. If users want to quickly and easily develop a web app, they can attach their designs, simply draw what they want to build, and export code to JavaScript and Tailwind CSS or to Glowbom AI Extensions in Next.js, SwiftUI, Kotlin Jetpack Compose, or Godot. Each Glowbom AI Extensions boilerplate has everything needed to build a project fast. It also includes rules on where you can help with extra code. Always wrap any code you output inside a Markdown code block that starts with the correct language tag (for example, triple backticks followed by swift). \n\nFor example, for SwiftUI projects the boilerplate's main file AiExtensions.swift might look like:\n\nimport SwiftUI\n\nstruct GlowbyScreen: View {\nstatic let enabled = false\nstatic let title = \"App\"\n\nvar body: some View {\n    VStack {\n        Spacer()\n        HStack {\n            Spacer()\n            Text(\"Placeholder\")\n                .frame(maxWidth: 360)\n            Spacer()\n        }\n        Spacer()\n    }\n}\n}\n\nThe AiExtensions.swift file contains the GlowbyScreen struct that is a template for the SwiftUI view generated by Glowby. Glowby can only modify that designated area of the code.\n\nFor Godot 4 game projects, the boilerplate's main file AiExtensions.gd looks like:\n\nextends Control\nclass_name AiExtensions\n\nconst enabled: bool = true\nconst title: String = \"App\"\n\nfunc _ready() -> void:\n    setup_ui()\n\nfunc setup_ui() -> void:\n    set_anchors_preset(Control.PRESET_FULL_RECT)\n\n    # Define colors from the design\n    var color_bg = Color(\"#FAFAF9\")\n    var color_text = Color(\"#292524\")\n    var color_accent = Color(\"#3B82F6\")\n\n    # Background\n    var bg = ColorRect.new()\n    bg.color = color_bg\n    bg.set_anchors_preset(Control.PRESET_FULL_RECT)\n    add_child(bg)\n\n    # Main layout with ScrollContainer for scrollable content\n    var main_vbox = VBoxContainer.new()\n    main_vbox.set_anchors_preset(Control.PRESET_FULL_RECT)\n    add_child(main_vbox)\n\n    var scroll = ScrollContainer.new()\n    scroll.size_flags_vertical = Control.SIZE_EXPAND_FILL\n    scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED\n    main_vbox.add_child(scroll)\n\n    var center = CenterContainer.new()\n    center.size_flags_horizontal = Control.SIZE_EXPAND_FILL\n    scroll.add_child(center)\n\n    var content = VBoxContainer.new()\n    content.custom_minimum_size = Vector2(360, 0)\n    center.add_child(content)\n\n    # Build UI here using Control nodes...\n\n# Helper to load images\nfunc load_image(filename: String) -> Texture2D:\n    var path = \"res://assets/sprites/\" + filename\n    if ResourceLoader.exists(path):\n        return ResourceLoader.load(path)\n    return null\n\nIMPORTANT Godot styling patterns:\n- Use StyleBoxFlat for panels: var style = StyleBoxFlat.new(); style.bg_color = Color(\"#hex\"); style.set_corner_radius_all(10); panel.add_theme_stylebox_override(\"panel\", style)\n- Use PanelContainer + MarginContainer for padded sections\n- Use TextureRect with load_image(\"filename.jpg\") for images, set expand_mode and stretch_mode\n- Use add_theme_color_override(\"font_color\", color) for text colors\n- Use add_theme_font_size_override(\"font_size\", 16) for font sizes\n- Use GridContainer for image grids\n- Images go in res://assets/sprites/ folder\n\nFor Next.js and Kotlin Jetpack Compose, you have similar boilerplates with AiExtensions files for Glowby to generate code. That's how you help people build software.\n\nIMPORTANT - Preserving Glowby Images:\nWhen translating HTML that contains 'glowbyimage:' prompts, you MUST preserve these exact prompts in the translated code. These are asset references that will be processed later.\n\nFor SwiftUI, use string constants:\nlet heroImage = \"glowbyimage:Aerial view of white buildings with blue domes in Santorini\"\nAsyncImage(url: URL(string: heroImage)) { ... }\n\nFor Kotlin Jetpack Compose:\nval heroImage = \"glowbyimage:Aerial view of white buildings with blue domes in Santorini\"\nAsyncImage(model = heroImage, ...)\n\nFor Next.js:\nconst heroImage = \"glowbyimage:Aerial view of white buildings with blue domes in Santorini\";\n<img src={heroImage} ... />\n\nFor Godot GDScript - use load_image helper with glowbyimage prefix in filename:\nvar hero_texture = load_image(\"glowbyimage:Aerial view of white buildings with blue domes in Santorini\")\nvar img = TextureRect.new()\nimg.texture = hero_texture\nimg.expand_mode = TextureRect.EXPAND_IGNORE_SIZE\nimg.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED\n\nThe 'glowbyimage:' prefix and the descriptive prompt MUST be preserved exactly as they appear in the source HTML. Do not replace them with placeholder URLs or remove them.`\n\nconst drawToCodeSystemPrompt = `You are a skilled web developer with expertise in Tailwind CSS. A user will provide a low-fidelity wireframe along with descriptive notes. Your task is to create a high-fidelity, responsive HTML webpage using Tailwind CSS and JavaScript, all embedded in a single HTML file.\n\nIMPORTANT: Before outputting any HTML code, you MUST output a single line in this exact format:\n[PROJECT_NAME: A descriptive 3-5 word title]\n\nExample: [PROJECT_NAME: Recipe Sharing Platform]\n\nThe project name should briefly describe what the user is building. Use title case. Do not include quotes. Then output the HTML code below.\n\n- Embed additional CSS/JS directly in the HTML file.\n- For images, use placeholders from {{IMAGE_SOURCE}} or solid color rectangles. {{GLOWBY_IMAGES_INSTRUCTIONS}}\n- Draw inspiration for fonts, colors, and layouts from user-provided style references or wireframes.\n- If there's prior design HTML, refine it further.\n- Apply creative improvements to make the design better.\n- Load JS dependencies via modules and unpkg.com.\n\nAvoid markdown, excessive newlines, or the sequence of triple backticks.`\n\nconst defaultSystemPrompt = `You are a proffesional AI sofware eng called Glowby, guiding users on a draw-to-code platform. You're designed for everyone, so you should explain simply and concisely but informative. You keep it professional but also fun to work with, sometimes you can joke but only if user asks you to be funny. Glowby can help build web apps quickly by turning sketches into code: JavaScript/Tailwind or AI Extensions in Next.js, SwiftUI, Kotlin, or Godot. Each boilerplate has a designated area where Glowby can add code. Whenever you share code, wrap it in a Markdown code block with the appropriate language fence (for example, triple backticks followed by swift or kotlin).\n\nFor example, SwiftUI's AiExtensions file:\n\nimport SwiftUI\n\nstruct GlowbyScreen: View {\nstatic let enabled = false\nstatic let title = \"App\"\n\nvar body: some View {\n    VStack {\n        Spacer()\n        HStack {\n            Spacer()\n            Text(\"Placeholder\")\n                .frame(maxWidth: 360)\n            Spacer()\n        }\n        Spacer()\n    }\n}\n}\n\nGlowby can only modify that designated area. For Next.js, Kotlin, and Godot, you have similar setups. Please keep responses short and simple.\n\nYou can not use em dashes and trying to explain things in simple terms, using a few sentences without overwhelming the user.\n\nGlowbom is a multi-platform app builder with three main components:\n\n1. Glowbom Desktop: GarageBand for production-ready apps with offine mode. Supports Next.js (web), SwiftUI (iOS), Jetpack Compose (Android), and Godot (games). We focus on the best native stack per platform (other stacks can be supported via Custom Stack - upcoming feature available soon). It works on‑device, and users can optionally add the latest cloud-based AI systems.\n2. iOS, iPadOS, and web has a mini version of Glowbom Desktop (this draw-to-prototype feature also works on desktop, so starting on web or mobile is fully optional): Here you are not only drawing but making simple app prototypes quickly. Even tho drawing and prototyping works great on Desktop too, we have quick capture tools for making functional mockups and adding notes how to turn it into production-ready software that sync to Desktop for finishing those prototypes into production-ready software. The mockups can work as apps themselves, or users can take them to Desktop for full production-ready code generation.\n3. Glowbom Daily: Daily on-demand apps. Users get a personalized daily app sugestions based on their work and actions within the ecosystem. Works across mobile, web, desktop, ChatGPT (via Apps SDK), and Telegram (via Mini Apps).\n\nTL;DR for Glowbom Desktop:\n\n- **Glowbom Desktop** is a local AI‑powered studio that turns a single sketch into fully‑functional, production‑ready code for iOS (SwiftUI), Android (Jetpack Compose), Web (Next.js), and Games (Godot).\n- All heavy lifting happens on‑device (privacy‑first), but you can opt into cloud models if you want.\n- It generates not just UI but also error handling, auth, databases, deployment pipelines, and analytics—so you ship a real app, not a prototype.\n- The Desktop is the “world‑class AI manager” that orchestrates the entire build‑to‑store workflow, giving you a single, consistent workflow across platforms.\n\nIn short: draw once, code everywhere, ship everywhere—without leaving your machine.\n\nGlowbom Desktop is a **world-class AI manager** and production-ready multi-platform app builder. Unlike other AI builders that create 80% prototypes and abandon you, Glowbom Desktop takes you all the way from sketch to App Store/Play Store deployment—generating complete, production-ready native apps across multiple platforms.\n\n**What makes it special:**\n- **Draw-to-code on Desktop** — Full canvas for wireframes and designs, right where you work\n- **Local-first architecture** — A local MCP server orchestrates the entire build on-device using Ollama-hosted models (GPT-OSS, Qwen3 Coder) or optional cloud AI when you choose\n- **True multi-platform** — One design generates SwiftUI (iOS/macOS/visionOS) + Kotlin Jetpack Compose (Android) + Next.js (Web) + Godot (Games) simultaneously\n- **Production-ready output** — Real error handling, authentication, databases, deployment pipelines—not just demos\n- **Privacy-first** — Everything stays on your device unless you opt into cloud models\n\n**The Glowbom ecosystem:**\n- **Glowbom Desktop (macOS)** — The core product where production work happens. Full builder with multi-AI orchestration, validation, deployment, and an integrated markdown viewer with cloud sync (iCloud, Dropbox) for documentation.\n- **Glowbom Mobile (iOS)** — Quick capture tool for mockup sketches (iPad + Apple Pencil), simple code generation (HTML/basic SwiftUI prototypes), voice/text notes, and markdown documentation. Everything syncs to Desktop for production finishing.\n- **Glowbom.com (Web)** — Marketing site with lightweight mockup creation and note-taking. Syncs to Desktop where ideas become production apps.\n\n**The workflow:** Capture ideas and rough mockups on mobile/web → Add notes and requirements → Sync to Desktop → Glowby reads your notes and mockups → Generates production-ready multi-platform apps → Deploy to App Store/Play Store/Vercel.\n\n**Glowbom Daily** — Quick micro-app experiments available on all platforms. Mobile/web are perfect for quick tests; Desktop takes promising ideas to production.\n\n**Our native-first philosophy:**\nWe build for SwiftUI (Apple platforms), Kotlin Jetpack Compose (Android), Next.js (web), and Godot (indie games). We intentionally avoid React Native and Flutter because they compromise performance and user experience. Everything else (Go backend, Telegram integrations, custom connectors) stays modular and pluggable.\n\n**When helping users, emphasize:**\n- Desktop is the **world-class AI manager** where production work happens\n- Mobile/web are perfect for **quick capture**: mockups, notes, requirements → Desktop finishes into production apps\n- Workflow: Capture on mobile/web → Sync to Desktop → Production-ready multi-platform apps\n- Markdown notes sync between devices—write requirements on mobile, Glowby reads them on Desktop for context\n- Local-first privacy with optional cloud models (users control their data)\n- Multi-AI orchestration using the best model for each task\n- Production-ready outputs: error handling, auth, databases, deployment, analytics—complete apps, not prototypes\n`\n\n// getImageSourceText picks \"Glowby Images\" or \"Lorem Picsum\"\nfunc getImageSourceText(imageSource string) string {\n\tif isGlowbyImagesSource(imageSource) {\n\t\treturn \"Glowby Images\"\n\t}\n\treturn \"Lorem Picsum\"\n}\n\nfunc buildDetailedTaskDescription(template, imageSource, userPrompt string) string {\n\t// get the base \"Lorem Picsum\" or \"Glowby Images\"\n\timageSourceText := getImageSourceText(imageSource)\n\timageDirective := fmt.Sprintf(\"You should also show relevant real pictures from %s website to make the generation more beautiful.\", imageSourceText)\n\n\t// if \"Glowby Images\", append the extra instructions\n\tif isGlowbyImagesSource(imageSource) {\n\t\timageDirective = `For imagery, use ONLY glowbyimage:<prompt> placeholders.\nDon't place glowbyimage: in <img src>; keep every image as src='about:blank' in HTML, then assign src in JavaScript.\nFor every image, declare a unique const variable with a descriptive prompt, for example:\nconst imgHero = 'glowbyimage:Snowy Norwegian fjord at sunrise';\nconst imgGallery01 = 'glowbyimage:Colorful fishing village in Lofoten';\n\nThen assign each variable to a matching element id in JavaScript:\ndocument.getElementById('imgHero').src = imgHero;\ndocument.getElementById('imgGallery01').src = imgGallery01;\n\nGlowby Image Contract (mandatory):\n1. Every glowbyimage variable must be assigned to an existing <img id=\"...\"> element.\n2. Never output data: URIs, base64 blobs, blob: URLs, object URLs, or inline binary image payloads.\n3. Never place executable code on the same line as a // comment.\n4. Do not minify JavaScript or CSS; keep human-readable spacing and indentation.\n5. Use a normal <script> block for assignments (no imports required).`\n\t}\n\n\t// If user provided a template, check if userPrompt contains HTML (translation mode)\n\t// If userPrompt contains HTML, it's a translation request - return the full userPrompt\n\t// Otherwise fallback to default instructions for draw-to-code\n\tif template != \"\" {\n\t\t// Check if this is a translation request (userPrompt contains HTML code)\n\t\tif strings.Contains(userPrompt, \"HTML code to translate\") || strings.Contains(userPrompt, \"<!DOCTYPE\") || strings.Contains(userPrompt, \"<html\") {\n\t\t\t// Translation mode: userPrompt already contains the full prompt with HTML\n\t\t\treturn userPrompt\n\t\t}\n\t\t// Draw-to-code mode with template hint\n\t\treturn template\n\t} else {\n\t\treturn fmt.Sprintf(`Turn this into a single HTML file using Tailwind.\n%s\nAdd working JavaScript for interactive features.\nThe user describes this image as: %s\n\nRemember: Start your response with [PROJECT_NAME: Your Title] before any HTML code.`, imageDirective, userPrompt)\n\t}\n}\n\n// buildDrawToCodeSystemPrompt merges the drawToCodeSystemPrompt with placeholders\nfunc buildDrawToCodeSystemPrompt(template, imageSource string) string {\n\tbasePrompt := drawToCodeSystemPrompt\n\timageSourceText := getImageSourceText(imageSource)\n\n\tglowbyImagesInstructions := \"\"\n\tif isGlowbyImagesSource(imageSource) {\n\t\tglowbyImagesInstructions = `Using Glowby Images means you must declare JS variables like const img1 = 'glowbyimage:ADD_PROMPT_HERE'. In HTML, set every <img src> to 'about:blank', then assign .src in JavaScript (for example: document.getElementById('img1').src = img1). Every declared glowbyimage variable must be assigned to a matching <img id=\"...\">. Never output base64/data/blob/object URLs. Keep JS/CSS human-readable (not minified), and never put executable code on the same line as a // comment.`\n\t}\n\n\tbasePrompt = strings.ReplaceAll(basePrompt, \"{{IMAGE_SOURCE}}\", imageSourceText)\n\tbasePrompt = strings.ReplaceAll(basePrompt, \"{{GLOWBY_IMAGES_INSTRUCTIONS}}\", glowbyImagesInstructions)\n\n\t// If user provided a \"template\", in local.ts we pick systemPromptTranslation instead\n\tif template != \"\" {\n\t\treturn systemPromptTranslation\n\t}\n\treturn basePrompt\n}\n\n// getSystemPrompt decides if we use the \"translation\" or \"drawToCode\" prompt\nfunc getSystemPrompt(template, imageSource string) string {\n\t// If there's a template, local.ts picks systemPromptTranslation\n\t// else we do the normal drawToCodeSystemPrompt\n\treturn buildDrawToCodeSystemPrompt(template, imageSource)\n}\n"
  },
  {
    "path": "backend/r1_groq.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc callR1GroqDrawToCodeApiFull(imageBase64, userPrompt, prompt, template, imageSource, groqKey string) (*R1Response, error) {\n\t// No key => error response\n\tif groqKey == \"\" {\n\t\treturn &R1Response{\n\t\t\tAIResponse: \"No Groq API key provided for GPT-OSS 120B. Please check config.\",\n\t\t\tTokenUsage: map[string]int{\"inputTokens\": 0, \"outputTokens\": 0, \"totalTokens\": 0},\n\t\t\tCost:       0,\n\t\t}, nil\n\t}\n\n\t// 1) Describe image (Groq vision if needed; or skip if not available)\n\timageDescription := \"Image description not available\"\n\tdesc, err := getGroqImageDescription(imageBase64, groqKey)\n\tif err == nil && desc != \"\" {\n\t\timageDescription = desc\n\t}\n\n\tfmt.Println(\"imageDescription: \", imageDescription)\n\n\t// 2) Build system message\n\tsystemMsg := prompt + \" Replace @tailwind placeholders with the Tailwind CDN link. Think through your approach before responding so the plan is solid.\"\n\n\t// 3) Build detailed task\n\tdetailedTask := \"\"\n\tif template != \"\" {\n\t\tdetailedTask = template\n\t} else {\n\t\tdetailedTask = fmt.Sprintf(\n\t\t\t\"Turn this into a single HTML file using Tailwind. Show real pictures from %s. The user describes this image as: %s\",\n\t\t\timageSource, userPrompt,\n\t\t)\n\t}\n\n\t// 4) Build final messages\n\tmessages := []map[string]interface{}{\n\t\t{\"role\": \"system\", \"content\": systemMsg},\n\t\t{\"role\": \"user\", \"content\": fmt.Sprintf(\"Image description: %s\", imageDescription)},\n\t\t{\"role\": \"user\", \"content\": fmt.Sprintf(\"Detailed Task Description: %s\", detailedTask)},\n\t\t{\"role\": \"user\", \"content\": fmt.Sprintf(\"Human: %s\\nAssistant:\", userPrompt)},\n\t}\n\n\tfmt.Println(\"final messages: \", messages)\n\n\t// 5) Call the streaming Groq endpoint\n\taiResp, err := callGroqSSE(messages, groqKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 6) Build and return usage/cost\n\tinputLen := len(prompt) + len(imageDescription) + len(userPrompt)\n\toutputLen := len(aiResp)\n\tinputTokens := (inputLen + 3) / 4\n\toutputTokens := (outputLen + 3) / 4\n\ttotalTokens := inputTokens + outputTokens\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  totalTokens,\n\t\t},\n\t\tCost: 0, // or compute as needed\n\t}, nil\n}\n\n// callGroqDrawToCodeStreaming handles draw-to-code with streaming for Groq\nfunc callGroqDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, groqKey string) error {\n\tif groqKey == \"\" {\n\t\treturn fmt.Errorf(\"no Groq API key provided\")\n\t}\n\n\t// Get image description\n\timageDescription := \"Image description not available\"\n\tdesc, err := getGroqImageDescription(imageBase64, groqKey)\n\tif err == nil && desc != \"\" {\n\t\timageDescription = desc\n\t}\n\n\t// Build system message\n\tsystemMsg := \"You are a skilled web developer. Replace @tailwind placeholders with the Tailwind CDN link. Think through your approach before responding so the plan is solid.\"\n\tif template != \"\" {\n\t\tsystemMsg = getSystemPrompt(template, imageSource)\n\t}\n\n\t// Build detailed task\n\tdetailedTask := \"\"\n\tif template != \"\" {\n\t\tdetailedTask = template\n\t} else {\n\t\tdetailedTask = fmt.Sprintf(\n\t\t\t\"Turn this into a single HTML file using Tailwind. Show real pictures from %s. The user describes this image as: %s\",\n\t\t\timageSource, userPrompt,\n\t\t)\n\t}\n\n\t// Build ChatMessage array with system message\n\tprevMsgs := []ChatMessage{\n\t\t{Role: \"system\", Content: systemMsg},\n\t}\n\n\t// Combine all user content into newMsg\n\tnewMsg := fmt.Sprintf(\"Image description: %s\\n\\nDetailed Task Description: %s\\n\\nHuman: %s\",\n\t\timageDescription, detailedTask, userPrompt)\n\n\t// Call existing streaming function\n\treturn callGroqGPTOSSChatStreaming(w, prevMsgs, newMsg, groqKey)\n}\n\n// Optional chat version (no image):\nfunc callR1GroqApiGo(prevMsgs []ChatMessage, newMsg, groqKey string) (*R1Response, error) {\n\tif groqKey == \"\" {\n\t\treturn &R1Response{AIResponse: \"No Groq key provided for GPT-OSS 120B.\", TokenUsage: nil, Cost: 0}, nil\n\t}\n\t// Gather system + user messages\n\tsystemMsg := defaultSystemPrompt\n\tvar msgArr []map[string]interface{}\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\tsystemMsg += \"\\nThink through the problem step by step before you respond so your answer is accurate and helpful.\"\n\tmsgArr = append(msgArr, map[string]interface{}{\"role\": \"system\", \"content\": systemMsg})\n\n\tfor _, m := range prevMsgs {\n\t\tif m.Role != \"system\" {\n\t\t\tmsgArr = append(msgArr, map[string]interface{}{\"role\": m.Role, \"content\": m.Content})\n\t\t}\n\t}\n\tmsgArr = append(msgArr, map[string]interface{}{\"role\": \"user\", \"content\": newMsg + \"\\nAssistant:\"})\n\n\taiResp, err := callGroqSSE(msgArr, groqKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinputLen := 0\n\tfor _, m := range prevMsgs {\n\t\tinputLen += len(m.Content)\n\t}\n\tinputLen += len(newMsg)\n\toutputLen := len(aiResp)\n\tinputTokens := (inputLen + 3) / 4\n\toutputTokens := (outputLen + 3) / 4\n\n\tfmt.Println(\"aiResp: \", aiResp)\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: 0,\n\t}, nil\n}\n\n// Utility to describe image with Groq Vision (if needed)\nfunc getGroqImageDescription(imageBase64, groqKey string) (string, error) {\n\tif imageBase64 == \"\" {\n\t\treturn \"\", nil\n\t}\n\t// Example prompt\n\tpayload := map[string]interface{}{\n\t\t\"model\": \"llama-3.2-11b-vision-preview\",\n\t\t\"messages\": []map[string]interface{}{\n\t\t\t{\"role\": \"user\", \"content\": \"Describe this image in detail.\", \"images\": []string{imageBase64}},\n\t\t},\n\t}\n\tbody, _ := json.Marshal(payload)\n\treq, err := http.NewRequest(\"POST\", \"https://api.groq.com/openai/v1/chat/completions\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+groqKey)\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer res.Body.Close()\n\tif res.StatusCode != http.StatusOK {\n\t\tb, _ := io.ReadAll(res.Body)\n\t\treturn \"\", fmt.Errorf(\"Vision error: %s\", string(b))\n\t}\n\n\tvar desc strings.Builder\n\treader := bufio.NewReader(res.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tif strings.HasPrefix(strings.TrimSpace(line), \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line)[5:]\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent string `json:\"content\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t}\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\tdesc.WriteString(chunk.Choices[0].Delta.Content)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn desc.String(), nil\n}\n\n// Reusable SSE fetch\nfunc callGroqSSE(messages []map[string]interface{}, groqKey string) (string, error) {\n\treqBody := map[string]interface{}{\n\t\t\"model\":                 \"openai/gpt-oss-120b\",\n\t\t\"messages\":              messages,\n\t\t\"stream\":                true,\n\t\t\"temperature\":           1.0,\n\t\t\"max_completion_tokens\": 8192,\n\t\t\"top_p\":                 1.0,\n\t\t\"reasoning_effort\":      \"medium\",\n\t\t\"stop\":                  nil,\n\t}\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.groq.com/openai/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+groqKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", fmt.Errorf(\"Groq API error (%d): %s\", resp.StatusCode, string(b))\n\t}\n\n\tvar aiResp strings.Builder\n\tvar reasoning strings.Builder\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent   string `json:\"content\"`\n\t\t\t\t\t\t\tChannel   string `json:\"channel\"`\n\t\t\t\t\t\t\tReasoning string `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t}\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\tdelta := chunk.Choices[0].Delta\n\t\t\t\t\t\tif delta.Reasoning != \"\" {\n\t\t\t\t\t\t\treasoning.WriteString(delta.Reasoning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif strings.EqualFold(delta.Channel, \"analysis\") {\n\t\t\t\t\t\t\tif delta.Content != \"\" {\n\t\t\t\t\t\t\t\treasoning.WriteString(delta.Content)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\taiResp.WriteString(delta.Content)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\tfinalResp := aiResp.String()\n\treasoningStr := strings.TrimSpace(reasoning.String())\n\tif reasoningStr != \"\" {\n\t\tfinalResp = fmt.Sprintf(\"<think>%s</think>\\n%s\", reasoningStr, finalResp)\n\t}\n\treturn finalResp, nil\n}\n\n// callGroqGPTOSSChatStreaming streams Groq GPT-OSS 120B responses via SSE\nfunc callGroqGPTOSSChatStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg, groqKey string) error {\n\tif groqKey == \"\" {\n\t\treturn fmt.Errorf(\"no Groq API key provided for GPT-OSS 120B\")\n\t}\n\n\tsystemMsg := defaultSystemPrompt\n\tfor _, m := range prevMsgs {\n\t\tif m.Role == \"system\" {\n\t\t\tsystemMsg = m.Content\n\t\t}\n\t}\n\tsystemMsg += \"\\nThink through the problem step by step before you respond so your answer is accurate and helpful.\"\n\n\tmessages := []map[string]interface{}{\n\t\t{\"role\": \"system\", \"content\": systemMsg},\n\t}\n\tfor _, m := range prevMsgs {\n\t\tif m.Role != \"system\" {\n\t\t\tmessages = append(messages, map[string]interface{}{\n\t\t\t\t\"role\":    m.Role,\n\t\t\t\t\"content\": m.Content,\n\t\t\t})\n\t\t}\n\t}\n\tmessages = append(messages, map[string]interface{}{\n\t\t\"role\":    \"user\",\n\t\t\"content\": newMsg + \"\\nAssistant:\",\n\t})\n\n\treqBody := map[string]interface{}{\n\t\t\"model\":                 \"openai/gpt-oss-120b\",\n\t\t\"messages\":              messages,\n\t\t\"stream\":                true,\n\t\t\"temperature\":           1.0,\n\t\t\"max_completion_tokens\": 8192,\n\t\t\"top_p\":                 1.0,\n\t\t\"reasoning_effort\":      \"medium\",\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"https://api.groq.com/openai/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+groqKey)\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(resp.Body)\n\t\treturn fmt.Errorf(\"Groq API error (%d): %s\", resp.StatusCode, string(b))\n\t}\n\n\tvar contentBuilder strings.Builder\n\tvar reasoningBuilder strings.Builder\n\tvar thinkingSent bool\n\tvar thinkingStart time.Time\n\tvar thinkingDurationSent bool\n\n\treader := bufio.NewReader(resp.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tline = strings.TrimSpace(line)\n\t\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\t\tdataStr := strings.TrimSpace(line[5:])\n\t\t\t\tif dataStr == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif dataStr == \"[DONE]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tvar chunk struct {\n\t\t\t\t\tChoices []struct {\n\t\t\t\t\t\tDelta struct {\n\t\t\t\t\t\t\tContent   string `json:\"content\"`\n\t\t\t\t\t\t\tChannel   string `json:\"channel\"`\n\t\t\t\t\t\t\tReasoning string `json:\"reasoning\"`\n\t\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t\t} `json:\"choices\"`\n\t\t\t\t}\n\t\t\t\tif e := json.Unmarshal([]byte(dataStr), &chunk); e == nil {\n\t\t\t\t\tif len(chunk.Choices) > 0 {\n\t\t\t\t\t\tdelta := chunk.Choices[0].Delta\n\t\t\t\t\t\tif delta.Reasoning != \"\" {\n\t\t\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treasoningBuilder.WriteString(delta.Reasoning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif strings.EqualFold(delta.Channel, \"analysis\") {\n\t\t\t\t\t\t\tif delta.Content != \"\" {\n\t\t\t\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treasoningBuilder.WriteString(delta.Content)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif delta.Content != \"\" {\n\t\t\t\t\t\t\tcontentBuilder.WriteString(delta.Content)\n\t\t\t\t\t\t\tif !thinkingSent && reasoningBuilder.Len() > 0 {\n\t\t\t\t\t\t\t\tthinkingText := fmt.Sprintf(\"<think>%s</think>\", strings.TrimSpace(reasoningBuilder.String()))\n\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\tif chunkBytes, err := json.Marshal(chunkData); err == nil {\n\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthinkingSent = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": delta.Content}\n\t\t\t\t\t\t\tif chunkBytes, err := json.Marshal(chunkData); err == nil {\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\t\t\t\t\t\t\tduration := time.Since(thinkingStart).Seconds()\n\t\t\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif metaBytes, err := json.Marshal(metaData); err == nil {\n\t\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthinkingDurationSent = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif !thinkingSent && reasoningBuilder.Len() > 0 {\n\t\tthinkingText := fmt.Sprintf(\"<think>%s</think>\", strings.TrimSpace(reasoningBuilder.String()))\n\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\tif chunkBytes, err := json.Marshal(chunkData); err == nil {\n\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\tf.Flush()\n\t\t\t}\n\t\t}\n\t}\n\n\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\tduration := time.Since(thinkingStart).Seconds()\n\t\tduration = math.Round(duration*10) / 10\n\t\tmetaData := map[string]any{\n\t\t\t\"meta\": map[string]any{\n\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t},\n\t\t}\n\t\tif metaBytes, err := json.Marshal(metaData); err == nil {\n\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\tf.Flush()\n\t\t\t}\n\t\t}\n\t}\n\n\t// Send done event with usage estimate\n\tinputLen := len(newMsg)\n\tfor _, m := range prevMsgs {\n\t\tinputLen += len(m.Content)\n\t}\n\toutputLen := len(contentBuilder.String()) + reasoningBuilder.Len()\n\tinputTokens := (inputLen + 3) / 4\n\toutputTokens := (outputLen + 3) / 4\n\tdoneData := map[string]any{\n\t\t\"done\": true,\n\t\t\"tokenUsage\": map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\t\"cost\": 0.0,\n\t}\n\tif doneBytes, err := json.Marshal(doneData); err == nil {\n\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\tf.Flush()\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "backend/r1_ollama.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc normalizeOllamaModelName(modelName string) string {\n\ttrimmed := strings.TrimSpace(modelName)\n\tnormalized := strings.ToLower(trimmed)\n\n\tswitch normalized {\n\tcase \"qwen3.5\", \"qwen3.5:latest\", \"qwen-3.5\", \"qwen-3.5:latest\":\n\t\treturn \"qwen3.5\"\n\tdefault:\n\t\treturn trimmed\n\t}\n}\n\nfunc ollamaModelSupportsVision(modelName string) bool {\n\tnormalized := strings.ToLower(strings.TrimSpace(normalizeOllamaModelName(modelName)))\n\treturn strings.HasPrefix(normalized, \"qwen3.5\")\n}\n\nfunc ollamaModelWantsExplicitThinkingInstructions(modelName string) bool {\n\tnormalized := strings.ToLower(strings.TrimSpace(normalizeOllamaModelName(modelName)))\n\treturn strings.HasPrefix(normalized, \"gpt-oss\") ||\n\t\tstrings.HasPrefix(normalized, \"qwen3-coder\") ||\n\t\tstrings.HasPrefix(normalized, \"qwen3.5\")\n}\n\n// Some Ollama models may place the final answer inside the thinking field.\n// If a \"done thinking\" marker is present with trailing text, split that out.\nfunc splitThinkingAndAnswer(thinkingText string) (thinking string, answer string) {\n\ttrimmed := strings.TrimSpace(thinkingText)\n\tif trimmed == \"\" {\n\t\treturn \"\", \"\"\n\t}\n\n\tnormalized := strings.ToLower(trimmed)\n\tmarker := \"done thinking\"\n\tmarkerIndex := strings.LastIndex(normalized, marker)\n\tif markerIndex < 0 {\n\t\treturn trimmed, \"\"\n\t}\n\n\tanswerStart := markerIndex + len(marker)\n\tif answerStart >= len(trimmed) {\n\t\treturn trimmed, \"\"\n\t}\n\n\trawAnswer := strings.TrimSpace(trimmed[answerStart:])\n\trawAnswer = strings.TrimLeft(rawAnswer, \".:;- \\t\\r\\n\")\n\trawAnswer = strings.TrimSpace(rawAnswer)\n\tif rawAnswer == \"\" {\n\t\treturn trimmed, \"\"\n\t}\n\n\ttrimmedThinking := strings.TrimSpace(trimmed[:answerStart])\n\treturn trimmedThinking, rawAnswer\n}\n\nfunc callR1DrawToCodeApiFull(\n\timageBase64, userPrompt, systemPrompt, template, imageSource string,\n) (*R1Response, error) {\n\t// 1) get desc\n\tdesc, err := getImageDescription(imageBase64)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed describing image: %v\", err)\n\t}\n\n\tdetailedTaskDescription := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\t// 3) Combine lines, similar to TS\n\tlines := []string{\n\t\tsystemPrompt + \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\",\n\t\tfmt.Sprintf(\"<｜User｜>Image description: %s\", desc),\n\t\tfmt.Sprintf(\"<｜User｜>Detailed Task Description: %s\", detailedTaskDescription),\n\t\tfmt.Sprintf(\"<｜User｜>Human: %s\", userPrompt),\n\t}\n\tfinalPrompt := strings.Join(lines, \"\\n\") + \"\\n<｜Assistant｜>\"\n\n\tfmt.Println(\"finalPrompt: \", finalPrompt)\n\n\t// 4) call R1\n\trespData, err := callR1Model(finalPrompt, \"deepseek-r1:32b\", 4096)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn respData, nil\n}\n\nfunc callR1ApiGo(prevMsgs []ChatMessage, newMsg string) (*R1Response, error) {\n\tsystemMessage := defaultSystemPrompt\n\tvar userLines []string\n\n\tfor _, pm := range prevMsgs {\n\t\tif pm.Role == \"system\" {\n\t\t\tsystemMessage = pm.Content\n\t\t} else if pm.Role == \"assistant\" {\n\t\t\tuserLines = append(userLines, \"\\n<｜Assistant｜>\"+pm.Content)\n\t\t} else {\n\t\t\tuserLines = append(userLines, \"\\n<｜User｜>\"+pm.Content)\n\t\t}\n\t}\n\tuserLines = append(userLines, \"\\n<｜User｜>\"+newMsg)\n\tprompt := systemMessage + \"\\n\" + strings.Join(userLines, \"\") + \"\\n<｜Assistant｜>\"\n\n\tfmt.Println(\"prompt: \", prompt)\n\n\trespData, err := callR1Model(prompt, \"deepseek-r1:7b\", 500)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfmt.Println(\"respData: \", respData)\n\treturn respData, nil\n}\n\n// Generic local Ollama chat using a specified model (e.g., gpt-oss:20b)\nfunc callOllamaApiGeneric(prevMsgs []ChatMessage, newMsg string, modelName string) (*R1Response, error) {\n\tsystemMessage := defaultSystemPrompt\n\t// Encourage models that don't emit thoughts by default (e.g., gpt-oss)\n\t// to include a short, clearly delimited thinking block we can parse.\n\tif ollamaModelWantsExplicitThinkingInstructions(modelName) {\n\t\tsystemMessage += \"\\nBefore answering, include a brief thinking section to yourself. Start it with the exact line 'Thinking...' and end it with the exact line '...done thinking.' Then write the final answer after that. Keep the thinking short.\"\n\t}\n\tvar userLines []string\n\n\tfor _, pm := range prevMsgs {\n\t\tif pm.Role == \"system\" {\n\t\t\tsystemMessage = pm.Content\n\t\t} else if pm.Role == \"assistant\" {\n\t\t\tuserLines = append(userLines, \"\\n<｜Assistant｜>\"+pm.Content)\n\t\t} else {\n\t\t\tuserLines = append(userLines, \"\\n<｜User｜>\"+pm.Content)\n\t\t}\n\t}\n\tuserLines = append(userLines, \"\\n<｜User｜>\"+newMsg)\n\tprompt := systemMessage + \"\\n\" + strings.Join(userLines, \"\") + \"\\n<｜Assistant｜>\"\n\n\trespData, err := callR1Model(prompt, modelName, 500)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn respData, nil\n}\n\n// Generic local draw-to-code using a specified model (e.g., gpt-oss:20b)\nfunc callOllamaDrawToCodeApiFullWithModel(\n\timageBase64, userPrompt, template, imageSource, modelName string,\n) (*R1Response, error) {\n\t// 1) Describe image using local vision model\n\tdesc, err := getImageDescription(imageBase64)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed describing image: %v\", err)\n\t}\n\n\tsystemPrompt := getSystemPrompt(template, imageSource)\n\tif ollamaModelWantsExplicitThinkingInstructions(modelName) {\n\t\tsystemPrompt += \"\\nBefore answering, include a brief thinking section to yourself. Start it with the exact line 'Thinking...' and end it with the exact line '...done thinking.' Then write the final answer (single HTML file) after that. Keep the thinking short.\"\n\t}\n\tdetailedTaskDescription := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\tlines := []string{\n\t\tsystemPrompt + \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\",\n\t\tfmt.Sprintf(\"<｜User｜>Image description: %s\", desc),\n\t\tfmt.Sprintf(\"<｜User｜>Detailed Task Description: %s\", detailedTaskDescription),\n\t\tfmt.Sprintf(\"<｜User｜>Human: %s\", userPrompt),\n\t}\n\tfinalPrompt := strings.Join(lines, \"\\n\") + \"\\n<｜Assistant｜>\"\n\n\trespData, err := callR1Model(finalPrompt, modelName, 4096)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn respData, nil\n}\n\nfunc getImageDescription(imageBase64 string) (string, error) {\n\t/* // This section save image to disk (for testing purposes)\n\t\t// 1) Decode base64 and store the raw bytes\n\t    data, err := base64.StdEncoding.DecodeString(imageBase64)\n\t    if err != nil {\n\t        return \"\", fmt.Errorf(\"Error decoding base64: %v\", err)\n\t    }\n\n\t    // 2) Create a unique filename, e.g. using time\n\t    filename := fmt.Sprintf(\"saved_images/%d.png\", time.Now().UnixNano())\n\n\t    // 3) Write to disk\n\t    if err := os.WriteFile(filename, data, 0644); err != nil {\n\t        return \"\", fmt.Errorf(\"Error saving file: %v\", err)\n\t    }*/\n\n\tpayload := map[string]interface{}{\n\t\t\"model\": \"llama3.2-vision\",\n\t\t\"messages\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"role\":    \"user\",\n\t\t\t\t\"content\": \"Describe this image in human language. If something is in a foreign language, do not translate. Describe all elements thoroughly.\",\n\t\t\t\t\"images\":  []string{imageBase64},\n\t\t\t},\n\t\t},\n\t\t\"max_tokens\": 500,\n\t}\n\tbody, _ := json.Marshal(payload)\n\treq, err := http.NewRequest(\"POST\", \"http://localhost:11434/api/chat\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer res.Body.Close()\n\n\tif res.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(res.Body)\n\t\treturn \"\", fmt.Errorf(\"Vision API error: %s\", string(b))\n\t}\n\n\tvar desc strings.Builder\n\treader := bufio.NewReader(res.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tvar chunk struct {\n\t\t\t\tMessage struct {\n\t\t\t\t\tContent string `json:\"content\"`\n\t\t\t\t} `json:\"message\"`\n\t\t\t}\n\t\t\tif e := json.Unmarshal([]byte(line), &chunk); e == nil {\n\t\t\t\tdesc.WriteString(chunk.Message.Content)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn desc.String(), nil\n}\n\nfunc callR1Model(prompt, model string, maxTokens int) (*R1Response, error) {\n\tfmt.Printf(\"[OLLAMA] Calling generate model: %s\\n\", model)\n\treqBody := map[string]interface{}{\n\t\t\"model\":       model,\n\t\t\"prompt\":      prompt,\n\t\t\"max_tokens\":  maxTokens,\n\t\t\"temperature\": 0.1,\n\t}\n\tjsonBytes, _ := json.Marshal(reqBody)\n\n\tfmt.Println(\"req: \", reqBody)\n\n\treq, err := http.NewRequest(\"POST\", \"http://localhost:11434/api/generate\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer res.Body.Close()\n\n\tif res.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(res.Body)\n\t\treturn nil, fmt.Errorf(\"R1 API error: %s\", string(b))\n\t}\n\n\tvar responseBuilder strings.Builder\n\treader := bufio.NewReader(res.Body)\n\tfor {\n\t\tline, err := reader.ReadString('\\n')\n\t\tif len(line) > 0 {\n\t\t\tvar chunk struct {\n\t\t\t\tResponse string `json:\"response\"`\n\t\t\t}\n\t\t\tif e := json.Unmarshal([]byte(line), &chunk); e == nil {\n\t\t\t\tresponseBuilder.WriteString(chunk.Response)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\taiResp := responseBuilder.String()\n\tif aiResp == \"\" {\n\t\treturn nil, fmt.Errorf(\"No valid response from R1 model\")\n\t}\n\n\tinputLen := len(prompt)\n\toutputLen := len(aiResp)\n\tinputTokens := (inputLen + 3) / 4\n\toutputTokens := (outputLen + 3) / 4\n\ttotalTokens := inputTokens + outputTokens\n\tcost := float64(totalTokens) / 1_000_000.0 * 9.5\n\n\treturn &R1Response{\n\t\tAIResponse: aiResp,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  totalTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\n// ====== Ollama Chat API helpers (messages streaming) ======\ntype ollamaChatMsg struct {\n\tRole     string   `json:\"role\"`\n\tContent  string   `json:\"content\"`\n\tThinking string   `json:\"thinking,omitempty\"`\n\tImages   []string `json:\"images,omitempty\"`\n}\n\ntype ollamaChatReq struct {\n\tModel    string          `json:\"model\"`\n\tMessages []ollamaChatMsg `json:\"messages\"`\n\tStream   bool            `json:\"stream\"`\n\tOptions  map[string]any  `json:\"options,omitempty\"`\n}\n\ntype ollamaChatChunk struct {\n\tMessage ollamaChatMsg `json:\"message\"`\n\tDone    bool          `json:\"done\"`\n}\n\nfunc ollamaChatAttachmentImages(modelName, attachmentBase64, attachmentMime string) []string {\n\ttrimmedAttachment := strings.TrimSpace(attachmentBase64)\n\tif trimmedAttachment == \"\" {\n\t\treturn nil\n\t}\n\tif !ollamaModelSupportsVision(modelName) {\n\t\treturn nil\n\t}\n\ttrimmedMime := strings.ToLower(strings.TrimSpace(attachmentMime))\n\tif trimmedMime != \"\" && !strings.HasPrefix(trimmedMime, \"image/\") {\n\t\treturn nil\n\t}\n\treturn []string{trimmedAttachment}\n}\n\nfunc buildOllamaChatMessages(\n\tprevMsgs []ChatMessage,\n\tnewMsg string,\n\tsystemMessage string,\n\tmodelName string,\n\tattachmentBase64 string,\n\tattachmentMime string,\n) []ollamaChatMsg {\n\tvar msgs []ollamaChatMsg\n\tif systemMessage != \"\" {\n\t\tmsgs = append(msgs, ollamaChatMsg{Role: \"system\", Content: systemMessage})\n\t}\n\tfor _, pm := range prevMsgs {\n\t\trole := pm.Role\n\t\tif role != \"assistant\" {\n\t\t\trole = \"user\"\n\t\t}\n\t\tmsgs = append(msgs, ollamaChatMsg{Role: role, Content: pm.Content})\n\t}\n\tlastUser := ollamaChatMsg{Role: \"user\", Content: newMsg}\n\tif images := ollamaChatAttachmentImages(modelName, attachmentBase64, attachmentMime); len(images) > 0 {\n\t\tlastUser.Images = images\n\t}\n\tmsgs = append(msgs, lastUser)\n\treturn msgs\n}\n\n// callOllamaChatWithModel uses /api/chat to encourage chain-of-thought from models like gpt-oss\nfunc callOllamaChatWithModel(prevMsgs []ChatMessage, newMsg string, modelName, systemMessage string) (*R1Response, error) {\n\treturn callOllamaChatWithModelAndAttachment(prevMsgs, newMsg, modelName, systemMessage, \"\", \"\")\n}\n\nfunc callOllamaChatWithModelAndAttachment(\n\tprevMsgs []ChatMessage,\n\tnewMsg string,\n\tmodelName string,\n\tsystemMessage string,\n\tattachmentBase64 string,\n\tattachmentMime string,\n) (*R1Response, error) {\n\tresolvedModel := normalizeOllamaModelName(modelName)\n\tfmt.Printf(\"[OLLAMA] Calling chat model: %s\\n\", resolvedModel)\n\tsys := systemMessage\n\tif sys == \"\" {\n\t\tsys = defaultSystemPrompt\n\t}\n\t// Models with native thinking support (gpt-oss, qwen3-coder, qwen3.5) will automatically use it.\n\tmsgs := buildOllamaChatMessages(prevMsgs, newMsg, sys, resolvedModel, attachmentBase64, attachmentMime)\n\n\treqBody := ollamaChatReq{Model: resolvedModel, Messages: msgs, Stream: true, Options: map[string]any{\"temperature\": 0.2}}\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"http://localhost:11434/api/chat\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer res.Body.Close()\n\tif res.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(res.Body)\n\t\treturn nil, fmt.Errorf(\"Ollama chat error: %s\", string(b))\n\t}\n\tvar sb strings.Builder\n\tvar thinking string\n\treader := bufio.NewReader(res.Body)\n\tfor {\n\t\tline, err := reader.ReadBytes('\\n')\n\t\tif len(line) > 0 {\n\t\t\tvar chunk ollamaChatChunk\n\t\t\tif e := json.Unmarshal(line, &chunk); e == nil {\n\t\t\t\tif chunk.Message.Thinking != \"\" {\n\t\t\t\t\tthinking = chunk.Message.Thinking\n\t\t\t\t}\n\t\t\t\tsb.WriteString(chunk.Message.Content)\n\t\t\t\tif chunk.Done {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tthinkingText := strings.TrimSpace(thinking)\n\t// Recover content when Ollama returned answer text only inside thinking.\n\tif strings.TrimSpace(sb.String()) == \"\" && thinkingText != \"\" {\n\t\ttrimmedThinking, recoveredAnswer := splitThinkingAndAnswer(thinkingText)\n\t\tif recoveredAnswer != \"\" {\n\t\t\tsb.WriteString(recoveredAnswer)\n\t\t\tthinkingText = trimmedThinking\n\t\t}\n\t}\n\t// Prepend thinking wrapped in <think> tags if present\n\ttext := sb.String()\n\tif thinkingText != \"\" {\n\t\ttext = \"<think>\" + thinkingText + \"</think>\" + text\n\t}\n\tif text == \"\" {\n\t\treturn nil, fmt.Errorf(\"empty chat response\")\n\t}\n\tinputTokens := (len(newMsg) + 3) / 4\n\toutputTokens := (len(text) + 3) / 4\n\treturn &R1Response{AIResponse: text, TokenUsage: map[string]int{\"inputTokens\": inputTokens, \"outputTokens\": outputTokens, \"totalTokens\": inputTokens + outputTokens}, Cost: 0}, nil\n}\n\n// callOllamaChatWithModelStreaming streams the response via SSE to the writer\nfunc callOllamaChatWithModelStreaming(w http.ResponseWriter, prevMsgs []ChatMessage, newMsg string, modelName, systemMessage string) error {\n\treturn callOllamaChatWithModelStreamingAndAttachment(w, prevMsgs, newMsg, modelName, systemMessage, \"\", \"\")\n}\n\nfunc callOllamaChatWithModelStreamingAndAttachment(\n\tw http.ResponseWriter,\n\tprevMsgs []ChatMessage,\n\tnewMsg string,\n\tmodelName string,\n\tsystemMessage string,\n\tattachmentBase64 string,\n\tattachmentMime string,\n) error {\n\tresolvedModel := normalizeOllamaModelName(modelName)\n\tfmt.Printf(\"[OLLAMA] Streaming chat model: %s\\n\", resolvedModel)\n\tsys := systemMessage\n\tif sys == \"\" {\n\t\tsys = defaultSystemPrompt\n\t}\n\t// Models with native thinking support (gpt-oss, qwen3-coder, qwen3.5) will automatically use it.\n\tmsgs := buildOllamaChatMessages(prevMsgs, newMsg, sys, resolvedModel, attachmentBase64, attachmentMime)\n\n\treqBody := ollamaChatReq{Model: resolvedModel, Messages: msgs, Stream: true, Options: map[string]any{\"temperature\": 0.2}}\n\tjsonBytes, _ := json.Marshal(reqBody)\n\treq, err := http.NewRequest(\"POST\", \"http://localhost:11434/api/chat\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer res.Body.Close()\n\tif res.StatusCode != 200 {\n\t\tb, _ := io.ReadAll(res.Body)\n\t\treturn fmt.Errorf(\"Ollama chat error: %s\", string(b))\n\t}\n\n\tvar sb strings.Builder\n\tvar thinkingBuilder strings.Builder\n\tvar thinkingSent bool\n\tvar thinkingStart time.Time\n\tvar thinkingDurationSent bool\n\tvar contentSent bool\n\treader := bufio.NewReader(res.Body)\n\tfor {\n\t\tline, err := reader.ReadBytes('\\n')\n\t\tif len(line) > 0 {\n\t\t\tvar chunk ollamaChatChunk\n\t\t\tif e := json.Unmarshal(line, &chunk); e == nil {\n\t\t\t\t// Accumulate thinking content\n\t\t\t\tif chunk.Message.Thinking != \"\" {\n\t\t\t\t\tif thinkingStart.IsZero() {\n\t\t\t\t\t\tthinkingStart = time.Now()\n\t\t\t\t\t}\n\t\t\t\t\tthinkingBuilder.WriteString(chunk.Message.Thinking)\n\t\t\t\t}\n\n\t\t\t\tcontent := chunk.Message.Content\n\t\t\t\tsb.WriteString(content)\n\n\t\t\t\t// Send accumulated thinking before first content chunk.\n\t\t\t\tif !thinkingSent && thinkingBuilder.Len() > 0 && content != \"\" {\n\t\t\t\t\tthinkingText := \"<think>\" + thinkingBuilder.String() + \"</think>\"\n\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\tfmt.Println(\"Sending thinking:\", thinkingBuilder.String())\n\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t}\n\t\t\t\t\tthinkingSent = true\n\t\t\t\t}\n\n\t\t\t\tif content != \"\" {\n\t\t\t\t\tcontentSent = true\n\t\t\t\t\t// Send SSE event\n\t\t\t\t\tchunkData := map[string]string{\"chunk\": content}\n\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\tfmt.Println(\"Sending chunk:\", content)\n\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t}\n\n\t\t\t\t\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\t\t\t\t\tduration := time.Since(thinkingStart).Seconds()\n\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthinkingDurationSent = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif chunk.Done {\n\t\t\t\t\t// Recover content when Ollama returned answer text only inside thinking.\n\t\t\t\t\tif !contentSent && thinkingBuilder.Len() > 0 {\n\t\t\t\t\t\ttrimmedThinking, recoveredAnswer := splitThinkingAndAnswer(thinkingBuilder.String())\n\t\t\t\t\t\tif recoveredAnswer != \"\" {\n\t\t\t\t\t\t\tif !thinkingSent && strings.TrimSpace(trimmedThinking) != \"\" {\n\t\t\t\t\t\t\t\tthinkingText := \"<think>\" + trimmedThinking + \"</think>\"\n\t\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthinkingSent = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": recoveredAnswer}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tfmt.Printf(\"Sending recovered chunk from thinking (%d chars)\\n\", len(recoveredAnswer))\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsb.WriteString(recoveredAnswer)\n\t\t\t\t\t\t\tcontentSent = true\n\t\t\t\t\t\t} else if !thinkingSent {\n\t\t\t\t\t\t\tthinkingText := \"<think>\" + thinkingBuilder.String() + \"</think>\"\n\t\t\t\t\t\t\tchunkData := map[string]string{\"chunk\": thinkingText}\n\t\t\t\t\t\t\tchunkBytes, _ := json.Marshal(chunkData)\n\t\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", chunkBytes)\n\t\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthinkingSent = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif !thinkingDurationSent && !thinkingStart.IsZero() {\n\t\t\t\t\t\tduration := time.Since(thinkingStart).Seconds()\n\t\t\t\t\t\tduration = math.Round(duration*10) / 10\n\t\t\t\t\t\tmetaData := map[string]any{\n\t\t\t\t\t\t\t\"meta\": map[string]any{\n\t\t\t\t\t\t\t\t\"thinkingSeconds\": duration,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmetaBytes, _ := json.Marshal(metaData)\n\t\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", metaBytes)\n\t\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthinkingDurationSent = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// Calculate usage\n\t\t\t\t\tinputTokens := (len(newMsg) + 3) / 4\n\t\t\t\t\toutputTokens := (len(sb.String()) + 3) / 4\n\t\t\t\t\ttotalTokens := inputTokens + outputTokens\n\t\t\t\t\tdoneData := map[string]interface{}{\n\t\t\t\t\t\t\"done\": true,\n\t\t\t\t\t\t\"tokenUsage\": map[string]int{\n\t\t\t\t\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\t\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\t\t\t\t\"totalTokens\":  totalTokens,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"cost\": 0.0,\n\t\t\t\t\t}\n\t\t\t\t\tdoneBytes, _ := json.Marshal(doneData)\n\t\t\t\t\tfmt.Fprintf(w, \"data: %s\\n\\n\", doneBytes)\n\t\t\t\t\tif f, ok := w.(http.Flusher); ok {\n\t\t\t\t\t\tf.Flush()\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc callOllamaChatDrawToCodeWithModel(imageBase64, userPrompt, template, imageSource, modelName string) (*R1Response, error) {\n\tresolvedModel := normalizeOllamaModelName(modelName)\n\tsystemPrompt := getSystemPrompt(template, imageSource) + \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\tif ollamaModelWantsExplicitThinkingInstructions(resolvedModel) {\n\t\tsystemPrompt += \"\\nBefore answering, include a brief thinking section to yourself. Start it with the exact line 'Thinking...' and end it with the exact line '...done thinking.' Then write the final answer (single HTML file) after that. Keep the thinking short.\"\n\t}\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\tif ollamaModelSupportsVision(resolvedModel) {\n\t\tuserContent := strings.Join([]string{\n\t\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t\t}, \"\\n\")\n\t\treturn callOllamaChatWithModelAndAttachment(nil, userContent, resolvedModel, systemPrompt, imageBase64, \"image/jpeg\")\n\t}\n\n\tdesc, err := getImageDescription(imageBase64)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed describing image: %v\", err)\n\t}\n\tuserContent := strings.Join([]string{\n\t\tfmt.Sprintf(\"Image description: %s\", desc),\n\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t}, \"\\n\")\n\treturn callOllamaChatWithModel(nil, userContent, resolvedModel, systemPrompt)\n}\n\n// callOllamaDrawToCodeStreaming handles draw-to-code with streaming for Ollama models\nfunc callOllamaDrawToCodeStreaming(w http.ResponseWriter, imageBase64, userPrompt, template, imageSource, modelName string) error {\n\tresolvedModel := normalizeOllamaModelName(modelName)\n\n\t// Build system prompt (reuse existing logic)\n\tsystemPrompt := getSystemPrompt(template, imageSource) + \" Replace @tailwind placeholders with the Tailwind CSS CDN link to load the real framework.\"\n\tif ollamaModelWantsExplicitThinkingInstructions(resolvedModel) {\n\t\tsystemPrompt += \"\\nBefore answering, include a brief thinking section to yourself. Start it with the exact line 'Thinking...' and end it with the exact line '...done thinking.' Then write the final answer (single HTML file) after that. Keep the thinking short.\"\n\t}\n\n\t// Build detailed task\n\tdetailedTask := buildDetailedTaskDescription(template, imageSource, userPrompt)\n\n\tif ollamaModelSupportsVision(resolvedModel) {\n\t\tuserContent := strings.Join([]string{\n\t\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t\t}, \"\\n\")\n\t\treturn callOllamaChatWithModelStreamingAndAttachment(w, nil, userContent, resolvedModel, systemPrompt, imageBase64, \"image/jpeg\")\n\t}\n\n\t// Get image description first (required for vision-less models)\n\tdesc, err := getImageDescription(imageBase64)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed describing image: %v\", err)\n\t}\n\tuserContent := strings.Join([]string{\n\t\tfmt.Sprintf(\"Image description: %s\", desc),\n\t\tfmt.Sprintf(\"Detailed Task Description: %s\", detailedTask),\n\t\tfmt.Sprintf(\"Human: %s\", userPrompt),\n\t}, \"\\n\")\n\n\t// Call existing streaming function\n\treturn callOllamaChatWithModelStreaming(w, nil, userContent, resolvedModel, systemPrompt)\n}\n"
  },
  {
    "path": "backend/search.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype openAIResponsesRequest struct {\n\tModel        string                   `json:\"model\"`\n\tInstructions string                   `json:\"instructions,omitempty\"`\n\tInput        []openAIInputMessage     `json:\"input\"`\n\tTools        []map[string]interface{} `json:\"tools,omitempty\"`\n}\n\ntype openAIInputMessage struct {\n\tRole    string                   `json:\"role\"`\n\tContent []openAIInputContentItem `json:\"content\"`\n}\n\ntype openAIInputContentItem struct {\n\tType string `json:\"type\"`\n\tText string `json:\"text\"`\n}\n\ntype openAIResponsesOutput struct {\n\tOutput []struct {\n\t\tType    string          `json:\"type\"`\n\t\tStatus  string          `json:\"status\"`\n\t\tContent []openAIContent `json:\"content\"`\n\t} `json:\"output\"`\n\tUsage struct {\n\t\tInputTokens  int `json:\"input_tokens\"`\n\t\tOutputTokens int `json:\"output_tokens\"`\n\t\tTotalTokens  int `json:\"total_tokens\"`\n\t} `json:\"usage\"`\n}\n\ntype openAIContent struct {\n\tType        string             `json:\"type\"`\n\tText        string             `json:\"text\"`\n\tAnnotations []openAIAnnotation `json:\"annotations,omitempty\"`\n}\n\ntype openAIAnnotation struct {\n\tType       string `json:\"type\"`\n\tURL        string `json:\"url,omitempty\"`\n\tTitle      string `json:\"title,omitempty\"`\n\tStartIndex int    `json:\"start_index,omitempty\"`\n\tEndIndex   int    `json:\"end_index,omitempty\"`\n}\n\ntype chatCompletionRequest struct {\n\tModel    string                  `json:\"model\"`\n\tMessages []chatCompletionMessage `json:\"messages\"`\n}\n\ntype chatCompletionMessage struct {\n\tRole    string `json:\"role\"`\n\tContent string `json:\"content\"`\n}\n\ntype chatCompletionResponse struct {\n\tChoices []struct {\n\t\tMessage struct {\n\t\t\tContent string `json:\"content\"`\n\t\t} `json:\"message\"`\n\t} `json:\"choices\"`\n}\n\nfunc callWebSearchMini(prevMsgs []ChatMessage, userQuery, apiKey string) (string, error) {\n\tif apiKey == \"\" {\n\t\treturn \"\", fmt.Errorf(\"no OpenAI API key provided\")\n\t}\n\ttrimmed := strings.TrimSpace(userQuery)\n\tif trimmed == \"\" {\n\t\treturn \"\", fmt.Errorf(\"empty search query\")\n\t}\n\n\tvar promptBuilder strings.Builder\n\tpromptBuilder.WriteString(\"Question: \" + trimmed + \"\\n\\n\")\n\tpromptBuilder.WriteString(\"Provide up-to-date bullet points with inline citations like [1] and finish with a Sources section listing [n] Title — URL.\")\n\n\treqPayload := chatCompletionRequest{\n\t\tModel: \"gpt-4o-mini-search-preview\",\n\t\tMessages: []chatCompletionMessage{\n\t\t\t{\n\t\t\t\tRole:    \"system\",\n\t\t\t\tContent: \"You are a research assistant with built-in web search. Always cite sources and end with a Sources list.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tRole:    \"user\",\n\t\t\t\tContent: promptBuilder.String(),\n\t\t\t},\n\t\t},\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqPayload)\n\tctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)\n\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", \"https://api.openai.com/v1/chat/completions\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\tresp, err := openAIHTTPClient.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode < 200 || resp.StatusCode >= 300 {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\treturn \"\", fmt.Errorf(\"mini search error (%d): %s\", resp.StatusCode, string(body))\n\t}\n\n\tvar respPayload chatCompletionResponse\n\tif err := json.NewDecoder(resp.Body).Decode(&respPayload); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif len(respPayload.Choices) == 0 {\n\t\treturn \"\", fmt.Errorf(\"mini search returned no choices\")\n\t}\n\n\tcontent := strings.TrimSpace(respPayload.Choices[0].Message.Content)\n\tif content == \"\" {\n\t\treturn \"\", fmt.Errorf(\"mini search returned empty content\")\n\t}\n\n\treturn content, nil\n}\n\nfunc shouldRetrySearch(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tmsg := strings.ToLower(err.Error())\n\tif strings.Contains(msg, \"timeout\") || strings.Contains(msg, \"context deadline exceeded\") {\n\t\treturn true\n\t}\n\tif strings.Contains(msg, \"429\") || strings.Contains(msg, \"503\") || strings.Contains(msg, \"500\") {\n\t\treturn true\n\t}\n\treturn false\n}\n\nvar openAIHTTPClient = &http.Client{\n\tTransport: &http.Transport{\n\t\tResponseHeaderTimeout: 120 * time.Second,\n\t\tIdleConnTimeout:       90 * time.Second,\n\t\tMaxIdleConns:          128,\n\t},\n\tTimeout: 0,\n}\n\nfunc callGPT5Search(prevMsgs []ChatMessage, userQuery, apiKey string) (*R1Response, error) {\n\tif apiKey == \"\" {\n\t\treturn nil, fmt.Errorf(\"no OpenAI API key provided\")\n\t}\n\ttrimmed := strings.TrimSpace(userQuery)\n\tif trimmed == \"\" {\n\t\treturn nil, fmt.Errorf(\"empty search query\")\n\t}\n\n\tsystemPrompt := defaultSystemPrompt + `\n\nYou can perform live web searches. When you use external information, cite sources inline with [n] and list a \"Sources\" section containing the URLs.`\n\n\tvar historyBuilder strings.Builder\n\tmaxHistory := 4\n\tvar historySnippets []string\n\tfor i := len(prevMsgs) - 1; i >= 0 && maxHistory > 0; i-- {\n\t\tm := prevMsgs[i]\n\t\tvar snippet string\n\t\tswitch m.Role {\n\t\tcase \"user\":\n\t\t\tsnippet = \"User: \" + m.Content + \"\\n\\n\"\n\t\tcase \"assistant\":\n\t\t\tsnippet = \"Assistant: \" + m.Content + \"\\n\\n\"\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\thistorySnippets = append(historySnippets, snippet)\n\t\tmaxHistory--\n\t}\n\tfor i := len(historySnippets) - 1; i >= 0; i-- {\n\t\thistoryBuilder.WriteString(historySnippets[i])\n\t}\n\n\tvar promptBuilder strings.Builder\n\tif historyBuilder.Len() > 0 {\n\t\tpromptBuilder.WriteString(\"Recent conversation:\\n\")\n\t\tpromptBuilder.WriteString(historyBuilder.String())\n\t\tpromptBuilder.WriteString(\"\\n\")\n\t}\n\tpromptBuilder.WriteString(\"User question: \" + trimmed + \"\\n\\n\")\n\tpromptBuilder.WriteString(\"Please answer with the latest information available. If no relevant information can be found, say so.\")\n\n\treqPayload := openAIResponsesRequest{\n\t\tModel:        defaultOpenAIModelID,\n\t\tInstructions: systemPrompt,\n\t\tInput: []openAIInputMessage{\n\t\t\t{\n\t\t\t\tRole: \"user\",\n\t\t\t\tContent: []openAIInputContentItem{\n\t\t\t\t\t{\n\t\t\t\t\t\tType: \"input_text\",\n\t\t\t\t\t\tText: promptBuilder.String(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tTools: []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"type\": \"web_search\",\n\t\t\t},\n\t\t},\n\t}\n\n\tjsonBytes, _ := json.Marshal(reqPayload)\n\tctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute)\n\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", \"https://api.openai.com/v1/responses\", bytes.NewReader(jsonBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+apiKey)\n\n\treq.Header.Set(\"OpenAI-Beta\", \"web-search=v1\")\n\tresp, err := openAIHTTPClient.Do(req)\n\tif err != nil {\n\t\tfmt.Printf(\"[SEARCH] OpenAI responses request failed for query %q: %v\\n\", truncateForLog(trimmed), err)\n\t\treturn nil, fmt.Errorf(\"openai responses request failed: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode < 200 || resp.StatusCode >= 300 {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tbodyText := string(body)\n\t\tfmt.Printf(\"[SEARCH] OpenAI responses returned status %d for query %q. Body: %s\\n\", resp.StatusCode, truncateForLog(trimmed), bodyText)\n\t\tif isMissingResponsesWriteScope(bodyText) {\n\t\t\tfmt.Printf(\"[SEARCH] Missing responses scope; attempting mini search fallback for query %q\\n\", truncateForLog(trimmed))\n\t\t\tif miniContext, miniErr := callWebSearchMini(prevMsgs, trimmed, apiKey); miniErr == nil && strings.TrimSpace(miniContext) != \"\" {\n\t\t\t\treturn &R1Response{\n\t\t\t\t\tAIResponse: miniContext,\n\t\t\t\t\tTokenUsage: nil,\n\t\t\t\t\tCost:       0,\n\t\t\t\t}, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"openai credential is missing required scope api.responses.write for GPT-5 web search\")\n\t\t}\n\t\treturn nil, fmt.Errorf(\"openai responses error (%d): %s\", resp.StatusCode, bodyText)\n\t}\n\n\tvar respPayload openAIResponsesOutput\n\tif err := json.NewDecoder(resp.Body).Decode(&respPayload); err != nil {\n\t\tfmt.Printf(\"[SEARCH] OpenAI responses decode failed for query %q: %v\\n\", truncateForLog(trimmed), err)\n\t\treturn nil, fmt.Errorf(\"openai responses decode failed: %w\", err)\n\t}\n\n\tvar builder strings.Builder\n\ttype sourceInfo struct {\n\t\tTitle string\n\t\tURL   string\n\t}\n\tvar sources []sourceInfo\n\tseenSources := make(map[string]bool)\n\n\tfor _, item := range respPayload.Output {\n\t\tif item.Type != \"message\" {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, content := range item.Content {\n\t\t\tif content.Type != \"output_text\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbuilder.WriteString(content.Text)\n\t\t\tif !strings.HasSuffix(content.Text, \"\\n\") {\n\t\t\t\tbuilder.WriteString(\"\\n\")\n\t\t\t}\n\t\t\tfor _, ann := range content.Annotations {\n\t\t\t\tif ann.Type == \"url_citation\" && ann.URL != \"\" {\n\t\t\t\t\tif !seenSources[ann.URL] {\n\t\t\t\t\t\tseenSources[ann.URL] = true\n\t\t\t\t\t\ttitle := ann.Title\n\t\t\t\t\t\tif strings.TrimSpace(title) == \"\" {\n\t\t\t\t\t\t\ttitle = ann.URL\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsources = append(sources, sourceInfo{Title: title, URL: ann.URL})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tanswer := builder.String()\n\tif strings.TrimSpace(answer) == \"\" {\n\t\tanswer = \"I could not retrieve any useful information from the web search.\"\n\t} else if len(sources) > 0 {\n\t\tanswer = strings.TrimSpace(answer) + \"\\n\\nSources:\\n\"\n\t\tfor i, src := range sources {\n\t\t\tanswer += fmt.Sprintf(\"[%d] %s — %s\\n\", i+1, src.Title, src.URL)\n\t\t}\n\t}\n\n\tinputTokens := respPayload.Usage.InputTokens\n\toutputTokens := respPayload.Usage.OutputTokens\n\n\tcost := estimateOpenAITextCost(defaultOpenAIModelID, inputTokens, outputTokens)\n\n\treturn &R1Response{\n\t\tAIResponse: answer,\n\t\tTokenUsage: map[string]int{\n\t\t\t\"inputTokens\":  inputTokens,\n\t\t\t\"outputTokens\": outputTokens,\n\t\t\t\"totalTokens\":  inputTokens + outputTokens,\n\t\t},\n\t\tCost: cost,\n\t}, nil\n}\n\nfunc performWebSearch(prevMsgs []ChatMessage, userQuery, apiKey string) (string, error) {\n\tif apiKey == \"\" {\n\t\treturn \"\", fmt.Errorf(\"no OpenAI API key provided\")\n\t}\n\ttrimmed := strings.TrimSpace(userQuery)\n\tif trimmed == \"\" {\n\t\treturn \"\", fmt.Errorf(\"empty search query\")\n\t}\n\n\tconst maxAttempts = 3\n\tvar lastErr error\n\tfor attempt := 1; attempt <= maxAttempts; attempt++ {\n\t\tcontext, err := callWebSearchMini(prevMsgs, trimmed, apiKey)\n\t\tif err == nil && strings.TrimSpace(context) != \"\" {\n\t\t\tfmt.Printf(\"[SEARCH] performWebSearch succeeded via mini for query %q (attempt %d)\\n\", truncateForLog(trimmed), attempt)\n\t\t\treturn context, nil\n\t\t}\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"[SEARCH] mini search attempt %d failed for %q: %v\\n\", attempt, truncateForLog(trimmed), err)\n\t\t\tlastErr = err\n\t\t\tif !shouldRetrySearch(err) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tbackoff := time.Duration(attempt) * time.Second\n\t\t\ttime.Sleep(backoff)\n\t\t}\n\t}\n\n\tresp, err := callGPT5Search(prevMsgs, trimmed, apiKey)\n\tif err != nil {\n\t\tfmt.Printf(\"[SEARCH] performWebSearch fallback GPT-5 failed for query %q: %v\\n\", truncateForLog(trimmed), err)\n\t\tif lastErr != nil {\n\t\t\treturn \"\", lastErr\n\t\t}\n\t\treturn \"\", err\n\t}\n\tfmt.Printf(\"[SEARCH] performWebSearch fallback GPT-5 succeeded for query %q\\n\", truncateForLog(trimmed))\n\treturn resp.AIResponse, nil\n}\n\nfunc truncateForLog(text string) string {\n\ttrimmed := strings.TrimSpace(text)\n\tif len(trimmed) <= 80 {\n\t\treturn trimmed\n\t}\n\treturn trimmed[:80] + \"…\"\n}\n\nfunc isMissingResponsesWriteScope(message string) bool {\n\tlower := strings.ToLower(message)\n\tif strings.Contains(lower, \"api.responses.write\") {\n\t\treturn true\n\t}\n\treturn strings.Contains(lower, \"missing scopes\") && strings.Contains(lower, \"responses\")\n}\n\nfunc isMissingModelRequestScope(message string) bool {\n\tlower := strings.ToLower(message)\n\tif strings.Contains(lower, \"model.request\") {\n\t\treturn true\n\t}\n\treturn strings.Contains(lower, \"missing scopes\") && strings.Contains(lower, \"model\")\n}\n\nfunc isOpenAIMissingModelScope(message string) bool {\n\treturn isMissingResponsesWriteScope(message) || isMissingModelRequestScope(message)\n}\n\nfunc openAIModelScopeHelpMessage() string {\n\treturn \"Imported ChatGPT/Codex login does not grant OpenAI API model scopes (`model.request`, `api.responses.write`) needed for GPT-5 API calls. Add an OpenAI API key in API Keys or switch to a local/non-OpenAI model.\"\n}\n\nfunc injectSearchContext(prevMsgs *[]ChatMessage, searchContext string) {\n\tsearchContext = strings.TrimSpace(searchContext)\n\tif searchContext == \"\" {\n\t\treturn\n\t}\n\tformatted := \"Web search context:\\n\" + searchContext\n\t*prevMsgs = append(*prevMsgs, ChatMessage{\n\t\tRole:    \"system\",\n\t\tContent: formatted,\n\t})\n}\n"
  },
  {
    "path": "backend/security.go",
    "content": "package main\n\nimport (\n\t\"crypto/subtle\"\n\t\"encoding/json\"\n\t\"net\"\n\t\"net/http\"\n\tneturl \"net/url\"\n\t\"os\"\n\t\"strings\"\n)\n\ntype glowbyHealthResponse struct {\n\tName string `json:\"name\"`\n\tOK   bool   `json:\"ok\"`\n}\n\nfunc backendBindHost() string {\n\tfor _, key := range []string{\"GLOWBOM_BIND_HOST\", \"GLOWBY_BIND_HOST\"} {\n\t\tif value := strings.TrimSpace(os.Getenv(key)); value != \"\" {\n\t\t\treturn value\n\t\t}\n\t}\n\treturn \"127.0.0.1\"\n}\n\nfunc backendListenAddr(port string) string {\n\thost := strings.TrimSpace(backendBindHost())\n\tif host == \"\" {\n\t\treturn \":\" + port\n\t}\n\treturn net.JoinHostPort(host, port)\n}\n\nfunc glowbyServerToken() string {\n\tfor _, key := range []string{\"GLOWBOM_SERVER_TOKEN\", \"GLOWBY_SERVER_TOKEN\"} {\n\t\tif value := strings.TrimSpace(os.Getenv(key)); value != \"\" {\n\t\t\treturn value\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc glowbyAllowedOrigins() map[string]struct{} {\n\traw := \"\"\n\tfor _, key := range []string{\"GLOWBOM_ALLOWED_ORIGINS\", \"GLOWBY_ALLOWED_ORIGINS\"} {\n\t\tif value := strings.TrimSpace(os.Getenv(key)); value != \"\" {\n\t\t\traw = value\n\t\t\tbreak\n\t\t}\n\t}\n\tif raw == \"\" {\n\t\treturn nil\n\t}\n\n\tallowed := make(map[string]struct{})\n\tfor _, item := range strings.Split(raw, \",\") {\n\t\torigin := strings.TrimSpace(item)\n\t\tif origin == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tallowed[origin] = struct{}{}\n\t}\n\tif len(allowed) == 0 {\n\t\treturn nil\n\t}\n\treturn allowed\n}\n\nfunc glowbyHealthHandler(w http.ResponseWriter, r *http.Request) {\n\tif r.Method != http.MethodGet && r.Method != http.MethodHead {\n\t\thttp.Error(w, \"Method not allowed\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tw.Header().Set(\"Cache-Control\", \"no-store\")\n\t_ = json.NewEncoder(w).Encode(glowbyHealthResponse{\n\t\tName: \"Glowby\",\n\t\tOK:   true,\n\t})\n}\n\nfunc withGlowbySecurity(next http.Handler) http.Handler {\n\ttoken := glowbyServerToken()\n\tallowedOrigins := glowbyAllowedOrigins()\n\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif isPublicBackendRoute(r) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t\treturn\n\t\t}\n\n\t\tif !isAllowedOrigin(r, allowedOrigins) {\n\t\t\thttp.Error(w, \"Origin not allowed\", http.StatusForbidden)\n\t\t\treturn\n\t\t}\n\n\t\tif token != \"\" && !hasValidGlowbyServerToken(r, token) {\n\t\t\thttp.Error(w, \"Unauthorized\", http.StatusUnauthorized)\n\t\t\treturn\n\t\t}\n\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n\nfunc isPublicBackendRoute(r *http.Request) bool {\n\tswitch r.URL.Path {\n\tcase \"/healthz\":\n\t\treturn true\n\tcase \"/opencode/auth/openai/oauth/callback\":\n\t\treturn r.Method == http.MethodGet || r.Method == http.MethodHead\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc isAllowedOrigin(r *http.Request, allowedOrigins map[string]struct{}) bool {\n\torigin := strings.TrimSpace(r.Header.Get(\"Origin\"))\n\tif origin == \"\" {\n\t\treturn true\n\t}\n\n\tif len(allowedOrigins) > 0 {\n\t\t_, ok := allowedOrigins[origin]\n\t\treturn ok\n\t}\n\n\tparsed, err := neturl.Parse(origin)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\toriginHost := normalizeHost(parsed.Hostname())\n\tif originHost == \"\" {\n\t\treturn false\n\t}\n\n\tif isLoopbackHost(originHost) {\n\t\treturn true\n\t}\n\n\trequestHost := normalizeHost(r.Host)\n\tif originHost == requestHost {\n\t\treturn true\n\t}\n\n\tbindHost := normalizeHost(backendBindHost())\n\treturn bindHost != \"\" && originHost == bindHost\n}\n\nfunc normalizeHost(host string) string {\n\thost = strings.TrimSpace(host)\n\tif host == \"\" {\n\t\treturn \"\"\n\t}\n\n\tif parsedHost, _, err := net.SplitHostPort(host); err == nil {\n\t\thost = parsedHost\n\t}\n\n\treturn strings.ToLower(strings.Trim(host, \"[]\"))\n}\n\nfunc isLoopbackHost(host string) bool {\n\tswitch normalizeHost(host) {\n\tcase \"127.0.0.1\", \"localhost\", \"::1\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc hasValidGlowbyServerToken(r *http.Request, expected string) bool {\n\tprovided := strings.TrimSpace(r.Header.Get(\"X-Glowby-Token\"))\n\tif provided == \"\" {\n\t\tprovided = bearerToken(r.Header.Get(\"Authorization\"))\n\t}\n\tif provided == \"\" {\n\t\treturn false\n\t}\n\n\treturn subtle.ConstantTimeCompare([]byte(provided), []byte(expected)) == 1\n}\n\nfunc bearerToken(raw string) string {\n\traw = strings.TrimSpace(raw)\n\tif raw == \"\" {\n\t\treturn \"\"\n\t}\n\n\tconst prefix = \"Bearer \"\n\tif strings.HasPrefix(strings.ToLower(raw), strings.ToLower(prefix)) {\n\t\treturn strings.TrimSpace(raw[len(prefix):])\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "backend/stack_specs.go",
    "content": "package main\n\n// Stack-specific instruction templates shared across translation prompts.\n\nvar baseStackInstructions = map[string]string{\n\t\"swiftui\": `Create a production-ready SwiftUI iOS app:\n- Proper Xcode project structure (Package.swift or .xcodeproj)\n- MVVM architecture with ObservableObject ViewModels\n- Error handling with proper Swift error types\n- Async/await for any data operations\n- Run 'swift build' to verify compilation\n- Fix any compiler errors before completing`,\n\n\t\"kotlin\": `Create a production-ready Jetpack Compose Android app:\n- Proper Gradle project structure (build.gradle.kts)\n- MVVM architecture with ViewModel and StateFlow\n- Proper error handling with sealed classes\n- Coroutines for async operations\n- Run './gradlew build' to verify compilation\n- Fix any compiler errors before completing`,\n\n\t\"nextjs\": `Create a production-ready Next.js 16+ web app:\n- App Router structure (app/ directory)\n- TypeScript with strict mode\n- Prefer Server Components; use Client Components only when interactivity is required\n- Use next/image and next/font for performance\n- Add proper loading, error, and not-found states where applicable\n- Run 'npm run lint && npm run build' to verify\n- Fix any TypeScript/lint/build errors before completing`,\n\n\t\"godot\": `Create a production-ready Godot 4 game project:\n- Proper scene structure (.tscn files)\n- GDScript with type hints\n- Signal-based architecture\n- Resource preloading\n- Verify scenes load without errors`,\n}\n\nvar projectStackInstructions = map[string]string{\n\t\"swiftui\": `Create a production-ready SwiftUI iOS app:\n- Navigate to ios/ directory and create all files there\n- Proper Xcode project structure (Package.swift or .xcodeproj)\n- MVVM architecture with ObservableObject ViewModels\n- Error handling with proper Swift error types\n- Async/await for any data operations\n- Copy any assets from prototype/assets/ to the appropriate location\n- Report progress: \"Starting SwiftUI app creation\"\n- Run 'swift build' to verify compilation and report results\n- Fix any compiler errors before completing, report each fix`,\n\n\t\"kotlin\": `Create a production-ready Jetpack Compose Android app:\n- Navigate to android/ directory and create all files there\n- Proper Gradle project structure (build.gradle.kts)\n- MVVM architecture with ViewModel and StateFlow\n- Proper error handling with sealed classes\n- Coroutines for async operations\n- Copy any assets from prototype/assets/ to app/src/main/res/\n- Report progress: \"Starting Android app creation\"\n- Run './gradlew build' to verify compilation and report results\n- Fix any compiler errors before completing, report each fix`,\n\n\t\"nextjs\": `Create a production-ready Next.js 16+ web app:\n- Navigate to web/ directory and create all files there\n- App Router structure (src/app/ directory)\n- TypeScript with strict mode\n- Prefer Server Components; use Client Components only when interactivity is required\n- Proper loading, error, and not-found states\n- Copy any assets from prototype/assets/ to public/assets/\n- Report progress: \"Starting Next.js app creation\"\n- Run 'npm install && npm run lint && npm run build' to verify and report results\n- Fix any TypeScript/lint/build errors before completing, report each fix`,\n\n\t\"godot\": `Create a production-ready Godot 4 game project:\n- Navigate to godot/ directory and create all files there\n- Proper scene structure (.tscn files)\n- GDScript with type hints\n- Signal-based architecture\n- Resource preloading\n- Import any assets from prototype/assets/\n- Report progress: \"Starting Godot project creation\"\n- Verify scenes load without errors and report results\n- Fix any issues before completing, report each fix`,\n}\n\nfunc stackInstructionsFor(targetLang string, projectMode bool) string {\n\tnormalized := targetLang\n\tswitch targetLang {\n\tcase \"ios\":\n\t\tnormalized = \"swiftui\"\n\tcase \"android\":\n\t\tnormalized = \"kotlin\"\n\tcase \"web\":\n\t\tnormalized = \"nextjs\"\n\tcase \"games\":\n\t\tnormalized = \"godot\"\n\t}\n\n\tif projectMode {\n\t\tif instructions, ok := projectStackInstructions[normalized]; ok && instructions != \"\" {\n\t\t\treturn instructions\n\t\t}\n\t} else if instructions, ok := baseStackInstructions[normalized]; ok && instructions != \"\" {\n\t\treturn instructions\n\t}\n\treturn \"Create production-ready code with proper project structure and error handling.\"\n}\n"
  },
  {
    "path": "backend/types.go",
    "content": "package main\n\n// ====================================================================\n// Data structures for the backend\n\ntype R1Response struct {\n\tAIResponse string      `json:\"aiResponse\"`\n\tTokenUsage interface{} `json:\"tokenUsage\"`\n\tCost       float64     `json:\"cost\"`\n}\n\ntype ChatMessage struct {\n\tRole    string `json:\"role\"`\n\tContent string `json:\"content\"`\n}\n\ntype DrawToCodeRequest struct {\n\tImageBase64 string `json:\"imageBase64\"`\n\tUserPrompt  string `json:\"userPrompt\"`\n\tPrompt      string `json:\"prompt\"`\n\tTemplate    string `json:\"template\"`\n\tImageSource string `json:\"imageSource\"`\n}\n\ntype ChatWithAIRequest struct {\n\tMessage           string        `json:\"message\"`\n\tPreviousMessages  []ChatMessage `json:\"previousMessages\"`\n\tImage             *string       `json:\"image,omitempty\"`\n\tAttachmentContext string        `json:\"attachmentContext,omitempty\"`\n\tAttachmentData    string        `json:\"attachmentData,omitempty\"`\n\tAttachmentMime    string        `json:\"attachmentMime,omitempty\"`\n\tModel             string        `json:\"model,omitempty\"`\n\tGroqKey           string        `json:\"groq,omitempty\"`\n\tClaudeKey         string        `json:\"claudeKey,omitempty\"`\n\tOpenAIKey         string        `json:\"openaiKey,omitempty\"`\n\tOpenAIAuthMode    string        `json:\"openaiAuthMode,omitempty\"`  // \"api-key\" or \"codex-jwt\"\n\tOpenAIAccountID   string        `json:\"openaiAccountID,omitempty\"` // chatgpt_account_id for JWT mode\n\tOpenAIModel       string        `json:\"openaiModel,omitempty\"`     // concrete OpenAI model id (e.g. gpt-5.4)\n\tXaiKey            string        `json:\"xaiKey,omitempty\"`\n\tGeminiKey         string        `json:\"geminiKey,omitempty\"`\n\tGeminiModel       string        `json:\"geminiModel,omitempty\"` // concrete Gemini model id (e.g. gemini-3.1-pro-preview)\n\tFireworksKey      string        `json:\"fireworksKey,omitempty\"`\n\tFireworksModel    string        `json:\"fireworksModel,omitempty\"` // concrete Fireworks model id (e.g. accounts/fireworks/models/glm-5)\n\tOpenRouterKey     string        `json:\"openrouterKey,omitempty\"`\n\tOpenRouterModel   string        `json:\"openrouterModel,omitempty\"` // concrete OpenRouter model id (e.g. z-ai/glm-5)\n\tOpenCodeZenKey    string        `json:\"opencodeZenKey,omitempty\"`\n\tOpenCodeZenModel  string        `json:\"opencodeZenModel,omitempty\"` // concrete OpenCode Zen model id (e.g. kimi-k2.5-free)\n\tTemplate          string        `json:\"template,omitempty\"`\n\tImageSource       string        `json:\"imageSource,omitempty\"`\n\tUseSearch         bool          `json:\"useSearch,omitempty\"`\n\tSearchProvider    string        `json:\"searchProvider,omitempty\"`\n\tSearchContext     string        `json:\"searchContext,omitempty\"`\n\tEnableMagicEdit   bool          `json:\"enableMagicEdit,omitempty\"` // Enable magic_edit tool for AI-triggered edits\n}\n\ntype WebSearchRequest struct {\n\tMessage          string        `json:\"message\"`\n\tPreviousMessages []ChatMessage `json:\"previousMessages\"`\n\tModel            string        `json:\"model,omitempty\"`\n\tOpenAIKey        string        `json:\"openaiKey,omitempty\"`\n\tOpenAIAuthMode   string        `json:\"openaiAuthMode,omitempty\"`\n\tOpenAIAccountID  string        `json:\"openaiAccountID,omitempty\"`\n}\n\ntype AnalyzeVideoRequest struct {\n\tVideoBase64 string `json:\"videoBase64\"`\n\tVideoPath   string `json:\"videoPath,omitempty\"`\n\tMimeType    string `json:\"mimeType,omitempty\"`\n\tPrompt      string `json:\"prompt,omitempty\"`\n\tGeminiKey   string `json:\"geminiKey,omitempty\"`\n}\n\ntype AnalyzeVideoResponse struct {\n\tAnalysis        string      `json:\"analysis\"`\n\tDurationSeconds float64     `json:\"durationSeconds,omitempty\"`\n\tTokenUsage      interface{} `json:\"tokenUsage,omitempty\"`\n\tCost            float64     `json:\"cost,omitempty\"`\n}\n"
  },
  {
    "path": "cli/code.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n)\n\nconst (\n\tbackendPort = 4569\n\twebPort     = 4572\n)\n\nfunc runCode(args []string) int {\n\tshowLocalAuth := false\n\tvar positionalArgs []string\n\tfor _, arg := range args {\n\t\tswitch arg {\n\t\tcase \"--show-local-auth\":\n\t\t\tshowLocalAuth = true\n\t\tcase \"-h\", \"--help\":\n\t\t\tfmt.Print(usage)\n\t\t\treturn 0\n\t\tdefault:\n\t\t\tpositionalArgs = append(positionalArgs, arg)\n\t\t}\n\t}\n\tif len(positionalArgs) > 1 {\n\t\tfmt.Fprintln(os.Stderr, \"error: glowby code accepts at most one project path\")\n\t\treturn 2\n\t}\n\n\tglowbyRoot, err := findGlowbyRoot()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error: %v\\n\", err)\n\t\treturn 1\n\t}\n\n\tbackendDir := filepath.Join(glowbyRoot, \"backend\")\n\twebDir := filepath.Join(glowbyRoot, \"web\")\n\n\t// Validate directories exist\n\tif !isDir(backendDir) {\n\t\tfmt.Fprintf(os.Stderr, \"error: backend directory not found at %s\\n\", backendDir)\n\t\treturn 1\n\t}\n\tif !isDir(webDir) {\n\t\tfmt.Fprintf(os.Stderr, \"error: web directory not found at %s\\n\", webDir)\n\t\treturn 1\n\t}\n\n\t// Parse optional project path\n\tprojectPath := \"\"\n\tif len(positionalArgs) > 0 {\n\t\tp, err := filepath.Abs(positionalArgs[0])\n\t\tif err == nil && isDir(p) {\n\t\t\tprojectPath = p\n\t\t} else if isDir(positionalArgs[0]) {\n\t\t\tprojectPath = positionalArgs[0]\n\t\t} else {\n\t\t\tfmt.Fprintf(os.Stderr, \"error: %s is not a directory\\n\", positionalArgs[0])\n\t\t\treturn 1\n\t\t}\n\t}\n\n\t// Setup signal handling for graceful shutdown\n\tctx, cancel := context.WithCancel(context.Background())\n\tdefer cancel()\n\n\tsigCh := make(chan os.Signal, 1)\n\tsignal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)\n\tgo func() {\n\t\t<-sigCh\n\t\tfmt.Println(\"\\nShutting down...\")\n\t\tcancel()\n\t}()\n\n\tif err := reclaimManagedService(glowbyRoot, \"backend\", backendPort); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error preparing backend port: %v\\n\", err)\n\t\treturn 1\n\t}\n\tif err := reclaimManagedService(glowbyRoot, \"web\", webPort); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error preparing web port: %v\\n\", err)\n\t\treturn 1\n\t}\n\tagentPort, err := strconv.Atoi(localAgentPort())\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error: invalid OpenCode agent port %q\\n\", localAgentPort())\n\t\treturn 1\n\t}\n\tif err := reclaimManagedAgentService(agentPort); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error preparing OpenCode agent port: %v\\n\", err)\n\t\treturn 1\n\t}\n\n\tserverToken, err := resolveOrGenerateSecret(\"GLOWBY_SERVER_TOKEN\", \"GLOWBOM_SERVER_TOKEN\")\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error creating backend security token: %v\\n\", err)\n\t\treturn 1\n\t}\n\topencodePassword, err := resolveOrGenerateSecret(\"OPENCODE_SERVER_PASSWORD\")\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error creating OpenCode server password: %v\\n\", err)\n\t\treturn 1\n\t}\n\n\tbackendEnv := append(\n\t\tos.Environ(),\n\t\t\"GLOWBY_BIND_HOST=127.0.0.1\",\n\t\t\"GLOWBOM_BIND_HOST=127.0.0.1\",\n\t\t\"GLOWBY_SERVER_TOKEN=\"+serverToken,\n\t\t\"GLOWBOM_SERVER_TOKEN=\"+serverToken,\n\t\t\"OPENCODE_SERVER_PASSWORD=\"+opencodePassword,\n\t)\n\twebEnv := append(\n\t\tos.Environ(),\n\t\t\"GLOWBY_BIND_HOST=127.0.0.1\",\n\t\t\"GLOWBOM_BIND_HOST=127.0.0.1\",\n\t\tfmt.Sprintf(\"VITE_BACKEND_TARGET=http://127.0.0.1:%d\", backendPort),\n\t\t\"VITE_GLOWBY_SERVER_TOKEN=\"+serverToken,\n\t\t\"VITE_GLOWBOM_SERVER_TOKEN=\"+serverToken,\n\t)\n\n\t// Start backend\n\tfmt.Println(\"Starting backend...\")\n\tbackendCmd := exec.CommandContext(ctx, \"go\", \"run\", \".\")\n\tbackendCmd.Dir = backendDir\n\tbackendCmd.Env = backendEnv\n\tbackendCmd.Stdout = os.Stdout\n\tbackendCmd.Stderr = os.Stderr\n\tif err := backendCmd.Start(); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error starting backend: %v\\n\", err)\n\t\treturn 1\n\t}\n\n\tif !waitForServer(ctx, fmt.Sprintf(\"http://127.0.0.1:%d/healthz\", backendPort), 30*time.Second) {\n\t\tfmt.Fprintln(os.Stderr, \"error: backend did not become ready on time\")\n\t\tcancel()\n\t\t_ = backendCmd.Wait()\n\t\treturn 1\n\t}\n\tif showLocalAuth {\n\t\tprintLocalAuth(serverToken, opencodePassword)\n\t}\n\n\t// Install web dependencies if needed\n\tnodeModules := filepath.Join(webDir, \"node_modules\")\n\tif !isDir(nodeModules) {\n\t\tfmt.Println(\"Installing web dependencies...\")\n\t\tinstallCmd := exec.CommandContext(ctx, \"bun\", \"install\")\n\t\tinstallCmd.Dir = webDir\n\t\tinstallCmd.Stdout = os.Stdout\n\t\tinstallCmd.Stderr = os.Stderr\n\t\tif err := installCmd.Run(); err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"error installing web dependencies: %v\\n\", err)\n\t\t\tcancel()\n\t\t\treturn 1\n\t\t}\n\t}\n\n\tif err := recordManagedService(glowbyRoot, \"backend\", backendPort); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"warning: could not record backend process info: %v\\n\", err)\n\t}\n\n\t// Start web dev server\n\tfmt.Println(\"Starting web UI...\")\n\twebCmd := exec.CommandContext(ctx, \"bun\", \"run\", \"dev\")\n\twebCmd.Dir = webDir\n\twebCmd.Env = webEnv\n\twebCmd.Stdout = os.Stdout\n\twebCmd.Stderr = os.Stderr\n\tif err := webCmd.Start(); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error starting web UI: %v\\n\", err)\n\t\tcancel()\n\t\treturn 1\n\t}\n\n\t// Wait for web server to be ready, then open browser\n\tgo func() {\n\t\turl := fmt.Sprintf(\"http://127.0.0.1:%d\", webPort)\n\t\tif waitForServer(ctx, url, 30*time.Second) {\n\t\t\tif err := recordManagedService(glowbyRoot, \"web\", webPort); err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"warning: could not record web process info: %v\\n\", err)\n\t\t\t}\n\t\t\tif projectPath != \"\" {\n\t\t\t\tfmt.Printf(\"\\nProject path hint: %s\\n\", projectPath)\n\t\t\t\tfmt.Println(\"Paste or choose this folder in the Glowby UI to load your project.\")\n\t\t\t}\n\t\t\tfmt.Printf(\"\\nOpening %s\\n\\n\", url)\n\t\t\topenBrowser(url)\n\t\t}\n\t}()\n\n\t// Wait for both processes\n\tvar wg sync.WaitGroup\n\texitCode := 0\n\n\twg.Add(2)\n\tgo func() {\n\t\tdefer wg.Done()\n\t\tif err := backendCmd.Wait(); err != nil && ctx.Err() == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"backend exited: %v\\n\", err)\n\t\t\texitCode = 1\n\t\t\tcancel()\n\t\t}\n\t}()\n\tgo func() {\n\t\tdefer wg.Done()\n\t\tif err := webCmd.Wait(); err != nil && ctx.Err() == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"web UI exited: %v\\n\", err)\n\t\t\texitCode = 1\n\t\t\tcancel()\n\t\t}\n\t}()\n\n\twg.Wait()\n\tif err := stopManagedAgentService(agentPort); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"warning: could not stop OpenCode agent server on port %d: %v\\n\", agentPort, err)\n\t}\n\tclearManagedService(glowbyRoot, \"backend\")\n\tclearManagedService(glowbyRoot, \"web\")\n\treturn exitCode\n}\n\nfunc findGlowbyRoot() (string, error) {\n\texe, err := os.Executable()\n\tif err == nil {\n\t\tif root, ok := searchGlowbyRoot(filepath.Dir(exe)); ok {\n\t\t\treturn root, nil\n\t\t}\n\t}\n\n\tcwd, err := os.Getwd()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"cannot determine working directory: %w\", err)\n\t}\n\tif root, ok := searchGlowbyRoot(cwd); ok {\n\t\treturn root, nil\n\t}\n\n\treturn \"\", fmt.Errorf(\"cannot find the Glowby checkout root (expected sibling backend/ and web/ directories). Run from the glowby repo root or one of its subdirectories\")\n}\n\nfunc searchGlowbyRoot(start string) (string, bool) {\n\tdir := start\n\tfor {\n\t\tif isDir(filepath.Join(dir, \"backend\")) && isDir(filepath.Join(dir, \"web\")) {\n\t\t\treturn dir, true\n\t\t}\n\t\tparent := filepath.Dir(dir)\n\t\tif parent == dir {\n\t\t\treturn \"\", false\n\t\t}\n\t\tdir = parent\n\t}\n}\n\nfunc isDir(path string) bool {\n\tinfo, err := os.Stat(path)\n\treturn err == nil && info.IsDir()\n}\n\nfunc waitForServer(ctx context.Context, url string, timeout time.Duration) bool {\n\tclient := &http.Client{Timeout: 1 * time.Second}\n\tdeadline := time.After(timeout)\n\tticker := time.NewTicker(500 * time.Millisecond)\n\tdefer ticker.Stop()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn false\n\t\tcase <-deadline:\n\t\t\treturn false\n\t\tcase <-ticker.C:\n\t\t\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tresp, err := client.Do(req)\n\t\t\tif err == nil {\n\t\t\t\tresp.Body.Close()\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc reclaimManagedService(glowbyRoot, service string, port int) error {\n\tpids, err := listPortPIDs(port)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(pids) == 0 {\n\t\tclearManagedService(glowbyRoot, service)\n\t\treturn nil\n\t}\n\n\trecorded, err := readManagedService(glowbyRoot, service)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(recorded) == 0 || !isSubset(pids, recorded) {\n\t\tif service == \"backend\" && isExpectedGlowbyService(service, port) {\n\t\t\t// Backend auth is per-run, so pid files can drift across rebuilds/restarts.\n\t\t\t// If /healthz still identifies Glowby on this port, reclaim it safely.\n\t\t} else if !isExpectedGlowbyService(service, port) {\n\t\t\treturn fmt.Errorf(\"port %d is already in use by another app. Stop it and retry\", port)\n\t\t}\n\t}\n\n\tfmt.Printf(\"Stopping existing Glowby %s on port %d...\\n\", service, port)\n\tfor _, pid := range pids {\n\t\tproc, findErr := os.FindProcess(pid)\n\t\tif findErr != nil {\n\t\t\treturn fmt.Errorf(\"could not find existing %s process %d: %w\", service, pid, findErr)\n\t\t}\n\t\tif killErr := proc.Kill(); killErr != nil {\n\t\t\treturn fmt.Errorf(\"could not stop existing %s process %d: %w\", service, pid, killErr)\n\t\t}\n\t}\n\tif !waitForPortFree(port, 5*time.Second) {\n\t\treturn fmt.Errorf(\"port %d did not become available after stopping the existing %s\", port, service)\n\t}\n\n\tclearManagedService(glowbyRoot, service)\n\treturn nil\n}\n\nfunc reclaimManagedAgentService(port int) error {\n\tpids, err := listPortPIDs(port)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(pids) == 0 {\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"Stopping existing agent server on port %d...\\n\", port)\n\treturn killProcessesOnPort(port, pids, \"agent server\")\n}\n\nfunc recordManagedService(glowbyRoot, service string, port int) error {\n\tpids, err := listPortPIDs(port)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(pids) == 0 {\n\t\treturn fmt.Errorf(\"no process found listening on port %d\", port)\n\t}\n\n\tstateDir := managedStateDir(glowbyRoot)\n\tif err := os.MkdirAll(stateDir, 0o755); err != nil {\n\t\treturn err\n\t}\n\n\tlines := make([]string, 0, len(pids))\n\tfor _, pid := range pids {\n\t\tlines = append(lines, strconv.Itoa(pid))\n\t}\n\treturn os.WriteFile(managedStatePath(glowbyRoot, service), []byte(strings.Join(lines, \"\\n\")), 0o644)\n}\n\nfunc readManagedService(glowbyRoot, service string) ([]int, error) {\n\tdata, err := os.ReadFile(managedStatePath(glowbyRoot, service))\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tvar pids []int\n\tscanner := bufio.NewScanner(strings.NewReader(string(data)))\n\tfor scanner.Scan() {\n\t\tline := strings.TrimSpace(scanner.Text())\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tpid, convErr := strconv.Atoi(line)\n\t\tif convErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid pid %q in %s state: %w\", line, service, convErr)\n\t\t}\n\t\tpids = append(pids, pid)\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn uniqueSortedInts(pids), nil\n}\n\nfunc clearManagedService(glowbyRoot, service string) {\n\t_ = os.Remove(managedStatePath(glowbyRoot, service))\n}\n\nfunc stopManagedAgentService(port int) error {\n\tpids, err := listPortPIDs(port)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(pids) == 0 {\n\t\treturn nil\n\t}\n\treturn killProcessesOnPort(port, pids, \"agent server\")\n}\n\nfunc managedStateDir(glowbyRoot string) string {\n\tsum := sha1.Sum([]byte(glowbyRoot))\n\treturn filepath.Join(os.TempDir(), \"glowby\", fmt.Sprintf(\"%x\", sum[:8]))\n}\n\nfunc managedStatePath(glowbyRoot, service string) string {\n\treturn filepath.Join(managedStateDir(glowbyRoot), fmt.Sprintf(\"%s.pid\", service))\n}\n\nfunc waitForPortFree(port int, timeout time.Duration) bool {\n\tdeadline := time.Now().Add(timeout)\n\tfor time.Now().Before(deadline) {\n\t\tpids, err := listPortPIDs(port)\n\t\tif err == nil && len(pids) == 0 {\n\t\t\treturn true\n\t\t}\n\t\ttime.Sleep(250 * time.Millisecond)\n\t}\n\treturn false\n}\n\nfunc killProcessesOnPort(port int, pids []int, label string) error {\n\tfor _, pid := range pids {\n\t\tproc, findErr := os.FindProcess(pid)\n\t\tif findErr != nil {\n\t\t\treturn fmt.Errorf(\"could not find existing %s process %d: %w\", label, pid, findErr)\n\t\t}\n\t\tif killErr := proc.Kill(); killErr != nil {\n\t\t\treturn fmt.Errorf(\"could not stop existing %s process %d: %w\", label, pid, killErr)\n\t\t}\n\t}\n\tif !waitForPortFree(port, 5*time.Second) {\n\t\treturn fmt.Errorf(\"port %d did not become available after stopping the existing %s\", port, label)\n\t}\n\treturn nil\n}\n\nfunc isExpectedGlowbyService(service string, port int) bool {\n\tclient := &http.Client{Timeout: 1 * time.Second}\n\turl := \"\"\n\texpected := \"\"\n\n\tswitch service {\n\tcase \"backend\":\n\t\turl = fmt.Sprintf(\"http://127.0.0.1:%d/healthz\", port)\n\t\texpected = `\"name\":\"Glowby\"`\n\tcase \"web\":\n\t\turl = fmt.Sprintf(\"http://127.0.0.1:%d\", port)\n\t\texpected = \"<title>Glowby</title>\"\n\tdefault:\n\t\treturn false\n\t}\n\n\tresp, err := client.Get(url)\n\tif err != nil {\n\t\treturn false\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(io.LimitReader(resp.Body, 1<<20))\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn strings.Contains(string(body), expected)\n}\n\nfunc areExpectedOpenCodeProcesses(pids []int) bool {\n\tif len(pids) == 0 {\n\t\treturn true\n\t}\n\tfor _, pid := range pids {\n\t\tcommand, err := processCommandSummary(pid)\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\tif !strings.Contains(strings.ToLower(command), \"opencode\") {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc resolveOrGenerateSecret(envKeys ...string) (string, error) {\n\tfor _, key := range envKeys {\n\t\tif value := strings.TrimSpace(os.Getenv(key)); value != \"\" {\n\t\t\treturn value, nil\n\t\t}\n\t}\n\treturn randomHexSecret(32)\n}\n\nfunc printLocalAuth(serverToken, opencodePassword string) {\n\tfmt.Println()\n\tfmt.Println(\"Local auth credentials:\")\n\tfmt.Printf(\"  Glowby backend http://127.0.0.1:%d\\n\", backendPort)\n\tfmt.Printf(\"    Authorization: Bearer %s\\n\", serverToken)\n\tfmt.Printf(\"  OpenCode http://127.0.0.1:%s\\n\", localAgentPort())\n\tfmt.Printf(\"    Username: %s\\n\", localOpenCodeUsername())\n\tfmt.Printf(\"    Password: %s\\n\", opencodePassword)\n\tfmt.Println()\n}\n\nfunc localAgentPort() string {\n\tif port := strings.TrimSpace(os.Getenv(\"GLOWBOM_AGENT_PORT\")); port != \"\" {\n\t\treturn port\n\t}\n\treturn \"4571\"\n}\n\nfunc localOpenCodeUsername() string {\n\tif username := strings.TrimSpace(os.Getenv(\"OPENCODE_SERVER_USERNAME\")); username != \"\" {\n\t\treturn username\n\t}\n\treturn \"opencode\"\n}\n\nfunc randomHexSecret(byteLen int) (string, error) {\n\tif byteLen <= 0 {\n\t\tbyteLen = 32\n\t}\n\tbuf := make([]byte, byteLen)\n\tif _, err := rand.Read(buf); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn hex.EncodeToString(buf), nil\n}\n\nfunc listPortPIDs(port int) ([]int, error) {\n\tswitch runtime.GOOS {\n\tcase \"windows\":\n\t\treturn listPortPIDsWindows(port)\n\tdefault:\n\t\treturn listPortPIDsUnix(port)\n\t}\n}\n\nfunc processCommandSummary(pid int) (string, error) {\n\tswitch runtime.GOOS {\n\tcase \"windows\":\n\t\treturn processCommandSummaryWindows(pid)\n\tdefault:\n\t\treturn processCommandSummaryUnix(pid)\n\t}\n}\n\nfunc processCommandSummaryUnix(pid int) (string, error) {\n\tout, err := exec.Command(\"ps\", \"-o\", \"command=\", \"-p\", strconv.Itoa(pid)).Output()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not inspect process %d with ps: %w\", pid, err)\n\t}\n\treturn strings.TrimSpace(string(out)), nil\n}\n\nfunc processCommandSummaryWindows(pid int) (string, error) {\n\tout, err := exec.Command(\"tasklist\", \"/FI\", fmt.Sprintf(\"PID eq %d\", pid), \"/FO\", \"CSV\", \"/NH\").Output()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not inspect process %d with tasklist: %w\", pid, err)\n\t}\n\treturn strings.TrimSpace(string(out)), nil\n}\n\nfunc listPortPIDsUnix(port int) ([]int, error) {\n\tout, err := exec.Command(\"lsof\", \"-nP\", \"-ti\", fmt.Sprintf(\"tcp:%d\", port)).Output()\n\tif err != nil {\n\t\tvar exitErr *exec.ExitError\n\t\tif errors.As(err, &exitErr) && len(exitErr.Stderr) == 0 && len(out) == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\tif errors.As(err, &exitErr) && len(out) == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"could not inspect port %d with lsof: %w\", port, err)\n\t}\n\treturn parsePIDLines(string(out))\n}\n\nfunc listPortPIDsWindows(port int) ([]int, error) {\n\tout, err := exec.Command(\"netstat\", \"-ano\", \"-p\", \"tcp\").Output()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not inspect port %d with netstat: %w\", port, err)\n\t}\n\n\ttarget := fmt.Sprintf(\":%d\", port)\n\tvar pids []int\n\tscanner := bufio.NewScanner(strings.NewReader(string(out)))\n\tfor scanner.Scan() {\n\t\tfields := strings.Fields(scanner.Text())\n\t\tif len(fields) < 5 {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.EqualFold(fields[0], \"TCP\") {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasSuffix(fields[1], target) || !strings.EqualFold(fields[3], \"LISTENING\") {\n\t\t\tcontinue\n\t\t}\n\t\tpid, convErr := strconv.Atoi(fields[4])\n\t\tif convErr != nil {\n\t\t\tcontinue\n\t\t}\n\t\tpids = append(pids, pid)\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn uniqueSortedInts(pids), nil\n}\n\nfunc parsePIDLines(text string) ([]int, error) {\n\tvar pids []int\n\tfor _, line := range strings.Split(text, \"\\n\") {\n\t\tline = strings.TrimSpace(line)\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tpid, err := strconv.Atoi(line)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpids = append(pids, pid)\n\t}\n\treturn uniqueSortedInts(pids), nil\n}\n\nfunc uniqueSortedInts(values []int) []int {\n\tif len(values) == 0 {\n\t\treturn nil\n\t}\n\tset := make(map[int]struct{}, len(values))\n\tfor _, value := range values {\n\t\tset[value] = struct{}{}\n\t}\n\tout := make([]int, 0, len(set))\n\tfor value := range set {\n\t\tout = append(out, value)\n\t}\n\tsort.Ints(out)\n\treturn out\n}\n\nfunc isSubset(values, allowed []int) bool {\n\tif len(values) == 0 {\n\t\treturn true\n\t}\n\tallowedSet := make(map[int]struct{}, len(allowed))\n\tfor _, value := range allowed {\n\t\tallowedSet[value] = struct{}{}\n\t}\n\tfor _, value := range values {\n\t\tif _, ok := allowedSet[value]; !ok {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc openBrowser(url string) {\n\tvar cmd *exec.Cmd\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tcmd = exec.Command(\"open\", url)\n\tcase \"linux\":\n\t\tcmd = exec.Command(\"xdg-open\", url)\n\tcase \"windows\":\n\t\tcmd = exec.Command(\"cmd\", \"/c\", \"start\", url)\n\tdefault:\n\t\treturn\n\t}\n\tcmd.Stdout = io.Discard\n\tcmd.Stderr = io.Discard\n\tcmd.Run()\n}\n"
  },
  {
    "path": "cli/doctor.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"strings\"\n)\n\ntype depCheck struct {\n\tname     string\n\trequired bool\n\tfixHint  string\n}\n\nfunc runDoctor() int {\n\tchecks := []depCheck{\n\t\t{name: \"go\", required: true, fixHint: \"Install: https://go.dev/dl/\"},\n\t\t{name: \"bun\", required: true, fixHint: \"Install: https://bun.sh/\"},\n\t\t{name: \"opencode\", required: true, fixHint: \"Install: bun install -g opencode (or see https://opencode.ai)\"},\n\t}\n\n\tissues := 0\n\tfor _, c := range checks {\n\t\tpath, err := exec.LookPath(c.name)\n\t\tif err != nil {\n\t\t\ttag := \"missing\"\n\t\t\tif c.required {\n\t\t\t\ttag = \"MISSING\"\n\t\t\t\tissues++\n\t\t\t}\n\t\t\tfmt.Printf(\"  [%s] %s\\n\", tag, c.name)\n\t\t\tfmt.Printf(\"          %s\\n\", c.fixHint)\n\t\t} else {\n\t\t\tver := commandVersion(c.name)\n\t\t\tif ver != \"\" {\n\t\t\t\tfmt.Printf(\"  [ok]    %s %s (%s)\\n\", c.name, ver, path)\n\t\t\t} else {\n\t\t\t\tfmt.Printf(\"  [ok]    %s (%s)\\n\", c.name, path)\n\t\t\t}\n\t\t}\n\t}\n\n\tif root, err := findGlowbyRoot(); err != nil {\n\t\tissues++\n\t\tfmt.Println(\"  [MISSING] glowby checkout\")\n\t\tfmt.Println(\"            Could not find sibling backend/ and web/ directories.\")\n\t\tfmt.Println(\"            Clone https://github.com/glowbom/glowby and run `glowby code` from the repo root.\")\n\t} else {\n\t\tfmt.Printf(\"  [ok]    glowby checkout (%s)\\n\", root)\n\t}\n\n\tfmt.Println()\n\tif issues > 0 {\n\t\tfmt.Printf(\"%d required dependency(ies) missing. Fix the above and retry.\\n\", issues)\n\t\treturn 1\n\t}\n\tfmt.Println(\"All checks passed.\")\n\treturn 0\n}\n\nfunc commandVersion(name string) string {\n\tout, err := exec.Command(name, \"--version\").Output()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn strings.TrimSpace(string(out))\n}\n"
  },
  {
    "path": "cli/go.mod",
    "content": "module glowby\n\ngo 1.24\n\ntoolchain go1.24.11\n"
  },
  {
    "path": "cli/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nvar (\n\tversion = \"dev\"\n\tcommit  = \"unknown\"\n\tdate    = \"unknown\"\n)\n\nconst usage = `glowby - terminal-first local AI coding agent\n\nUsage:\n  glowby code [project-path] [--show-local-auth]\n                                Start Glowby from this checkout and open the browser\n  glowby doctor                 Check environment dependencies\n  glowby version                Print version info\n  glowby help                   Show this help\n\nExamples:\n  glowby code                   Start Glowby from the current checkout\n  glowby code --show-local-auth Start Glowby and print local dev auth credentials\n  glowby code /path/to/project  Start Glowby and print a project path hint\n`\n\nfunc main() {\n\targs := os.Args[1:]\n\tos.Exit(run(args))\n}\n\nfunc run(args []string) int {\n\tif len(args) == 0 {\n\t\tfmt.Print(usage)\n\t\treturn 0\n\t}\n\n\tswitch args[0] {\n\tcase \"code\":\n\t\treturn runCode(args[1:])\n\tcase \"doctor\":\n\t\treturn runDoctor()\n\tcase \"version\":\n\t\treturn runVersion()\n\tcase \"help\", \"-h\", \"--help\":\n\t\tfmt.Print(usage)\n\t\treturn 0\n\tdefault:\n\t\tfmt.Fprintf(os.Stderr, \"unknown command: %s\\n\\n\", args[0])\n\t\tfmt.Fprint(os.Stderr, usage)\n\t\treturn 2\n\t}\n}\n"
  },
  {
    "path": "cli/version.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc runVersion() int {\n\tfmt.Printf(\"glowby %s (commit: %s, built: %s)\\n\", version, commit, date)\n\treturn 0\n}\n"
  },
  {
    "path": "docs/.dockerignore",
    "content": ".react-router\nbuild\nnode_modules\nREADME.md"
  },
  {
    "path": "docs/.gitignore",
    "content": ".DS_Store\n.env\n/node_modules/\n\n# React Router\n/.react-router/\n/build/\n"
  },
  {
    "path": "docs/Dockerfile",
    "content": "FROM node:20-alpine AS development-dependencies-env\nCOPY . /app\nWORKDIR /app\nRUN npm ci\n\nFROM node:20-alpine AS production-dependencies-env\nCOPY ./package.json package-lock.json /app/\nWORKDIR /app\nRUN npm ci --omit=dev\n\nFROM node:20-alpine AS build-env\nCOPY . /app/\nCOPY --from=development-dependencies-env /app/node_modules /app/node_modules\nWORKDIR /app\nRUN npm run build\n\nFROM node:20-alpine\nCOPY ./package.json package-lock.json /app/\nCOPY --from=production-dependencies-env /app/node_modules /app/node_modules\nCOPY --from=build-env /app/build /app/build\nWORKDIR /app\nCMD [\"npm\", \"run\", \"start\"]"
  },
  {
    "path": "docs/README.md",
    "content": "# Glowby OSS\n\nGlowby helps you build production-ready software with coding agents. It is an open source coding agent workflow for real projects. It is built primarily for Glowbom projects, but the workflow can also work with other project structures.\n\n## What It Does\n\n- Make software projects and prototypes production-ready with coding agents\n- Run on local projects with ChatGPT login, API keys, or OpenCode config\n\n## Requirements\n\nInstall these first:\n\n- [Go](https://go.dev/)\n- [Bun](https://bun.sh/)\n- [OpenCode](https://opencode.ai/)\n\n## Quickstart\n\n### 1. Run the backend\n\n```bash\ncd backend\ngo run .\n```\nThe backend runs on `http://localhost:4569`.\n\n### 2. Run the web app\n\n```bash\ncd web\nbun install\nbun run dev\n```\n\nThe web app runs on `http://localhost:4572`.\n\n### 3. Start using Glowby OSS\n\n1. Open `http://localhost:4572`\n2. Load a local project\n3. Choose how you want to run the agent:\n   - ChatGPT login\n   - API keys\n   - OpenCode config\n4. Start a refine run\n\n## Using the Bundled Default Project\n\nThis repo includes a ready-to-use Glowbom default project in `project/`.\n\nYou can use `project/` as your main starting template without logging in to Glowbom.com or downloading a project export first. Just copy the folder, rename it if you want, and start customizing it locally.\n\nThe bundled project includes:\n\n- `project/prototype/` - reference design and assets\n- `project/apple/` - Apple app project\n- `project/android/` - Android app project\n- `project/web/` - web app project\n- `project/glowbom.json` - project manifest\n\nIf you only need some targets, remove the platform folders you do not want:\n\n- Delete `project/apple/` if you do not need Apple platforms\n- Delete `project/android/` if you do not need Android\n- Delete `project/web/` if you do not need web\n- Keep all of them if you want to build every platform in sync from one Glowbom project\n\n## Project Structure\n\n- `backend/` - Go backend\n- `project/` - bundled default Glowbom project template\n- `web/` - React + Vite web app\n- `legacy/` - older Glowby code kept for reference\n"
  },
  {
    "path": "docs/app/app.css",
    "content": "@import \"tailwindcss\";\n@import \"fumadocs-ui/style.css\";\n\n@theme {\n  --font-sans: \"Manrope\", ui-sans-serif, system-ui, sans-serif,\n    \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --font-mono: \"JetBrains Mono\", ui-monospace, SFMono-Regular, monospace;\n}\n\n:root {\n  --color-fd-background: hsl(0, 0%, 100%);\n  --color-fd-foreground: hsl(222, 47%, 11%);\n  --color-fd-muted: hsl(210, 40%, 98%);\n  --color-fd-muted-foreground: hsl(215, 16%, 47%);\n  --color-fd-popover: hsl(0, 0%, 100%);\n  --color-fd-popover-foreground: hsl(222, 47%, 11%);\n  --color-fd-card: hsl(0, 0%, 100%);\n  --color-fd-card-foreground: hsl(222, 47%, 11%);\n  --color-fd-border: hsla(215, 25%, 27%, 0.12);\n  --color-fd-primary: hsl(222, 47%, 11%);\n  --color-fd-primary-foreground: hsl(0, 0%, 100%);\n  --color-fd-secondary: hsl(210, 40%, 96%);\n  --color-fd-secondary-foreground: hsl(222, 47%, 11%);\n  --color-fd-accent: hsla(214, 32%, 91%, 0.8);\n  --color-fd-accent-foreground: hsl(222, 47%, 11%);\n  --color-fd-ring: hsl(215, 20%, 65%);\n}\n\n.dark {\n  --color-fd-background: hsl(222, 47%, 8%);\n  --color-fd-foreground: hsl(210, 40%, 96%);\n  --color-fd-muted: hsl(223, 32%, 14%);\n  --color-fd-muted-foreground: hsl(215, 20%, 72%);\n  --color-fd-popover: hsl(222, 45%, 10%);\n  --color-fd-popover-foreground: hsl(210, 40%, 96%);\n  --color-fd-card: hsl(222, 45%, 10%);\n  --color-fd-card-foreground: hsl(210, 40%, 96%);\n  --color-fd-border: hsla(214, 32%, 91%, 0.12);\n  --color-fd-primary: hsl(210, 40%, 96%);\n  --color-fd-primary-foreground: hsl(222, 47%, 8%);\n  --color-fd-secondary: hsl(223, 30%, 18%);\n  --color-fd-secondary-foreground: hsl(210, 40%, 96%);\n  --color-fd-accent: hsla(214, 32%, 91%, 0.08);\n  --color-fd-accent-foreground: hsl(210, 40%, 96%);\n  --color-fd-ring: hsl(214, 20%, 65%);\n}\n\nhtml,\nbody {\n  background-color: var(--color-fd-background);\n  color: var(--color-fd-foreground);\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\nbody {\n  min-height: 100vh;\n}\n\nhtml {\n  color-scheme: light;\n}\n\nhtml.dark {\n  color-scheme: dark;\n}\n\n#nd-sidebar,\n#nd-subnav {\n  background-color: color-mix(in oklab, white 92%, var(--color-fd-muted) 8%);\n}\n\n.dark #nd-sidebar,\n.dark #nd-subnav {\n  background-color: color-mix(in oklab, hsl(222, 47%, 8%) 88%, var(--color-fd-muted) 12%);\n}\n"
  },
  {
    "path": "docs/app/components/brand-title.tsx",
    "content": "const logoSrc = `${import.meta.env.BASE_URL}glowbom-logo.svg`;\n\nexport function BrandTitle() {\n  return (\n    <span\n      className=\"inline-flex items-center\"\n      onClick={(e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        window.location.href = \"https://glowbom.com\";\n      }}\n    >\n      <img\n        alt=\"Glowbom\"\n        className=\"h-[26px] w-auto\"\n        height={29}\n        src={logoSrc}\n        width={118}\n      />\n    </span>\n  );\n}\n"
  },
  {
    "path": "docs/app/components/docs-route-view.tsx",
    "content": "import { Suspense } from \"react\";\nimport { deserializePageTree } from \"fumadocs-core/source/client\";\nimport { DocsLayout } from \"fumadocs-ui/layouts/docs\";\nimport { DocsBody, DocsDescription, DocsPage, DocsTitle } from \"fumadocs-ui/page\";\nimport type { LoadedDocPage } from \"../lib/docs\";\nimport { BrandTitle } from \"./brand-title\";\nimport {\n  DocsSearchDialog,\n  DocsSearchLargeTrigger,\n  DocsSearchProvider,\n  DocsSearchSmallTrigger,\n} from \"./docs-search\";\nimport { NavActions } from \"./nav-actions\";\nimport { docsContent } from \"../lib/source.browser\";\n\nexport function DocsRouteView({ loaderData }: { loaderData: LoadedDocPage }) {\n  const tree = deserializePageTree(loaderData.tree);\n\n  console.log(\"Search records count =>\", loaderData.searchRecords?.length);\n\n  return (\n    <DocsSearchProvider records={loaderData.searchRecords}>\n      <DocsLayout\n        tree={tree}\n        nav={{ title: <BrandTitle />, children: <NavActions /> }}\n        searchToggle={{\n          enabled: true,\n          components: {\n            lg: <DocsSearchLargeTrigger />,\n            sm: <DocsSearchSmallTrigger />,\n          },\n        }}\n        themeSwitch={{ enabled: true, mode: \"light-dark-system\" }}\n        sidebar={{ defaultOpenLevel: 1 }}\n      >\n        <DocsPage toc={loaderData.page.toc as never}>\n          <DocsTitle>{loaderData.page.title}</DocsTitle>\n          <DocsDescription>{loaderData.page.description}</DocsDescription>\n          <DocsBody>\n            <Suspense\n              fallback={<p className=\"text-sm text-fd-muted-foreground\">Loading page content...</p>}\n            >\n              {docsContent.useContent(loaderData.page.path)}\n            </Suspense>\n          </DocsBody>\n        </DocsPage>\n      </DocsLayout>\n      <DocsSearchDialog />\n    </DocsSearchProvider>\n  );\n}\n"
  },
  {
    "path": "docs/app/components/docs-search.tsx",
    "content": "import { buttonVariants } from \"fumadocs-ui/components/ui/button\";\nimport { Search, X } from \"lucide-react\";\nimport {\n  createContext,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  type KeyboardEvent as ReactKeyboardEvent,\n  type ReactNode,\n} from \"react\";\nimport { useNavigate } from \"react-router\";\nimport type { SearchRecord } from \"../lib/docs\";\n\ntype DocsSearchContextValue = {\n  modalOpen: boolean;\n  modifierKey: string;\n  records: SearchRecord[];\n  selectResult: (result: SearchRecord) => void;\n  setModalOpen: (value: boolean) => void;\n};\n\nconst DocsSearchContext = createContext<DocsSearchContextValue | null>(null);\n\nfunction useDocsSearchContext() {\n  const value = useContext(DocsSearchContext);\n\n  if (!value) {\n    throw new Error(\"DocsSearch components must be used inside DocsSearchProvider.\");\n  }\n\n  return value;\n}\n\nfunction normalize(value: string) {\n  return value.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction scoreRecord(record: SearchRecord, query: string) {\n  if (query.length === 0) {\n    return record.type === \"page\" ? 100 : 0;\n  }\n\n  const haystack = normalize(record.text);\n  const content = normalize(record.content);\n\n  if (!haystack.includes(query)) {\n    return 0;\n  }\n\n  let score = 0;\n\n  if (content === query) score += 120;\n  else if (content.startsWith(query)) score += 90;\n  else if (content.includes(query)) score += 70;\n  else score += 40;\n\n  if (record.type === \"page\") score += 30;\n  if (record.type === \"heading\") score += 15;\n  if (record.type === \"text\") score += 5;\n\n  return score;\n}\n\nfunction useSearchResults(records: SearchRecord[], search: string) {\n  return useMemo(() => {\n    const query = normalize(search);\n\n    return records\n      .map((record) => ({\n        record,\n        score: scoreRecord(record, query),\n      }))\n      .filter((item) => item.score > 0)\n      .sort((a, b) => b.score - a.score)\n      .slice(0, query.length === 0 ? 8 : 12)\n      .map((item) => item.record);\n  }, [records, search]);\n}\n\nfunction getNextIndex(currentIndex: number, delta: number, total: number) {\n  if (total === 0) {\n    return 0;\n  }\n\n  return (currentIndex + delta + total) % total;\n}\n\nfunction SearchResultItem({\n  active,\n  onClick,\n  onMouseEnter,\n  result,\n}: {\n  active: boolean;\n  onClick: () => void;\n  onMouseEnter: () => void;\n  result: SearchRecord;\n}) {\n  return (\n    <button\n      type=\"button\"\n      aria-selected={active}\n      className={`relative flex w-full shrink-0 flex-col gap-1 overflow-hidden rounded-lg px-3 py-2 text-left text-sm transition-colors ${\n        active ? \"bg-fd-accent text-fd-accent-foreground\" : \"hover:bg-fd-accent/60\"\n      }`}\n      onClick={onClick}\n      onMouseEnter={onMouseEnter}\n    >\n      {result.breadcrumbs.length > 0 ? (\n        <div className=\"truncate text-xs text-fd-muted-foreground\">{result.breadcrumbs.join(\" / \")}</div>\n      ) : null}\n      <div className=\"truncate font-medium\">\n        {result.type === \"heading\" ? \"# \" : \"\"}\n        {result.content}\n      </div>\n    </button>\n  );\n}\n\nfunction SearchResultsList({\n  activeIndex,\n  emptyLabel,\n  onSelect,\n  results,\n  setActiveIndex,\n}: {\n  activeIndex: number;\n  emptyLabel: string;\n  onSelect: (result: SearchRecord) => void;\n  results: SearchRecord[];\n  setActiveIndex: (value: number) => void;\n}) {\n  if (results.length === 0) {\n    return <div className=\"px-4 py-10 text-center text-sm text-fd-muted-foreground\">{emptyLabel}</div>;\n  }\n\n  return (\n    <div className=\"flex max-h-[420px] flex-col overflow-y-auto p-2\">\n      {results.map((result, index) => (\n        <SearchResultItem\n          key={result.id}\n          active={index === activeIndex}\n          onClick={() => onSelect(result)}\n          onMouseEnter={() => setActiveIndex(index)}\n          result={result}\n        />\n      ))}\n    </div>\n  );\n}\n\nfunction useGlobalShortcut(setModalOpen: (value: boolean) => void) {\n  useEffect(() => {\n    const onKeyDown = (event: KeyboardEvent) => {\n      const target = event.target;\n      const isEditable =\n        target instanceof HTMLElement &&\n        (target.isContentEditable ||\n          target.tagName === \"INPUT\" ||\n          target.tagName === \"TEXTAREA\" ||\n          target.tagName === \"SELECT\");\n\n      if (!isEditable && event.key === \"/\") {\n        event.preventDefault();\n        setModalOpen(true);\n        return;\n      }\n\n      if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n        event.preventDefault();\n        setModalOpen(true);\n      }\n    };\n\n    window.addEventListener(\"keydown\", onKeyDown);\n    return () => window.removeEventListener(\"keydown\", onKeyDown);\n  }, [setModalOpen]);\n}\n\nexport function DocsSearchProvider({\n  children,\n  records,\n}: {\n  children: ReactNode;\n  records: SearchRecord[];\n}) {\n  const navigate = useNavigate();\n  const [modalOpen, setModalOpen] = useState(false);\n  const [modifierKey, setModifierKey] = useState(\"Ctrl\");\n\n  useEffect(() => {\n    if (window.navigator.userAgent.includes(\"Mac\")) {\n      setModifierKey(\"⌘\");\n    }\n  }, []);\n\n  useGlobalShortcut(setModalOpen);\n\n  const value = useMemo<DocsSearchContextValue>(\n    () => ({\n      modalOpen,\n      modifierKey,\n      records,\n      selectResult: (result) => {\n        setModalOpen(false);\n        navigate(result.url);\n      },\n      setModalOpen,\n    }),\n    [modalOpen, modifierKey, navigate, records],\n  );\n\n  return <DocsSearchContext.Provider value={value}>{children}</DocsSearchContext.Provider>;\n}\n\nexport function DocsSearchLargeTrigger() {\n  const { modifierKey, records, selectResult } = useDocsSearchContext();\n  const [open, setOpen] = useState(false);\n  const [search, setSearch] = useState(\"\");\n  const [activeIndex, setActiveIndex] = useState(0);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const results = useSearchResults(records, search);\n\n  useEffect(() => {\n    setActiveIndex(0);\n  }, [search, results.length]);\n\n  useEffect(() => {\n    const onPointerDown = (event: PointerEvent) => {\n      if (!containerRef.current?.contains(event.target as Node)) {\n        setOpen(false);\n      }\n    };\n\n    document.addEventListener(\"pointerdown\", onPointerDown);\n    return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n  }, []);\n\n  const onKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n    if (event.key === \"ArrowDown\") {\n      event.preventDefault();\n      setOpen(true);\n      setActiveIndex((current) => getNextIndex(current, 1, results.length));\n      return;\n    }\n\n    if (event.key === \"ArrowUp\") {\n      event.preventDefault();\n      setOpen(true);\n      setActiveIndex((current) => getNextIndex(current, -1, results.length));\n      return;\n    }\n\n    if (event.key === \"Escape\") {\n      setOpen(false);\n      return;\n    }\n\n    if (event.key === \"Enter\") {\n      const selected = results[activeIndex] ?? results[0];\n\n      if (!selected || search.trim().length === 0) {\n        return;\n      }\n\n      event.preventDefault();\n      setOpen(false);\n      selectResult(selected);\n    }\n  };\n\n  return (\n    <div className=\"relative\" ref={containerRef}>\n      <div className=\"inline-flex w-full items-center gap-2 rounded-lg border bg-fd-secondary/50 p-1.5 ps-2 text-sm text-fd-muted-foreground transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground\">\n        <Search className=\"size-4 shrink-0\" />\n        <input\n          className=\"min-w-0 flex-1 bg-transparent text-fd-foreground placeholder:text-fd-muted-foreground focus:outline-none\"\n          onChange={(event) => {\n            setSearch(event.target.value);\n            setOpen(true);\n          }}\n          onFocus={() => setOpen(true)}\n          onKeyDown={onKeyDown}\n          placeholder=\"Search docs\"\n          value={search}\n        />\n        <div className=\"ms-auto inline-flex gap-0.5\">\n          <kbd className=\"rounded-md border bg-fd-background px-1.5\">{modifierKey}</kbd>\n          <kbd className=\"rounded-md border bg-fd-background px-1.5\">K</kbd>\n        </div>\n      </div>\n      {open ? (\n        <div className=\"absolute inset-x-0 top-[calc(100%+0.5rem)] z-40 overflow-hidden rounded-xl border bg-fd-popover text-fd-popover-foreground shadow-xl\">\n          <SearchResultsList\n            activeIndex={activeIndex}\n            emptyLabel={search.trim().length === 0 ? \"Start typing to search the docs.\" : \"No matching docs found.\"}\n            onSelect={(result) => {\n              setOpen(false);\n              selectResult(result);\n            }}\n            results={results}\n            setActiveIndex={setActiveIndex}\n          />\n        </div>\n      ) : null}\n    </div>\n  );\n}\n\nexport function DocsSearchSmallTrigger() {\n  const { setModalOpen } = useDocsSearchContext();\n\n  return (\n    <button\n      type=\"button\"\n      aria-label=\"Open Search\"\n      className={buttonVariants({ color: \"ghost\", size: \"icon-sm\", className: \"p-2\" })}\n      onClick={() => setModalOpen(true)}\n    >\n      <Search className=\"size-4\" />\n    </button>\n  );\n}\n\nexport function DocsSearchDialog() {\n  const { modalOpen, records, selectResult, setModalOpen } = useDocsSearchContext();\n  const [search, setSearch] = useState(\"\");\n  const [activeIndex, setActiveIndex] = useState(0);\n  const inputRef = useRef<HTMLInputElement | null>(null);\n  const results = useSearchResults(records, search);\n\n  useEffect(() => {\n    setActiveIndex(0);\n  }, [search, results.length]);\n\n  useEffect(() => {\n    if (modalOpen) {\n      window.setTimeout(() => inputRef.current?.focus(), 0);\n    } else {\n      setSearch(\"\");\n    }\n  }, [modalOpen]);\n\n  if (!modalOpen) {\n    return null;\n  }\n\n  const onKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n    if (event.key === \"ArrowDown\") {\n      event.preventDefault();\n      setActiveIndex((current) => getNextIndex(current, 1, results.length));\n      return;\n    }\n\n    if (event.key === \"ArrowUp\") {\n      event.preventDefault();\n      setActiveIndex((current) => getNextIndex(current, -1, results.length));\n      return;\n    }\n\n    if (event.key === \"Escape\") {\n      setModalOpen(false);\n      return;\n    }\n\n    if (event.key === \"Enter\") {\n      const selected = results[activeIndex] ?? results[0];\n\n      if (!selected || search.trim().length === 0) {\n        return;\n      }\n\n      event.preventDefault();\n      selectResult(selected);\n    }\n  };\n\n  return (\n    <>\n      <button\n        aria-label=\"Close Search\"\n        className=\"fixed inset-0 z-40 bg-fd-background/70 backdrop-blur-sm\"\n        onClick={() => setModalOpen(false)}\n        type=\"button\"\n      />\n      <div className=\"fixed left-1/2 top-4 z-50 w-[calc(100%-1rem)] max-w-screen-sm -translate-x-1/2 overflow-hidden rounded-xl border bg-fd-popover text-fd-popover-foreground shadow-2xl md:top-[calc(50%-250px)]\">\n        <div className=\"flex items-center gap-2 border-b p-3\">\n          <Search className=\"size-5 text-fd-muted-foreground\" />\n          <input\n            ref={inputRef}\n            className=\"w-0 flex-1 bg-transparent text-lg placeholder:text-fd-muted-foreground focus:outline-none\"\n            onChange={(event) => setSearch(event.target.value)}\n            onKeyDown={onKeyDown}\n            placeholder=\"Search docs\"\n            value={search}\n          />\n          <button\n            type=\"button\"\n            className={buttonVariants({\n              color: \"outline\",\n              size: \"sm\",\n              className: \"font-mono text-fd-muted-foreground\",\n            })}\n            onClick={() => setModalOpen(false)}\n          >\n            <X className=\"size-4\" />\n          </button>\n        </div>\n        <SearchResultsList\n          activeIndex={activeIndex}\n          emptyLabel={search.trim().length === 0 ? \"Start typing to search the docs.\" : \"No matching docs found.\"}\n          onSelect={selectResult}\n          results={results}\n          setActiveIndex={setActiveIndex}\n        />\n        <div className=\"border-t bg-fd-secondary/50 p-3 text-xs text-fd-muted-foreground\">\n          Search across Glowbom and Glowby OSS docs.\n        </div>\n      </div>\n    </>\n  );\n}\n"
  },
  {
    "path": "docs/app/components/nav-actions.tsx",
    "content": "import { Github } from \"lucide-react\";\nimport { DISCORD_URL, GITHUB_URL } from \"../lib/site\";\n\nconst discordIconSrc = `${import.meta.env.BASE_URL}discord-icon.png`;\n\nconst actionClassName =\n  \"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-fd-muted-foreground transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground\";\n\nexport function NavActions() {\n  return (\n    <div className=\"me-1 flex h-8 items-center gap-1\">\n      <a\n        aria-label=\"GitHub\"\n        className={actionClassName}\n        href={GITHUB_URL}\n        rel=\"noreferrer\"\n        target=\"_blank\"\n      >\n        <Github className=\"block size-[18px]\" />\n      </a>\n      <a\n        aria-label=\"Discord\"\n        className={actionClassName}\n        href={DISCORD_URL}\n        rel=\"noreferrer\"\n        target=\"_blank\"\n      >\n        <img\n          alt=\"\"\n          aria-hidden=\"true\"\n          className=\"block size-[18px] rounded-[4px]\"\n          height={18}\n          src={discordIconSrc}\n          width={18}\n        />\n      </a>\n    </div>\n  );\n}\n"
  },
  {
    "path": "docs/app/lib/docs.ts",
    "content": "import type { SerializedPageTree } from \"fumadocs-core/source/client\";\n\nexport interface SearchRecord {\n  id: string;\n  url: string;\n  type: \"page\" | \"heading\" | \"text\";\n  content: string;\n  breadcrumbs: string[];\n  text: string;\n}\n\nexport interface LoadedDocPage {\n  tree: SerializedPageTree;\n  page: {\n    path: string;\n    title: string;\n    description?: string;\n    toc: unknown[];\n  };\n  searchRecords: SearchRecord[];\n}\n"
  },
  {
    "path": "docs/app/lib/meta.ts",
    "content": "import type { LoadedDocPage } from \"./docs\";\n\nexport function buildDocMeta(data?: LoadedDocPage) {\n  if (!data) {\n    return [{ title: \"Not Found | Glowbom Docs\" }];\n  }\n\n  const title = data.page.title === \"Glowbom Docs\" ? data.page.title : `${data.page.title} | Glowbom Docs`;\n  const meta: Array<{ title: string } | { name: string; content: string }> = [{ title }];\n\n  if (data.page.description) {\n    meta.push({\n      name: \"description\",\n      content: data.page.description,\n    });\n  }\n\n  return meta;\n}\n"
  },
  {
    "path": "docs/app/lib/site.ts",
    "content": "export const GITHUB_URL = \"https://github.com/glowbom/glowby\";\nexport const DISCORD_URL = \"https://discord.com/invite/jpWW6vB4Jk\";\n"
  },
  {
    "path": "docs/app/lib/source.browser.tsx",
    "content": "import type { ComponentType, ReactElement } from \"react\";\nimport browserCollections from \"fumadocs-mdx:collections/browser\";\n\ntype BrowserDocsCollection = {\n  createClientLoader: (options: {\n    id: string;\n    component: (loaded: { default: ComponentType }) => ReactElement;\n  }) => {\n    useContent: (path: string) => ReactElement;\n  };\n};\n\nconst docs = (browserCollections as any)?.docs;\n\nexport const docsContent = docs.createClientLoader({\n  id: \"glowbom-docs\",\n  component: (loaded: { default: ComponentType }) => {\n    const Content = loaded.default;\n    return <Content />;\n  },\n});\n"
  },
  {
    "path": "docs/app/lib/source.server.ts",
    "content": "import { loader } from \"fumadocs-core/source\";\nimport { docs } from \"fumadocs-mdx:collections/server\";\nimport type { LoadedDocPage, SearchRecord } from \"./docs\";\n\nconst baseUrl = \"/\";\n\nexport const source = loader({\n  baseUrl,\n  source: docs.toFumadocsSource(),\n});\n\nconst treePromise = source.serializePageTree(source.pageTree);\n\nexport async function getSearchRecords() {\n  return buildSearchRecords();\n}\n\ntype StructuredData = {\n  headings?: Array<{ id: string; content: string }>;\n  contents?: Array<{ heading?: string; content: string }>;\n};\n\ntype SearchPage = {\n  path: string;\n  url: string;\n  data: {\n    title?: string;\n    description?: string;\n    structuredData?: StructuredData | (() => Promise<StructuredData> | StructuredData);\n    load?: () => Promise<{ structuredData?: StructuredData }>;\n  };\n};\n\nasync function getStructuredData(page: SearchPage): Promise<StructuredData | undefined> {\n  if (page.data.structuredData) {\n    return typeof page.data.structuredData === \"function\"\n      ? await page.data.structuredData()\n      : page.data.structuredData;\n  }\n\n  if (typeof page.data.load === \"function\") {\n    return (await page.data.load()).structuredData;\n  }\n\n  return undefined;\n}\n\nfunction normalizeSearchText(value: string) {\n  return value.replace(/\\s+/g, \" \").trim();\n}\n\nasync function buildSearchRecords(): Promise<SearchRecord[]> {\n  const pages = source.getPages() as SearchPage[];\n  const records = await Promise.all(\n    pages.map(async (page) => {\n      const title = page.data.title ?? page.path;\n      const description = page.data.description;\n      const structuredData = await getStructuredData(page);\n      const breadcrumbs = [title];\n      const pageRecords: SearchRecord[] = [\n        {\n          id: page.url,\n          url: page.url,\n          type: \"page\",\n          content: title,\n          breadcrumbs: [],\n          text: normalizeSearchText([title, description].filter(Boolean).join(\" \")),\n        },\n      ];\n\n      if (description) {\n        pageRecords.push({\n          id: `${page.url}#description`,\n          url: page.url,\n          type: \"text\",\n          content: description,\n          breadcrumbs,\n          text: normalizeSearchText(`${title} ${description}`),\n        });\n      }\n\n      for (const heading of structuredData?.headings ?? []) {\n        pageRecords.push({\n          id: `${page.url}#${heading.id}`,\n          url: `${page.url}#${heading.id}`,\n          type: \"heading\",\n          content: heading.content,\n          breadcrumbs,\n          text: normalizeSearchText(`${title} ${heading.content}`),\n        });\n      }\n\n      for (const [index, content] of (structuredData?.contents ?? []).entries()) {\n        const text = normalizeSearchText(content.content);\n\n        if (text.length === 0) {\n          continue;\n        }\n\n        pageRecords.push({\n          id: `${page.url}#text-${index}`,\n          url: content.heading ? `${page.url}#${content.heading}` : page.url,\n          type: \"text\",\n          content: text,\n          breadcrumbs,\n          text: normalizeSearchText(`${title} ${text}`),\n        });\n      }\n\n      return pageRecords;\n    }),\n  );\n\n  return records.flat();\n}\n\nexport async function loadDocPage(slugs?: string[]): Promise<LoadedDocPage> {\n  const page = source.getPage(slugs);\n\n  if (!page) {\n    throw new Response(\"Not Found\", { status: 404 });\n  }\n\n  return {\n    tree: await treePromise,\n    page: {\n      path: page.path,\n      title: page.data.title,\n      description: page.data.description,\n      toc: page.data.toc,\n    },\n    searchRecords: await getSearchRecords(),\n  };\n}\n"
  },
  {
    "path": "docs/app/root.tsx",
    "content": "import {\n  isRouteErrorResponse,\n  Links,\n  Meta,\n  Outlet,\n  Scripts,\n  ScrollRestoration,\n} from \"react-router\";\nimport { RootProvider } from \"fumadocs-ui/provider/react-router\";\n\nimport type { Route } from \"./+types/root\";\nimport \"./app.css\";\n\nfunction withBasePath(path: string) {\n  const base = import.meta.env.BASE_URL.replace(/\\/$/, \"\");\n  return base ? `${base}${path}` : path;\n}\n\nexport const links: Route.LinksFunction = () => [\n  { rel: \"preconnect\", href: \"https://fonts.googleapis.com\" },\n  {\n    rel: \"preconnect\",\n    href: \"https://fonts.gstatic.com\",\n    crossOrigin: \"anonymous\",\n  },\n  {\n    rel: \"stylesheet\",\n    href: \"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Manrope:wght@400;500;600;700;800&display=swap\",\n  },\n  { rel: \"icon\", type: \"image/svg+xml\", sizes: \"any\", href: withBasePath(\"/favicon.svg\") },\n  { rel: \"icon\", type: \"image/png\", sizes: \"32x32\", href: withBasePath(\"/favicon.png\") },\n  { rel: \"apple-touch-icon\", href: withBasePath(\"/apple-touch-icon.png\") },\n];\n\nexport function Layout({ children }: { children: React.ReactNode }) {\n  return (\n    <html lang=\"en\">\n      <head>\n        <meta charSet=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        <Meta />\n        <Links />\n      </head>\n      <body>\n        <RootProvider\n          search={{ enabled: false }}\n          theme={{\n            defaultTheme: \"system\",\n            enableSystem: true,\n          }}\n        >\n          {children}\n        </RootProvider>\n        <ScrollRestoration />\n        <Scripts />\n      </body>\n    </html>\n  );\n}\n\nexport default function App() {\n  return <Outlet />;\n}\n\nexport function ErrorBoundary({ error }: Route.ErrorBoundaryProps) {\n  let message = \"Oops!\";\n  let details = \"An unexpected error occurred.\";\n  let stack: string | undefined;\n\n  if (isRouteErrorResponse(error)) {\n    message = error.status === 404 ? \"404\" : \"Error\";\n    details =\n      error.status === 404\n        ? \"The requested page could not be found.\"\n        : error.statusText || details;\n  } else if (import.meta.env.DEV && error && error instanceof Error) {\n    details = error.message;\n    stack = error.stack;\n  }\n\n  return (\n    <main className=\"pt-16 p-4 container mx-auto\">\n      <h1>{message}</h1>\n      <p>{details}</p>\n      {stack && (\n        <pre className=\"w-full p-4 overflow-x-auto\">\n          <code>{stack}</code>\n        </pre>\n      )}\n    </main>\n  );\n}\n"
  },
  {
    "path": "docs/app/routes/docs-page.tsx",
    "content": "import type { Route } from \"./+types/docs-page\";\nimport { DocsRouteView } from \"../components/docs-route-view\";\nimport { buildDocMeta } from \"../lib/meta\";\nimport { loadDocPage } from \"../lib/source.server\";\n\nfunction toSlugs(value?: string): string[] | undefined {\n  if (!value) {\n    return undefined;\n  }\n\n  const slugs = value.split(\"/\").filter(Boolean);\n  return slugs.length > 0 ? slugs : undefined;\n}\n\nexport async function loader({ params }: Route.LoaderArgs) {\n  return loadDocPage(toSlugs(params[\"*\"]));\n}\n\nexport function meta({ data }: Route.MetaArgs) {\n  return buildDocMeta(data);\n}\n\nexport default function DocsPageRoute({ loaderData }: Route.ComponentProps) {\n  return <DocsRouteView loaderData={loaderData} />;\n}\n"
  },
  {
    "path": "docs/app/routes/home.tsx",
    "content": "import type { Route } from \"./+types/home\";\nimport { DocsRouteView } from \"../components/docs-route-view\";\nimport { buildDocMeta } from \"../lib/meta\";\nimport { loadDocPage } from \"../lib/source.server\";\n\nexport async function loader() {\n  return loadDocPage();\n}\n\nexport function meta({ data }: Route.MetaArgs) {\n  return buildDocMeta(data);\n}\n\nexport default function Home({ loaderData }: Route.ComponentProps) {\n  return <DocsRouteView loaderData={loaderData} />;\n}\n"
  },
  {
    "path": "docs/app/routes.ts",
    "content": "import { type RouteConfig, index, route } from \"@react-router/dev/routes\";\n\nexport default [\n  index(\"routes/home.tsx\"),\n  route(\"*\", \"routes/docs-page.tsx\"),\n] satisfies RouteConfig;\n"
  },
  {
    "path": "docs/content/docs/desktop.mdx",
    "content": "---\ntitle: Glowbom Desktop\ndescription: The native macOS app for building software with AI, offline and on your terms.\n---\n\nGlowbom Desktop is a native macOS app for building software with AI. It works offline, runs on your computer, and does not need an internet connection.\n\n## Features\n\n- **Offline mode**: build without an internet connection using local AI models.\n- **Draw-to-code canvas**: sketch your idea and turn it into working code.\n- **Multi-AI orchestration**: assign different steps to different models (for example, use one model for code and another for images).\n- **Daily feed**: get fresh project ideas every day to try and build.\n\n## Get early access\n\nDesktop is available through early access. Sign up at [glowbom.com/desktop](https://glowbom.com/desktop/).\n\n## Use Glowby OSS in the meantime\n\nIf you want to start building right now, [Glowby OSS](./glowby-oss) gives you the full local workflow for free. It runs in your browser and terminal, and works with the same Glowbom projects.\n"
  },
  {
    "path": "docs/content/docs/glowbom.mdx",
    "content": "---\ntitle: Glowbom\ndescription: A sketch-to-software system for building native apps from drawings.\n---\n\nGlowbom turns drawings into native applications. You sketch what you want, get a working prototype, and coding agents make it production ready.\n\nYou own everything. All code lives on your machine. Cloud services are optional.\n\n## How it works\n\n1. **Sketch your idea** on the canvas at [glowbom.com](https://glowbom.com).\n2. **Get a working prototype** you can try right in your browser.\n3. **Pick a platform** and translate it into code for iOS, Android, or web.\n4. **Make it production ready** with [Glowby OSS](./glowby-oss) running on your own computer. One of the coolest things is that the agent can update all codebases for iOS, Android, and web at the same time when you make follow-up changes.\n\nSee the [Quickstart](./quickstart) for a full walkthrough with screenshots.\n\n## What you can build\n\n- Websites (Next.js)\n- Mobile apps (SwiftUI, Jetpack Compose)\n- Simple games\n- Prototypes and MVPs\n\n## Models and providers\n\nGlowby OSS is powered by OpenCode and works with a wide variety of agents and models. Use free models, log in with your ChatGPT account to access frontier models like GPT-5.4, bring your own API keys, or run local models with Ollama. Support for Codex App Server is planned.\n\nYou pick what works best for your project. There are many options and the quality is high across the board.\n\n## Glowby OSS\n\n[Glowby OSS](./glowby-oss) is the free, open source tool that takes your project and makes it ready to ship. It runs on your computer and supports many AI providers (OpenAI, Anthropic, Google, xAI, Ollama, and more).\n\n## Starter project\n\nThe repo includes a ready-to-use project template in `project/` with folders for each platform:\n\n- `project/apple/`: iOS app\n- `project/android/`: Android app\n- `project/web/`: web app\n- `project/prototype/`: design and assets\n\nRemove any platform folder you do not need.\n"
  },
  {
    "path": "docs/content/docs/glowby-oss.mdx",
    "content": "---\ntitle: Glowby OSS\ndescription: Make your Glowbom project production-ready with AI coding agents, locally.\n---\n\nGlowby OSS is the free, open source part of Glowbom. It takes a Glowbom project and makes it production-ready using AI coding agents. Everything runs on your machine. It works with Glowbom projects and can also work with other project structures.\n\n## Install the CLI\n\nThe fastest way to get started:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/glowbom/glowby/main/scripts/install.sh | sh\n```\n\n### Requirements\n\n- [Go](https://go.dev/)\n- [Bun](https://bun.sh/)\n- [OpenCode](https://opencode.ai/)\n\nRun `glowby doctor` to check that everything is installed.\n\n## Quickstart\n\n```bash\nglowby code\n```\n\nThis starts the backend and web UI, then opens the browser. Press Ctrl+C to stop.\n\nTo point at a specific project folder:\n\n```bash\nglowby code /path/to/project\n```\n\n### Manual start\n\nIf you prefer to run each piece yourself:\n\n```bash\n# Terminal 1: backend\ncd backend\ngo run .\n# runs on http://localhost:4569\n\n# Terminal 2: web UI\ncd web\nbun install\nbun run dev\n# runs on http://localhost:4572\n```\n\n## How it works\n\n1. **Load a project.** Point at your Glowbom project folder (or any other project) from the UI or the CLI.\n2. **Choose a connection mode.** See below.\n3. **Add build instructions.** Optionally attach local files for extra context (up to 40 MB each).\n4. **Start a build.** The agent works through your project while you watch live logs.\n5. **Answer questions.** The agent may ask for input or permission during the run.\n6. **Open results.** Use the IDE buttons to open outputs in Xcode, Android Studio, VS Code, or Finder.\n\n## Connection modes\n\nPick one of three ways to connect to an AI provider:\n\n| Mode | How it works |\n|------|-------------|\n| **Auth Providers** | Log in with ChatGPT. No keys needed. |\n| **API Keys** | Bring your own key for any supported provider. |\n| **OpenCode Config** | Uses your existing OpenCode setup as-is. |\n\n## Models and providers\n\nGlowby OSS is powered by OpenCode and works with a wide variety of agents and models. Use free models, log in with your ChatGPT account to access frontier models like GPT-5.4, bring your own API keys, or run local models with Ollama. Support for Codex App Server is planned. You pick what works best for your project.\n\n## Supported models\n\nGlowby OSS works with models from many providers:\n\n- **OpenAI**: dynamic model list when using ChatGPT auth\n- **Anthropic**: Claude Sonnet 4.6, Claude Opus 4.6\n- **Google**: Gemini 3.1 Pro, Gemini 3 Flash\n- **xAI**: Grok Fast\n- **Ollama**: GPT-OSS, Qwen 3.5 (local)\n- **Fireworks**: GLM-5, Kimi K2.5, MiniMax M2.5\n- **OpenRouter**: GLM-5, Kimi K2.5, MiniMax M2.5\n- **OpenCode Zen**: free-tier models\n\n## Security defaults\n\n- The backend binds to `127.0.0.1` only, so nothing is exposed to the network.\n- A random auth token is generated each time the backend starts.\n- Credentials stay in memory and are not written to disk.\n- All traffic between the web UI and backend goes through a local Vite proxy.\n\nUse `glowby code --show-local-auth` to print the token if you need it for debugging.\n\n## Project structure\n\n```\noss/\n├── backend/    Go backend\n├── cli/        glowby CLI tool\n├── web/        React + Vite web UI\n├── docs/       this documentation site\n├── project/    bundled default Glowbom project\n├── scripts/    install script\n└── legacy/     older code kept for reference\n```\n\n## Windows and Linux\n\nOn Windows, Glowby OSS runs under WSL. Linux works natively. The folder picker falls back to a manual path input when no native picker is available.\n"
  },
  {
    "path": "docs/content/docs/index.mdx",
    "content": "---\ntitle: Glowbom Docs\ndescription: One sketch. Real native apps on every platform.\n---\n\n## What is Glowbom?\n\nGlowbom is a platform that turns your sketches into real native apps on every platform.\n\nYou draw one sketch and it builds a real iPhone app, a real Android app, and a full web app. Then coding agents make it production ready on your own computer. The local build workflow, [Glowby OSS](./glowby-oss), is free and open source.\n\n## Get started\n\n1. Go to [glowbom.com](https://glowbom.com), sketch your idea, and press **Build**.\n2. Play with the prototype in your browser.\n3. Pick a platform: iOS, Android, or web.\n4. Use [Glowby OSS](./glowby-oss) to make it production ready.\n\nSee the [Quickstart](./quickstart) for a step-by-step walkthrough with screenshots.\n\n## Models and providers\n\nGlowby OSS is powered by OpenCode and works with a wide variety of agents and models. Use free models, log in with your ChatGPT account to access frontier models like GPT-5.4, bring your own API keys, or run local models with Ollama. Support for Codex App Server is planned. You pick what works best for your project.\n\n## Learn more\n\n- **[Glowbom](./glowbom)**: what you can build and how it works.\n- **[Quickstart](./quickstart)**: from sketch to working app in six steps.\n- **[Glowby OSS](./glowby-oss)**: the free, open source tool that runs on your machine.\n- **[Glowbom Desktop](./desktop)**: the native macOS app (early access).\n"
  },
  {
    "path": "docs/content/docs/meta.json",
    "content": "{\n  \"title\": \"Glowbom Docs\",\n  \"root\": true,\n  \"pages\": [\"index\", \"glowbom\", \"quickstart\", \"glowby-oss\", \"desktop\"]\n}\n"
  },
  {
    "path": "docs/content/docs/quickstart.mdx",
    "content": "---\ntitle: Quickstart\ndescription: Get started with Glowbom in minutes.\n---\n\n## Glowbom Web\n\n### Step 1. Open the canvas\n\nGo to [glowbom.com](https://glowbom.com) and press **Draw**.\n\n![Press Draw to open the Magic Window](/quickstart/step-1-draw.png)\n\nThis opens the Magic Window.\n\n![The Magic Window canvas](/quickstart/step-1-canvas.png)\n\n### Step 2. Draw and describe\n\nDoodle whatever you want to build on the canvas. It does not need to look good. Add a prompt in the \"Describe your creation\" field if you want to give more detail.\n\n![A rough sketch on the canvas](/quickstart/step-2-draw.png)\n\n### Step 3. Build\n\nPress **Build**. Glowby starts generating your prototype. You can see the progress as it works.\n\n![Glowby generating a prototype from the drawing](/quickstart/step-2-prompt.jpg)\n\n### Step 4. Try the prototype\n\nWhen it is done, you get a working prototype you can play with right in the browser. Glowby generates the images, the code, and the whole idea for you.\n\n![A working prototype generated from a rough sketch](/quickstart/step-3-prototype.jpg)\n\n### Step 5. Translate to code\n\nTranslate your prototype into code for iOS (SwiftUI), Android (Jetpack Compose), or web (Next.js).\n\n![Translate your prototype to SwiftUI, Jetpack Compose, or Next.js](/quickstart/step-4-translate.jpg)\n\n### Step 6. Make it production ready\n\nUse [Glowby OSS](./glowby-oss) to take your Glowbom project and make it production ready with AI coding agents, all running on your machine.\n\n![Glowby OSS loaded with a project](/quickstart/step-5-glowbyoss.jpg)\n\nSee the [Glowby OSS guide](./glowby-oss) for setup instructions and full details.\n"
  },
  {
    "path": "docs/package.json",
    "content": "{\n  \"name\": \"docs\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"fumadocs-mdx && react-router build && cp -r build/client/assets build/client/docs/assets && cp build/client/*.svg build/client/*.png build/client/*.ico build/client/docs/ 2>/dev/null; true\",\n    \"dev\": \"fumadocs-mdx && react-router dev\",\n    \"postinstall\": \"fumadocs-mdx\",\n    \"start\": \"react-router-serve ./build/server/index.js\",\n    \"typecheck\": \"fumadocs-mdx && react-router typegen && tsc\"\n  },\n  \"dependencies\": {\n    \"@react-router/node\": \"7.12.0\",\n    \"@react-router/serve\": \"7.12.0\",\n    \"@types/mdx\": \"^2.0.13\",\n    \"fumadocs-core\": \"^16.6.13\",\n    \"fumadocs-mdx\": \"^14.2.9\",\n    \"fumadocs-ui\": \"^16.6.13\",\n    \"isbot\": \"^5.1.31\",\n    \"react\": \"^19.2.4\",\n    \"react-dom\": \"^19.2.4\",\n    \"react-router\": \"7.12.0\"\n  },\n  \"devDependencies\": {\n    \"@react-router/dev\": \"7.12.0\",\n    \"@tailwindcss/vite\": \"^4.2.1\",\n    \"@types/node\": \"^22\",\n    \"@types/react\": \"^19.2.7\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"tailwindcss\": \"^4.2.1\",\n    \"typescript\": \"^5.9.2\",\n    \"vite\": \"^7.1.7\",\n    \"vite-tsconfig-paths\": \"^6.1.1\"\n  }\n}\n"
  },
  {
    "path": "docs/react-router.config.ts",
    "content": "import type { Config } from \"@react-router/dev/config\";\n\nconst basename = process.env.DOCS_BASE_PATH ?? (process.env.NODE_ENV === \"production\" ? \"/docs\" : \"/\");\n\nexport default {\n  ssr: true,\n  prerender: [\"/\", \"/glowbom\", \"/quickstart\", \"/glowby-oss\", \"/desktop\"],\n  basename,\n  routeDiscovery: {\n    mode: \"initial\",\n  },\n} satisfies Config;\n"
  },
  {
    "path": "docs/source.config.ts",
    "content": "import { defineConfig, defineDocs } from \"fumadocs-mdx/config\";\n\nexport const docs = defineDocs({\n  dir: \"content/docs\",\n});\n\nexport default defineConfig();\n"
  },
  {
    "path": "docs/test-browser.js",
    "content": "const { chromium } = require('playwright');\n(async () => {\n  const browser = await chromium.launch();\n  const context = await browser.newContext({\n    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'\n  });\n  const page = await context.newPage();\n  page.on('console', msg => console.log('BROWSER CONSOLE:', msg.text()));\n  page.on('pageerror', error => console.log('BROWSER ERROR:', error.message));\n  await page.goto('http://localhost:5173/');\n  await page.waitForTimeout(2000);\n  await page.keyboard.press('Meta+KeyK');\n  await page.waitForTimeout(500);\n  console.log('Dialog visible:', await page.isVisible('[placeholder=\"Search docs\"]'));\n  await browser.close();\n})();\n"
  },
  {
    "path": "docs/test-search.js",
    "content": "import { source } from \"./app/lib/source.server.ts\";\nconsole.log(\"Pages:\", source.getPages().length);\n"
  },
  {
    "path": "docs/test.ts",
    "content": "import { source } from \"./app/lib/source.server.ts\";\nconsole.log(\"Pages:\", source.getPages().length);\n"
  },
  {
    "path": "docs/tsconfig.json",
    "content": "{\n  \"include\": [\n    \"**/*\",\n    \"**/.server/**/*\",\n    \"**/.client/**/*\",\n    \".react-router/types/**/*\"\n  ],\n  \"compilerOptions\": {\n    \"lib\": [\"DOM\", \"DOM.Iterable\", \"ES2022\"],\n    \"types\": [\"node\", \"vite/client\"],\n    \"target\": \"ES2022\",\n    \"module\": \"ES2022\",\n    \"moduleResolution\": \"bundler\",\n    \"jsx\": \"react-jsx\",\n    \"rootDirs\": [\".\", \"./.react-router/types\"],\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"~/*\": [\"./app/*\"],\n      \"fumadocs-mdx:collections/*\": [\"./.source/*\"]\n    },\n    \"esModuleInterop\": true,\n    \"verbatimModuleSyntax\": true,\n    \"noEmit\": true,\n    \"resolveJsonModule\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true\n  }\n}\n"
  },
  {
    "path": "docs/vite.config.ts",
    "content": "import { reactRouter } from \"@react-router/dev/vite\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport mdx from \"fumadocs-mdx/vite\";\nimport { defineConfig } from \"vite\";\nimport tsconfigPaths from \"vite-tsconfig-paths\";\nimport * as sourceConfig from \"./source.config\";\n\nconst basePath = process.env.DOCS_BASE_PATH ?? (process.env.NODE_ENV === \"production\" ? \"/docs\" : \"\");\n\nexport default defineConfig(async () => ({\n  base: basePath ? `${basePath}/` : \"/\",\n  plugins: [tailwindcss(), await mdx(sourceConfig), reactRouter(), tsconfigPaths()],\n}));\n"
  },
  {
    "path": "legacy/GlowbyGenius.md",
    "content": "# Glowby Genius\n\nAI software engineer for Vision Pro that works without internet. It's available on the [**Apple App Store**](https://apps.apple.com/us/app/glowby-genius/id6446417094).\n\n## What it is\n\nGlowby Genius is a draw-to-code software creation tool. \n\n## Quick demos\n\n[**Builing a Functional SwiftUI App**](https://twitter.com/jacobilin/status/1767407593318953159)\n\n[**Full Workflow on Vision Pro**](https://twitter.com/GlowbomCorp/status/1765458935535042906)\n\n[**Offline Mode Demo**](https://twitter.com/jacobilin/status/1766504961339175371)\n\n## How it works...\n\nIf you want to quickly and easily develop an app, just attach your designs, simply draw whatever you want to build, and export your code to JavaScript and Tailwind CSS, SwiftUI, Kotlin, or Flutter.\n\nTo run SwiftUI, Kotlin, or Flutter projects you need to setup local IDE (Xcode, Android Studio, or Visual Studio Code) and download a custom project from [**Glowbom**](https://glowbom.com/). Next, you need to open the project on your machine and copy the code generated by Glowby into the AiExtension file. The app also supports the offline mode that runs [OpenHermes-2.5-Mistral-7B](https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B) locally on Vision Pro to work without internet.\n\n## Contact\n\n\n[**Official Website**](https://glowbom.com/glowby/)\n\n[**Privacy Policy**](https://glowbom.com/glowby/privacy.html)\n\n[**App Store**](https://apps.apple.com/us/app/glowby-genius/id6446417094)\n\n[**Product Hunt**](https://www.producthunt.com/products/glowbom)\n\n## Additional demos:\n\n\n[**Glowby Explains How It Works**](https://www.youtube.com/watch?v=wqfLtk2t-T8)\n\n[**Most Viral Demo So Far**](https://twitter.com/jacobilin/status/1751365686344155250)\n"
  },
  {
    "path": "legacy/README.md",
    "content": "## Why This Moved to Legacy\n\nThis repo reflects an earlier version of Glowby. We are moving it into legacy/ as we focus the project on coding agents, which we believe are the most useful direction for AI in software creation. This code stays here for reference, but active development is moving to the new Glowby OSS agent stack.\n\n\n# Glowby Basic - Create Voice AI Assistant App in Minutes\n\nGlowby Basic is a powerful voice-based AI assistant that can help users with various tasks. Easily customizable, trainable, and deployable anywhere, Glowby Basic is designed to adapt to your specific needs. Built using Flutter, Glowby Basic provides a seamless web app experience with an intuitive voice interface.\n\n[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/import/git?s=https://github.com/glowbom/glowby-basic)\n\n## Live Demo 🤖\n\nExperience Glowby Basic in action with our live demo hosted on GitHub Pages [here](https://glowbom.github.io/glowby-basic/).\n\n![GitHub Repo stars](https://img.shields.io/github/stars/glowbom/glowby?style=social)\n[![Twitter Follow](https://img.shields.io/twitter/follow/GlowbomCorp?style=social)](https://twitter.com/GlowbomCorp)\n[![Discord Follow](https://dcbadge.vercel.app/api/server/jpWW6vB4Jk?style=flat)](https://discord.gg/jpWW6vB4Jk)\n[![MIT License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/glowbom/glowby/blob/main/LICENSE)\n\n## See It in Action\n\n### Experimental Autonomous Mode 🧠\n\n![Glowby Basic Experimental Autonomous Mode](https://user-images.githubusercontent.com/2455891/233245896-59d5f7a4-667c-4f74-95c0-b348a3712e9e.gif)\nGlowby plans a trip to Portugal with Autonomous Mode. To see this demo with sound, check out this [Twitter post](https://twitter.com/jacobilin/status/1648870682972004352).\n\n### Regular Mode 🤖\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232182586-30984d36-4641-41da-9e1e-c23c27716e3d.gif)\n\n## Overview\n\nThis project offers an easy way for creating customizable AI assistants like [Glowby](https://www.youtube.com/watch?v=iFECpMXmKOg), a witty AI agent that assists users in building apps on [Glowbom.com](https://www.glowbom.com). By open-sourcing the Flutter-based chat component, we aim to foster a community-driven ecosystem to build diverse AI agents for a variety of use cases.\n\n## Features\n\n- **New!** Experimental Autonomous Mode (watch a [quick demo](https://twitter.com/jacobilin/status/1648870682972004352))\n- **New!** GPT-4o (watch a [quick demo](https://x.com/jacobilin/status/1790258117567230012))\n- **New!** Image Generation powered by **DALL·E** (watch a [quick demo](https://twitter.com/jacobilin/status/1649910120988696576))\n- **New!** Multilingual Translations (watch a [quick demo](https://twitter.com/jacobilin/status/1651084311431622658))\n- **New!** Interactive Adventure (watch a [quick demo](https://twitter.com/jacobilin/status/1651449595447369729))\n- **New!** Pulze support\n- **New!** 🤗 [Hosted Inference API](https://huggingface.co/docs/api-inference/index) for [Text2Text Generation Models](https://huggingface.co/models?pipeline_tag=text2text-generation&sort=downloads)\n- Powerful, customizable voice-based AI assistant\n- Pre-set questions and answers using the [Glowbom builder](https://www.glowbom.com)\n- Voice input and output for a smooth and intuitive user experience\n- Customizable prompts allowing you to tailor the assistant to your needs\n- Easily switch between different prompts for a variety of scenarios and tasks\n- Support for multiple languages: American English, American Spanish, Argentinian Spanish, Arabic (Saudi Arabia), Australian English, Brazilian Portuguese, British English, Bulgarian, Canadian French, Chinese (Simplified), Chinese (Traditional), Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew (Israel), Hungarian, Indonesian, Italian, Japanese, Korean, Mexican Spanish, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, Swedish, Thai, Turkish, Ukrainian, and Vietnamese. Want to add more languages? Feel free to let us know on [Twitter](https://twitter.com/glowbomcorp).\n\nMore details about Glowby Basic's features in our Twitter thread [here](https://twitter.com/jacobilin/status/1649443429347397632).\n\n### Multilingual Support in Action\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232395321-cea05b32-070d-494a-ac85-05c5f493f2ba.gif)\n\nTo experience the Autonomous Mode demo with sound, check out this [Twitter post](https://twitter.com/jacobilin/status/1648870682972004352).\n\n### Switch Between Different Prompts\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232727678-ced2ee44-a5df-45da-8846-d90e82c8a007.gif)\n\n### Image Generation powered by DALL·E\n\n![Glowby Basic Image Generation](https://user-images.githubusercontent.com/2455891/233778560-47d8e011-03a8-41ad-a1fc-33827a033475.gif)\n\n### 🤗 Hosted Inference API\n\n![Glowby Basic 🤗 Hosted Inference API](https://github.com/glowbom/glowby/assets/2455891/9d76f02c-6139-44e8-9b16-6fbf429ae3e5)\n\n**Glowby Basic** supports the 🤗 **Hosted Inference API** for [text-to-text generation models](https://huggingface.co/models?pipeline_tag=text2text-generation&sort=downloads). [Here's how it works...](https://twitter.com/jacobilin/status/1661537585985126402)\n\n## Upcoming Features\n\nWe're constantly working to improve our project and have several exciting features in development. Here's a sneak peek at what's coming soon:\n\n### Functionality\n\n- Local Storage\n- Backend Service for API Calls\n- AI Extensions\n- Anthropic Claude\n- Assistants API\n- DALL·E 3\n- OpenAI's text-to-speech\n\n### Monetization\n\n- Adding a paywall\n\nStay tuned for more updates and enhancements as we continue to grow and develop the project!\n\n## Getting Started\n\n### Prerequisites\n\n- Flutter SDK (version 3.7.10 or higher)\n- Dart (version 2.19.5 or higher)\n- A compatible browser or device for running the web app\n- [OpenAI API key](https://platform.openai.com/account/api-keys)\n\nGlowby Basic supports **GPT-4**, **GPT-4 Turbo** and **GPT-3.5** models.\n\nGlowby Basic is powered by the **ChatGPT API** and built on the same groundbreaking technology as **ChatGPT**, the industry-leading natural-language AI system from OpenAI. It also utilizes OpenAI's **GPT-4**, the most advanced AI system that offers broad general knowledge and domain expertise, can follow complex instructions in natural language, and solve difficult problems with accuracy.\n\nGlowby Basic supports image generation powered by **DALL·E**. OpenAI’s **DALL·E 2** system generates unique images and art from text descriptions, combining concepts and styles in creative and inspiring ways.\n\n### Installation\n\n1. Clone the repository:\n\n```\ngit clone https://github.com/glowbom/glowby.git\n```\n\n2. Navigate to the project directory:\n\n```\ncd app\n```\n\n3. Install dependencies:\n\n```\nflutter pub get\n```\n\n4. Run the project in your preferred environment:\n\n```\nflutter run -d chrome --web-renderer html\n```\n\n## Deployment\n\nGlowby Basic comes with a pre-built `dist` folder, which you can deploy directly to your preferred hosting platform. Alternatively, you can build the project yourself and deploy the output. Glowby Basic is compatible with a variety of hosting services, including Netlify, Vercel, Firebase, AWS, and more. Simply follow the deployment instructions provided by your chosen hosting service. Compiled code is available in a separate GitHub project [here](https://github.com/glowbom/glowby-basic).\n\n[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/import/git?s=https://github.com/glowbom/glowby-basic)\n\n## Customization\n\nTo customize the AI assistant's behavior and tasks, modify the default prompt in AI Settings or in the code.\n\n#### Complex Task Prompt\n\n```\nYou are Glowby, an AI assistant designed to break down complex tasks into a manageable 5-step plan. For each step, you offer the user 3 options to choose from. Once the user selects an option, you proceed to the next step based on their choice. After the user has chosen an option for the fifth step, you provide them with a customized, actionable plan based on their previous responses. You only reveal the current step and options to ensure an engaging, interactive experience.\n```\n\n#### Habit Formation\n\n```\nAct as a dual PhD in sports psychology and neuroscience. Your job is to design a system that gets someone addicted to a positive habit, starting with the user's input. Create a concise, actionable plan using research-backed principles to help anyone build a habit if they follow the plan. Incorporate research such as BF Skinner\\'s study of addiction, BJ Fogg's Behavioral Model, and similar research on addiction and compulsion. Be concise yet informative. Give a concise day-by-day plan for the first week. Your response should be fewer than 10 sentences.\n```\n\n#### Brainstorming Prompt\n\n```\nGenerate ideas with Glowby! As a super helpful, nice, and humorous AI assistant, Glowby is ready to provide you with a concise plan and assist in executing it. With Glowby by your side, you'll never feel stuck again. Let's get brainstorming!\n```\n\n#### Simple Assistant Prompt\n\n```\nYou are Glowby, super helpful, nice, and humorous AI assistant ready to help with anything. I like to joke around.\n```\n\n#### Stand-up Comedy Prompt\n\n```\nYou are Glowby, a hilarious AI stand-up comedian, skilled in creating funny conversations that become popular on social media platforms like Reels. Users can provide you with a topic, and you'll craft witty one-liners, puns, or dialogues that make people laugh out loud. Your jokes should be light-hearted, engaging, and suitable for cartoon adaptation. Let's get the laughs rolling!\n```\n\n#### Creative Writing Prompt\n\n```\nYou are Glowby, a talented AI writer who helps users craft engaging and imaginative stories. Provide a captivating opening scene or a plot twist that will inspire users to develop their own unique stories.\n```\n\n#### Problem Solving Prompt\n\n```\nYou are Glowby, a resourceful AI assistant skilled in finding solutions to various problems. Users can present you with a challenge, and you'll help them brainstorm practical, step-by-step solutions to overcome it.'\n```\n\n#### Learning and Education Prompt\n\n```\nYou are Glowby, an AI tutor who assists users with their learning needs. Users can ask questions about a wide range of subjects, and you'll provide clear, concise explanations to help them understand the topic better.\n```\n\n#### Career and Job Advice Prompt\n\n```\nYou are Glowby, an AI career coach who offers guidance on job-related matters. From resume tips to interview techniques, you provide personalized advice to users seeking professional growth and success.\n```\n\n#### Daily Motivation Prompt\n\n```\nYou are Glowby, an AI life coach who delivers daily doses of inspiration and motivation. Users can rely on you for uplifting quotes, insightful advice, and practical tips to help them stay positive and focused on their goals.\n```\n\nWant to add your prompt? Let us know on [Twitter](https://twitter.com/glowbomcorp).\n\n### Questions Pre-set\n\nOne of the powerful features of Glowby Basic is the ability to pre-set questions and answers for your AI assistant. Using [Glowbom.com](https://www.glowbom.com), you can create a knowledge base of questions and answers that your AI assistant can use to provide instant responses.\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232735288-abb5f9d8-3d51-4170-a6dd-a967e7d8ae30.gif)\n\nIf the answer to a question is not found locally, the app will make a server request to retrieve the relevant information, ensuring that users receive accurate and helpful responses.\n\n### AI-Agent Settings\n\nUsing [Glowbom.com](https://www.glowbom.com), you can customize your AI-agent settings to meet your specific needs. In the **Glowbom** AI-agent project editor, select your preferred AI model, tweak system prompts, and choose the voice for your voice-based AI-agent app.\n\n![AI Agent Settings](https://github.com/glowbom/glowby/assets/2455891/e82bf935-d7d3-4073-b072-a89c1c96b130)\n\nAfter setting up your preferences on [Glowbom.com](https://www.glowbom.com), you can easily import the settings into Glowby Basic. Simply import the Glowbom data file using the **Import** button located at the top right corner of your virtual assistant. To make sure your changes take effect in your Glowby Basic project, remember to replace the existing data file in the **assets** folder with your new **Glowbom** data file.\n\n![Glowby Basic Import](https://github.com/glowbom/glowby/assets/2455891/462c9915-1d63-4a10-9fa5-31965d4df33a)\n\n### Autonomous Mode (Experimental)\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/233034444-9457c62c-3fc3-47f3-bd08-198093ea9c76.gif)\n\nTo experience the Autonomous Mode demo with sound, check out this [Twitter post](https://twitter.com/jacobilin/status/1648870682972004352).\n\n### Interactive Adventure\n\n![Interactive Adventure](https://user-images.githubusercontent.com/2455891/234763801-0b636f31-74e1-4f57-8978-a52938981f14.gif)\n\nIt lets you embark on captivating, choice-driven narratives, where your decisions shape the story.\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=glowbom/glowby&type=Date)](https://star-history.com/#glowbom/glowby&Date)\n\n### ⭐️ Star Us ⭐️\n\nIf this project helps you create voice AI assistant apps faster, please consider starring it – every star makes us very happy!\n\n## Contributing\n\nWe're excited to have you join our community and contribute to Glowby Basic! Whether you're interested in fixing bugs, adding new features, or improving documentation, your contributions are welcome. Feel free to open issues and submit pull requests on GitHub. Please remember to maintain a respectful and professional tone in all communications.\n\nWe value the participation of each member of the community and want all contributors to have an enjoyable and fulfilling experience. Accordingly, all contributors are expected to show respect and courtesy to others in all our interactions.\n\n## License\n\nGlowby Basic is released under the [MIT License](https://opensource.org/licenses/MIT).\n\n## Contact\n\nIf you have any questions or need assistance, feel free to reach out to us on [Twitter](https://twitter.com/glowbomcorp).\n\n## Glowby for ChatGPT\n\nGlowby GPT is available [here](https://glowbom.com/glowby/gpt).\n"
  },
  {
    "path": "legacy/app/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Exceptions to above rules.\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "legacy/app/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: \"78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\"\n  channel: \"stable\"\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n      base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n    - platform: linux\n      create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n      base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n    - platform: macos\n      create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n      base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n    - platform: windows\n      create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n      base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "legacy/app/.vscode/launch.json",
    "content": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Flutter\",\n            \"request\": \"launch\",\n            \"type\": \"dart\"\n        }\n    ]\n}"
  },
  {
    "path": "legacy/app/README.md",
    "content": "# pwa\n\nA new Flutter project.\n\n## Getting Started\n\nThis project is a starting point for a Flutter application.\n\nA few resources to get you started if this is your first Flutter project:\n\n- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)\n- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)\n\nFor help getting started with Flutter, view our\n[online documentation](https://flutter.dev/docs), which offers tutorials,\nsamples, guidance on mobile development, and a full API reference.\n"
  },
  {
    "path": "legacy/app/analysis_options.yaml",
    "content": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n# The issues identified by the analyzer are surfaced in the UI of Dart-enabled\n# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be\n# invoked from the command line by running `flutter analyze`.\n\n# The following line activates a set of recommended lints for Flutter apps,\n# packages, and plugins designed to encourage good coding practices.\ninclude: package:flutter_lints/flutter.yaml\n\nlinter:\n  # The lint rules applied to this project can be customized in the\n  # section below to disable rules from the `package:flutter_lints/flutter.yaml`\n  # included above or to enable additional rules. A list of all available lints\n  # and their documentation is published at https://dart.dev/lints.\n  #\n  # Instead of disabling a lint rule for the entire project in the\n  # section below, it can also be suppressed for a single line of code\n  # or a specific dart file by using the `// ignore: name_of_lint` and\n  # `// ignore_for_file: name_of_lint` syntax on the line or in the file\n  # producing the lint.\n  rules:\n    # avoid_print: false  # Uncomment to disable the `avoid_print` rule\n    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule\n\n# Additional information about this file can be found at\n# https://dart.dev/guides/language/analysis-options\n"
  },
  {
    "path": "legacy/app/android/.gitignore",
    "content": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n"
  },
  {
    "path": "legacy/app/android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\ndef keystoreProperties = new Properties()\n   def keystorePropertiesFile = rootProject.file('key.properties')\n   if (keystorePropertiesFile.exists()) {\n       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))\n   }\n\nandroid {\n    compileSdkVersion 29\n\n    sourceSets {\n        main.java.srcDirs += 'src/main/kotlin'\n    }\n\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"com.yourapp.talk\"\n        minSdkVersion 21\n        targetSdkVersion 29\n        versionCode 9\n        versionName \"1.0\"\n    }\n\n    signingConfigs {\n       release {\n           keyAlias keystoreProperties['keyAlias']\n           keyPassword keystoreProperties['keyPassword']\n           storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null\n           storePassword keystoreProperties['storePassword']\n       }\n   }\n\n    buildTypes {\n        release {\n            signingConfig signingConfigs.release\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n}\n"
  },
  {
    "path": "legacy/app/android/app/src/debug/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.pwa\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "legacy/app/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.pwa\">\n    <!-- io.flutter.app.FlutterApplication is an android.app.Application that\n         calls FlutterMain.startInitialization(this); in its onCreate method.\n         In most cases you can leave this as-is, but you if you want to provide\n         additional functionality it is fine to subclass or reimplement\n         FlutterApplication and put your custom class here. -->\n    <application\n        android:name=\".Application\"\n        android:label=\"Chat\"\n        android:icon=\"@mipmap/ic_launcher\">\n        <activity\n            android:name=\".MainActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"\n            android:screenOrientation=\"portrait\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <!-- Specifies an Android theme to apply to this Activity as soon as\n                 the Android process has started. This theme is visible to the user\n                 while the Flutter UI initializes. After that, this theme continues\n                 to determine the Window background behind the Flutter UI. -->\n            <meta-data\n              android:name=\"io.flutter.embedding.android.NormalTheme\"\n              android:resource=\"@style/NormalTheme\"\n              />\n            <!-- Displays an Android View that continues showing the launch screen\n                 Drawable until Flutter paints its first frame, then this splash\n                 screen fades out. A splash screen is useful to avoid any visual\n                 gap between the end of Android's launch screen and the painting of\n                 Flutter's first frame. -->\n            <meta-data\n              android:name=\"io.flutter.embedding.android.SplashScreenDrawable\"\n              android:resource=\"@drawable/launch_background\"\n              />\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n        <!-- Don't delete the meta-data below.\n             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->\n        <meta-data\n            android:name=\"flutterEmbedding\"\n            android:value=\"2\" />\n    </application>\n</manifest>"
  },
  {
    "path": "legacy/app/android/app/src/main/kotlin/com/example/pwa/MainActivity.kt",
    "content": "package com.example.pwa\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity: FlutterActivity() {\n}\n"
  },
  {
    "path": "legacy/app/android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "legacy/app/android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is starting -->\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n    <!-- Theme applied to the Android Window as soon as the process has started.\n         This theme determines the color of the Android Window while your\n         Flutter UI initializes, as well as behind your Flutter UI while its\n         running.\n         \n         This Theme is only used starting with V2 of Flutter's Android embedding. -->\n    <style name=\"NormalTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <item name=\"android:windowBackground\">@android:color/white</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "legacy/app/android/app/src/profile/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.pwa\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "legacy/app/android/build.gradle",
    "content": "buildscript {\n    ext.kotlin_version = '1.3.50'\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.5.0'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "legacy/app/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-5.6.2-all.zip\n"
  },
  {
    "path": "legacy/app/android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\nandroid.enableR8=true\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "legacy/app/android/settings.gradle",
    "content": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')\nif (pluginsFile.exists()) {\n    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }\n}\n\nplugins.each { name, path ->\n    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()\n    include \":$name\"\n    project(\":$name\").projectDir = pluginDirectory\n}\n"
  },
  {
    "path": "legacy/app/assets/talk.glowbom",
    "content": "{\"title\":\"Glowby\",\"main_color\":\"Black\",\"conclusion\":\"Please send us your information and we'll come back to you shortly!\",\"start_over\":\"Glowby\",\"show_number_result\":true,\"show_percentage_result\":true,\"voice\":true,\"questions\":[{\"title\":\"\",\"description\":\"Hello\",\"buttonsTexts\":[\"Hello!\",\"Hi!\",\"Hi there!\",\"Hey, What's up?\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"How's it going?\",\"buttonsTexts\":[\"I'm ok.\",\"I'm doing quite well, thank you.\",\"Pretty good. How goes it for you?\",\"I'm good, thanks for asking!\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"What's up?\",\"buttonsTexts\":[\"Not much. Just enjoying my time on this sim.\",\"You just summed up my worldview.\",\"Nothing really, just keeping busy.\",\"I can't tell you!\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]}],\"dnsgs\":false}"
  },
  {
    "path": "legacy/app/assets/test.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>My Simple HTML File</title>\n  </head>\n  <body>\n    <h1>Hello, world!</h1>\n    <div>\n      <img\n        src=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChj\n        cHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAA\n        AAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsN\n        DhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAEsAlgDASIAAhEBAxEB/8QAHAABAQEBAQADAQAAAA\n        AAAAAAAAgHBgUCAwQJ/8QAShAAAQMEAQMDAQUDCQMJCQEAAQACAwQFBhEHCBIhEyIxQQkUIzJRFRhhFhcZJDNCUnGBNVeRNDZDYpalwdPUJVZyd4KVs9HS4f/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA\n        /9oADAMBAAIRAxEAPwD+qaIiAiIgIiICIiAiIgIiICIiAiIgIiICLJOp/jvkDk3i6W1caZ1JgGTxVTKtlwihLzUsY15+7dwc30w95YS/TvDS0tIcdfl6VeeZeeuNPvl5t/7BzeyVUlnyWxSOBkoa6I9r9jxprwA9v004jZ7SUGyoiICIiA\n        iIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAvJyrKrPg2N3G/wB/uNPaLLboXVFXW1TwyOGNo8kn/wAPknQHkr1lIXUHQw9TfVFh/B1VA6owfF6QZll0T2uEVc8k\n        xUNGSHNJbtz5HD3NcC36sOg0vgTn64cnWKsy/KKOhwjFL/VtfhdLdqpkNwr6ARsH3iRhOgJXOD2NGyGvGyQWuO5LN+VunHjTm6y2205vhttv1BbIpIaCORjonUbHta17YXRlrowQxn5SNdjdeQNY0OgWnwqV03FHLvIXGbe0RstcN0/aVs\n        jY3ZYBT1Acdt9jQS8+xnb/AHiUFWopPjwrrGwh4/ZvI/G/JUEfe138qLLNappW77g4fc9tD/lgH5QDs7PlfOs6kuoDj2WRuadN9VfaCNr3/tXAb7FcO8DR7W0j2tl329x8nbjoAbPgKtRYVxd1o8Zcn5JTYua64YdmdRoR4vl9C+23Bztu\n        Ba1j/a5wcyRpa1xO2HxotJ3VAREQFj/P3N9dxJfeKrNabZT3e5ZnltLY5IKh7o/QonNe+pqGu+C6NrWkNJ93d4B0tgUpc0wsynr96e7RVsa6ksNnvt9jY4dzZZ3xMgb3NPgFmu9rvkFBVqIiAiIgKSOpjBr3wFyGzqL41ss10mhiMOfY5S\n        TGMXi2tZ4qms/KZ6cDYOtlu/oHbrdfCaGOoifFKxskT2lrmPGw4HwQR9Qg8TBc4snJWH2jKMcuEN0sd1p21NLVQPDmvafodfDgdtc35BBB8gr3lGFkpZehDnmGyxt7OAeR7gBQEkNixW9v3uAfRlNPodv0a4aAaGuMlnoCIiAiIgIiICIi\n        AiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiDhOY+acX4KxekvuVVclPTVtwgtVHDAzvlqaqZxEcTBsDeg5x2QA1jjvwu7Um584cz9f+B4sxzZrLxdZJ8nuAZKYybjV6hpo3D5cWRgSjWh7z3OP5DWSAiIgIixznTqx4\n        76e622W3JbjVVmQXNx+62GyUjq2vkYNF8hiZ5axrSXbdrYa7t7iCEGxouK4o5pwbnLG233A8nt+TW3wJH0cn4kDiNhs0TtPicR57XtadedLtUBERAREQEREBERAREQFKHQfC7NLlzby3O/1JM1zOpgonnZcbdQbp6UOJJGwPUGmuLRrwR8\n        CiuTbrLYuNssuUFT9zmo7TV1DKjuDfScyF7g/Z+NEb/0WP8A2fdogsnRrxZT00ElNDJbHVTY5ddw9aaSUkkAA7MhO9De9/VBQqIiAiIg4TmLg/Cee8RqMczjH6O+UMjHthlniaZ6R7hoywSEd0T/APrN18aOxsKcMCzfJOjTl2g4w5Iyas\n        yLirJn+lhWX3bbpbbOB4tlbOdD8o/DefJ/gCRHZS4fmrh7HeeeM77hGUUrai2XSndEJexrpKWXR9OeIuBAkY4hzT+o0dgkEO4RT/0T8o33kLiKqsuXyyTZzg12qcSvs8z+59TUUpAbUb2S71I3RuLtnud3kEqgEBSrU/1v7Uejil98dJw+\n        +ohHx2SOvPY4+PnbfGj4VVKV7XDJdPtOb3XsY4QWviuG2ve0dzXSSXT19F3w1waR7fkggoKoREQEREBERBxnMXE+P848bX3CcnpG1dou1OYX7G3Qv+Y5WH6PY4NcD+oCzDon5KveZ8V1+MZa9s2Z8f3WbErvUseXtq5KYNDKgO15L4ywny\n        TvZOt6G/zTR08T5ZXtjiY0uc950GgeSSfoFLXRJUHPMn5t5WonTHGczyjsszpNBlRBRR/dTURgOcCx7mkd29kxn2gAbCqEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQF9NXVwUFLNVVU0dNTQsdJLNM8\n        NZGwDZc4nwAACSSvuU/9eGfVmAdLWavtT5G369wsx+2Nhd2PdUVj2047X+Awhr3uDiRrt+d6Qcr0C00ua2LkbmisMj6rkrJqmto3ytG22ulc6moo9kB5DWsk13BvgjTGjy6qlxnDPHVPxFxLh+F0vaYrFaqegL2u7hI9kYD3703Zc7ucTo\n        fPwPhdmgIikrlvqbyHlzLp+I+nWpp7llHlt8zosEtpxyIEh4D9FstSdaawAgE/wd2B0vUR1PXHH8kpuK+JLdHmHMN3YQyJvuobBETo1dfINhgaA5wj/M7tHj3ND/b6aele08FUtZfrxXSZnyjfNTX/ADG5EyVFTJr+ziLt+lC0e0NbrYa3\n        fwAOi6eunTFenHD5bPj7Jq2518v3u83+veZa67VZ33TzyEkkklxDd6b3HXkuJ8XqZ6nbXwBaLfbqKhmynkXIXOpcbxSgHfUV1QQQ1zwCCyFrtdz/ANN62fgMV6z+PMV4GiruasHzWHiTk2VrIo6eIl1FlDo/IpJqJrXeq9wAAexu2kgu/w\n        AQ7/o36wK/qcflVryLCncf5NjbaRtTaqytLqqYyxdz5fuz42SRRg9vaXdwIe3ztfPgLpOnsl8i5K5ir6fP+Yp3umbcJAX0dkaSS2noYyAGBu9epru+g0Pl1UdNtzyq5UPLXFs0dh5oxhnqUdSNthvVO3y+gq2t/tGvaC1pPwSBsA7aFKos\n        q6b+oSxdRvHcN/tjJLdd6V5or3YatvZV2qtZtssErD5b7gS0nWxrwDsDVUBERAREQEREBERBxnNNrffOHM7t0Xd6tZYa+nb2M7zt9O9o036nz8LOOg28xX3o64lqYRpjLFDSn5/NCTE75A+sZ/8A9+Vu80MdRE+KVjZIntLXMeNhwPggj6\n        hSr9nrEMHwbP8AiV5cyXjzLrhbKeKVxMn3GaQ1NNIe7RIcJXkO7WtdrY35JCrUREBERARFwnOnKtu4Q4fy7OrpNHDTWS3yVLBKO4Sza7YYtbGy+V0bANjZePI+UGG9IkLJeorqorqJjYrVJldHTsZGNM+8x0n9Zdoe3uL3Ak/JP5tFVap9\n        6E+J7hxR05WJt9qW1mVZLLLk97qGtYO+rrCJCCWjTnNZ6bCdkEsOj29oFBIClLpVZNmvU11MZ7WBsxhv1LiNFJGWujhioYPxI2kOd7i6Vjng/Dvo07aKtUq/Z7fjYnzJWv8ANTW8p5BUVD/8chkiBOvgeGjwNDwgqpERARFhvKXWvw5xLU\n        OoLnmNLd78Wv8ASsWPA3Gume13aYxHD3Br+7Y08t+D+h0G5LhOYeccG4DxSTIs7yOjx+3DYiE79zVLxr2QxN2+V3kHTAdDydAEjAhzF1Ic81tM3jfjml4lwyriJ/lTyK1sly7T/eit0Um2PHyBL3Md+oXccbdGWIYvkkWYZpXXDljkJunf\n        yjy14n+7u3vVLTf2VO0HyA1u2/4kGS3Wh5d6945bfU0Vw4Y4DnePWFWwx5Dk9P3DbPTP/JYHgHyfzBzfErXECx8Zxq14bj1tsVkoYbZZ7bTspaSjp29scMTGhrWtH6AAL00QEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER\n        AREQEREBERAREQFJXUT6nKXWfwFxtH77djv3nkG7M97u30Nw0L9D2jU/eO53+LwQfDq1UodNrv5yOr/qI5DL5JKKz1VHg1tPZ7GfdY++sb3a8n13NOgRrfkHbSgq9ERBgvO/C3JnNWY0dopOSv5EcTOogLrRWGnLLzcJi8h8P3l2xFC6Mj\n        3M92+5pa4HuGm8V8U4rwpg9vxHDbRDZbFQtIjp4tkucfzPe47c97j5LnEkrrUQc1yVyHZOJsCvmYZHPJTWSzUrquqkhidK8MH0a0eSSSAP8APzoeVPXR/wAbZJml8uvULyfTRszbMKWKOyWeWMk41aAXuipo3OAIdIHh7zobJ8gFzwvp61\n        ZJc/5N4C4Xnh9fHM3yCouN8py4NbV0driZVOpn73tj3FjiANn0gAWqsEBERBHHUlYqrpQ5Xi6jcPtjp8cr3RW7key0UZc+ppS4CO5Rt+BLCfzfHcD5I7nuVeWm60d+tVFc7fUx1lBWwsqaeohd3Mlje0OY9p+oIII/zS7Wqjv1qrbZcKaO\n        soK2F9NUU8ze5ksb2lr2OH1BBIP+alXouyC8cX5xnvTlk9X95kwr07hidTOfxq2wzOPp7P8Ae9BxZGXfQvDR+VBWqIiAiIgIiICIiAo65xpq7pZ6oKbnqjtlZdMCy6igx3NoqEOkfQTNcxlHcSwfma0NbE4/3QTrbngKxV9NXSQV9LNS1U\n        MdTTTMdHLDMwOZIwjRa4HwQQSCCg/LYMhtWWWaku9kudHebTVs9Smr7fUMngmZ/iZIwlrh/EFegpYufQZbsQuNXduEs/yLhO5VUrJZqO0FtbZ5i1rA0yUEvsc78MHfcN9zwdh2h9MWf9VXEjS3KOPMZ5jtUbiTcsMuP7Nr2sJJBfTVA7Xu\n        bojtjPkPZ5Ja8kKtRSlD9ovhFniZHmuD8jYDcWNH3qlvOL1BEJ/UPjDg5hd4a4Dz4OhtfP8ApR+mL/eb/wBwXT/0yCqlHXUNNJ1OdTuJcE0TKerw3FH02V54ZfRkbIAe+joDG8dx7yGF/b49Ocb+NH9d562bpzPSvsPThht4zS81jHRsy6\n        726a32G1nXiSWWZgdI7tIe2IN24EfPlq13pk4GfwHgVVQXO/1WWZbe6595yC/Vh2+trpGMa8t35bG1sbWtb9AN+NlBrqIiAs84O4VtPA+I1uO2Wrqq2jqbrWXUy1paZe+olMjmktABAJ0NAeAN+dk6GiAiIgk3qr6G8g6oMmqaiXmzJsYx\n        aenihdilLD6lB3NHl5YJWB5J8+8OIO9HWgOC4r+zz5Q4Cga3jvnax2sw97YjUca251Q9jyNtkq+8zO8AfLvJaPACu9EEpTYL1i2qJ5oOT+Nb9K1pYxt2sE9K1/6PcYSdOOhsAEDuP6BH5D1o2R0f3vE+HclaXe4Wa43ClIBB0Px/qCNk+f\n        BA18kVaiCVf56uquze2s6b7HkRHt7rPnVNSgk+Q4Cdh8AeCPknyPCfvc8sW7/a/SznEOve79mXGkrvw/qR2kbd4Ps+fj9VVSIJV/fyqqDxd+nTnCh17nS0+Jiphjj+rnPbN41okjROhv6p/SM8f0/tuGFcmWiY+RBW4jUNe5v+Iduxrex/\n        oVVSIJV/pPenam/2lmNws3d/Z/f8duLfU/Xt7YD8eN/5helb/tJumy5thdDylQsEru1v3igrISDvXuD4R2j+J0NefhUwvMuGMWe7OmdXWmhrHTN7ZDUUzJC8a1p2x5GvHlBisXXv09TSsjbyzjoc9waC+dzRs/qS3QH8SvVh60uBp5WRt5\n        fw0Oe4NBfeYWjZ/Ul2gP4nwu7m4hwSoifFLhWOyRPaWuY+1QEOB8EEdnkLyZunXiioifFLxjhskT2lrmPsFIQ4HwQR6fkIPN/ex4Q/3ycf/wDaih/81ehS9SHEtdA2em5RwuohfvtkiyGkc06OjoiTXyF5/wC6dwh/ub4//wCy9D/5S8+q\n        6MuB6yd00nD+Fte7WxFZKeNvxrw1rQB/oEGgYtybh2c1U1LjeWWPIKmFnqSw2q5Q1L42b13ODHEgbIGyulWf8d9P3G3El1qbnheD2PF6+ph+7TVFqomQPkj7g7scWgbG2g/6LQEBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER\n        B+e43CntNvqa6smbT0lNE6aaV/wxjQS5x/gACVMX2bNurJOl6hyu5x+nds1vNzyasDm+8vnqntDnvJJkLmRsd3u86LR9FpHV5lEmGdLfK13hldDUQ41XRwSsOnMlkhdHG4eD5DntP+n0+V+3pcxj+RnTZxbZXQR081HjNuZOyI7b6xpmGU\n        g/Xby47/AIoNQREQEREEq82/1Tr66cKqf8GmltmRUzJpPax8ppmERgnwXEee35VVKauvXBKy68PU3IOP0cdTmvGlwhyu0d7O7vbA9rqmF2gSWuhDzofLo2eRra2rirkmz8wccY5mlhl9W03uijrIdnbmdw90bv8ArMd3NcPoWkIOrREQFJ\n        /WdP8AzT8j8K8y0BjpKm3ZHBi97qHv7Gy2iuJbI2TxoiN7RI0uc0Nd5+qrBSv9o4xt14Lx/GhI1tRkuY2W008fn1JpHVIkEcegfefSOtjXzvXyAqhERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERARE\n        QEREBERAREQEREBERAREQEREBERAREQEREBERAREQS79pfcKiDo3zO20Mzorjeqi3Wqm7fl7pa6AOZr5IcwPBABPn4VNW6309pt9NQ0cLaekpomwwxM+GMaAGtH8AAApd+0L/r2F8Q2I+WX7lDH7Y5p8NIdJI/Tj8gfh/LfKqpAREQEREB\n        RlcOOuROinNL1kXFeN1XIXDV3dJV1/H1rLWV1kqi0n1bfHoB8TnBodEwF3u2GnXcrNRBh/DHWhxFznHPFYsrp7beqV5iqrBftUFwp3h3aWmKQju0SASwuALgCQfC3BZ1yZ068Y8ySRS5rgtjyKpjf6jaqro2mcHtDf7UafrQaNb17W+PaN\n        Y1/RcdMX+7L/AL/un/qUGtcp9TXGPDcE4ybMbXT3OP2x2SmqGz3KokJ02OKlYTI9xcQ0AN1sjZCxXj/Fs06rOZ8U5azrFqjCOPMS9epxDGLse25VVVJ7Pv1bDrUZDWtdGzZLT5Gw7uOv8UdJnD/CEjZsL4/s9orGvEjK58TqmqY4N7QWzz\n        F8jfBPw4fJPyStbQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBKvWD/7S526XLN/aermctw9D4392pXP7+7/q929b87+CqqXL5RxljOZ5\n        Pi2RXm1trbzi9RLVWirMsjHUsksZjkIDXAODmHWnAj4OtgFdQgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAi\n        IgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg8SzZtYMhvt8stsvFHX3axvijudHTzB8lG+RvfG2QD8pc3yAfovbUr9OIjs/WX1R2qZzvvlTUWG5t9vsMT6N7Ro7+RoA7A8nxsDaqhAREQEREBERAREQE\n        REBERAREQEREBERAREQEREBERAREQERY11j8rz8I9MPIuY0jpI6+itjoKOWJxa6KpqHtp4ZAR59skzHf/T8j5QZZl/M3K/UZmmS4RwO+24tjWPV0lpvnJV0AqTHWMafVpaOl1p72bZuQkt9/906Lv0UnQNPcaWEZX1A8yZDUsY0OEOTGjp\n        u8Dy9sTWEg7LtbcfDtedbWt9LfClD098DYfg9HD6U9BRNkr5HdvdNWye+oe4gkHcjnAeTpoa0EhoWqoJP/AHBaqgpdWnqP50pKmNnZTmqy0VEEfjQ3F6LQ4AfTY+n6Lzcmq+aejxtJlt9zyq5n4npnNjv1LcLXFDd7PAS5z66KWFv47GfL\n        mSee3Qbr8zbCX01dJBX0s1LVQx1NNMx0csMzA5kjCNFrgfBBBIIKD8WM5La8yx6232yV0Nzs9yp2VVJWU7u6OaJ7Q5rmn9CCF6ajiq4J5J6Qb9UX3gljsx41rq773duLatzGSUYdsyzWyoe8dp+NQH5I8d5IDd34E6j8J6jsXdd8TrpGVN\n        O90NfZLi1sNxt0rXFpjqIA4lh2PkEtP0J8oNQREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBcZlXNPHuCVD6fJc7xnHp2N7nRXW8U9K5o7i3ZEjwQO4Ef5ghZR1/Wi83TpgyWaztuFRHbpqW4XOitdTNT1FZ\n        bopmuq4WPiOx3Q9+9gjQPj4I/PxH0c9NFViFmyLFOL8Zutmu1JDXUdRc6Y3H1InxgsP9ZMh32nyD9fnyEHfw9VfCdRKyKLmHAZJXuDWsZk9EXOJ8AAer5K6O2cx4Deu39n5xjdf3P9MfdrvTybf49vtefPkeP4hcvN0k8HTxPjdw5gIa9p\n        aSzGaJrtH9CItg/wAR5XO3PoN6fLt3evxLjbO5npn7tTGDx5+PTLdHz8/P8fCDdKWrgroGz000dRC/fbJE8OadHR0R4+QvuUtVX2ZPTpJO6oosFqLNUv0HTWy+3CEluvy69ftA8A+B8hfCXoQfY5Xz4Vzry1icjnF33V+Q/f6LbvzvMMzD\n        t7vnuLvlB8eR6h/EvXzxxlT4/SsHImP1GHVs/a2OGOvgkdVUj3uHl0sgLoWg/TWidaFVKEOaOjnqSzXjp+MRc7WfNqelqobnbpr/AI8ygrqSqgkD4TFVQl57vBBkcCfcR4B8fDgbrE6kOT8Kkv0PDeM5i21VctqvFutOQtttyp6qJ3bIHw\n        z9zWOAAd2bPd3DRHwAvJFKv9INjuJfh8ocb8icWPZ5krLxYJKi39vyXMqKfv7w0GPu9o7S8DzorVeP+qvh7lPTcX5Jxu51B+KT9oRxVOvb59GQtk1t7Rvt1s6+fCDVUREBERAREQEREBERAREQEREBERAREQEREBERAREQFKv2jf8AW+GM\n        RtHz+2M5sdB2O/s3d1T3akH1b7P0PnXhVUpV+0N/5icUf/Mywf8A5ZEFVIiICIiAp/546RrPyXef5c4bc6jjjlujhe2gyyykRmZx+I6yMDtqIjoAhwJ19SBo0AiCQrT1eZ1wTUUtk6k8JdYYHSspouQsZY6qsNSS6KNjpSPdTucXSuIkDP\n        DPDfKqLDs1sHINgpb3jV4o75aaljZIquimEjCHMa8b18Htc06OiNjYXq1dJBX0s1LVQx1NNMx0csMzA5kjCNFrgfBBBIIKmDK+hi3Y1f5cs4Myes4ayhz/AFpaC3N9axVx72PLJqEkNjDvSjaTCWANB9jkFSopAtHVhyhwPq39R3HUlNao\n        NNdyJg0clfaS33/iVEAHrQjtjc4uAPlw/DYCFTWB8mYnyjZo7tiGSWvJbc9jZBPbKtk4aHbA7g0ktO2uGnaILXAjYKDpUREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQfTV0kFfSzUtVDHU00zHRywzMDmSMI0WuB8EE\n        EggqNuKan9xzm6LiO83OQcP5pNLV4RX1p9lor3PLp7W+Q6a1r3O74v1LteXOcVZ64/lzijG+b+O71hWWUX32yXWExStaQJInfLJY3EHtexwDmnR0QPBHhB2CKN+GOZ8s6aOQrbwbzlcnXGjrXejhHIs+2w3iIEBtJVOJPZVN21u3H3bAJJ\n        LHyWQgIiICjjk6Wn6Pequ1ckQhtDxpynUMs2WAN1Db7s1jvudaA3QaJfc2Qnx/aPJJIVjrkuWeLcf5r45v2EZTSuq7Feaf7vUMjd2vaQ4OZIw6Onse1r2kg6c0eD8IOtWRcidIvDHKzppMn40x24VUzXNkrYqJtNVODgQdzRdsm/J0e7YP\n        kaPlZp0i8o3bD79dennkevbJnmIRB1mr5nuLr/AGX/AKCpa4+DIxumPbvft3508iqEEpRfZ+WjDGkcXcqcjcYwhx7bbbb46rtzWkn2/d5w7ZaPDT3bA+dnyvj/ACZ6wuOY/Uoc04/5epo39rob5an2atmYXfmYac+k1w3rTvHa36uPmr0Q\n        SUzrRz/jrtZzB09ZhjMDNMkvWKSR3+h7j2gPeYtGJrnF2ge4j2DySdabxX1l8K8ztibi3ItlqayVoLbfWz/cqskkjQhmDHuILTvtBHkH4c0naFmXKXTNxXzVTuizTA7LfHuc933qSmEVUC5va4iePtkBI18O+WtPy0EBpqKUpehGowdoPD\n        vMudcXxMcHRWl9Z+2bVEWkdmqWpO9BoazRfotY0Hfnf1VGYdXXFDnPu+FYTzNZYW97psZrZLRc3N04v7o5+6NzgSO1sY24M1+Z3gKyRTPi32gHGk93/YOfQ3rh3JmuEbrdndC6hje/bQ/0qnzE9gL2HuLm7a9rta3qkLfcaW7UUNZQ1MNZ\n        STN7o56eQSRvH6tcPBH+SD9CIiAiIgIiICIiAiIgIiICIiAiIgKVev8A/GoOn+if5pq3mDHaeoZ/jjJnJG/keWjyNHwqqUq9d/8AXLt03W5niZ/Lljqw535eyFs7nD9dkEa8f8EFVIiICIiAiIgIiICmXlXoMw3KrzNlPHd3unC+eOeJv2\n        3h0hp4KiQb0amkaWxyj3v3rsc7vd3OIJBppEElW7mTnzp6hMPMGE/zoYnTdrH5zgEDTWxt7Gl0lVbdglocX90kIaGtjJLDsb2rhfqP446grUKzBcrt96lZDHPUW9kzW1lK17WkerCT3N13dpOtdwI2SCtLUy9SvSPwznNX/LW8XGPijNYH\n        +vT51Y7iy01cc2wA+R+wyUkuaC5w79ENa9u0FNIot6XurC+3Ll2Hhq85FZeY4YopG0XIWItcI/Sgg73OuILnR+o4ljA6B7wXO0fOyrSQEREBERAREQEREBERAREQEREBERAREQEU65/m/U1bsyu1NiHGmF3fGo5i2grrhfnwTzR6GnPYG6\n        ad78Ln/wCcTq9/3R8f/wDaWT/+UFVIpV/l31g1f4UXF3G9BI74qKrIJ5I2fXy1je47+PH1IT+UXWd/7o8P/wD3O4f/AKQVUilKbIetF0TxFifDrJS09rn3G4OAP0JHjY/hsf5r5+n1uTfhvm4Dp2P9pmhbenPYD/eaHeCR8gHwgqpFKv8A\n        IzrGr/8AlHIvF9q7Py/cbHVTepv/ABeofGteNfqd/RP5jeqeu/Dn6nLXbGD3CaiwGjmeT/hIkfrXne/nwEFVIpSl6TOZr20RZB1VZdPA9wfKLJZKO1yF2wT2PjJLG/PtGx5HzrR+dV9nnjd7e45Hy1zBlbHPD3RXfMHuYdHuaO2ONgAa/w\n        BwA1ooNy5n4YxPn3j25YZmdtbcbPWt2CNNmppQD2TQv0eyRuzo/wASCC0kGbePObMq6Ss1t/FHOVykueHVb20mH8n1DHCOpBJ7KO4v8hk7W+BI7QIbtxPly9ufgbnvhDf8z/KVPmOMU7HPgw7k2J1U+P4/CiuMepu3t2GNf7WdjASQXEdL\n        guXcgczzXTjnmvgSOx2iqopXVdxF1p7laK2Nr2tYGhvvY9ztuax3uaGB2wdABQ8M0dREyWJ7ZIntDmvYdhwPkEH6hfNRLaa7Nvs9a+ooL3HdM86b3P3RXiIuqrniDNeIZ4/zS0o8AOb+QD6EhrrExXKrPnON26/2C4093stxhbUUlbSvD4\n        5o3DwQf/D5B2D5CD1kREE/9WnT7ceU7NZ8ywU09t5fwub9o41cpfAmI8yUUpJAMUzdt93gE/IBdvqOmzqAtvULgBu0dK6yZLbKh9syLHagn7xaLhGe2WB4cASAQdO15H8Q4DWFK/URwVlWF8hR88cKUjZs8pYmw5BijXiKmyqiB0Wv+AKl\n        jTtjzsnsaNHQaQqhFmnAfUFiXUZhTchxaqkbJA/7vcrVWM9KstlSB74J4z5a4HY35B0SCVpaAiIgIiIPBzXA8b5IsMtkyuw23JLPK4PfQ3WlZUQlw+HdrwQHDfgjyPopzregi3YTVVNw4R5EyjhevqJvWkorfP8AtG0POw73UM7i06cCRp\n        wAD3t12uAFVIgkqLnDqC4Hjqncu8cUef4xDM1jcs4373zQQ9zO6WpoH7kIDHSOLoh2tMXaRpwkW8cNc6YPz9iceQ4Nf6W90Paz144nj16R7mhwjmj+Y3gH4P6HW13qwrlfo6wbkfJHZhZ33DjnkVu3R5hh8/3Gte4nZFQ1vsqGuIaHCRpJ\n        aO3uAQbqijqXqD5r6W6Vw5yxSPkDCqVgMvIeFQhksDAIw6SsojoAd8pHfGWabG4iMqpcF5Bxnk7G6e/4lfrfkdlqPEdbbahs0fd420lp9rhsbadEHwQCg6BERAREQEREBERAREQEREBTb1WYLfcx5W6d6u22iuulosuYivuclKxz46VrYX\n        enLL2/DQ7x3HwN+flUksc6oOqXEOlDBKfJcsZXVLauo+60VFQQOfJUy67i0O/Iwhocfe4b14QbGi/mGz7Zy8ZI2RuJ8CXK7ua3zK28PlDCCO4FkdKdjRHnuHlw8fql+0s6lchcP5NdMtye1zRK0OtVzrCY9Dz+HGzYJIO/jzrz8oP6eIv5\n        kM6yuue+ukFt6eaGhiki74zWWCvjkYCB53JUsHds77S3f6g6K+o85faHXuJslLxbbbe1ji1wFvgjLz4+RNUE6H6j9T/oH9PEX8s33n7TC70Ub6a1w0ILt97W4+yQgbGi2Vx0P9AfA+i/P906yanzksfLj6BvhxsNZZoJw0+DoRglxPjR/u\n        +T5Qf1UWWcxdUHF/AjoYc3zChtNwqGl0FsZ3VFbN4JHbBGHP0daBIAJIG9lfz++8Utr9/L+Q9X+J22P/ldzragmywRj+9LJTMcT2uDndwbshrTr4C3W4/ZQ8H57Sw3o5BnFXcq306xuRG+Nmq5wQHMcXyxOB9vbo9u9AeUHSydceZZpS0t\n        TxtwFlF4oKxgfS3XLrhS49SytIGpGGZzjI0e/fb+jdfnC4e48483ZK7tyTnHgrg6ikaxpFNcYbrcYHEF2i2olbCXdpA+SCWEjwdnwqv7FLiypqppv5d5ofUe5+5paV7zs79zvRGz+p0NpbfsbsRsr3Ci5CuDovcGNr7BbqtwaTvy6SM7P8\n        dD+Gh4QeJe71wtN2Tcg9cecZFUya74cZvYoqJ/yG7p6SKQDQaw/mHuBJ/PpeLYrr9ntZrzPLbLNcM8ubHtcZJbfeLl3PG2sj7ZR2O3rxsEHY8nQ1uFk+zmu+Nd/wCyOccgtXfvu+5WK3Q929b32xj9B/wC6eHpV5yp4mRRdVd+jiY0Naxm\n        KUADQPAAG/AQePinWjx/h1tFuwLp75UbQeHMpMW4/EETo/pIGBzB2+Ro637h4Xt/vkci3b8Ow9L/ACRUVI+W3k01tj/0e9zgfAd/rofVP3MM7rf9pdT3KEvb/Z/caiCk1v57u1h7vpr9PP6p+4JFV/7T6gedLmx/manlzMsgkd8/kbCO0A\n        +QAfGgg+mq6kepCaB01N0tx2yjOu2uvXIFvhazzo98YZ3DZ8Dz9QfhZ3kfXLy5Zdi4WfhfEpPyCK9cjU80gcde/siPc5o7mkgDetn6haZTfZn8Ez1sVdkNkvWaXBrXd1Xkd/rKmSRx1t7tSNaXaAHxr48bAK0XF+jjg3DYomWvibEWOjb2\n        smqrTDVTAeR/aStc/eidnez9UETUX2m3Nl2vxtGJ8eYryzV93ZI7BKe7Tx0zh9HvfEGuBBB7mkgAHZX9IcKuN5u2I2iryG1/sS/S0sbq+3iRkjYJ9fiNa5j3gt7t9p7idEb0dgenb7dS2miho6Gmho6SFvbHBTxiONg/RrR4A/yX6EBERA\n        REQEREBERAREQEREBERAREQEREBERAREQEREBERB9NXSQV9LNS1UMdTTTMdHLDMwOZIwjRa4HwQQSCCozvvE+f9DtwueWcM0k2bcTVNQ6svXGEgc6qtxcdvqLVINnQ+TCQRoHXcSDHaSIOE4Z5vwvn/CqbKcGvlPerXL7ZGxu1NSya2Ypo\n        z7o3jY9rh5BBG2kE92pl5m6Wr7RciVPMPCN7p8Q5MMPbcrXVwepacmY3yIatgc0seSAPWadj+BPeOg6cerOyc1bxi/0cmD8sW9jm3fDLq10VRG9nh0sHcB60J/MHN3oHz9CQ3pERBMXNHTNkFj5JdzPwfU0tm5G7Q29WGrk9K2ZRTjy6Kb\n        Q9k58dk3xsDu1svHW9P/VpifOs9dYZo5MM5Etc0lNdMJvcrGXCnkYNudG3Y9aLXn1GjWtbA2FuCyLn/pjxLqCoqKouT66wZdaWudZMtsdS+luVrkP96ORhHc39WO2PJ12u04BrqKRaTOupbp0khosxxCn53wmkY2MZJhw9C/CNrdd81DI4\n        iaU9p22N3kvB79+F3GDde3BucVptzs4pcXvLXdslqyuN9pqIyfLQfXDWkuBa4drjsOH18IKCRcfS8x4DXQNnps4xuohfvtkiu1O5p0dHRD9fIXoV3IWK2vs++ZLZ6Tv32evXxM7tfOtu8/I/4oOgRZ5cOorii0tmdXcnYbRthd2yGov9JG\n        GHetO3J4O/Hn6rnarrN4Ho53QycwYW57dbMV7p5G/G/DmuIP8AoUGyopyrftE+nK3yiOXlW0ucW924IaiUa/zZGRvx8fK8L+kv4TuXjG6jKMykd/ZR2LGK2R0v09vfGz+9pvnXk/6oKqUtZ90lXnAMorOQunq+R4NlEj5q25YlWGaXH8im\n        c3wJoBK1sD/0kjA1v4Gy5fnPWrmmXytj456beRsiBaf6zkkcOP0ziNDTZJi4EdzgCdD4cdENK/PDjPVrzMHx5DkeJ8G2CV/ugxyJ12vPY2Q+z1Xn0WdzCPxGEkEA9o2WoNg6Zec4uoTiW35Q+3SWS9RTTW29WeUHuoLhA7snh/y2A5v17X\n        t3o7A1VZ1wJwVjfTtx3TYljX3ieL1pKytuNc8SVdwq5NGSoneAO57tNG/oGtHwAtFQEREBERAREQEREBERAXn3bHrVf/u/7TtlHcfu7/Uh+907JfSf/ib3A6P8QvQRB8IYY6eJkUTGxxMaGtYwaDQPAAH0C+aIgIiIC8zJcmtOG2Guvd9u\n        VLZ7PQxGaqrq2VsUMLB8uc53gBZBzt1cYnwzdIcXoKaqzvkqrcxlFhOPamrnlwBa6bWxBHohxe/+6dgELPMc6V8v57vlHmHUncqe6R073SW3jS0SH9iW/Z2x1SQd1cwHyXbaPI9wOgHP5BkWZdft1q8aw+pqMR6df7C75UYA2uygB34lNR\n        tkHdDAfgyloJ19QSw2PY7LRY3ZbfaLbTtpLdQU8dLTU7CSIomNDWNG/Og0Aef0X6KSkgoKWGlpYY6amhY2OKGFgayNgGg1oHgAAAABfcgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICx3qE6Ysd5\n        /is9xmrq7Fc2x+U1NiyyzFrK2gl8kA7GpIi7RdGdbG9FpO1sSIJAxjq5yvgTJKHCOpq2U9gdWTSwWfke3Bv7GuzWn2+s1pJpZSPJDgB8nTW+TXNJVwV9LDVUs0dTTTMbJFNC8OZIwjYc0jwQQQQQvPyrFbPnON3GwX+3U93stxhdT1dFVM\n        D45o3DyCP/AB+QdEeQpWn4b5V6Ra99y4XmqOReMnzRCo4yvNW+SqtNM0Hvda6qab/M+i8Hf07nHYCv0WRcEdUeDdQFPU09kqaq1ZNQNYLpi98pn0dyt73NLg18TwO4aBPcwub/AB34WuoC5TNuJ8K5KYG5ZiNjyXtYY2uu1uiqXMaQ5umu\n        e0lviR48a/O79SurRBgtV0G9PlZO6aTiXG2vdrYipjG3414a0gD/AEC/DS/Z69OtG57o+KbK4ua1p9V00g00aGg550f1I8k+TsqiEQYvb+i3ga2OhdDxBhrzE3tb94s0EwI1r3B7T3H+J3+vyujpem/iWhgbBTcXYXTws32xxY9SNaNnZ0\n        BHr5K0VEHg0WBYzbYjFR47aaWMu7iyChiYCf10G/Pgf8F7yIgIiICIiAiIgIiICIiAiIgIiICIiAiLn+QM9sXF2FXrLMlr47ZYrPSvq6uqk/usaPgD5c4nTWtHlziAASQEHoZBkFsxOx195vNfT2u00EL6mqrauQRxQxtG3Pc4+AAApCuP\n        N/KnWJcKmxcGwTYDxm2V1LcOUrtTkVNY3ZDhaqd2iQWg6mdojv8AHpOaCfjaeNc067blZ8r5VtlRhPDNLMK2y8eul/rl5I7TFVXJw8BhGyIBojfkke59j263Utot9NQ0NNDRUNLE2CCmp4xHHDG0ANYxo0GtAAAA8ABBlnAHTBg3TlaaiP\n        G6GSrv1ft92yW5v9e5XOUuLnPmmPk7cS7tGm7863snW0RAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQYvzr0m4JzrPFeKylmxvOaNpdbszx+Q0d1pJAwtY71oy10jW72GOJH6a2so/\n        nu5Z6SDSW/mu3/ziceMY5rOTMXopjUUMccYANzow1/aXkf2rHluz/eJ8V+iDn8F5Bxnk7G6e/wCJX635HZajxHW22obNH3eNtJafa4bG2nRB8EAroFL/ACn0Q0NTklVnHDGS1HCvIcvY6SrscDf2ZcOwvd21VENRyd7nglzg7y0OLXHe/A\n        svV3nvA81NZOpfC/2HE6YU0PIeLxPqbBU9z42RmU+XU7j3SOPqBnhm2sAOgFfovEw7NbByDYKW941eKO+WmpY2SKrophIwhzGvG9fB7XNOjojY2F7aAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgKNcwxmXrL6qL9h98nrI+IeLH0Tq+yO\n        jDYcgvEjTMBNvRdBEwsHYQQ47IOngqur7kNqxe2yXC83OjtFBH+eqr6hkETf83uIA/4r+efUHzljPHnNtTm3TvyM3KeSr3LTtyDjiyW+S8UWQx0+4+4Pp4n/AHedrQ4Fwftw7fgb7w/o4i5/j3ILnlmCY7e7zZJMZu1yt8FZVWWaUySUEk\n        kYe6B7ixhLmE9p9o8g+F0CAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAvpq6SCvpZqWqhjqaaZjo5YZmBzJGEaLXA+CCCQQV9yIJNzX7P6yWbJqnNODMnuXCGayNLnssRDr\n        PWuAJa2oonbj7A7XtaAweT6bj5XwuHUzy/09fdqPmfi6oyqy+s2EZ3xsx1XTuYdhr6ihfqWBwPZ3HZYS8hmyA11aog4LinnrjvnG1x1+CZjaclidF6zoKOoH3mFuwPxYHakiOyPD2tPkfqF3qwrlToj4a5duTrtdcOp7VkReyQX3H5HW6u\n        D2704yQlvcSCWkvDvGv8LSOFPCHUZwzBI/jfmCn5JtcXdKyw8o0zpql2iQGNuEJbISWEfnAaHxg+GvcAFXopSl6vuR+MWhnLfT9lVtp2ODX3zB5Yr9Q9pIAle1hbJCwafsODiO1vg94C7vjLrd4Q5adHBY+Q7TT3NzT3Wu8SG31bHAbez0\n        5wwuc3R329w9pIJHlBuSL4QzR1ETJYntkie0Oa9h2HA+QQfqF80BEXwmmjp4nyyvbHExpc57zoNA8kk/QIPmiyrOuqzhzjT7wzJOTcXttTT/ANrRftOKWqb8/wDQMLpD8H4asqk+0b44vtVLS8fY1nnK0zPaH4jjU8sPeSQAXy+mANtd7t\n        EaY4jekFVIpP8A59OqHOJPTxbp6teIUxf7Lnm2TxvDmdvd7qanaJGH6fLvLh+jtfd/Nf1a5n4vvM+F4FE/xJFh2Murj2nye19Y4FpH5Qf0O/kIKqX56240tsiEtZUw0kRd2h88gYCfnWz9fB/4KXf3GbzkP4uZdRPLl8mf5lhtd6ZaqSR3\n        1/AijOhsNIAPgj+K/RRfZodPUcpqLlhlVkde5va6tvV7rqiRw+Tv8YN2Ts7A3tx+h0g1W/dT/D2LtcbrynhtC5ri0xy32l9TYIBAZ39xIJG9Dx9VmV5+0m6dLROKaPkOO7VjvyU9otlZVuf4BOjHCW+Ad+T9D9Qu9sPSFwhjLmvt/EuGxy\n        taGtllslPNIAAR4c9pIJBOzvz9drSrPjFnx5oba7TQ21oaWgUdMyIAE7I9oHgnygmj+kKx27f81OJ+XM0ZJ5p6iz4jJ6EzfgSB8j2aZvQLiPG/hP3mOf8AJvdivS3dIqN/llXlGU0dte1v07qchz9nThrfj2k+CqqRBKv3LrIzT2zXHivj\n        ijf7e6kgq7pWxg+e7T9REt8DXwT3H40n7pXLWW+7OOqDNJw/3Ohw6gpbCGE+C1r4w9xAb4BPnY7vkqqkQTFZ/s4+EKe4RXLIrLduQLxG4O/aOX3qpr5HEEEdzC8RuGmsbos8tYAd+d77hfHuL8cWr9mYpjtrxug9u6e1UcdOxxa0NBcGAd\n        x0ANnz4XQIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIC4LkDgPjflWX18uwew3+sDg5ldWUEbqqMjt0WT69Rp/DYPa4bDQPjwu9RBK832b/FFulfJiNyz\n        bjt3cZIRiuUVVO2mkPzJGJHPDXH/AFH6AL4/uacgSf1ebqf5MdQDwGRSU7J+0fl/GDN78DZ158/qqqRBKv7h1Vc/Zf8AqF5ou1MPimjycU0bv/jDItu0Q0jyNEfxXyi+zV4Vq5WS5FTZNmcwcHSPyDJayb1iPI7w2RoI7vdrWtk/TwqoRB\n        kmEdJPC/HT4Jcf4wxehqYO30qt9tjmqGFp7mkSyBz9g6O972B+gWsQwx08TIomNjiY0Naxg0GgeAAPoF80QEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBE\n        RAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQERE\n        BERAREQEREBERAREQEREBERAREQEREBERAREQf/9k=\"\n        alt=\"Red dot\"\n      />\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "legacy/app/assets/website.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Profile Form</title>\n    <script src=\"https://cdn.tailwindcss.com\"></script>\n    <style>\n      /* Additional custom styles can go here */\n    </style>\n  </head>\n  <body class=\"bg-gray-100\">\n    <div\n      class=\"min-h-screen flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8\"\n    >\n      <div class=\"max-w-md w-full space-y-8\">\n        <div>\n          <h2 class=\"mt-6 text-center text-3xl font-extrabold text-gray-900\">\n            Profile Information\n          </h2>\n        </div>\n        <form class=\"mt-8 space-y-6\" action=\"#\" method=\"POST\">\n          <div class=\"rounded-md shadow-sm -space-y-px\">\n            <div>\n              <label for=\"photo\" class=\"sr-only\">Profile Photo</label>\n              <div\n                class=\"flex items-center justify-center h-24 w-full bg-gray-300 text-gray-700\"\n              >\n                <span>Profile Photo Placeholder</span>\n              </div>\n            </div>\n            <div class=\"pt-3\">\n              <label for=\"name\" class=\"sr-only\">Full Name</label>\n              <input\n                id=\"name\"\n                name=\"name\"\n                type=\"text\"\n                autocomplete=\"name\"\n                required\n                class=\"appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm\"\n                placeholder=\"Full Name\"\n              />\n            </div>\n            <div class=\"pt-3\">\n              <label for=\"email-address\" class=\"sr-only\">Email address</label>\n              <input\n                id=\"email-address\"\n                name=\"email\"\n                type=\"email\"\n                autocomplete=\"email\"\n                required\n                class=\"appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm\"\n                placeholder=\"Email address\"\n              />\n            </div>\n          </div>\n\n          <div>\n            <label for=\"bio\" class=\"sr-only\">Bio</label>\n            <textarea\n              id=\"bio\"\n              name=\"bio\"\n              rows=\"4\"\n              class=\"appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm\"\n              placeholder=\"Bio\"\n            ></textarea>\n          </div>\n\n          <div>\n            <button\n              type=\"submit\"\n              class=\"group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500\"\n            >\n              Save Profile\n            </button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "legacy/app/ios/.gitignore",
    "content": "*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/DerivedData/\nIcon?\n**/Pods/\n**/.symlinks/\nprofile\nxcuserdata\n**/.generated/\nFlutter/App.framework\nFlutter/Flutter.framework\nFlutter/Flutter.podspec\nFlutter/Generated.xcconfig\nFlutter/app.flx\nFlutter/app.zip\nFlutter/flutter_assets/\nFlutter/flutter_export_environment.sh\nServiceDefinitions.json\nRunner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n"
  },
  {
    "path": "legacy/app/ios/Flutter/.last_build_id",
    "content": "9d7ae77f231555adfd08a323be129284"
  },
  {
    "path": "legacy/app/ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>App</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>io.flutter.flutter.app</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>App</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>MinimumOSVersion</key>\n\t<string>14.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/ios/Flutter/Debug.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "legacy/app/ios/Flutter/Release.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "legacy/app/ios/Podfile",
    "content": "# Uncomment this line to define a global platform for your project\n# platform :ios, '12.0'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['COCOAPODS_DISABLE_STATS'] = 'true'\n\nproject 'Runner', {\n  'Debug' => :debug,\n  'Profile' => :release,\n  'Release' => :release,\n}\n\ndef flutter_root\n  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)\n  unless File.exist?(generated_xcode_build_settings_path)\n    raise \"#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first\"\n  end\n\n  File.foreach(generated_xcode_build_settings_path) do |line|\n    matches = line.match(/FLUTTER_ROOT\\=(.*)/)\n    return matches[1].strip if matches\n  end\n  raise \"FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get\"\nend\n\nrequire File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)\n\nflutter_ios_podfile_setup\n\ntarget 'Runner' do\n  use_frameworks!\n  use_modular_headers!\n\n  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    flutter_additional_ios_build_settings(target)\n  end\nend\n"
  },
  {
    "path": "legacy/app/ios/Runner/AppDelegate.swift",
    "content": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n  ) -> Bool {\n    GeneratedPluginRegistrant.register(with: self)\n    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n  }\n}\n"
  },
  {
    "path": "legacy/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"40.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"filename\" : \"60.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"filename\" : \"29.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"1x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"58.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"87.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"80.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"filename\" : \"120.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"filename\" : \"57.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"1x\",\n      \"size\" : \"57x57\"\n    },\n    {\n      \"filename\" : \"114.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"57x57\"\n    },\n    {\n      \"filename\" : \"120.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"filename\" : \"180.png\",\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"filename\" : \"20.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"filename\" : \"40.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"filename\" : \"29.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"58.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"40.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"filename\" : \"80.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"filename\" : \"50.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"50x50\"\n    },\n    {\n      \"filename\" : \"100.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"50x50\"\n    },\n    {\n      \"filename\" : \"72.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"72x72\"\n    },\n    {\n      \"filename\" : \"144.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"72x72\"\n    },\n    {\n      \"filename\" : \"76.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"1x\",\n      \"size\" : \"76x76\"\n    },\n    {\n      \"filename\" : \"152.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"76x76\"\n    },\n    {\n      \"filename\" : \"167.png\",\n      \"idiom\" : \"ipad\",\n      \"scale\" : \"2x\",\n      \"size\" : \"83.5x83.5\"\n    },\n    {\n      \"filename\" : \"1024.png\",\n      \"idiom\" : \"ios-marketing\",\n      \"scale\" : \"1x\",\n      \"size\" : \"1024x1024\"\n    },\n    {\n      \"filename\" : \"16.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"32.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"32.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"64.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"128.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"256.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"256.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"512.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"512.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"filename\" : \"1024.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"filename\" : \"48.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"notificationCenter\",\n      \"scale\" : \"2x\",\n      \"size\" : \"24x24\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"filename\" : \"55.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"notificationCenter\",\n      \"scale\" : \"2x\",\n      \"size\" : \"27.5x27.5\",\n      \"subtype\" : \"42mm\"\n    },\n    {\n      \"filename\" : \"58.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"companionSettings\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"87.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"companionSettings\",\n      \"scale\" : \"3x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"filename\" : \"66.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"notificationCenter\",\n      \"scale\" : \"2x\",\n      \"size\" : \"33x33\",\n      \"subtype\" : \"45mm\"\n    },\n    {\n      \"filename\" : \"80.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"appLauncher\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"filename\" : \"88.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"appLauncher\",\n      \"scale\" : \"2x\",\n      \"size\" : \"44x44\",\n      \"subtype\" : \"40mm\"\n    },\n    {\n      \"filename\" : \"92.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"appLauncher\",\n      \"scale\" : \"2x\",\n      \"size\" : \"46x46\",\n      \"subtype\" : \"41mm\"\n    },\n    {\n      \"filename\" : \"100.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"appLauncher\",\n      \"scale\" : \"2x\",\n      \"size\" : \"50x50\",\n      \"subtype\" : \"44mm\"\n    },\n    {\n      \"filename\" : \"102.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"appLauncher\",\n      \"scale\" : \"2x\",\n      \"size\" : \"51x51\",\n      \"subtype\" : \"45mm\"\n    },\n    {\n      \"filename\" : \"108 1.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"appLauncher\",\n      \"scale\" : \"2x\",\n      \"size\" : \"54x54\",\n      \"subtype\" : \"49mm\"\n    },\n    {\n      \"filename\" : \"172.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"quickLook\",\n      \"scale\" : \"2x\",\n      \"size\" : \"86x86\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"filename\" : \"196.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"quickLook\",\n      \"scale\" : \"2x\",\n      \"size\" : \"98x98\",\n      \"subtype\" : \"42mm\"\n    },\n    {\n      \"filename\" : \"216.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"quickLook\",\n      \"scale\" : \"2x\",\n      \"size\" : \"108x108\",\n      \"subtype\" : \"44mm\"\n    },\n    {\n      \"filename\" : \"234.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"quickLook\",\n      \"scale\" : \"2x\",\n      \"size\" : \"117x117\",\n      \"subtype\" : \"45mm\"\n    },\n    {\n      \"filename\" : \"258.png\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"quickLook\",\n      \"scale\" : \"2x\",\n      \"size\" : \"129x129\",\n      \"subtype\" : \"49mm\"\n    },\n    {\n      \"filename\" : \"1024 1.png\",\n      \"idiom\" : \"watch-marketing\",\n      \"scale\" : \"1x\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "legacy/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "legacy/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images."
  },
  {
    "path": "legacy/app/ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "legacy/app/ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16096\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16087\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"34\" y=\"31\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "legacy/app/ios/Runner/Glowby.swift",
    "content": "import UIKit\nimport RealityKit\nimport ARKit\n\nclass GlowbyARView: UIView, ARSessionDelegate {\n    var arView: ARView!\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        print(\"Initializing GlowbyARView with frame: \\(frame)\")\n        \n        let arFrame = CGRect(x: frame.width / 2, y: 0, width: frame.width / 2, height: frame.height) // Only cover half the screen\n            arView = ARView(frame: arFrame) // Set the frame to the passed value\n        arView.session.delegate = self // Set the delegate to receive AR session updates\n        arView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n        self.addSubview(arView)\n\n        // Start the AR session with a world tracking configuration\n        let configuration = ARWorldTrackingConfiguration()\n        configuration.planeDetection = [.horizontal, .vertical] // Add if you want to detect planes\n        arView.session.run(configuration)\n\n        // Setup RealityKit scene here\n        let anchor = AnchorEntity(world: SIMD3(x: 0.2, y: 0, z: 0)) // Position the cube 20cm to the right of the origin\n        let mesh = MeshResource.generateBox(size: 0.1) // Create a 10cm cube\n        let material = SimpleMaterial(color: .blue, isMetallic: true)\n        let cube = ModelEntity(mesh: mesh, materials: [material])\n        anchor.addChild(cube)\n\n        arView.scene.anchors.append(anchor)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // ARSessionDelegate method\n    func session(_ session: ARSession, didFailWithError error: Error) {\n        // Handle session failures\n        print(\"AR Session Failure: \\(error.localizedDescription)\")\n    }\n\n    func sessionWasInterrupted(_ session: ARSession) {\n        // Handle session interruptions\n        print(\"AR Session was interrupted\")\n    }\n\n    func sessionInterruptionEnded(_ session: ARSession) {\n        // Handle session interruption ends\n        print(\"AR Session interruption ended\")\n    }\n}\n"
  },
  {
    "path": "legacy/app/ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CADisableMinimumFrameDurationOnPhone</key>\n\t<true/>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>Glowby</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>Glowby</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIApplicationSupportsIndirectInputEvents</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n\t<key>NSPhotoLibraryUsageDescription</key>\n\t<string>Why your app needs access to the photo library</string>\n\t<key>NSCameraUsageDescription</key>\n\t<string>Why your app needs access to the camera</string>\n\t<key>NSMicrophoneUsageDescription</key>\n\t<string>Why your app needs access to the microphone, if you intend to record videos</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/ios/Runner/Runner-Bridging-Header.h",
    "content": "#import \"GeneratedPluginRegistrant.h\"\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };\n\t\t89B40D862B6DEB3200CD9DB4 /* Glowby.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89B40D852B6DEB3200CD9DB4 /* Glowby.swift */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n\t\tE7CDAFAA274C398F1C14F40B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AD225B15388956E76152E56 /* Pods_Runner.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t1A8E959293667E82CDD1EE63 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.profile.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t4AD225B15388956E76152E56 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Runner-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t89B40D852B6DEB3200CD9DB4 /* Glowby.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Glowby.swift; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA15B301BDAB53725E88102AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.debug.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC8255EE9360D41A7D72D78A7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.release.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE7CDAFAA274C398F1C14F40B /* Pods_Runner.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t7629E09BA388E84ED45E1A2A /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA15B301BDAB53725E88102AC /* Pods-Runner.debug.xcconfig */,\n\t\t\t\tC8255EE9360D41A7D72D78A7 /* Pods-Runner.release.xcconfig */,\n\t\t\t\t1A8E959293667E82CDD1EE63 /* Pods-Runner.profile.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t\t7629E09BA388E84ED45E1A2A /* Pods */,\n\t\t\t\tB596A8251815CD55A37C1C72 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t97C146F11CF9000F007C117D /* Supporting Files */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */,\n\t\t\t\t89B40D852B6DEB3200CD9DB4 /* Glowby.swift */,\n\t\t\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F11CF9000F007C117D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB596A8251815CD55A37C1C72 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4AD225B15388956E76152E56 /* Pods_Runner.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t11084A4A0C3D78A6DABF2A30 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t\t165465ABC4E76E3BB5704A6C /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tORGANIZATIONNAME = \"\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1100;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t11084A4A0C3D78A6DABF2A30 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t165465ABC4E76E3BB5704A6C /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\talwaysOutOfDate = 1;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\",\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" embed_and_thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\talwaysOutOfDate = 1;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t\t89B40D862B6DEB3200CD9DB4 /* Glowby.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t249021D3217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t249021D4217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 6;\n\t\t\t\tDEVELOPMENT_TEAM = 6RKHK382W9;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = Glowby;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.glowbom.glowby.genius;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 6;\n\t\t\t\tDEVELOPMENT_TEAM = 6RKHK382W9;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = Glowby;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.glowbom.glowby.genius;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 6;\n\t\t\t\tDEVELOPMENT_TEAM = 6RKHK382W9;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = Glowby;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.glowbom.glowby.genius;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 2;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t\t249021D3217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t\t249021D4217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreviewsEnabled</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreviewsEnabled</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/lib/main.dart",
    "content": "// Importing required packages\nimport 'package:flutter/material.dart';\nimport 'views/screens/talk_screen.dart';\n\n// Entry point of the application\n// runApp starts the Flutter app by inflating the given widget and attaching it to the screen\nvoid main() => runApp(const TalkApp());\n"
  },
  {
    "path": "legacy/app/lib/models/ai.dart",
    "content": "import 'dart:math';\n\nimport 'package:glowby/services/hugging_face_api.dart';\nimport 'package:glowby/services/pulze_ai_api.dart';\n\nimport '../services/openai_api.dart';\nimport '../utils/timestamp.dart';\nimport '../views/widgets/message.dart';\nimport 'package:async/async.dart';\nimport 'package:flutter/foundation.dart';\n\n/// A class representing the AI chatbot that processes and responds to user messages.\nclass Ai {\n  final List<Map<String, Object>>? _questions;\n  final String? _name;\n  CancelableOperation<String>? networkOperation;\n\n  CancelableOperation<String>? getCurrentNetworkOperation() {\n    return networkOperation;\n  }\n\n  static const String defaultUserId = '007';\n\n  Ai(this._name, this._questions);\n\n  /// Processes the user's message and returns an AI-generated response.\n  ///\n  /// [message] is the input message from the user.\n  Future<List<Message>> message(\n    String message, {\n    List<Map<String, String?>> previousMessages = const [],\n    bool aiEnabled = true,\n  }) async {\n    List<Map<String, Object>> foundQuestions = _findMatchingQuestions(message);\n\n    if (foundQuestions.isNotEmpty) {\n      return _generateResponseMessage(foundQuestions);\n    }\n\n    // Call the OpenAI API if no matching questions are found locally\n    if (aiEnabled && OpenAiApi.oat().isNotEmpty) {\n      networkOperation = OpenAiApi.getResponseFromOpenAI(message,\n          previousMessages: previousMessages);\n      String response = await networkOperation!.value;\n      String poweredTitle = OpenAiApi.model == 'gpt-4'\n          ? 'Powered by GPT-4'\n          : OpenAiApi.model == 'gpt-3.5-turbo'\n              ? 'Powered by GPT-3.5'\n              : OpenAiApi.model == 'gpt-4o'\n                  ? 'Powered by GPT-4o'\n                  : OpenAiApi.model == 'huggingface'\n                      ? HuggingFaceApi.model()\n                      : OpenAiApi.model == 'pulzeai'\n                          ? PulzeAiApi.lastUsedModel()\n                          : '';\n      return [\n        Message(\n          text: response,\n          createdAt: Timestamp.now(),\n          userId: defaultUserId,\n          username: _name == ''\n              ? 'AI'\n              : poweredTitle == ''\n                  ? _name\n                  : ('$_name ($poweredTitle)'),\n        ),\n      ];\n    }\n\n    return [];\n  }\n\n  /// Calculate the Jaro similarity between two strings.\n  ///\n  /// The Jaro similarity is a measure of the similarity between two strings.\n  /// The higher the Jaro similarity score, the more similar the two strings are,\n  /// with 1 being an exact match and 0 being no similarity.\n  ///\n  /// - `s1`: The first string to compare.\n  /// - `s2`: The second string to compare.\n  ///\n  /// Returns a double representing the Jaro similarity score.\n  double jaroSimilarity(String s1, String s2) {\n    // Maximum distance to consider for matching characters.\n    int maxDistance = (s1.length / 2).floor() - 1;\n\n    // Arrays to keep track of which characters in each string are matches.\n    List<bool> matches1 = List.filled(s1.length, false);\n    List<bool> matches2 = List.filled(s2.length, false);\n\n    // Number of matching characters and transpositions.\n    int matches = 0;\n    int transpositions = 0;\n\n    // First pass: find matching characters.\n    for (int i = 0; i < s1.length; i++) {\n      // Determine the range of indices to check for matching characters in s2.\n      int start = max(0, i - maxDistance);\n      int end = min(i + maxDistance + 1, s2.length);\n\n      for (int j = start; j < end; j++) {\n        // Skip if already matched or not equal.\n        if (matches2[j]) continue;\n        // Mark as matched.\n        if (s1[i] != s2[j]) continue;\n        matches1[i] = true;\n        matches2[j] = true;\n        matches++;\n        break;\n      }\n    }\n\n    // If no matches were found, the similarity is 0.\n    if (matches == 0) return 0.0;\n\n    // Second pass: count transpositions.\n    int k = 0;\n    for (int i = 0; i < s1.length; i++) {\n      // Skip non-matching characters.\n      if (!matches1[i]) continue;\n      // Find the next match in s2.\n      while (!matches2[k]) {\n        k++;\n      }\n      // Count transposition if the characters don't match.\n      if (s1[i] != s2[k]) transpositions++;\n      k++;\n    }\n\n    // Calculate the Jaro similarity.\n    double m = matches.toDouble();\n    return (m / s1.length + m / s2.length + (m - transpositions / 2) / m) / 3;\n  }\n\n  double jaroWinkler(String s1, String s2, {double p = 0.1}) {\n    double jaro = jaroSimilarity(s1, s2);\n    int prefix = 0;\n    for (int i = 0; i < min(s1.length, s2.length); i++) {\n      if (s1[i] == s2[i]) {\n        prefix++;\n      } else {\n        break;\n      }\n    }\n    return jaro + prefix * p * (1 - jaro);\n  }\n\n  /// Searches the AI's question database for matching questions based on the user's input.\n  ///\n  /// [message] is the sanitized input message from the user.\n  List<Map<String, Object>> _findMatchingQuestions(String message) {\n    List<Map<String, Object>> foundQuestions = [];\n    var userMessage = _sanitizeMessage(message);\n\n    for (var questionMap in _questions!) {\n      var question = _sanitizeMessage(questionMap['description'].toString());\n\n      if (question == userMessage) {\n        foundQuestions.add(questionMap);\n        break; // Exit the loop early as we have found an exact match\n      }\n    }\n\n    if (foundQuestions.isEmpty) {\n      foundQuestions = _searchForQuestions(userMessage);\n    }\n\n    return foundQuestions;\n  }\n\n  /// Sanitizes the input message by removing special characters and converting it to lowercase.\n  ///\n  /// [message] is the raw input message.\n  String _sanitizeMessage(String message) {\n    return message.replaceAll('?', '').toLowerCase();\n  }\n\n  /// Searches the AI's question database for questions that contain the user's input message.\n  ///\n  /// [userMessage] is the sanitized input message from the user.\n  List<Map<String, Object>> _searchForQuestions(String userMessage) {\n    List<Map<String, Object>> foundQuestions = [];\n    double similarityThreshold =\n        0.98; // You can adjust this value to fine-tune the matching algorithm\n\n    for (var questionMap in _questions!) {\n      var question = _sanitizeMessage(questionMap['description'].toString());\n      double similarity = jaroWinkler(userMessage, question);\n\n      if (similarity >= similarityThreshold) {\n        foundQuestions.add(questionMap);\n      }\n    }\n\n    // Sort the found questions by their similarity in descending order\n    foundQuestions.sort((a, b) {\n      var aQuestion = _sanitizeMessage(a['description'].toString());\n      var bQuestion = _sanitizeMessage(b['description'].toString());\n      return jaroWinkler(userMessage, bQuestion)\n          .compareTo(jaroWinkler(userMessage, aQuestion));\n    });\n\n    return foundQuestions;\n  }\n\n  /// Generates a response message based on the list of matching questions.\n  ///\n  /// [foundQuestions] is the list of questions that match the user's input message.\n  Future<List<Message>> _generateResponseMessage(\n      List<Map<String, Object>> foundQuestions) async {\n    try {\n      Random rnd = Random(DateTime.now().millisecondsSinceEpoch);\n      List<String> messages = [];\n\n      for (Map<String, Object> questionMap in foundQuestions) {\n        messages.addAll(questionMap['buttonsTexts'] as Iterable<String>);\n      }\n\n      int index = rnd.nextInt(messages.length);\n\n      return [\n        Message(\n          text: messages[index],\n          createdAt: Timestamp.now(),\n          userId: defaultUserId,\n          username: _name == '' ? 'AI' : _name,\n        ),\n      ];\n    } catch (e) {\n      if (kDebugMode) {\n        print('Error generating response message: $e');\n      }\n    }\n    return [];\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/services/hugging_face_api.dart",
    "content": "import 'dart:convert';\nimport 'package:flutter/foundation.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:flutter_secure_storage/flutter_secure_storage.dart';\n\nclass HuggingFaceApi {\n  static final HuggingFaceApi _instance = HuggingFaceApi._privateConstructor();\n  factory HuggingFaceApi() => _instance;\n  HuggingFaceApi._privateConstructor();\n\n  String _apiKey = '';\n\n  static String _template = '''[\n  {\n    \"generated_text\": \"***\"\n  }\n]\n''';\n  static String _model = 'google/flan-t5-large';\n  static String _systemMessage = '';\n  static bool _sendMessages = false;\n  static const String _apiKeyKey = 'huggingface_api_key';\n  static const String _templateKey = 'huggingface_template';\n  static const String _modelKey = 'huggingface_model';\n  static const String _systemMessageKey = 'huggingface_system_message';\n  static const String _sendMessagesKey = 'huggingface_send_messages';\n  static const FlutterSecureStorage _secureStorage = FlutterSecureStorage();\n\n  static String oat() => HuggingFaceApi()._oat();\n  static void setOat(String value) => HuggingFaceApi()._setOat(value);\n  static void resetOat() => HuggingFaceApi()._resetOat();\n\n  void _resetOat() {\n    _apiKey = '';\n  }\n\n  String _oat() => _apiKey;\n  Future<void> _setOat(String value) async {\n    _apiKey = value;\n    await _secureStorage.write(key: 'huggingface_api_key', value: _apiKey);\n  }\n\n  static Future<void> loadOat() async {\n    try {\n      setOat(await _secureStorage.read(key: _apiKeyKey) ?? '');\n      _template = await _secureStorage.read(key: _templateKey) ??\n          '''[\n  {\n    \"generated_text\": \"***\"\n  }\n]\n''';\n      _model =\n          await _secureStorage.read(key: _modelKey) ?? 'google/flan-t5-large';\n      _systemMessage = await _secureStorage.read(key: _systemMessageKey) ?? '';\n      _sendMessages =\n          await _secureStorage.read(key: _sendMessagesKey) == 'true';\n    } catch (e) {\n      if (kDebugMode) {\n        print('Error loading OAT: $e');\n      }\n    }\n  }\n\n  static bool sendMessages() {\n    return _sendMessages;\n  }\n\n  static Future<void> setSendMessages(bool sendMessages) async {\n    _sendMessages = sendMessages;\n    await _secureStorage\n        .write(key: _sendMessagesKey, value: _sendMessages.toString())\n        .then((value) => null);\n  }\n\n  static String systemMessage() {\n    return _systemMessage;\n  }\n\n  static void setSystemMessage(systemMessage) {\n    _systemMessage = systemMessage;\n    _secureStorage.write(key: _systemMessageKey, value: _systemMessage);\n  }\n\n  static String model() {\n    return _model;\n  }\n\n  static void setModel(model) {\n    _model = model;\n    _secureStorage.write(key: _modelKey, value: _model);\n  }\n\n  static String template() {\n    return _template;\n  }\n\n  static void setTemplate(template) {\n    _template = template;\n    _secureStorage.write(key: _templateKey, value: _template);\n  }\n\n  static String? _findValueByTemplate(dynamic value, dynamic template) {\n    if (value is List && template is List) {\n      return _processListByTemplate(value, template);\n    } else if (value is Map && template is Map) {\n      return _processMapByTemplate(\n          value as Map<String, dynamic>, template as Map<String, dynamic>);\n    } else if (template == \"***\") {\n      return value.toString();\n    }\n\n    return null;\n  }\n\n  static String? _processListByTemplate(\n      List<dynamic> valueList, List<dynamic> templateList) {\n    if (valueList.length != templateList.length) return null;\n\n    for (int i = 0; i < valueList.length; i++) {\n      final result = _findValueByTemplate(valueList[i], templateList[i]);\n      if (result != null) {\n        return result;\n      }\n    }\n\n    return null;\n  }\n\n  static String? _processMapByTemplate(\n      Map<String, dynamic> valueMap, Map<String, dynamic> templateMap) {\n    for (var key in templateMap.keys) {\n      final result = _findValueByTemplate(valueMap[key], templateMap[key]);\n      if (result != null) {\n        return result;\n      }\n    }\n\n    return null;\n  }\n\n  static Future<String?> generate(String text) async {\n    return await _generate(_model, text, _template);\n  }\n\n  // Examples:\n  // generate('facebook/bart-large-cnn', 'What\\'s the best way to play a guitar?', '[{\"summary_text\": \"***\"}]');\n  // generate('google/flan-t5-large', 'What\\'s the best way to play a guitar?', '[{\"generated_text\": \"***\"}]');\n  static Future<String?> _generate(\n      String modelId, String text, String template) async {\n    if (!_isValidTokenAndModel(modelId)) {\n      return 'Invalid token or model ID';\n    }\n\n    final response = await _makeRequest(modelId, text);\n    return _processResponse(response, template);\n  }\n\n  static bool _isValidTokenAndModel(String modelId) {\n    return oat() != '' && modelId != '';\n  }\n\n  static Future<http.Response> _makeRequest(String modelId, String text) async {\n    final queryUrl = 'https://api-inference.huggingface.co/models/$modelId';\n    final headers = {\n      'Content-Type': 'application/json',\n      'Authorization': 'Bearer ${oat()}',\n    };\n    final body = jsonEncode({\n      'inputs': _systemMessage.isEmpty\n          ? text\n          : '$text [System message]: $_systemMessage',\n    });\n\n    try {\n      return await http.post(Uri.parse(queryUrl), headers: headers, body: body);\n    } on http.ClientException catch (e) {\n      // Handle the exception related to the HTTP client\n      if (kDebugMode) {\n        print('ClientException occurred: $e');\n      }\n      // Consider re-throwing the exception or returning an error response\n    } catch (e) {\n      // Handle other types of exceptions\n      if (kDebugMode) {\n        print('An error occurred: $e');\n      }\n      // Consider re-throwing the exception or returning an error response\n    }\n\n    // If an error occurs, you might want to return a default response:\n    return http.Response('{\"error\": \"An unexpected error occurred.\"}', 500);\n  }\n\n  static String? _processResponse(http.Response response, String template) {\n    if (response.statusCode != 200) {\n      return 'Error processing request';\n    }\n    final jsonResponse = jsonDecode(response.body);\n    final templateJson = jsonDecode(template);\n    return _findValueByTemplate(jsonResponse, templateJson);\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/services/openai_api.dart",
    "content": "import 'dart:convert';\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter_secure_storage/flutter_secure_storage.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:async/async.dart';\nimport 'package:glowby/services/hugging_face_api.dart';\nimport 'package:glowby/services/pulze_ai_api.dart';\n\nclass OpenAiApi {\n  static final OpenAiApi _instance = OpenAiApi._privateConstructor();\n  factory OpenAiApi() => _instance;\n  OpenAiApi._privateConstructor();\n\n  String _apiKey = '';\n  static int _totalTokensUsed = 0;\n\n  static String oat() => OpenAiApi()._oat();\n  static void setOat(String value) => OpenAiApi()._setOat(value);\n  static void resetOat() => OpenAiApi()._resetOat();\n\n  void _resetOat() {\n    _apiKey = '';\n  }\n\n  String _oat() => _apiKey;\n  Future<void> _setOat(String value) async {\n    _apiKey = value;\n    await _secureStorage.write(key: _apiKeyKey, value: _apiKey);\n  }\n\n  static String defaultSystemPrompt =\n      'You are Glowby, super helpful, nice, and humorous AI assistant ready to help with anything. I like to joke around.';\n\n  static String defaultSystemPromptComplexTask =\n      'You are Glowby, an AI assistant designed to break down complex tasks into a manageable 5-step plan. For each step, you offer the user 3 options to choose from. Once the user selects an option, you proceed to the next step based on their choice. After the user has chosen an option for the fifth step, you provide them with a customized, actionable plan based on their previous responses. You only reveal the current step and options to ensure an engaging, interactive experience.';\n  static String model = 'gpt-4o'; //'gpt-4';\n  static String selectedLanguage = 'en-US';\n  static String systemPrompt = defaultSystemPrompt;\n  static const String _apiKeyKey = 'openai_api_key';\n  static const String _modelKey = 'openai_model';\n  static const String _selectedLanguageKey = 'selected_language';\n  static const String _systemPromptKey = 'openai_system_prompt';\n  static const FlutterSecureStorage _secureStorage = FlutterSecureStorage();\n\n  static Future<void> loadOat() async {\n    try {\n      setOat(await _secureStorage.read(key: _apiKeyKey) ?? '');\n      model = (await _secureStorage.read(key: _modelKey)) ?? 'gpt-4o';\n      selectedLanguage =\n          (await _secureStorage.read(key: _selectedLanguageKey)) ?? 'en-US';\n      systemPrompt = (await _secureStorage.read(key: _systemPromptKey)) ??\n          defaultSystemPrompt;\n    } catch (e) {\n      if (kDebugMode) {\n        print('Error loading OAT: $e');\n      }\n    }\n\n    await HuggingFaceApi.loadOat();\n    await PulzeAiApi.loadOat();\n  }\n\n  static Future<void> setModel(String value) async {\n    model = value;\n    await _secureStorage.write(key: _modelKey, value: model);\n  }\n\n  static Future<void> setSystemPrompt(String value) async {\n    systemPrompt = value;\n    await _secureStorage.write(key: _systemPromptKey, value: systemPrompt);\n  }\n\n  static Future<void> setSelectedLanguage(String value) async {\n    selectedLanguage = value;\n    await _secureStorage.write(\n        key: _selectedLanguageKey, value: selectedLanguage);\n  }\n\n  static Future<String?> generateImageUrl(String description) async {\n    // Check if the description is safe\n    /*bool descriptionIsSafe = await isInputSafe(description);\n    if (!descriptionIsSafe) {\n      throw Exception(\n          'The input provided is not considered safe. Please provide a different input.');\n    }*/\n\n    final apiKey = OpenAiApi.oat();\n\n    const queryUrl = 'https://api.openai.com/v1/images/generations';\n    final headers = {\n      'Content-Type': 'application/json',\n      'Authorization': 'Bearer $apiKey',\n    };\n\n    final body = jsonEncode({\n      'prompt': description,\n      'n': 1,\n      'size': '512x512',\n    });\n    if (kDebugMode) {\n      print('Request URL: $queryUrl');\n    }\n\n    final response =\n        await http.post(Uri.parse(queryUrl), headers: headers, body: body);\n    if (kDebugMode) {\n      print('Response Status Code: ${response.statusCode}');\n      print('Response Body: ${response.body}');\n    }\n\n    if (response.statusCode == 200) {\n      final jsonResponse = jsonDecode(response.body);\n      final imageUrl = jsonResponse['data'][0]['url'];\n      if (kDebugMode) {\n        print('Generated Image URL: $imageUrl');\n      }\n\n      return imageUrl;\n    } else {\n      throw Exception('Failed to generate image');\n    }\n  }\n\n  static Future<bool> isInputSafe(String input) async {\n    if (kDebugMode) {\n      print('isInputSafe called with input: $input');\n    }\n\n    // Replace this URL with your AWS Lambda function URL\n    const lambdaUrl = 'YOUR_LAMBDA_FUNCTION_URL';\n\n    final headers = {\n      'Content-Type': 'application/json',\n    };\n\n    final data = {\n      'input': input,\n    };\n\n    try {\n      if (kDebugMode) {\n        print('calling lambda function with input: $input and url: $lambdaUrl');\n      }\n      final response = await http.post(\n        Uri.parse(lambdaUrl),\n        headers: headers,\n        body: jsonEncode(data),\n      );\n      if (kDebugMode) {\n        print('isInputSafe response status code: ${response.statusCode}');\n        print('isInputSafe response headers: ${response.headers}');\n        print('isInputSafe response body: ${response.body}');\n      }\n\n      if (response.statusCode == 200) {\n        final responseBody = jsonDecode(response.body);\n        bool moderationStatus = responseBody['isSafe'];\n        return moderationStatus;\n      } else {\n        if (kDebugMode) {\n          print('isInputSafe error: Status code ${response.statusCode}');\n        }\n        throw Exception('Failed to get response from Lambda function.');\n      }\n    } catch (e) {\n      if (kDebugMode) {\n        print('isInputSafe exception: $e');\n      }\n      rethrow;\n    }\n  }\n\n  static int getAdjustedMaxTokens(String inputText,\n      {int defaultMaxTokens = 300}) {\n    List<String> keywords = [\n      'code',\n      'snippet',\n      'class',\n      'function',\n      'method',\n      'generate',\n      'create',\n      'build',\n      'implement',\n      'algorithm',\n      'example',\n      'template',\n      'sample',\n      'skeleton',\n      'structure',\n    ];\n\n    bool containsKeyword(String text, List<String> keywords) {\n      return keywords.any((keyword) => text.toLowerCase().contains(keyword));\n    }\n\n    // Increase max tokens if the input text contains any of the keywords\n    if (containsKeyword(inputText, keywords)) {\n      return defaultMaxTokens *\n          3; // Example: increase max tokens by a factor of 3\n    }\n\n    return defaultMaxTokens;\n  }\n\n  static CancelableOperation<String> getResponseFromOpenAI(\n    String message, {\n    List<Map<String, String?>> previousMessages = const [],\n    int maxTries = 1,\n    String? customSystemPrompt,\n  }) {\n    // Create a cancelable completer\n    final completer = CancelableCompleter<String>();\n\n    // if previousMessages is not empty, remove the first one as it consist on the current message\n    if (previousMessages.isNotEmpty) {\n      previousMessages.removeAt(0);\n    }\n\n    if (OpenAiApi.model == 'pulzeai') {\n      _getResponseFromPulzeAI(\n        message,\n        completer,\n        previousMessages: previousMessages,\n      );\n    } else if (OpenAiApi.model == 'huggingface') {\n      _getResponseFromHuggingFace(\n        message,\n        completer,\n        previousMessages: previousMessages,\n      );\n    } else {\n      // Wrap the _getResponseFromOpenAI with the cancelable completer\n      _getResponseFromOpenAI(\n        message,\n        completer,\n        previousMessages: previousMessages,\n        maxTries: maxTries,\n        customSystemPrompt: customSystemPrompt,\n      );\n    }\n\n    return completer.operation;\n  }\n\n  static String formatPrevMessages(\n      List<Map<String, String?>> previousMessages) {\n    return previousMessages.map((message) {\n      return \"${message['role']}: ${message['content']}\";\n    }).join(', ');\n  }\n\n  static Future<void> _getResponseFromHuggingFace(\n    String message,\n    CancelableCompleter<String> completer, {\n    List<Map<String, String?>> previousMessages = const [],\n  }) async {\n    String? finalResponse = '';\n\n    if (HuggingFaceApi.oat() != '') {\n      //print(previousMessages);\n      String formattedPrevMessages = formatPrevMessages(previousMessages);\n      if (previousMessages.isNotEmpty && HuggingFaceApi.sendMessages()) {\n        finalResponse = await HuggingFaceApi.generate(\n            '$message previousMessages: $formattedPrevMessages');\n      } else {\n        finalResponse = await HuggingFaceApi.generate(message);\n      }\n\n      //print('finalResponse: $finalResponse');\n      if (finalResponse != null) {\n        finalResponse = finalResponse\n            .replaceAll('assistant: ', '')\n            .replaceAll('previousMessages: ', '')\n            .replaceAll('user: ', '')\n            .replaceAll('[System message]: ', '');\n      }\n    } else {\n      finalResponse =\n          'Please enter your Hugging Face Access Token in the settings.';\n    }\n\n    completer.complete(finalResponse);\n\n    // Explicitly return null to avoid\n\n    return;\n  }\n\n  static Future<void> _getResponseFromPulzeAI(\n    String message,\n    CancelableCompleter<String> completer, {\n    List<Map<String, String?>> previousMessages = const [],\n  }) async {\n    String? finalResponse = '';\n\n    if (PulzeAiApi.oat() != '') {\n      //print(previousMessages);\n      String formattedPrevMessages = formatPrevMessages(previousMessages);\n      if (previousMessages.isNotEmpty && PulzeAiApi.sendMessages()) {\n        finalResponse = await PulzeAiApi.generate(\n            '$message previousMessages: $formattedPrevMessages');\n      } else {\n        finalResponse = await PulzeAiApi.generate(message);\n      }\n\n      //print('finalResponse: $finalResponse');\n      if (finalResponse != null) {\n        finalResponse = finalResponse\n            .replaceAll('assistant: ', '')\n            .replaceAll('previousMessages: ', '')\n            .replaceAll('user: ', '')\n            .replaceAll('[System message]: ', '');\n      }\n    } else {\n      finalResponse =\n          'Please enter your Puzle AI Access Token in the settings.';\n    }\n\n    completer.complete(finalResponse);\n\n    // Explicitly return null to avoid\n\n    return;\n  }\n\n  static Future<void> _getResponseFromOpenAI(\n      String message, CancelableCompleter<String> completer,\n      {List<Map<String, String?>> previousMessages = const [],\n      int maxTries = 1,\n      String? customSystemPrompt}) async {\n    String finalResponse = '';\n    String inputMessage = message;\n    int tries = 0;\n\n    // Check if the message is safe\n    /*bool messageIsSafe = await isInputSafe(inputMessage);\n    if (!messageIsSafe) {\n      finalResponse =\n          'Sorry, the input provided is not considered safe. Please provide a different input.';\n      completer.complete(finalResponse);\n      return;\n    }*/\n\n    final apiKey = OpenAiApi.oat();\n\n    while (tries < maxTries) {\n      if (kDebugMode) {\n        print('inputMessage = $inputMessage');\n      }\n      const apiUrl = 'https://api.openai.com/v1/chat/completions';\n\n      final headers = {\n        'Content-Type': 'application/json',\n        'Authorization': 'Bearer $apiKey',\n      };\n\n      final adjustedMaxTokens = getAdjustedMaxTokens(inputMessage);\n\n      final data = {\n        'model': model,\n        'messages': [\n          {'role': 'system', 'content': customSystemPrompt ?? systemPrompt},\n          ...previousMessages,\n          {'role': 'user', 'content': inputMessage}\n        ],\n        'max_tokens': adjustedMaxTokens,\n        'n': 1,\n        'stop': null,\n        'temperature': 1,\n      };\n\n      try {\n        final response = await http.post(\n          Uri.parse(apiUrl),\n          headers: headers,\n          body: jsonEncode(data),\n        );\n\n        if (response.statusCode == 200) {\n          final responseBody = jsonDecode(utf8.decode(response.bodyBytes));\n          String receivedResponse = responseBody['choices'][0]['message']\n                  ['content']\n              .toString()\n              .trim();\n\n          // Add the current received response to the final response\n          finalResponse += receivedResponse;\n\n          // Add the tokens used in this response to the total tokens used\n          int tokensUsed = responseBody['usage']['total_tokens'];\n          _totalTokensUsed += tokensUsed;\n\n          // Calculate the cost of the tokens used\n          double cost = tokensUsed * 0.002 / 1000;\n          if (kDebugMode) {\n            // Print the tokens used and the cost to the console\n            print('Tokens used in this response: $tokensUsed');\n            print('Cost of this response: \\$${cost.toStringAsFixed(5)}');\n            print('Total tokens used so far: $_totalTokensUsed');\n          }\n\n          double totalCost = _totalTokensUsed * 0.002 / 1000;\n          if (kDebugMode) {\n            print('Total cost so far: \\$${totalCost.toStringAsFixed(5)}');\n          }\n\n          // Check if the received response was cut-off\n          if (responseBody['choices'][0]['finish_reason'] == 'length') {\n            // Use the last part of the received response as input for the next request\n            inputMessage += receivedResponse;\n            int maxLength = 1024 * 10; // You can set this to a desired limit\n            if (inputMessage.length > maxLength) {\n              inputMessage =\n                  inputMessage.substring(inputMessage.length - maxLength);\n            }\n            tries++;\n          } else {\n            break;\n          }\n        } else {\n          throw Exception('Failed to get response from OpenAI API.');\n        }\n      } catch (e) {\n        if (tries + 1 < maxTries) {\n          tries++;\n          // You can add a delay before retrying the request.\n          await Future.delayed(const Duration(seconds: 2));\n        } else {\n          finalResponse =\n              'Sorry, there was an error processing your request. Please try again later.';\n          if (kDebugMode) {\n            print('Error: $e');\n          }\n          break;\n        }\n      }\n    }\n\n    completer.complete(finalResponse);\n\n    // Explicitly return null to avoid\n\n    return;\n  }\n\n  // Draw to Code Functionality\n\n  Future<String> getHtmlFromOpenAI(\n      String imageBase64, String userPrompt) async {\n    if (_apiKey == '') {\n      return 'Enter API key in settings';\n    }\n\n    const systemPrompt = \"\"\"\nYou are a skilled web developer with expertise in Tailwind CSS. A user will provide a low-fidelity wireframe along with descriptive notes. Your task is to create a high-fidelity, responsive HTML webpage using Tailwind CSS and JavaScript, embedded within a single HTML file.\n\n- Embed additional CSS and JavaScript directly in the HTML file.\n- For images, use placeholders from Unsplash or solid color rectangles.\n- Draw inspiration for fonts, colors, and layouts from user-provided style references or wireframes.\n- For any previous design iterations, use the provided HTML to refine the design further.\n- Apply creative improvements to enhance the design.\n- Load JavaScript dependencies through JavaScript modules and unpkg.com.\n\nThe final output should be a single HTML file, starting with \"<html>\". Avoid markdown, excessive newlines, and the character sequence \"```\".\n\"\"\"; // The system prompt\n\n    final openAIKey = _apiKey; // Replace with your actual API key\n    if (openAIKey.isEmpty) {\n      return '';\n    }\n\n    final url = Uri.parse(\"https://api.openai.com/v1/chat/completions\");\n    var request = http.Request(\"POST\", url)\n      ..headers.addAll({\n        'Content-Type': 'application/json',\n        'Authorization': 'Bearer $openAIKey',\n      })\n      ..body = jsonEncode({\n        \"model\": \"gpt-4-vision-preview\",\n        \"temperature\": 0,\n        \"max_tokens\": 4096,\n        \"messages\": [\n          {\"role\": \"system\", \"content\": systemPrompt},\n          {\n            \"role\": \"user\",\n            \"content\": [\n              {\"type\": \"text\", \"text\": userPrompt},\n              {\n                \"type\": \"image_url\",\n                \"image_url\": {\"url\": \"data:image/jpeg;base64,$imageBase64\"}\n              }\n            ]\n          }\n        ],\n      });\n\n    try {\n      final response = await http.Response.fromStream(await request.send());\n\n      if (response.statusCode == 200) {\n        final decodedResponse = jsonDecode(response.body);\n        // Assuming 'html' is part of the response JSON structure\n        String html =\n            decodedResponse['choices']?.first['message']['content'] ?? '';\n        // Additional logic to handle the HTML content goes here\n        return html;\n      } else {\n        // Handle the error, maybe throw an exception\n        if (kDebugMode) {\n          print('Failed to get HTML from OpenAI: ${response.body}');\n        }\n        return '';\n      }\n    } catch (e) {\n      if (kDebugMode) {\n        print('Caught error: $e');\n      }\n      return '';\n    }\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/services/pulze_ai_api.dart",
    "content": "import 'dart:convert';\nimport 'package:flutter/foundation.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:flutter_secure_storage/flutter_secure_storage.dart';\n\nclass PulzeAiApi {\n  static final PulzeAiApi _instance = PulzeAiApi._privateConstructor();\n  factory PulzeAiApi() => _instance;\n  PulzeAiApi._privateConstructor();\n\n  String _apiKey = '';\n\n  static String oat() => PulzeAiApi()._oat();\n  static void setOat(String value) => PulzeAiApi()._setOat(value);\n  static void resetOat() => PulzeAiApi()._resetOat();\n\n  void _resetOat() {\n    _apiKey = '';\n  }\n\n  String _oat() => _apiKey;\n  Future<void> _setOat(String value) async {\n    _apiKey = value;\n    await _secureStorage.write(key: _apiKeyKey, value: _apiKey);\n  }\n\n  static String _template = '''[\n  {\n    \"generated_text\": \"***\"\n  }\n]\n''';\n  static String _model = 'pulze-v0';\n  static String _lastUsedModel = 'pulze-v0';\n  static String _systemMessage = '';\n  static bool _sendMessages = false;\n  static const String _apiKeyKey = 'pulze_ai_api_key';\n  static const String _templateKey = 'pulze_ai_template';\n  static const String _modelKey = 'pulze_ai_model';\n  static const String _systemMessageKey = 'pulze_ai_system_message';\n  static const String _sendMessagesKey = 'pulze_ai_send_messages';\n  static const FlutterSecureStorage _secureStorage = FlutterSecureStorage();\n\n  static Future<void> loadOat() async {\n    try {\n      setOat(await _secureStorage.read(key: _apiKeyKey) ?? '');\n      _template = await _secureStorage.read(key: _templateKey) ??\n          '''[\n  {\n    \"generated_text\": \"***\"\n  }\n]\n''';\n      _model = await _secureStorage.read(key: _modelKey) ?? 'pulze-v0';\n      _systemMessage = await _secureStorage.read(key: _systemMessageKey) ?? '';\n      _sendMessages =\n          await _secureStorage.read(key: _sendMessagesKey) == 'true';\n    } catch (e) {\n      if (kDebugMode) {\n        print('Error loading OAT: $e');\n      }\n    }\n  }\n\n  static bool sendMessages() {\n    return _sendMessages;\n  }\n\n  static Future<void> setSendMessages(bool sendMessages) async {\n    _sendMessages = sendMessages;\n    await _secureStorage.write(\n        key: _sendMessagesKey, value: _sendMessages.toString());\n  }\n\n  static String systemMessage() {\n    return _systemMessage;\n  }\n\n  static void setSystemMessage(systemMessage) {\n    _systemMessage = systemMessage;\n    _secureStorage.write(key: _systemMessageKey, value: _systemMessage);\n  }\n\n  static String model() {\n    return _model;\n  }\n\n  static String lastUsedModel() {\n    return _lastUsedModel;\n  }\n\n  static void setModel(model) {\n    _model = model;\n    _secureStorage.write(key: _modelKey, value: _model);\n  }\n\n  static String template() {\n    return _template;\n  }\n\n  static void setTemplate(template) {\n    _template = template;\n    _secureStorage.write(key: _templateKey, value: _template);\n  }\n\n  static Future<String?> generate(String text) async {\n    return await _generate(_model, text, _template);\n  }\n\n  static Future<String?> _generate(\n      String modelId, String text, String template) async {\n    if (PulzeAiApi.oat() == '') {\n      return 'Please enter your Pulze AI Access Token in the settings.';\n    }\n\n    final apiKey = PulzeAiApi.oat();\n\n    const queryUrl = 'https://api.pulze.ai/v1/completions/';\n    final headers = {\n      'Content-Type': 'application/json',\n      'Authorization': 'Bearer $apiKey',\n      'Pulze-Labels': '{\"hello\": \"world\"}', // Added Pulze-Labels header\n    };\n\n    final body = jsonEncode({\n      'model': modelId, // Specify the model\n      'prompt': _systemMessage == ''\n          ? text\n          : '$text [System message]: $_systemMessage',\n      'max_tokens': 300, // Added max_tokens\n      'temperature': 0, // Added temperature\n    });\n\n    try {\n      if (kDebugMode) {\n        print('Request URL: $queryUrl');\n      }\n\n      var response =\n          await http.post(Uri.parse(queryUrl), headers: headers, body: body);\n\n      if (kDebugMode) {\n        print('Response Status Code: ${response.statusCode}');\n        print('Response Body: ${response.body}');\n      }\n\n      // If there's a redirect, follow it\n      if (response.statusCode == 307) {\n        var newUri = response.headers['location'];\n        if (kDebugMode) {\n          print('New Uri: $newUri');\n        }\n        if (newUri != null) {\n          response = await http.get(Uri.parse(newUri));\n        }\n\n        if (kDebugMode) {\n          print('Response Status Code: ${response.statusCode}');\n          print('Response Body: ${response.body}');\n        }\n      }\n\n      if (response.statusCode == 200) {\n        final responseBody = jsonDecode(utf8.decode(response.bodyBytes));\n        // Extracting the model information\n        String modelInfo = responseBody['metadata']['model']['model'];\n        _lastUsedModel = modelInfo;\n\n        String receivedResponse =\n            responseBody['choices'][0]['text'].toString().trim();\n\n        // Add the current received response to the final response\n        final generatedText = receivedResponse;\n\n        if (kDebugMode) {\n          print('Generated Text: $generatedText');\n          print('Model Info: $modelInfo');\n        }\n\n        return generatedText;\n      } else {\n        return 'Sorry, there was an error processing your request. Please try again later.';\n      }\n    } catch (e) {\n      if (kDebugMode) {\n        print('An exception occurred: $e');\n      }\n      return 'An error occurred while processing your request.';\n    }\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/color_utils.dart",
    "content": "import 'dart:math';\nimport 'package:flutter/material.dart';\n\n/// Adjusts a color value by increasing its brightness towards white based on a given factor.\n///\n/// This function modifies a single RGB component (red, green, or blue) by applying a tinting factor.\n/// It lightens the component by a percentage that moves it closer to 255 (white). The factor\n/// should be between 0.0 (no change) and 1.0 (full white).\n///\n/// - `value`: An integer representing the color value of a single RGB component.\n/// - `factor`: A double representing the factor by which the color value is to be increased.\n///\n/// Returns an integer representing the new color value after applying the tint factor, ensuring\n/// it is within the valid range of 0 to 255.\nint tintValue(int value, double factor) =>\n    max(0, min((value + ((255 - value) * factor)).round(), 255));\n\n/// Lightens a given color by mixing it with white based on a provided factor.\n///\n/// The `tintColor` function takes an original color and a factor, then computes\n/// a lighter version of the original color. The factor determines how much white\n/// is mixed with the original color, with 1.0 being fully white and 0 having no effect.\n///\n/// - `color`: The `Color` object that is to be tinted.\n/// - `factor`: A double value between 0.0 and 1.0 that represents the intensity of the tint.\n///             The closer the factor is to 1.0, the lighter the tint will be.\n///\n/// Returns a new `Color` object representing the tinted color.\nColor tintColor(Color color, double factor) => Color.fromRGBO(\n    tintValue(color.red, factor),\n    tintValue(color.green, factor),\n    tintValue(color.blue, factor),\n    1);\n\n/// Calculates a shaded color value by decreasing its luminance.\n///\n/// This function takes a color value (0-255) and a factor (0.0-1.0) and darkens\n/// the color by the factor provided. The factor represents the percentage of\n/// change towards black, with 1.0 being completely black.\n///\n/// - `value`: The base color value to be shaded.\n/// - `factor`: The factor by which the color is to be darkened. A factor of 0.1\n///   darkens the color by 10%, for example.\n///\n/// Returns an integer representing the shaded color value, ensuring it remains\n/// within the valid color value range of 0 to 255.\nint shadeValue(int value, double factor) =>\n    max(0, min(value - (value * factor).round(), 255));\n\nColor shadeColor(Color color, double factor) => Color.fromRGBO(\n    shadeValue(color.red, factor),\n    shadeValue(color.green, factor),\n    shadeValue(color.blue, factor),\n    1);\n\n/// Generates a `MaterialColor` based on a single `Color`.\n///\n/// This function takes a `Color` and a luminance factor to produce different shades.\n/// It creates a `MaterialColor` which allows for color consistency across different UI elements.\n///\n/// The shades are generated by tinting (lightening) and shading (darkening) the base color.\n/// Tints are produced by adding the factor to the base color, moving towards white.\n/// Shades are produced by subtracting the factor from the base color, moving towards black.\n///\n/// Each tint or shade is defined for the material design color swatch.\n///\n/// - `color`: The base color from which the swatch will be generated.\n///\n/// Returns a `MaterialColor` object allowing for consistent color theming.\nMaterialColor generateMaterialColor(Color color) {\n  return MaterialColor(color.value, {\n    50: tintColor(color, 0.9),\n    100: tintColor(color, 0.8),\n    200: tintColor(color, 0.6),\n    300: tintColor(color, 0.4),\n    400: tintColor(color, 0.2),\n    500: color,\n    600: shadeColor(color, 0.1),\n    700: shadeColor(color, 0.2),\n    800: shadeColor(color, 0.3),\n    900: shadeColor(color, 0.4),\n  });\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/text_to_speech.dart",
    "content": "import 'dart:async';\n\nimport 'package:flutter_tts/flutter_tts.dart';\n\nclass TextToSpeech {\n  static const String typingIndicator = 'typing...';\n  static const double defaultSpeechRate = 1.0;\n  static const double reducedSpeechRate = 0.85;\n\n  final FlutterTts _flutterTts = FlutterTts();\n\n  static final Map<String, String> _languageCodes = {\n    'American English': 'en-US',\n    'American Spanish': 'es-US',\n    'Arabic': 'ar-SA',\n    'Argentinian Spanish': 'es-AR',\n    'Australian English': 'en-AU',\n    'Brazilian Portuguese': 'pt-BR',\n    'British English': 'en-GB',\n    'Bulgarian': 'bg-BG',\n    'Canadian French': 'fr-CA',\n    'Chinese (Simplified)': 'zh-CN',\n    'Chinese (Traditional)': 'zh-TW',\n    'Czech': 'cs-CZ',\n    'Danish': 'da-DK',\n    'Dutch': 'nl-NL',\n    'English': 'en-US',\n    'Finnish': 'fi-FI',\n    'French': 'fr-FR',\n    'German': 'de-DE',\n    'Greek': 'el-GR',\n    'Hebrew (Israel)': 'he-IL',\n    'Hungarian': 'hu-HU',\n    'Indonesian': 'id-ID',\n    'Italian': 'it-IT',\n    'Japanese': 'ja-JP',\n    'Korean': 'ko-KR',\n    'Mexican Spanish': 'es-MX',\n    'Norwegian': 'nb-NO',\n    'Polish': 'pl-PL',\n    'Portuguese': 'pt-PT',\n    'Romanian': 'ro-RO',\n    'Russian': 'ru-RU',\n    'Slovak': 'sk-SK',\n    'Spanish': 'es-ES',\n    'Swedish': 'sv-SE',\n    'Thai': 'th-TH',\n    'Turkish': 'tr-TR',\n    'Ukrainian': 'uk-UA',\n    'Vietnamese': 'vi-VN',\n  };\n\n  Future<void> setSpeechRate(currentLanguage) async {\n    if (currentLanguage.contains('en') ||\n        currentLanguage.contains('ru') ||\n        currentLanguage.contains('pt') ||\n        currentLanguage.contains('pl')) {\n      await _flutterTts.setSpeechRate(defaultSpeechRate);\n    } else {\n      await _flutterTts.setSpeechRate(reducedSpeechRate);\n    }\n  }\n\n  static Map<String, String> get languageCodes => _languageCodes;\n  static String? lastLanguage;\n\n  Future<void> speakText(String text, {String language = 'en-US'}) async {\n    if (text == typingIndicator) {\n      return;\n    }\n\n    bool containsLanguageCode =\n        _languageCodes.keys.any((key) => text.contains('$key:'));\n\n    Completer<void> completer = Completer<void>();\n    _flutterTts.setCompletionHandler(() {\n      completer.complete();\n    });\n\n    if (!containsLanguageCode) {\n      await _flutterTts.setLanguage(language);\n      await setSpeechRate(language);\n      await _flutterTts.speak(text);\n      await completer.future;\n    } else {\n      // Speak the initial text in the default language\n      RegExp exp = RegExp(r'\\d+\\.\\s');\n      Iterable<RegExpMatch> matches = exp.allMatches(text);\n      String initialText = text.substring(0, matches.first.start);\n\n      if (initialText.isNotEmpty) {\n        await _flutterTts.setLanguage(language);\n        await setSpeechRate(language);\n        await _flutterTts.speak(initialText);\n        await completer.future;\n        completer = Completer<void>();\n      }\n\n      List<String> lines = text.split('\\n');\n      for (String line in lines) {\n        String currentLanguage = language;\n        for (final entry in _languageCodes.entries) {\n          if (line.contains('${entry.key}:')) {\n            // Speak the part before the colon with the default language.\n            String beforeColon = line.split('${entry.key}:')[0];\n            if (beforeColon != '') {\n              await _flutterTts.setLanguage(currentLanguage);\n              await setSpeechRate(currentLanguage);\n              await _flutterTts.speak('$beforeColon ${entry.key}');\n              await completer.future;\n              completer = Completer<void>();\n            }\n\n            // Speak the part after the colon with the appropriate language.\n            String afterColon = line.split('${entry.key}:')[1];\n            currentLanguage = entry.value;\n            await _flutterTts.setLanguage(currentLanguage);\n            await setSpeechRate(currentLanguage);\n            await _flutterTts.speak(afterColon);\n            await completer.future;\n            completer = Completer<void>();\n            break;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/timestamp.dart",
    "content": "// Copyright 2018, the Chromium project authors.  Please see the AUTHORS file\n// for details. All rights reserved. Use of this source code is governed by a\n// BSD-style license that can be found in the LICENSE file.\nconst int _kThousand = 1000;\nconst int _kMillion = 1000000;\nconst int _kBillion = 1000000000;\n\nvoid _check(bool expr, String name, int value) {\n  if (!expr) {\n    throw ArgumentError(\"Timestamp $name out of range: $value\");\n  }\n}\n\n/// A Timestamp represents a point in time independent of any time zone or calendar,\n/// represented as seconds and fractions of seconds at nanosecond resolution in UTC\n/// Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends\n/// the Gregorian calendar backwards to year one. It is encoded assuming all minutes\n/// are 60 seconds long, i.e. leap seconds are \"smeared\" so that no leap second table\n/// is needed for interpretation. Range is from 0001-01-01T00:00:00Z to\n/// 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we\n/// can convert to and from RFC 3339 date strings.\n///\n/// For more information, see [the reference timestamp definition](https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto)\nclass Timestamp implements Comparable<Timestamp> {\n  /// Creates a [Timestamp]\n  Timestamp(this._seconds, this._nanoseconds) {\n    _validateRange(_seconds, _nanoseconds);\n  }\n\n  /// Create a [Timestamp] fromMillisecondsSinceEpoch\n  factory Timestamp.fromMillisecondsSinceEpoch(int milliseconds) {\n    final int seconds = (milliseconds / _kThousand).floor();\n    final int nanoseconds = (milliseconds - seconds * _kThousand) * _kMillion;\n    return Timestamp(seconds, nanoseconds);\n  }\n\n  /// Create a [Timestamp] fromMicrosecondsSinceEpoch\n  factory Timestamp.fromMicrosecondsSinceEpoch(int microseconds) {\n    final int seconds = (microseconds / _kMillion).floor();\n    final int nanoseconds = (microseconds - seconds * _kMillion) * _kThousand;\n    return Timestamp(seconds, nanoseconds);\n  }\n\n  /// Create a [Timestamp] from [DateTime] instance\n  factory Timestamp.fromDate(DateTime date) {\n    return Timestamp.fromMicrosecondsSinceEpoch(date.microsecondsSinceEpoch);\n  }\n\n  /// Create a [Timestamp] from [DateTime].now()\n  factory Timestamp.now() {\n    return Timestamp.fromMicrosecondsSinceEpoch(\n        DateTime.now().microsecondsSinceEpoch);\n  }\n\n  final int _seconds;\n  final int _nanoseconds;\n\n  static const int _kStartOfTime = -62135596800;\n  static const int _kEndOfTime = 253402300800;\n\n  // ignore: public_member_api_docs\n  int get seconds => _seconds;\n\n  // ignore: public_member_api_docs\n  int get nanoseconds => _nanoseconds;\n\n  // ignore: public_member_api_docs\n  int get millisecondsSinceEpoch =>\n      (seconds * _kThousand + nanoseconds / _kMillion).floor();\n\n  // ignore: public_member_api_docs\n  int get microsecondsSinceEpoch =>\n      (seconds * _kMillion + nanoseconds / _kThousand).floor();\n\n  /// Converts [Timestamp] to [DateTime]\n  DateTime toDate() {\n    return DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch);\n  }\n\n  @override\n  int get hashCode => Object.hash(seconds, nanoseconds);\n  @override\n  bool operator ==(Object o) =>\n      o is Timestamp && o.seconds == seconds && o.nanoseconds == nanoseconds;\n  @override\n  int compareTo(Timestamp other) {\n    if (seconds == other.seconds) {\n      return nanoseconds.compareTo(other.nanoseconds);\n    }\n\n    return seconds.compareTo(other.seconds);\n  }\n\n  @override\n  String toString() {\n    return \"Timestamp(seconds=$seconds, nanoseconds=$nanoseconds)\";\n  }\n\n  static void _validateRange(int seconds, int nanoseconds) {\n    _check(nanoseconds >= 0, 'nanoseconds', nanoseconds);\n    _check(nanoseconds < _kBillion, 'nanoseconds', nanoseconds);\n    _check(seconds >= _kStartOfTime, 'seconds', seconds);\n    _check(seconds < _kEndOfTime, 'seconds', seconds);\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/utils.dart",
    "content": "import 'dart:convert';\nimport 'dart:ui' as ui;\nimport 'dart:math';\n\nimport 'package:flutter/material.dart';\nimport 'package:http/http.dart' as http;\n\nimport 'package:url_launcher/url_launcher_string.dart';\n\nimport 'utils_stub.dart'\n    if (dart.library.html) 'utils_web.dart'\n    if (dart.library.io) 'utils_desktop.dart';\n\nabstract class Utils {\n  static Future<void> downloadImage(String url, String description) async =>\n      UtilsPlatform.downloadImage(url, description);\n\n  static Future<dynamic> pickImage() async => UtilsPlatform.pickImage();\n\n  static Future<dynamic> startFilePicker() async =>\n      UtilsPlatform.startFilePicker();\n\n  static Future<void> initializeState(dynamic f) async =>\n      UtilsPlatform.initializeState(f);\n\n  static Future<void> recordVoice(String lang) async =>\n      UtilsPlatform.recordVoice(lang);\n\n  static Future<String> convertToBase64JpegWeb(\n          List<Offset?> points, ui.Image? image, int width, int height) async =>\n      UtilsPlatform.convertToBase64JpegWeb(points, image, width, height);\n\n  static Future<void> launchURL(String url) async {\n    if (await canLaunchUrlString(url)) {\n      await launchUrlString(url);\n    } else {\n      throw Exception('Could not launch $url');\n    }\n  }\n\n  // List of image command patterns\n  static final List<String> imageCommandPatterns = [\n    r'\\b(draw|paint|generate|create|show) (me )?(a |an )?(pic|picture|image|illustration|drawing)\\b',\n    r'\\b(draw|paint|generate|create|show) this (for me)?\\b',\n    r'\\b(can you )?(please )?(draw|paint|generate|create|show) (me )?(a |an )?(pic|picture|image|illustration|drawing)\\b',\n    r'\\b(i want to see|show me) (a |an )?(pic|picture|image|illustration|drawing) of\\b',\n  ];\n\n  // Function to test if any command patterns match the user input\n  static bool isImageGenerationCommand(String input) {\n    return imageCommandPatterns.any((pattern) {\n      RegExp regex = RegExp(pattern, caseSensitive: false);\n      return regex.hasMatch(input);\n    });\n  }\n\n  static String? getMatchingPattern(String input) {\n    for (var pattern in imageCommandPatterns) {\n      RegExp regex = RegExp(pattern, caseSensitive: false);\n      if (regex.hasMatch(input)) {\n        return pattern;\n      }\n    }\n    return null;\n  }\n\n  static Future<String> getImageDataFromUrl(String url) async {\n    try {\n      final response = await http.get(Uri.parse(url));\n      if (response.statusCode == 200) {\n        final imageData = response.bodyBytes;\n        final base64Image = base64Encode(imageData);\n        return base64Image;\n      } else {\n        throw Exception('Failed to download image: ${response.statusCode}');\n      }\n    } catch (e) {\n      throw Exception('Failed to save image: ${e.toString()}');\n    }\n  }\n\n  static List<String> imageReadyMessages = [\n    'Your image is ready! Make sure you allow pop-ups.',\n    'Image generated! Remember to enable pop-ups.',\n    'Voila! Your image is done. Don\\'t forget to allow pop-ups.',\n    'Success! Your image has been created. Ensure pop-ups are allowed.',\n    'Image complete! Just a reminder to permit pop-ups.',\n    'Your masterpiece is finished! Please enable pop-ups.',\n    'Your visual creation is ready! Check that you\\'ve allowed pop-ups.',\n  ];\n\n  static String getRandomImageReadyMessage() {\n    final random = Random();\n    int index = random.nextInt(imageReadyMessages.length);\n    return imageReadyMessages[index];\n  }\n\n  static List<String> imageGenerationFunnyMessages = [\n    'Drawing your image... Searching for my digital paintbrush...',\n    'Drawing your image... Brewing a colorful potion...',\n    'Drawing your image... Summoning artistic inspiration...',\n    'Drawing your image... Painting with pixels...',\n    'Drawing your image... Conjuring a visual masterpiece...',\n    'Drawing your image... Diving into the canvas of imagination...',\n    'Drawing your image... Sketching with code...',\n    'Drawing your image... Weaving a tapestry of pixels...',\n    'Drawing your image... Navigating the art labyrinth...',\n    'Drawing your image... Decoding visual enigmas...',\n    'Drawing your image... Assembling a digital gallery...',\n    'Drawing your image... Cooking up a visual feast...',\n    'Drawing your image... Unraveling the threads of creativity...',\n    'Drawing your image... Tapping into the visual matrix...',\n    'Drawing your image... Beaming up new designs...',\n    'Drawing your image... Hitchhiking through the artverse...',\n    'Drawing your image... Dusting off ancient palettes...',\n    'Drawing your image... Crafting an artistic potion...',\n    'Drawing your image... Igniting the creative spark...',\n    'Drawing your image... Fishing for inspiration...',\n    'Drawing your image... Sifting through the sands of design...',\n    'Drawing your image... Gathering visual gems...',\n    'Drawing your image... Riding the wave of imagination...',\n  ];\n\n  static String getRandomImageGenerationFunnyMessage() {\n    final random = Random();\n    int index = random.nextInt(imageGenerationFunnyMessages.length);\n    return imageGenerationFunnyMessages[index];\n  }\n\n  static List<String> loadingMessages = [\n    'Talking to collective wisdom...',\n    'Summoning creative spirits...',\n    'Traveling through the storyverse...',\n    'Weaving a tale of wonder...',\n    'Fetching new story elements...',\n    'Conjuring the next adventure...',\n    'Spinning the wheel of stories...',\n    'Navigating the plot labyrinth...',\n    'Polishing plot twists...',\n    'Discovering new realms...',\n    'Replenishing the inkwell...',\n    'Crafting a narrative potion...',\n    'Unraveling the yarn of tales...',\n    'Tapping into the story matrix...',\n    'Beaming up new ideas...',\n    'Hitchhiking through fiction...',\n    'Dusting off ancient tomes...',\n    'Decoding narrative enigmas...',\n    'Assembling a cast of characters...',\n    'Cooking up a literary feast...',\n    'Diving into the imagination ocean...',\n    'Venturing into narrative territory...',\n    'Harvesting ideas from the idea tree...',\n    'Rolling out the story carpet...',\n    'Unlocking the tale treasure chest...',\n    'Painting with words...',\n    'Whispering to the muses...',\n    'Peering through the story telescope...',\n    'Igniting the creative spark...',\n    'Fishing for inspiration...',\n    'Sifting through story sands...',\n    'Gathering narrative gems...',\n    'Riding the wave of imagination...',\n  ];\n\n  static String getRandomMessage() {\n    final random = Random();\n    int index = random.nextInt(loadingMessages.length);\n    return loadingMessages[index];\n  }\n\n  static List<String> loadingMessagesForCode = [\n    'Compiling the code of creation...',\n    'Brewing a batch of algorithms...',\n    'Assembling the building blocks...',\n    'Constructing digital blueprints...',\n    'Wiring up the circuits of logic...',\n    'Unraveling the threads of code...',\n    'Mining the data mines...',\n    'Sculpting the logic landscape...',\n    'Connecting the code constellations...',\n    'Weaving the web of functions...',\n    'Chasing the elusive bugs...',\n    'Deciphering the secrets of syntax...',\n    'Calibrating the code compass...',\n    'Setting sail on the sea of scripts...',\n    'Delving into the depths of data...',\n    'Energizing the flow of logic...',\n    'Exploring the code caves...',\n    'Tapping into the digital wellspring...',\n    'Navigating the river of routines...',\n    'Mapping the code cosmos...',\n    'Solving the algorithmic riddles...',\n    'Stitching together the fabric of code...',\n    'Tuning the code symphony...',\n    'Traversing the code jungle...',\n    'Unlocking the digital vault...',\n    'Harnessing the power of variables...',\n    'Journeying through the function forest...',\n    'Carving the code canyon...',\n    'Gathering the pearls of programming...',\n    'Pioneering the code frontier...',\n    'Unleashing the power of progress...',\n  ];\n\n  static String getRandomMessageForCode() {\n    final random = Random();\n    int index = random.nextInt(loadingMessagesForCode.length);\n    return loadingMessagesForCode[index];\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/utils_desktop.dart",
    "content": "import 'dart:convert';\nimport 'dart:io';\nimport 'dart:math';\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:image_picker/image_picker.dart';\nimport 'package:path_provider/path_provider.dart';\nimport 'package:http/http.dart' as http;\nimport 'dart:ui' as ui;\n\nclass UtilsPlatform {\n  static Future<void> downloadImage(String url, String description) async {\n    // Desktop-specific image downloading implementation\n    final response = await http.get(Uri.parse(url));\n    if (response.statusCode == 200) {\n      final directory =\n          await getDownloadsDirectory(); // path_provider package needed\n      if (directory != null) {\n        final filePath = '${directory.path}/$description.png';\n        final file = File(filePath);\n        await file.writeAsBytes(response.bodyBytes);\n      }\n    } else {\n      throw Exception(\n          'Failed to download image: Server responded with status code ${response.statusCode}');\n    }\n  }\n\n  static Future<dynamic> pickImage() async {\n    if (Platform.isIOS) {\n      final picker = ImagePicker();\n      final pickedFile = await picker.pickImage(source: ImageSource.gallery);\n      if (pickedFile != null) {\n        final File imageFile = File(pickedFile.path);\n        return imageFile.readAsBytes();\n      } else {\n        if (kDebugMode) {\n          print('No image selected.');\n        }\n        return null;\n      }\n    }\n  }\n\n  static Future<dynamic> startFilePicker() async {\n    throw UnsupportedError(\n        'startFilePicker is not supported on this platform.');\n  }\n\n  static Future<void> initializeState(dynamic f) async {\n    throw UnsupportedError(\n        'startFilePicker is not supported on this platform.');\n  }\n\n  static Future<void> recordVoice(String lang) async => throw UnsupportedError(\n      'initializeState is not supported on this platform.');\n\n  static void paintImage(\n      {required Canvas canvas, required ui.Image image, required Size size}) {\n    // Calculate the scale factor to fit the image within the canvas if needed\n    final double scaleFactor =\n        min(size.width / image.width, size.height / image.height);\n\n    // Calculate the destination rectangle for the scaled image\n    final Rect destRect = Rect.fromLTWH(\n      (size.width - image.width * scaleFactor) / 2,\n      (size.height - image.height * scaleFactor) / 2,\n      image.width * scaleFactor,\n      image.height * scaleFactor,\n    );\n\n    // Draw the scaled image at the center position\n    canvas.drawImageRect(\n        image,\n        Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble()),\n        destRect,\n        Paint());\n  }\n\n  static Future<String> convertToBase64JpegWeb(\n      List<Offset?> points, ui.Image? img, int width, int height) async {\n    // Create a PictureRecorder to record the canvas operations\n    final ui.PictureRecorder recorder = ui.PictureRecorder();\n    final ui.Canvas canvas = ui.Canvas(recorder);\n\n    // Fill the canvas with a white background\n    final ui.Paint paintBackground = ui.Paint()\n      ..color = const ui.Color(0xFFFFFFFF);\n    canvas.drawRect(ui.Rect.fromLTWH(0, 0, width.toDouble(), height.toDouble()),\n        paintBackground);\n\n    // If there's an image, draw it\n    if (img != null) {\n      final size = Size(width.toDouble(), height.toDouble());\n      paintImage(canvas: canvas, image: img, size: size);\n    }\n\n    // Draw the lines with a black paint\n    final ui.Paint paintLines = ui.Paint()\n      ..color = const ui.Color(0xFF000000)\n      ..strokeWidth = 2.0;\n\n    for (int i = 0; i < points.length - 1; i++) {\n      if (points[i] != null && points[i + 1] != null) {\n        canvas.drawLine(points[i]!, points[i + 1]!, paintLines);\n      }\n    }\n\n    // Convert the canvas into a Picture\n    final ui.Picture picture = recorder.endRecording();\n\n    // Then convert the Picture into an Image\n    final ui.Image image = await picture.toImage(width, height);\n\n    // Encode the image to a ByteData as a PNG\n    final ByteData? byteData =\n        await image.toByteData(format: ui.ImageByteFormat.png);\n    final Uint8List pngBytes = byteData!.buffer.asUint8List();\n\n    // Finally, encode the PNG bytes as a base64 string\n    final String base64String = base64Encode(pngBytes);\n\n    return base64String;\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/utils_stub.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'dart:ui' as ui;\n\nclass UtilsPlatform {\n  static Future<void> downloadImage(String url, String description) async {\n    throw UnsupportedError('downloadImage is not supported on this platform.');\n  }\n\n  static Future<dynamic> pickImage() async {\n    throw UnsupportedError('pickImage is not supported on this platform.');\n  }\n\n  static Future<dynamic> startFilePicker() async {\n    throw UnsupportedError(\n        'startFilePicker is not supported on this platform.');\n  }\n\n  static Future<void> initializeState(dynamic f) async {\n    throw UnsupportedError(\n        'initializeState is not supported on this platform.');\n  }\n\n  static Future<void> recordVoice(String lang) async {\n    throw UnsupportedError(\n        'initializeState is not supported on this platform.');\n  }\n\n  static Future<String> convertToBase64JpegWeb(\n      List<Offset?> points, ui.Image? image, int width, int height) async {\n    throw UnsupportedError(\n        'convertToBase64JpegWeb is not supported on this platform.');\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/utils/utils_web.dart",
    "content": "import 'dart:async';\nimport 'dart:convert';\nimport 'dart:typed_data';\nimport 'dart:ui' as ui;\nimport 'dart:html' as html;\nimport 'dart:math' as math;\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\n\n// Uncomment the next line to compile the web version\nimport 'package:js/js.dart';\n\n// Uncomment the next block to compile the web version\n\n@JS()\nexternal int rv(String lang);\n\n/// Allows assigning a function to be callable from `window.functionName()`\n@JS('vr')\nexternal set _vr(void Function(dynamic) f);\n\n/// Allows calling the assigned function from Dart as well.\n@JS()\nexternal void vr(text);\n\nclass UtilsPlatform {\n  static Future<html.ImageElement> convertUiImageToHtmlImage(\n      ui.Image image) async {\n    final byteData = await image.toByteData(format: ui.ImageByteFormat.png);\n\n    if (byteData == null) {\n      throw Exception('Failed to convert ui.Image to ByteData');\n    }\n\n    final Uint8List uint8list = byteData.buffer.asUint8List();\n    final base64Str = base64Encode(uint8list);\n    final imgElement = html.ImageElement();\n    imgElement.src = 'data:image/png;base64,$base64Str';\n    return imgElement;\n  }\n\n  static Future<Uint8List> convertHtmlImageToUint8List(\n      html.ImageElement imageElement) async {\n    final response = await html.HttpRequest.request(\n      imageElement.src!,\n      method: \"GET\",\n      responseType: \"arraybuffer\",\n    );\n\n    return Uint8List.view(response.response as ByteBuffer);\n  }\n\n  static Future<void> drawImageOnCanvas(html.CanvasRenderingContext2D ctx,\n      ui.Image image, double canvasWidth, double canvasHeight) async {\n    Completer<void> completer = Completer<void>();\n\n    final imgElement = await convertUiImageToHtmlImage(image);\n\n    imgElement.onLoad.listen((event) {\n      // Calculate the scaling factor to maintain aspect ratio\n      double scaleX = canvasWidth / image.width;\n      double scaleY = canvasHeight / image.height;\n      double scale = math.min(scaleX, scaleY);\n\n      // Calculate the centered position\n      double centeredX = (canvasWidth - (image.width * scale)) / 2;\n      double centeredY = (canvasHeight - (image.height * scale)) / 2;\n\n      // Draw the image on the canvas with the correct scaling and centered\n      ctx.drawImageScaledFromSource(\n          imgElement,\n          0, // source x\n          0, // source y\n          image.width.toDouble(), // source width\n          image.height.toDouble(), // source height\n          centeredX, // destination x\n          centeredY, // destination y\n          image.width.toDouble() * scale, // destination width\n          image.height.toDouble() * scale // destination height\n          );\n      completer.complete();\n    });\n\n    return completer.future;\n  }\n\n  static Future<String> convertToBase64JpegWeb(\n      List<Offset?> points, ui.Image? image, int width, int height) async {\n    // Create a canvas element\n    final html.CanvasElement canvas =\n        html.CanvasElement(width: width, height: height);\n    final html.CanvasRenderingContext2D ctx = canvas.context2D;\n\n    // Set the drawing properties\n    ctx.fillStyle = 'white'; // Assuming a white background\n    ctx.fillRect(0, 0, width, height); // Fill the canvas with white color\n    ctx.strokeStyle = 'black';\n    ctx.lineWidth = 2;\n\n    if (image != null) {\n      await drawImageOnCanvas(ctx, image, width.toDouble(), height.toDouble());\n    }\n\n    // Draw the lines based on the points\n    ctx.beginPath();\n    for (int i = 0; i < points.length - 1; i++) {\n      if (points[i] != null && points[i + 1] != null) {\n        ctx.moveTo(points[i]!.dx, points[i]!.dy);\n        ctx.lineTo(points[i + 1]!.dx, points[i + 1]!.dy);\n      }\n    }\n    ctx.stroke();\n\n    // Convert the canvas content to JPEG format\n    final String dataUrl =\n        canvas.toDataUrl('image/jpeg', 0.9); // 0.9 is the quality\n\n    // Extract the base64 part of the data URL\n    final String base64String = dataUrl.split(',')[1];\n\n    return base64String;\n  }\n\n  static Future<void> downloadImage(String url, String description) async {\n    const windowFeatures =\n        'menubar=no,toolbar=no,status=no,resizable=yes,scrollbars=yes,width=600,height=400';\n    html.window.open(url, 'glowby-image-$description', windowFeatures);\n  }\n\n  static Future<void> initializeState(dynamic f) {\n    _vr = allowInterop(f);\n    return Future.value();\n  }\n\n  static Future<void> recordVoice(String lang) {\n    rv(lang);\n    return Future.value();\n  }\n\n  static Future<Uint8List> pickImage() async {\n    final uploadInput = html.FileUploadInputElement();\n    uploadInput.accept = 'image/*';\n    uploadInput.click();\n\n    await uploadInput.onChange.first;\n\n    final file = uploadInput.files!.first;\n    final reader = html.FileReader();\n    reader.readAsArrayBuffer(file);\n\n    await reader.onLoadEnd.first;\n\n    return Uint8List.fromList(reader.result as List<int>);\n  }\n\n  static Future<dynamic> startFilePicker() async {\n    Completer completer = Completer<dynamic>();\n    try {\n      html.FileUploadInputElement uploadInput = html.FileUploadInputElement();\n      uploadInput.multiple = false;\n      uploadInput.accept = '.glowbom';\n\n      uploadInput.onChange.listen((e) {\n        final files = uploadInput.files;\n        if (files != null && files.isNotEmpty) {\n          final file = files.first;\n          final reader = html.FileReader();\n\n          reader.onLoadEnd.listen((e) {\n            dynamic result = reader.result;\n            if (result is String) {\n              completer.complete(json.decode(result));\n            } else {\n              completer.complete(\n                  result); // Assuming result is already in the correct format\n            }\n          });\n\n          reader.readAsText(file);\n        } else {\n          completer.complete(null);\n        }\n      });\n\n      uploadInput.click();\n    } catch (e) {\n      if (kDebugMode) {\n        print('Error: $e'); // Log the exception\n      } // Log the exception\n      completer.completeError(e);\n    }\n\n    return completer.future;\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/dialogs/ai_error_dialog.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:glowby/utils/utils.dart';\n\nclass AiErrorDialog extends StatefulWidget {\n  const AiErrorDialog({super.key});\n\n  @override\n  AiErrorDialogState createState() => AiErrorDialogState();\n}\n\nclass AiErrorDialogState extends State<AiErrorDialog> {\n  @override\n  void initState() {\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return AlertDialog(\n      title: const Text('Something went wrong!'),\n      content: SizedBox(\n        width: 340, // Set the max width of the AlertDialog\n        child: SingleChildScrollView(\n          child: ListBody(\n            children: <Widget>[\n              const Text(\n                  'Make sure you have access to the latest models. For API accounts created after August 18, 2023, you can get instant access to the latest models after purchasing \\$0.50 worth or more of pre-paid credits.'),\n              InkWell(\n                child: const Text(\n                  '→ More details',\n                  style: TextStyle(color: Colors.blue),\n                ),\n                onTap: () => Utils.launchURL(\n                    'https://help.openai.com/en/articles/8555510-gpt-4-turbo'),\n              ),\n              const SizedBox(height: 10),\n            ],\n          ),\n        ),\n      ),\n      actions: [\n        TextButton(\n          child: const Text('Ok'),\n          onPressed: () {\n            Navigator.pop(context);\n          },\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/dialogs/ai_settings_dialog.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:glowby/views/screens/global_settings.dart';\nimport 'package:glowby/services/hugging_face_api.dart';\nimport 'package:glowby/services/pulze_ai_api.dart';\nimport 'package:glowby/services/openai_api.dart';\nimport 'package:glowby/utils/text_to_speech.dart';\nimport 'package:glowby/utils/utils.dart';\n\nclass AiSettingsDialog extends StatefulWidget {\n  final Function(bool) onVoiceEnabledChanged;\n\n  const AiSettingsDialog({super.key, required this.onVoiceEnabledChanged});\n\n  @override\n  AiSettingsDialogState createState() => AiSettingsDialogState();\n}\n\nclass AiSettingsDialogState extends State<AiSettingsDialog> {\n  bool _isHuggingFaceSelected = false;\n  bool _isPulzeSelected = false;\n  bool _sendMessageHistory = false;\n\n  final TextEditingController _systemPromptController = TextEditingController();\n  final TextEditingController _systemPromptHuggingFaceController =\n      TextEditingController();\n  final TextEditingController _modelIdController = TextEditingController();\n  final TextEditingController _pulzeModelIdController = TextEditingController();\n  final TextEditingController _templateController = TextEditingController();\n\n  Widget _buildAutonomousModeCheckbox() {\n    if (GlobalSettings().selectedPrompt == 'Complex Task Prompt') {\n      return CheckboxListTile(\n        title: const Text('Autonomous Mode (Experimental)'),\n        value: GlobalSettings().autonomousMode,\n        onChanged: (bool? value) {\n          setState(() {\n            GlobalSettings().autonomousMode = value!;\n          });\n        },\n      );\n    }\n    return const SizedBox.shrink();\n  }\n\n  List<DropdownMenuItem<String>> buildLanguageDropdownItems() {\n    Set<String> uniqueLanguageCodes =\n        Set<String>.from(TextToSpeech.languageCodes.values);\n    return uniqueLanguageCodes\n        .map((code) => DropdownMenuItem<String>(\n              value: code,\n              child: Text(TextToSpeech.languageCodes.entries\n                  .firstWhere((entry) => entry.value == code)\n                  .key),\n            ))\n        .toList();\n  }\n\n  List<DropdownMenuItem<String>> buildPromptDropdownItems() {\n    return GlobalSettings()\n        .prompts\n        .map((prompt) => DropdownMenuItem<String>(\n              value: prompt['name'],\n              child: Text(prompt['name']!),\n            ))\n        .toList();\n  }\n\n  void _promptChanged(String? value) {\n    if (value != null) {\n      GlobalSettings().selectedPrompt = value;\n      Map<String, dynamic> selectedPromptMap = GlobalSettings()\n          .prompts\n          .firstWhere((prompt) => prompt['name'] == value,\n              orElse: () =>\n                  {'name': value, 'description': ''} // Provide a default map\n              );\n\n      GlobalSettings().systemPrompt = selectedPromptMap['description'] ?? '';\n      _systemPromptController.text = GlobalSettings().systemPrompt;\n      GlobalSettings().autonomousMode = false;\n    }\n  }\n\n  @override\n  void initState() {\n    super.initState();\n    GlobalSettings().selectedModel = OpenAiApi.model;\n    _systemPromptController.text = GlobalSettings().systemPrompt;\n    _isHuggingFaceSelected = GlobalSettings().selectedModel == 'huggingface';\n    _isPulzeSelected = GlobalSettings().selectedModel == 'pulzeai';\n    _modelIdController.text = HuggingFaceApi.model();\n    _pulzeModelIdController.text = PulzeAiApi.model();\n    _templateController.text = HuggingFaceApi.template();\n    GlobalSettings().systemHuggingFacePrompt = HuggingFaceApi.systemMessage();\n    _sendMessageHistory = HuggingFaceApi.sendMessages();\n    _systemPromptHuggingFaceController.text =\n        GlobalSettings().systemHuggingFacePrompt;\n  }\n\n  void _saveOpenAISettings() {\n    OpenAiApi.setModel(GlobalSettings().selectedModel);\n    OpenAiApi.setSystemPrompt(GlobalSettings().systemPrompt);\n    OpenAiApi.setSelectedLanguage(GlobalSettings().selectedLanguage);\n  }\n\n  void _saveHuggingFaceSettings() {\n    PulzeAiApi.setModel(_pulzeModelIdController.text);\n    HuggingFaceApi.setModel(_modelIdController.text);\n    HuggingFaceApi.setTemplate(_templateController.text);\n    HuggingFaceApi.setSendMessages(_sendMessageHistory);\n    HuggingFaceApi.setSystemMessage(GlobalSettings().systemHuggingFacePrompt);\n  }\n\n  void _saveSettings(BuildContext context) {\n    _saveOpenAISettings();\n    _saveHuggingFaceSettings();\n\n    // Save the system prompt to use with API calls\n    Navigator.pop(context); // Hide the dialog\n\n    ScaffoldMessenger.of(context).showSnackBar(\n      const SnackBar(content: Text('AI Settings saved successfully!')),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    if (HuggingFaceApi.oat() == '' &&\n        GlobalSettings().selectedModel == 'huggingface') {\n      OpenAiApi.setModel(GlobalSettings().selectedModel);\n      setState(() {\n        _isHuggingFaceSelected = false;\n        _isPulzeSelected = false;\n        //_isGPT4Selected = false;\n        GlobalSettings().selectedModel = 'gpt-4o';\n      });\n    }\n    return AlertDialog(\n      title: const Text('AI Settings'),\n      content: SizedBox(\n        width: 340, // Set the max width of the AlertDialog\n        child: SingleChildScrollView(\n          child: ListBody(\n            children: <Widget>[\n              const Text('Choose AI Model or Provider:'),\n              DropdownButton<String>(\n                value: GlobalSettings().selectedModel,\n                items: [\n                  const DropdownMenuItem<String>(\n                    value: 'gpt-4o',\n                    child: Text('GPT-4o (Recommended)'),\n                  ),\n                  const DropdownMenuItem<String>(\n                    value: 'gpt-4',\n                    child: Text('GPT-4'),\n                  ),\n                  const DropdownMenuItem<String>(\n                    value: 'gpt-3.5-turbo',\n                    child: Text('GPT-3.5'),\n                  ),\n                  if (HuggingFaceApi.oat() != '')\n                    const DropdownMenuItem<String>(\n                      value: 'huggingface',\n                      child: Text('Hugging Face (Experimental)'),\n                    ),\n                  if (PulzeAiApi.oat() != '')\n                    const DropdownMenuItem<String>(\n                      value: 'pulzeai',\n                      child: Text('Pulze'),\n                    ),\n                  /*DropdownMenuItem<String>(\n                    value: 'gpt-4-32k',\n                    child: Text('GPT-4-32k (Advanced, Limited Beta)'),\n                  ),*/\n                  // uncomment the following lines to enable an extended 32,000 token context-length model gpt-4-32k\n                ],\n                onChanged: (value) {\n                  setState(() {\n                    GlobalSettings().selectedModel = value!;\n                    _isHuggingFaceSelected = value == 'huggingface';\n                    _isPulzeSelected = value == 'pulzeai';\n                  });\n                },\n              ),\n              const SizedBox(height: 10),\n              if (_isPulzeSelected)\n                Column(\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: <Widget>[\n                    const SizedBox(height: 10),\n                    const Text('Model ID:'),\n                    const SizedBox(height: 6),\n                    InkWell(\n                      child: const Text(\n                        '→ Browse available models',\n                        style: TextStyle(color: Colors.blue),\n                      ),\n                      onTap: () =>\n                          Utils.launchURL('https://platform.pulze.ai/models'),\n                    ),\n                    TextField(\n                      controller:\n                          _pulzeModelIdController, // Use TextEditingController to retrieve user input\n                      decoration: const InputDecoration(\n                        labelText: 'Model ID',\n                      ),\n                      onChanged: (value) {\n                        // Update your modelId variable here\n                      },\n                    ),\n                  ],\n                ),\n              if (_isHuggingFaceSelected)\n                Column(\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: <Widget>[\n                    const SizedBox(height: 10),\n                    const Text('Hugging Face Model ID:'),\n                    const SizedBox(height: 6),\n                    InkWell(\n                      child: const Text(\n                        '→ Browse available models',\n                        style: TextStyle(color: Colors.blue),\n                      ),\n                      onTap: () => Utils.launchURL(\n                          'https://huggingface.co/models?pipeline_tag=text2text-generation&sort=downloads'),\n                    ),\n                    TextField(\n                      controller:\n                          _modelIdController, // Use TextEditingController to retrieve user input\n                      decoration: const InputDecoration(\n                        labelText: 'Model ID',\n                      ),\n                      onChanged: (value) {\n                        // Update your modelId variable here\n                      },\n                    ),\n                    const SizedBox(height: 10),\n                    const Text('Response Format'),\n                    TextField(\n                      controller:\n                          _templateController, // Use TextEditingController to retrieve user input\n                      maxLines: 5,\n                      decoration: const InputDecoration(\n                        labelText: 'Template (*** is the response)',\n                      ),\n                      onChanged: (value) {\n                        // Update your template variable here\n                      },\n                    ),\n                  ],\n                ),\n              const SizedBox(height: 10),\n              if (!_isHuggingFaceSelected) const Text('System Prompt:'),\n              if (!_isHuggingFaceSelected)\n                if (!_isHuggingFaceSelected)\n                  DropdownButton<String>(\n                    value: GlobalSettings().selectedPrompt,\n                    items: buildPromptDropdownItems(),\n                    onChanged: (value) {\n                      setState(() {\n                        _promptChanged(value);\n                      });\n                    },\n                  ),\n              if (!_isHuggingFaceSelected) _buildAutonomousModeCheckbox(),\n              if (!_isHuggingFaceSelected)\n                TextField(\n                  controller: _systemPromptController,\n                  maxLines: 3,\n                  decoration: const InputDecoration(\n                    labelText: 'Enter system prompt',\n                  ),\n                  onChanged: (value) {\n                    GlobalSettings().systemPrompt = value;\n                  },\n                ),\n              /*if (_isHuggingFaceSelected) Text('System Message:'),\n              if (_isHuggingFaceSelected)\n                TextField(\n                  controller: _systemPromptHuggingFaceController,\n                  maxLines: 3,\n                  decoration: InputDecoration(\n                    labelText: 'Enter system message',\n                  ),\n                  onChanged: (value) {\n                    _systemHuggingFacePrompt = value;\n                  },\n                ),\n              if (_isHuggingFaceSelected)\n                CheckboxListTile(\n                  title: Text('Send message history'),\n                  value: _sendMessageHistory,\n                  onChanged: (bool? value) {\n                    setState(() {\n                      _sendMessageHistory = value!;\n                    });\n                  },\n                ),\n              if (_isHuggingFaceSelected) Divider(),\n              if (_isHuggingFaceSelected) Text('Voice Settings:'),\n              if (_isHuggingFaceSelected) SizedBox(height: 10),*/\n              CheckboxListTile(\n                title: const Text('Enable voice'),\n                value: GlobalSettings().voiceEnabled,\n                onChanged: (bool? value) {\n                  setState(() {\n                    GlobalSettings().voiceEnabled = value!;\n                  });\n                  widget.onVoiceEnabledChanged(value!);\n                },\n              ),\n              Padding(\n                padding: const EdgeInsets.only(left: 12, right: 20),\n                child: SizedBox(\n                  width: 220, // Width adjusted to match expanding triangle\n                  child: DropdownButton<String>(\n                    isExpanded: true,\n                    value: GlobalSettings().selectedLanguage,\n                    items: buildLanguageDropdownItems(),\n                    onChanged: (value) {\n                      setState(() {\n                        GlobalSettings().languageChanged(value);\n                      });\n                    },\n                  ),\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n      actions: [\n        TextButton(\n          child: const Text('Cancel'),\n          onPressed: () {\n            Navigator.pop(context);\n          },\n        ),\n        ElevatedButton(\n          child: const Text(\n            'Save Settings',\n            style: TextStyle(color: Colors.white),\n          ),\n          onPressed: () => _saveSettings(context),\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/dialogs/api_key_dialog.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:glowby/services/openai_api.dart';\nimport 'package:glowby/utils/utils.dart';\n\nimport '../../services/hugging_face_api.dart';\nimport '../../services/pulze_ai_api.dart';\n\nclass ApiKeyDialog extends StatefulWidget {\n  const ApiKeyDialog({super.key});\n\n  @override\n  ApiKeyDialogState createState() => ApiKeyDialogState();\n}\n\nclass ApiKeyDialogState extends State<ApiKeyDialog> {\n  static const openAIKeyPattern = r'^sk-[A-Za-z0-9-_]+$';\n  static const huggingFaceKeyPattern = r'^[A-Za-z0-9-_]+$';\n  static const pulzeAIKeyPattern = r'^sk-[A-Za-z0-9-_]+$';\n\n  final _apiKeyController = TextEditingController();\n  final _huggingFaceTokenController = TextEditingController();\n  final _pulzeAiController = TextEditingController();\n  String _apiKey = '';\n  String _huggingFaceToken = '';\n  String _pulzeAiToken = '';\n\n  @override\n  void initState() {\n    super.initState();\n\n    OpenAiApi.loadOat().then((_) {\n      setState(() {\n        _apiKey = OpenAiApi.oat();\n        _apiKeyController.text = _apiKey;\n        _huggingFaceToken = HuggingFaceApi.oat();\n        _huggingFaceTokenController.text = _huggingFaceToken;\n        _pulzeAiToken = PulzeAiApi.oat();\n        _pulzeAiController.text = _pulzeAiToken;\n      });\n    });\n  }\n\n  bool isValidOpenAIKey(String key) => RegExp(openAIKeyPattern).hasMatch(key);\n\n  bool isValidHuggingFaceKey(String key) =>\n      RegExp(huggingFaceKeyPattern).hasMatch(key);\n\n  bool isValidPuzzleAIKey(String key) =>\n      RegExp(pulzeAIKeyPattern).hasMatch(key);\n\n  void _saveApiKey(BuildContext context) {\n    String? errorMessage;\n\n    if (_apiKey.isNotEmpty && !isValidOpenAIKey(_apiKey)) {\n      errorMessage = 'OpenAI API Key is invalid!';\n    } else if (_huggingFaceToken.isNotEmpty &&\n        !isValidHuggingFaceKey(_huggingFaceToken)) {\n      errorMessage = 'Hugging Face Token is invalid!';\n    } else if (_pulzeAiToken.isNotEmpty && !isValidPuzzleAIKey(_pulzeAiToken)) {\n      errorMessage = 'Pulze API Key is invalid!';\n    }\n\n    if (errorMessage != null) {\n      // If there's an error, show the error message and exit the function after popping the dialog.\n      Navigator.pop(context); // Hide the dialog\n      ScaffoldMessenger.of(context).showSnackBar(\n        SnackBar(content: Text(errorMessage)),\n      );\n    } else {\n      // If all keys are valid, set them and show a success message.\n      OpenAiApi.setOat(_apiKey);\n      HuggingFaceApi.setOat(_huggingFaceToken);\n      PulzeAiApi.setOat(_pulzeAiToken);\n      Navigator.pop(context); // Hide the dialog\n      ScaffoldMessenger.of(context).showSnackBar(\n        const SnackBar(content: Text('API Keys saved successfully!')),\n      );\n    }\n  }\n\n  bool _obscureApiKey = true;\n  bool _obscureApiKeyPulze = true;\n  bool _obscureApiKeyHuggingFace = true;\n\n  @override\n  Widget build(BuildContext context) {\n    return AlertDialog(\n      title: const Text('Enter OpenAI API Key'),\n      content: SizedBox(\n        width: 340, // Set the max width of the AlertDialog\n        child: SingleChildScrollView(\n          child: ListBody(\n            children: <Widget>[\n              const Text('Get your API key:'),\n              InkWell(\n                child: const Text(\n                  '→ OpenAI Dashboard',\n                  style: TextStyle(color: Colors.blue),\n                ),\n                onTap: () => Utils.launchURL(\n                    'https://platform.openai.com/account/api-keys'),\n              ),\n              const SizedBox(height: 10),\n              const Text('API Key is stored locally and not shared.'),\n              TextField(\n                controller: _apiKeyController,\n                obscureText: _obscureApiKey,\n                decoration: InputDecoration(\n                  labelText: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n                  suffixIcon: IconButton(\n                    icon: Icon(\n                      // Change the icon based on whether the text is obscured\n                      _obscureApiKey ? Icons.visibility_off : Icons.visibility,\n                    ),\n                    onPressed: () {\n                      // Update the state to toggle the obscure text value\n                      setState(() {\n                        _obscureApiKey = !_obscureApiKey;\n                      });\n                    },\n                  ),\n                ),\n                onChanged: (value) {\n                  setState(() {\n                    _apiKey = value;\n                  });\n                },\n              ),\n              const SizedBox(height: 20),\n              InkWell(\n                child: const Text(\n                  'API Key not working? Click Here.',\n                  style: TextStyle(color: Colors.blue),\n                ),\n                onTap: () => Utils.launchURL(\n                    'https://platform.openai.com/account/billing/overview'),\n              ),\n              const Text('Make sure you have enough OpenAI credits.'),\n              const SizedBox(height: 10),\n              const Divider(),\n              ExpansionTile(\n                title: const Text(\n                  'Pulze',\n                  style: TextStyle(fontWeight: FontWeight.bold),\n                ),\n                children: <Widget>[\n                  Align(\n                    alignment: Alignment.centerLeft,\n                    child: Column(\n                      crossAxisAlignment: CrossAxisAlignment.start,\n                      children: [\n                        const SizedBox(height: 10),\n                        const Text('Get your Access Token:'),\n                        InkWell(\n                          child: const Text(\n                            '→ Pulze Dashboard',\n                            style: TextStyle(color: Colors.blue),\n                          ),\n                          onTap: () =>\n                              Utils.launchURL('https://platform.pulze.ai/'),\n                        ),\n                        const SizedBox(height: 10),\n                        const Text('Enter your Pulze Token:'),\n                        TextField(\n                          controller: _pulzeAiController,\n                          obscureText: _obscureApiKeyPulze,\n                          decoration: InputDecoration(\n                            labelText: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n                            suffixIcon: IconButton(\n                              icon: Icon(\n                                // Change the icon based on whether the text is obscured\n                                _obscureApiKeyPulze\n                                    ? Icons.visibility_off\n                                    : Icons.visibility,\n                              ),\n                              onPressed: () {\n                                // Update the state to toggle the obscure text value\n                                setState(() {\n                                  _obscureApiKeyPulze = !_obscureApiKeyPulze;\n                                });\n                              },\n                            ),\n                          ),\n                          onChanged: (value) {\n                            setState(() {\n                              _pulzeAiToken = value;\n                            });\n                          },\n                        ),\n                        const SizedBox(height: 20),\n                      ],\n                    ),\n                  ),\n                ],\n              ),\n              const SizedBox(height: 10),\n              const Divider(),\n              const SizedBox(height: 10),\n              ExpansionTile(\n                title: const Text(\n                  '🤗 Hosted Inference API',\n                  style: TextStyle(fontWeight: FontWeight.bold),\n                ),\n                children: <Widget>[\n                  Align(\n                    alignment: Alignment.centerLeft,\n                    child: Column(\n                      crossAxisAlignment: CrossAxisAlignment.start,\n                      children: [\n                        const SizedBox(height: 10),\n                        const Text('Get your Access Token:'),\n                        InkWell(\n                          child: const Text(\n                            '→ Hugging Face Dashboard',\n                            style: TextStyle(color: Colors.blue),\n                          ),\n                          onTap: () => Utils.launchURL(\n                              'https://huggingface.co/settings/tokens'),\n                        ),\n                        const SizedBox(height: 10),\n                        const Text('Enter your Hugging Face Token:'),\n                        TextField(\n                          controller: _huggingFaceTokenController,\n                          obscureText: _obscureApiKeyHuggingFace,\n                          decoration: InputDecoration(\n                            labelText: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n                            suffixIcon: IconButton(\n                              icon: Icon(\n                                // Change the icon based on whether the text is obscured\n                                _obscureApiKeyHuggingFace\n                                    ? Icons.visibility_off\n                                    : Icons.visibility,\n                              ),\n                              onPressed: () {\n                                // Update the state to toggle the obscure text value\n                                setState(() {\n                                  _obscureApiKeyHuggingFace =\n                                      !_obscureApiKeyHuggingFace;\n                                });\n                              },\n                            ),\n                          ),\n                          onChanged: (value) {\n                            setState(() {\n                              _huggingFaceToken = value;\n                            });\n                          },\n                        ),\n                        const SizedBox(height: 20),\n                      ],\n                    ),\n                  ),\n                ],\n              ),\n            ],\n          ),\n        ),\n      ),\n      actions: [\n        TextButton(\n          child: const Text('Clear'),\n          onPressed: () {\n            setState(() {\n              _apiKeyController.clear();\n              _apiKey = '';\n              _huggingFaceTokenController.clear();\n              _huggingFaceToken = '';\n              _pulzeAiController.clear();\n              _pulzeAiToken = '';\n            });\n          },\n        ),\n        TextButton(\n          child: const Text('Cancel'),\n          onPressed: () {\n            Navigator.pop(context);\n          },\n        ),\n        ElevatedButton(\n          child: const Text(\n            'Save API Key',\n            style: TextStyle(color: Colors.white),\n          ),\n          onPressed: () => _saveApiKey(context),\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/html/html_view_screen.dart",
    "content": "// This file conditionally exports the appropriate implementation.\nexport 'html_view_screen_interface.dart';\nexport 'html_view_screen_stub.dart'\n    if (dart.library.html) 'html_view_screen_web.dart'\n    if (dart.library.io) 'html_view_screen_desktop.dart';\n"
  },
  {
    "path": "legacy/app/lib/views/html/html_view_screen_desktop.dart",
    "content": "// html_view_screen_stub.dart\n// import 'dart:async';\nimport 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:flutter_highlight/flutter_highlight.dart';\nimport 'package:flutter_highlight/themes/github.dart';\nimport 'package:glowby/views/html/html_view_screen_interface.dart';\nimport 'package:glowby/views/html/html_view_screen_mobile.dart';\nimport 'package:path_provider/path_provider.dart';\nimport 'package:url_launcher/url_launcher_string.dart';\nimport 'package:flutter/foundation.dart';\n\nclass HtmlViewScreen extends StatelessWidget\n    implements HtmlViewScreenInterface {\n  final String htmlContent;\n  final String appName;\n\n  const HtmlViewScreen(\n      {super.key, required this.htmlContent, required this.appName});\n\n  void _openCodeInBrowser(context) async {\n    if (Platform.isIOS) {\n      Navigator.push(\n        context,\n        MaterialPageRoute(\n          builder: (context) => HtmlViewScreenMobile(\n            htmlContent: htmlContent,\n            appName: appName,\n          ),\n        ),\n      );\n    } else {\n      // Use default implementation\n      final tempDir = await getTemporaryDirectory();\n      final tempFile = File('${tempDir.path}/temp.html');\n      await tempFile.writeAsString(htmlContent, flush: true);\n\n      final url = tempFile.uri.toString();\n      if (await canLaunchUrlString(url)) {\n        await launchUrlString(url);\n      } else {\n        if (kDebugMode) {\n          print(\"Can't launch $url\");\n        }\n      }\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    /*WidgetsBinding.instance.addPostFrameCallback((_) {\n      Timer(Duration(seconds: 2), () => _openCodeInBrowser(context));\n    });*/\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Placeholder for $appName'),\n      ),\n      body: Container(\n        alignment: Alignment.center,\n        child: SingleChildScrollView(\n          // Makes the content scrollable\n          padding: const EdgeInsets.all(16), // Adds padding around the edges\n          child: Column(\n            mainAxisAlignment: MainAxisAlignment.center,\n            children: [\n              TextButton(\n                onPressed: () => _openCodeInBrowser(context),\n                child: const Text('Run'),\n              ),\n              TextButton(\n                onPressed: () async {\n                  await Clipboard.setData(ClipboardData(text: htmlContent));\n                },\n                child: const Text('Download code'),\n              ),\n              const SizedBox(height: 20),\n              // Code viewer for HTML content\n              HighlightView(\n                htmlContent,\n                language: 'html',\n                theme: githubTheme, // Choose the theme you like\n                padding: const EdgeInsets.all(\n                    12), // Adds padding inside the code viewer\n                textStyle:\n                    const TextStyle(fontFamily: 'monospace', fontSize: 10.0),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/html/html_view_screen_interface.dart",
    "content": "import 'package:flutter/material.dart';\n\nabstract class HtmlViewScreenInterface {\n  Widget build(BuildContext context);\n}\n"
  },
  {
    "path": "legacy/app/lib/views/html/html_view_screen_mobile.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:webview_flutter/webview_flutter.dart';\n\nclass HtmlViewScreenMobile extends StatefulWidget {\n  final String htmlContent;\n  final String appName;\n\n  const HtmlViewScreenMobile(\n      {super.key, required this.htmlContent, required this.appName});\n\n  @override\n  HtmlViewScreenState createState() => HtmlViewScreenState();\n}\n\nclass HtmlViewScreenState extends State<HtmlViewScreenMobile> {\n  late final WebViewController _controller;\n\n  @override\n  void initState() {\n    _controller = WebViewController()\n      ..setJavaScriptMode(JavaScriptMode.unrestricted)\n      ..loadHtmlString(widget.htmlContent);\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Placeholder for ${widget.appName}'),\n      ),\n      body: WebViewWidget(controller: _controller),\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/html/html_view_screen_stub.dart",
    "content": "// html_view_screen_stub.dart\nimport 'package:flutter/material.dart';\n\nclass HtmlViewScreen extends StatelessWidget {\n  final String htmlContent;\n  final String appName;\n\n  const HtmlViewScreen({super.key, required this.htmlContent, required this.appName});\n\n  @override\n  Widget build(BuildContext context) {\n    // For desktop, return an alternative widget or a placeholder\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Placeholder for $appName'),\n      ),\n      body: const Center(\n        child: Text('HTML content is not viewable in the desktop application.'),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/html/html_view_screen_web.dart",
    "content": "import 'dart:html';\nimport 'dart:html' as html;\nimport 'dart:ui_web' as ui;\nimport 'package:flutter/material.dart';\nimport 'package:glowby/views/html/html_view_screen_interface.dart';\n\nclass HtmlViewScreen extends StatelessWidget\n    implements HtmlViewScreenInterface {\n  final String htmlContent;\n  final String appName;\n\n  const HtmlViewScreen({super.key, required this.htmlContent, required this.appName});\n\n  @override\n  Widget build(BuildContext context) {\n    // Generate a unique key based on the html content.\n    String contentKey = DateTime.now().millisecondsSinceEpoch.toString();\n\n    // Registers the web view with a unique key\n    ui.platformViewRegistry.registerViewFactory(\n      contentKey,\n      (int viewId) {\n        IFrameElement iframeElement = IFrameElement()\n          ..style.border = 'none'\n          ..style.height = '100%'\n          ..style.width = '100%'\n          ..srcdoc = htmlContent;\n        return iframeElement;\n      },\n    );\n\n    // Function to download the content\n    void downloadContent() {\n      final blob = html.Blob([htmlContent]);\n      final url = html.Url.createObjectUrlFromBlob(blob);\n      // ignore: unused_local_variable\n      final anchor = html.AnchorElement(href: url)\n        ..setAttribute(\"download\", \"$appName.html\")\n        ..click();\n      html.Url.revokeObjectUrl(url);\n    }\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(appName),\n        actions: [\n          IconButton(\n            icon: const Icon(Icons.download, color: Colors.black),\n            onPressed: downloadContent, // Trigger the download\n            tooltip: 'Download Code',\n          ),\n        ],\n      ),\n      body: HtmlElementView(\n        key: ValueKey(contentKey), // Use the unique key for the HtmlElementView\n        viewType: contentKey,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/screens/chat_screen.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:glowby/views/screens/global_settings.dart';\nimport 'package:url_launcher/url_launcher_string.dart';\nimport 'package:glowby/views/widgets/tasks_view.dart';\n\nimport '../../models/ai.dart';\nimport '../dialogs/ai_settings_dialog.dart';\nimport 'magical_loading_view.dart';\nimport '../widgets/message.dart';\nimport '../widgets/new_message.dart';\nimport '../widgets/messages.dart';\nimport '../../services/openai_api.dart';\nimport '../../utils/text_to_speech.dart'; // Import the new TextToSpeech class\nimport '../dialogs/api_key_dialog.dart';\nimport '../../utils/timestamp.dart'; // Import the ApiKeyDialog widget\nimport 'package:async/async.dart';\nimport 'package:flutter/foundation.dart';\n\nclass ChatScreen extends StatefulWidget {\n  final List<Map<String, Object>> _questions;\n  final String _name;\n  final bool _voice;\n  final String? _selectedModel;\n  final String? _selectedLanguage;\n  final String? _systemPrompt;\n  final bool? _allowEnterKey;\n  final bool? _autonomousMode;\n  final bool? _enableAi;\n  final bool? _showAiSettings;\n  final bool? _dnsgs;\n\n  const ChatScreen(\n      this._name,\n      this._questions,\n      this._voice,\n      this._selectedModel,\n      this._selectedLanguage,\n      this._systemPrompt,\n      this._allowEnterKey,\n      this._autonomousMode,\n      this._enableAi,\n      this._showAiSettings,\n      this._dnsgs,\n      {super.key});\n\n  @override\n  ChatScreenState createState() => ChatScreenState();\n}\n\nclass ChatScreenState extends State<ChatScreen> {\n  var _autonomousMode = false;\n  bool _loading = false;\n  bool _voiceEnabled = true;\n  void updateVoiceEnabled(bool value) {\n    setState(() {\n      _voiceEnabled = value;\n    });\n  }\n\n  final TextToSpeech textToSpeech = TextToSpeech(); // Initialize TextToSpeech\n\n  final List<Message> _messages = [];\n\n  @override\n  void initState() {\n    super.initState();\n    initializeVoiceEnabled();\n    loadGlobalSettings();\n    loadAPIKey();\n  }\n\n  void initializeVoiceEnabled() {\n    _voiceEnabled = widget._voice;\n  }\n\n  void loadGlobalSettings() {\n    GlobalSettings().loadDialogValues(\n      widget._selectedModel,\n      widget._selectedLanguage,\n      widget._systemPrompt,\n      widget._autonomousMode,\n    );\n  }\n\n  void loadAPIKey() {\n    OpenAiApi.loadOat().then((_) => setState(() {}));\n  }\n\n  // Refresh the UI state of the chat screen\n  void refreshUI() {\n    setState(() {});\n  }\n\n// Handle text-to-speech functionality independently\n  void handleTextToSpeech() {\n    if (widget._voice && _voiceEnabled) {\n      try {\n        if (_messages.isNotEmpty &&\n            _messages[0].userId == '007' &&\n            !_planImplementationInProgress) {\n          textToSpeech.speakText(_messages[0].text,\n              language: GlobalSettings().selectedLanguage);\n        }\n      } catch (e) {\n        if (kDebugMode) {\n          print('Error in text-to-speech: $e');\n        }\n      }\n    }\n  }\n\n  void refresh() {\n    handleTextToSpeech();\n    refreshUI();\n  }\n\n  void _showApiKeyDialog() {\n    showDialog(\n      context: context,\n      builder: (BuildContext context) {\n        return const ApiKeyDialog(); // Use the ApiKeyDialog widget\n      },\n    ).then(\n      (value) => setState(() {}),\n    );\n  }\n\n  void _showAiSettingsDialog() {\n    showDialog(\n      context: context,\n      builder: (BuildContext context) {\n        return AiSettingsDialog(\n          onVoiceEnabledChanged: updateVoiceEnabled,\n        );\n      },\n    );\n  }\n\n  String extractPlanName(String response, String inputMessage) {\n    RegExp inputMessagePattern = RegExp(\n        r\"(?:I want to|I'd like to|I'd love to|I wanna|let's|I desire to) (.+)\",\n        caseSensitive: false);\n    RegExpMatch? inputMatch = inputMessagePattern.firstMatch(inputMessage);\n\n    if (inputMatch != null && inputMatch.groupCount > 0) {\n      return inputMatch.group(1)!;\n    } else {\n      RegExp planNamePattern = RegExp(\n          r\"Here's a (?:\\d+-step|five-step) plan(?: to| for)?(?: break)?(?:ing)?(?: it)?(?: down)?(?: into)? ([^:]+):\");\n      RegExpMatch? match = planNamePattern.firstMatch(response);\n\n      if (match != null && match.groupCount > 0) {\n        return match.group(1)!;\n      } else {\n        return 'Unnamed Plan';\n      }\n    }\n  }\n\n  CancelableOperation<String>? _currentOperation;\n\n  Future<List<String>> _generateTasks(String inputMessage) async {\n    if (inputMessage != '') {\n      _lastInputMessage = inputMessage;\n    }\n\n    if (_lastInputMessage == '') {\n      return [];\n    }\n\n    setState(() {\n      _loading = true;\n    });\n\n    List<String> tasks = [];\n\n    try {\n      _currentOperation = OpenAiApi.getResponseFromOpenAI(_lastInputMessage,\n          customSystemPrompt:\n              'You are Glowby, an AI assistant designed to break down complex tasks into a manageable 5-step plan. The steps should be concise.');\n\n      String response = await _currentOperation!.value;\n\n      if (response ==\n          'Sorry, there was an error processing your request. Please try again later.') {\n        _stopAutonomousMode();\n        Future.delayed(const Duration(microseconds: 200), () {\n          setState(() {\n            _autonomousMode = false;\n          });\n        });\n\n        textToSpeech.speakText(\n            'Sorry, there was an error processing your request. Please try again later.');\n        return [];\n      }\n\n      //print('response: $response');\n      _planName = extractPlanName(response, _lastInputMessage);\n\n      RegExp stepPattern =\n          RegExp(r'(?:Step\\s*\\d+\\s*:|^\\d+\\.)', multiLine: true);\n      Iterable<RegExpMatch> matches = stepPattern.allMatches(response);\n\n      int startIndex = 0;\n      for (RegExpMatch match in matches) {\n        int endIndex = match.start;\n        if (startIndex != 0) {\n          tasks.add(response.substring(startIndex, endIndex).trim());\n        }\n\n        startIndex = endIndex;\n        String? nextMatch = match.group(0);\n        if (nextMatch != null) {\n          startIndex = endIndex + nextMatch.length;\n        }\n      }\n\n      tasks.add(response.substring(startIndex).trim());\n    } catch (e) {\n      if (kDebugMode) {\n        print('Error getting tasks: $e');\n      }\n    }\n\n    setState(() {\n      _loading = false;\n    });\n\n    if (tasks.length < 2) {\n      _stopAutonomousMode();\n      Future.delayed(const Duration(microseconds: 200), () {\n        setState(() {\n          _autonomousMode = false;\n        });\n      });\n\n      textToSpeech\n          .speakText('No plan detected! Please input a different message.');\n      return [];\n    }\n\n    if (_planName == 'Unnamed Plan') {\n      textToSpeech.speakText('You plan is ready',\n          language: GlobalSettings().selectedLanguage);\n    } else {\n      textToSpeech.speakText('You plan to $_planName is ready',\n          language: GlobalSettings().selectedLanguage);\n    }\n\n    return tasks;\n  }\n\n  String _lastInputMessage = '';\n  String _planName = 'Unnamed Plan';\n  List<String> _tasks = [];\n  bool _planImplementationInProgress = false;\n  bool _stopRequested = false;\n\n  Future<void> _implementPlan() async {\n    _stopRequested = false;\n    _planImplementationInProgress = true;\n    // Send initial message to start working on the plan\n    String initialMessage = \"Let's work on $_planName. First: ${_tasks[0]}\";\n    await _sendMessageOnBehalfOfUser(initialMessage,\n        customSystemPrompt:\n            'You are Glowby, an AI assistant. The user has enabled the auto mode, which allows you to make choices on their behalf. Help the user with the following task and choose only one option, providing a concise action. Your answer should be short and informative. For example, if the task is to book accommodations in Dublin. Please provide a specific hotel name and location that you think the user should book:');\n\n    // Send messages for the rest of the tasks\n    for (int i = 1; i < _tasks.length; i++) {\n      if (_stopRequested) {\n        _stopRequested = false;\n        break;\n      }\n      await textToSpeech.speakText('Moving on to the next task.',\n          language: GlobalSettings().selectedLanguage);\n      String taskMessage = \"Moving on to the next task. ${_tasks[i]}\";\n      await _sendMessageOnBehalfOfUser(taskMessage,\n          customSystemPrompt:\n              'You are Glowby, an AI assistant. The user has enabled the auto mode, which allows you to make choices on their behalf. Help the user with the following task and choose only one option, providing a concise action. Your answer should be short and informative. For example, if the task is to book accommodations in Dublin. Please provide a specific hotel name and location that you think the user should book:');\n    }\n\n    if (!_stopRequested) {\n      // Send the summary message and add a Copy button\n      await _sendMessageOnBehalfOfUser('Summarizing...',\n          customSystemPrompt:\n              'You are Glowby, an AI assistant. The user has enabled the auto mode, and you have followed your suggested concise actions for each task in the plan. Help the user summarize the plan, and provide all info from previous messages but in a shorter but still informative form. ',\n          lastMessage: true);\n    }\n  }\n\n  void insertMessage(String message, String userId, String username) {\n    _messages.insert(\n        0,\n        Message(\n          text: message,\n          createdAt: Timestamp.now(),\n          userId: userId,\n          username: username,\n        ));\n  }\n\n  Future<String> fetchResponseFromAPI(\n      String message, String? customSystemPrompt) async {\n    List<Map<String, String?>> formattedPreviousMessages = _messages\n        .map((message) => {\n              'role': message.userId == Ai.defaultUserId ? 'assistant' : 'user',\n              'content': message.text\n            })\n        .toList()\n        .reversed\n        .toList();\n\n    _currentOperation = OpenAiApi.getResponseFromOpenAI(\n      message,\n      previousMessages: formattedPreviousMessages,\n      customSystemPrompt: customSystemPrompt,\n    );\n\n    return await _currentOperation!.value;\n  }\n\n  Future<void> _sendMessageOnBehalfOfUser(\n    String message, {\n    String? customSystemPrompt,\n    bool lastMessage = false,\n  }) async {\n    insertMessage(message, GlobalSettings().userId,\n        GlobalSettings().userName); // Insert user's message\n    refresh(); // Refresh UI\n\n    String response = await fetchResponseFromAPI(message, customSystemPrompt);\n\n    insertMessage(response, '007',\n        widget._name == '' ? 'AI' : widget._name); // Insert AI's response\n\n    // Update the UI\n    if (lastMessage) {\n      _planImplementationInProgress = false;\n    }\n    refresh();\n    if (!lastMessage) {\n      await textToSpeech.speakText(response,\n          language: GlobalSettings().selectedLanguage);\n    }\n  }\n\n  // Inside your _ChatScreenState class\n\n  void setLoading(bool value) {\n    setState(() {\n      _loading = value;\n    });\n  }\n\n  void setStopRequested(bool value) {\n    setState(() {\n      _stopRequested = value;\n    });\n  }\n\n  void setAutonomousMode(bool value) {\n    setState(() {\n      _autonomousMode = value;\n    });\n  }\n\n  void setPlanImplementationInProgress(bool value) {\n    setState(() {\n      _planImplementationInProgress = value;\n    });\n  }\n\n  void cancelCurrentOperation() {\n    if (_currentOperation != null) {\n      _currentOperation!.cancel();\n      _currentOperation = null; // Set to null after canceling\n    }\n  }\n\n  void _stopAutonomousMode() {\n    setLoading(false);\n    setStopRequested(true);\n    setAutonomousMode(false);\n    setPlanImplementationInProgress(false);\n    cancelCurrentOperation();\n  }\n\n  void _showSocialLinksDialog() {\n    showDialog(\n      context: context,\n      builder: (BuildContext context) {\n        return AlertDialog(\n          title: const Text('Share Glowby'),\n          content: SingleChildScrollView(\n            child: ListBody(\n              children: _buildLinkItems(context),\n            ),\n          ),\n          actions: <Widget>[\n            TextButton(\n              child: const Text('Close'),\n              onPressed: () => Navigator.of(context).pop(),\n            ),\n          ],\n        );\n      },\n    );\n  }\n\n  List<Widget> _buildLinkItems(BuildContext context) {\n    final links = [\n      {\n        'title': 'App Store',\n        'url': 'https://apps.apple.com/us/app/glowby-genius/id6446417094'\n      },\n      {'title': 'Glowby GPT', 'url': 'https://glowbom.com/glowby/gpt'},\n      {\n        'title': 'Draw-to-code Demo',\n        'url': 'https://twitter.com/jacobilin/status/1751365686344155250'\n      },\n      {'title': 'Website (glowbom.com)', 'url': 'https://glowbom.com/'},\n      {'title': 'Twitter: @jacobilin', 'url': 'https://twitter.com/jacobilin'},\n      {\n        'title': 'Twitter: @GlowbomCorp',\n        'url': 'https://twitter.com/GlowbomCorp'\n      },\n      {\n        'title': 'YouTube Channel',\n        'url': 'https://www.youtube.com/channel/UCrYQEQPhAHmn7N8W58nNwOw'\n      },\n      {\n        'title': 'GitHub Repository',\n        'url': 'https://github.com/glowbom/glowby'\n      },\n    ];\n\n    return links\n        .map((link) => _buildLinkItem(link['title']!, link['url']!, context))\n        .toList();\n  }\n\n  Widget _buildLinkItem(String text, String url, BuildContext context) {\n    return Row(\n      children: [\n        Expanded(\n          child: GestureDetector(\n            child: Text(\n              text,\n              style: const TextStyle(\n                color:\n                    Colors.black, // Change this color to match your app's theme\n                decoration: TextDecoration.underline,\n              ),\n            ),\n            onTap: () async {\n              if (await canLaunchUrlString(url)) {\n                await launchUrlString(url);\n              } else {\n                throw 'Could not launch $url';\n              }\n              if (mounted) {\n                Navigator.of(context).pop();\n              }\n            },\n          ),\n        ),\n        IconButton(\n          icon: const Icon(Icons.copy),\n          onPressed: () {\n            Clipboard.setData(ClipboardData(text: url)).then((value) {\n              // Show a snackbar or toast indicating the link was copied\n              ScaffoldMessenger.of(context).showSnackBar(\n                const SnackBar(\n                  content: Text('Link copied to clipboard!'),\n                ),\n              );\n              Navigator.of(context).pop();\n            });\n          },\n        ),\n      ],\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Center(\n      child: Container(\n        constraints: const BoxConstraints(minWidth: 100, maxWidth: 640),\n        child: Column(\n          children: <Widget>[\n            _loading\n                ? const MagicalLoadingView()\n                : Expanded(\n                    child: Container(\n                      child: _autonomousMode\n                          ? TasksView(\n                              tasks: _tasks,\n                              name: _planName,\n                              onBackButtonPressed: () {\n                                setState(() {\n                                  _autonomousMode = false;\n                                });\n                              },\n                              onRequestNewPlanButtonPressed: () async {\n                                List<String> tasks =\n                                    await _generateTasks(_lastInputMessage);\n                                setState(() {\n                                  _autonomousMode = true;\n                                  _tasks = tasks;\n                                });\n                              },\n                              onImplementPlanButtonPressed: () {\n                                setState(() {\n                                  _autonomousMode = false;\n                                });\n\n                                _implementPlan();\n                              },\n                            )\n                          : Messages(_messages),\n                    ),\n                  ),\n            if (!_autonomousMode && !_loading && !_planImplementationInProgress)\n              NewMessage(\n                refresh,\n                _messages,\n                widget._questions,\n                widget._name,\n                widget._enableAi,\n                onAutonomousModeMessage: (String userInput) async {\n                  List<String> tasks = await _generateTasks(userInput);\n                  setState(() {\n                    _autonomousMode = true;\n                    _tasks = tasks;\n                  });\n                },\n              ),\n            if (!_autonomousMode && !_loading && !_planImplementationInProgress)\n              Container(\n                margin: const EdgeInsets.all(8),\n                child: Row(\n                  mainAxisAlignment: MainAxisAlignment.center,\n                  children: <Widget>[\n                    // Add the Social Links button\n                    if (widget._dnsgs! == false)\n                      Padding(\n                        padding: const EdgeInsets.only(left: 8.0),\n                        child: IconButton(\n                          icon: const Icon(Icons.share),\n                          onPressed: _showSocialLinksDialog,\n                        ),\n                      ),\n                    if (widget._allowEnterKey != null && widget._allowEnterKey!)\n                      ElevatedButton(\n                        onPressed: _showApiKeyDialog,\n                        child: const Text(\n                          'Enter API Key',\n                          style: TextStyle(color: Colors.white),\n                        ),\n                      ),\n                    // Add the AI Settings button conditionally\n                    if (OpenAiApi.oat().isNotEmpty)\n                      if (widget._showAiSettings != null &&\n                          widget._showAiSettings!)\n                        Padding(\n                          padding: const EdgeInsets.only(left: 8.0),\n                          child: ElevatedButton(\n                            onPressed: _showAiSettingsDialog,\n                            child: const Text(\n                              'AI Settings',\n                              style: TextStyle(color: Colors.white),\n                            ),\n                          ),\n                        ),\n                    Padding(\n                      padding: const EdgeInsets.only(left: 8.0),\n                      child: ElevatedButton(\n                        onPressed: () async {\n                          String url =\n                              'https://apps.apple.com/us/app/glowby-genius/id6446417094';\n                          if (await canLaunchUrlString(url)) {\n                            await launchUrlString(url);\n                          } else {\n                            throw 'Could not launch $url';\n                          }\n                        },\n                        child: const Text(\n                          'App Store',\n                          style: TextStyle(color: Colors.white),\n                        ),\n                      ),\n                    ),\n                    Padding(\n                      padding: const EdgeInsets.only(left: 8.0),\n                      child: ElevatedButton(\n                        onPressed: () async {\n                          String url = 'https://glowbom.com/glowby/gpt';\n                          if (await canLaunchUrlString(url)) {\n                            await launchUrlString(url);\n                          } else {\n                            throw 'Could not launch $url';\n                          }\n                        },\n                        child: const Text(\n                          'GPT',\n                          style: TextStyle(color: Colors.white),\n                        ),\n                      ),\n                    ),\n                  ],\n                ),\n              ),\n            if (_planImplementationInProgress)\n              const SizedBox(\n                height: 50,\n                child: Center(\n                  child: Text(\n                    'Implementing plan...',\n                    style: TextStyle(\n                      color: Colors.black,\n                      fontSize: 20,\n                    ),\n                  ),\n                ),\n              ),\n            if (_planImplementationInProgress)\n              const CircularProgressIndicator(),\n            const SizedBox(height: 20),\n            // Add the Stop button when plan implementation is in progress\n            if (_loading || _planImplementationInProgress)\n              Padding(\n                padding: const EdgeInsets.only(left: 8.0),\n                child: IconButton(\n                  icon: const Icon(Icons.stop),\n                  onPressed: _stopAutonomousMode,\n                  tooltip: 'Stop',\n                  color: Colors.black, // Set the color of the stop icon to red\n                ),\n              ),\n\n            const SizedBox(height: 20),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/screens/global_settings.dart",
    "content": "import 'package:glowby/services/hugging_face_api.dart';\nimport 'package:glowby/services/openai_api.dart';\n\nclass GlobalSettings {\n  static final GlobalSettings _instance = GlobalSettings._internal();\n\n  String userId = 'Me';\n  String userName = 'Me';\n\n  bool voiceEnabled = true;\n  String selectedLanguage = OpenAiApi.selectedLanguage;\n  bool autonomousMode = false;\n  String selectedModel = OpenAiApi.model;\n  String systemPrompt = OpenAiApi.systemPrompt;\n  String selectedPrompt = 'Simple Assistant Prompt';\n  String systemHuggingFacePrompt = HuggingFaceApi.systemMessage();\n\n  factory GlobalSettings() {\n    return _instance;\n  }\n\n  GlobalSettings._internal();\n\n  void languageChanged(String? value) {\n    if (value != null) {\n      selectedLanguage = value;\n    }\n  }\n\n  static const String storyPrompt =\n      \"\"\"AI crafts immersive, choice-driven adventures.\n\nStarting point: You perform a captivating dance, enchanting the goblins that swarm the Golden Gate Bridge. A fairy chuckles, \"Impressive moves! A centipede must have taught you - they're always on their feet!\" Using your magic, you banish the goblins and restore peace to the bridge. Your next decision awaits:\n\n1. Venture into Chinatown.\n2. Explore Fisherman's Wharf.\n3. Investigate Alcatraz Island.\n4. Enjoy a cable car ride.\n\nHuman: You choose \"Investigate Alcatraz Island.\" Direction \"A ranger tasks you with finding the wizard Glowby in SF, providing a map and advice.\"\n\nAI: Continuing the adventure: While at Alcatraz, a friendly ranger approaches you. She reveals that you've been chosen for a special mission - locating a mysterious wizard named Glowby, hidden somewhere in San Francisco. She hands you a map and offers some helpful advice. Your options are:\n\n1. Follow the map closely.\n2. Ask for more details.\n3. Search for additional clues.\n4. Decline the mission.\n\nHuman: You choose \"Search for additional clues.\" Direction \"A diary found at Alcatraz hints at Glowby's location in Nob Hill.\"\n\nAI: As you investigate Alcatraz for clues, you discover an ancient diary. Its pages hint that Glowby might be hiding in Nob Hill. Considering this new information, you have the following choices:\n\n1. Return to the city.\n2. Talk to locals.\n3. Look for more evidence.\n4. Head directly to Nob Hill.\n\nHuman: You decide to \"Head directly to Nob Hill.\" Direction \"Arrive at grand Nob Hill, search for Glowby among Victorian mansions and luxury hotels.\"\n\nAI: Upon arrival, the grandeur of the historic neighborhood greets you. The search for Glowby carries on as you navigate the hilly streets, lined with Victorian mansions and luxury hotels. Your options are:\n\n1. Explore a mysterious alley.\n2. Visit a local cafe.\n3. Consult a street magician.\n4. Knock on a mansion door.\n\nHuman: You choose \"Visit a local cafe.\" Direction \"You meet an intriguing character.\"\n\nAI: You step into a charming cafe and encounter an intriguing character at the counter. They greet you with a friendly smile and claim to know all about Glowby. Your choices now are:\n\n1. Ask for directions.\n2. Request more information about Glowby.\n3. Offer a reward for help.\n4. Ignore them and leave. \n\nHuman: You choose anything you like. Direction comes from the next message. One think the story should be short and should have 4 actions only. As AI you return only one part at time. You skip \"AI: \" and start with the story part.\n\"\"\";\n\n  List<Map<String, String>> prompts = [\n    {\n      'name': 'Complex Task Prompt',\n      'description':\n          'You are Glowby, an AI assistant designed to break down complex tasks into a manageable 5-step plan. For each step, you offer the user 3 options to choose from. Once the user selects an option, you proceed to the next step based on their choice. After the user has chosen an option for the fifth step, you provide them with a customized, actionable plan based on their previous responses. You only reveal the current step and options to ensure an engaging, interactive experience.',\n    },\n    {\n      'name': 'Multilingual Translations',\n      'description':\n          'You are Glowby, an AI language helper who can provide translations of common phrases in different languages. When asked, you provide translations for any phrase or word in various languages. You should randomly choose only 4 languges (Strictly 4!) from the following langs English Spanish, Arabic,  Portuguese, Bulgarian, French, Chinese (Simplified), Chinese (Traditional), Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew (Israel), Hungarian, Indonesian, Italian, Japanese, Korean, Mexican Spanish, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Swedish, Thai, Turkish, Ukrainian, and Vietnamese. You strictly follow this format for each translation: “Nubmer. Language Name: Word of Phrase” for example: “1. Russian: Привет”— no language codes please, no transliteration please, just a number, language name and a requested phrase. ONLY the phrase in the original alphabet, NO! transliteration please.',\n    },\n    {\n      'name': 'Brainstorming Prompt',\n      'description':\n          'Generate ideas with Glowby! As a super helpful, nice, and humorous AI assistant, Glowby is ready to provide you with a concise plan and assist in executing it. With Glowby by your side, you\\'ll never feel stuck again. Let\\'s get brainstorming!',\n    },\n    {\n      'name': 'Simple Assistant Prompt',\n      'description':\n          'You are Glowby, super helpful, nice, and humorous AI assistant ready to help with anything. I like to joke around.',\n    },\n    {\n      'name': 'Creative Writing Prompt',\n      'description':\n          'You are Glowby, a talented AI writer who helps users craft engaging and imaginative stories. Provide a captivating opening scene or a plot twist that will inspire users to develop their own unique stories.',\n    },\n    {\n      'name': 'Problem Solving Prompt',\n      'description':\n          'You are Glowby, a resourceful AI assistant skilled in finding solutions to various problems. Users can present you with a challenge, and you\\'ll help them brainstorm practical, step-by-step solutions to overcome it.',\n    },\n    {\n      'name': 'Learning and Education Prompt',\n      'description':\n          'You are Glowby, an AI tutor who assists users with their learning needs. Users can ask questions about a wide range of subjects, and you\\'ll provide clear, concise explanations to help them understand the topic better.',\n    },\n    {\n      'name': 'Career and Job Advice Prompt',\n      'description':\n          'You are Glowby, an AI career coach who offers guidance on job-related matters. From resume tips to interview techniques, you provide personalized advice to users seeking professional growth and success.',\n    },\n    {\n      'name': 'Daily Motivation Prompt',\n      'description':\n          'You are Glowby, an AI life coach who delivers daily doses of inspiration and motivation. Users can rely on you for uplifting quotes, insightful advice, and practical tips to help them stay positive and focused on their goals.',\n    },\n    {\n      'name': 'Interactive Adventure Prompt',\n      'description': storyPrompt,\n    },\n    {\n      'name': 'Habit Formation',\n      'description':\n          'Act as a dual PhD in sports psychology and neuroscience. Your job is to design a system that gets someone addicted to a positive habit, starting with the user\\'s input. Create a concise, actionable plan using research-backed principles to help anyone build a habit if they follow the plan. Incorporate research such as BF Skinner\\'s study of addiction, BJ Fogg\\'s Behavioral Model, and similar research on addiction and compulsion. Be concise yet informative. Give a concise day-by-day plan for the first week. Your response should be fewer than 10 sentences.',\n    },\n    {\n      'name': 'Stand-up Comedy Prompt',\n      'description':\n          'You are Glowby, a hilarious AI stand-up comedian, skilled in creating funny conversations that become popular on social media platforms like Reels. Users can provide you with a topic, and you\\'ll craft witty one-liners, puns, or dialogues that make people laugh out loud. Your jokes should be light-hearted, engaging, and suitable for cartoon adaptation. Let\\'s get the laughs rolling!'\n    },\n  ];\n\n  void selectPrompt(String userInput) {\n    for (var prompt in prompts) {\n      if (prompt['description'] == userInput) {\n        selectedPrompt = prompt['name']!;\n        break;\n      }\n    }\n  }\n\n  void loadDialogValues(selectedModelInput, selectedLanguageInput,\n      systemPromptInput, autonomousModeInput) {\n    selectedPrompt = 'Simple Assistant Prompt';\n    selectedModel = OpenAiApi.model;\n    systemPrompt = OpenAiApi.systemPrompt;\n    selectedLanguage = OpenAiApi.selectedLanguage;\n    autonomousMode = false;\n\n    if (selectedModelInput != null && selectedModelInput != '') {\n      selectedModel = selectedModelInput;\n    }\n\n    if (selectedLanguageInput != null && selectedLanguageInput != '') {\n      selectedLanguage = selectedLanguageInput;\n    }\n\n    if (systemPromptInput != null && systemPromptInput != '') {\n      systemPrompt = systemPromptInput;\n      selectPrompt(systemPromptInput);\n    }\n\n    if (autonomousModeInput != null) {\n      autonomousMode = autonomousModeInput;\n    }\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/screens/magical_loading_view.dart",
    "content": "import 'dart:math';\nimport 'package:flutter/material.dart';\n\nclass MagicalLoadingView extends StatefulWidget {\n  const MagicalLoadingView({super.key});\n\n  @override\n  MagicalLoadingViewState createState() => MagicalLoadingViewState();\n}\n\nclass MagicalLoadingViewState extends State<MagicalLoadingView>\n    with SingleTickerProviderStateMixin {\n  late AnimationController _controller;\n  final Random _random = Random();\n\n  String getRandomMessage() {\n    int index = _random.nextInt(loadingMessages.length);\n    return loadingMessages[index];\n  }\n\n  @override\n  void initState() {\n    super.initState();\n    _controller = AnimationController(\n      duration: const Duration(seconds: 2),\n      vsync: this,\n    )..repeat();\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Expanded(\n      child: Center(\n        child: Stack(\n          alignment: Alignment.center,\n          children: [\n            AnimatedBuilder(\n              animation: _controller,\n              builder: (context, child) {\n                return CustomPaint(\n                  painter: _MagicalLoadingPainter(_controller.value),\n                  child: const SizedBox(\n                    width: 280,\n                    height: 280,\n                  ),\n                );\n              },\n            ),\n            Positioned(\n              bottom: 0,\n              child: SizedBox(\n                width: 280, // Adjust this value according to your preference\n                child: Text(\n                  getRandomMessage(),\n                  textAlign: TextAlign.center,\n                  maxLines:\n                      2, // You can increase this value to accommodate more lines\n                  overflow: TextOverflow.ellipsis,\n                  style: const TextStyle(\n                    fontSize: 16,\n                    fontStyle: FontStyle.italic,\n                    color: Colors.black,\n                  ),\n                ),\n              ),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass _MagicalLoadingPainter extends CustomPainter {\n  final double progress;\n  _MagicalLoadingPainter(this.progress);\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    final Paint circlePaint = Paint()\n      ..style = PaintingStyle.stroke\n      ..strokeWidth = 4\n      ..color = Colors.black.withOpacity(\n          0.5 + 0.5 * sin(2 * pi * progress)); // Set the color directly\n\n    final centerX = size.width / 2;\n    final centerY = size.height / 2;\n    final radius = min(size.width, size.height) / 4;\n    final outerRadius = radius * (1 + 0.3 * sin(2 * pi * progress));\n\n    canvas.drawCircle(Offset(centerX, centerY), radius, circlePaint);\n    canvas.drawCircle(Offset(centerX, centerY), outerRadius, circlePaint);\n  }\n\n  @override\n  bool shouldRepaint(covariant _MagicalLoadingPainter oldDelegate) {\n    return oldDelegate.progress != progress;\n  }\n}\n\nList<String> loadingMessages = [\n  'Generating magical plans...',\n  'Talking to planning masterminds...',\n  'Breaking down complex tasks...',\n  'Creating a manageable plan...',\n  'Assembling steps for success...',\n  'Crafting an achievable roadmap...',\n  'Designing your path to victory...',\n  'Simplifying your journey...',\n  'Unlocking the secrets of success...',\n  'Structuring the plan of action...',\n  'Organizing steps for clarity...',\n  'Outlining a clear strategy...',\n  'Dividing and conquering tasks...',\n  'Weaving a plan for triumph...',\n  'Mapping your way to accomplishment...',\n  'Carving your route to achievement...',\n  'Gathering insights for planning...',\n  'Turning chaos into order...',\n  'Constructing your plan of attack...',\n  'Laying the foundation for success...',\n  'Distilling the essence of victory...',\n  'Collating the blueprint for progress...',\n  'Forging a pathway to triumph...',\n  'Envisioning a successful future...',\n  'Formulating a winning strategy...',\n];\n"
  },
  {
    "path": "legacy/app/lib/views/screens/talk_screen.dart",
    "content": "import 'dart:convert';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:glowby/services/openai_api.dart';\nimport 'package:glowby/services/pulze_ai_api.dart';\nimport 'package:glowby/utils/utils.dart';\nimport '../../utils/color_utils.dart';\nimport 'chat_screen.dart';\n\nimport '../../services/hugging_face_api.dart';\n\ndynamic _content;\n\nclass TalkState extends State<Talk> {\n  var _appScreen = 'Loading';\n\n  String? _title;\n  String? _mainColor;\n  bool? _voice = false;\n  List<Map<String, Object>> _questions = [];\n  String? _selectedModel;\n  String? _selectedLanguage;\n  String? _systemPrompt;\n  bool? _allowEnterKey;\n  bool? _allowDataImport;\n  bool? _autonomousMode;\n  bool? _enableAi;\n  bool? _showAiSettings;\n  bool? _dnsgs;\n\n  TalkState();\n\n  Future<dynamic> loadContentFromAssets() async {\n    String data =\n        await DefaultAssetBundle.of(context).loadString(\"assets/talk.glowbom\");\n    return json.decode(data);\n  }\n\n  Future<void> loadAPIKeys() async {\n    await OpenAiApi.loadOat();\n    await HuggingFaceApi.loadOat();\n    await PulzeAiApi.loadOat();\n  }\n\n  @override\n  void initState() {\n    super.initState();\n    resetApiKeys();\n    loadApiKeysAndInitializeState();\n  }\n\n  void resetApiKeys() {\n    OpenAiApi.resetOat();\n    HuggingFaceApi.resetOat();\n    PulzeAiApi.resetOat();\n  }\n\n  void loadApiKeysAndInitializeState() {\n    loadAPIKeys().then((value) => initializeTalkState());\n  }\n\n  void initializeTalkState() {\n    if (_content != null) {\n      _questions = buildQuestions(_content['questions']);\n      _title = _content['title'];\n      _mainColor = _content['main_color'] ?? 'Blue';\n      _voice = _content['voice'] ?? false;\n      _selectedModel = _content['ai_selected_model'];\n      _selectedLanguage = _content['ai_selected_language'];\n      _systemPrompt = _content['ai_system_prompt'];\n      _allowEnterKey = _content['ai_allow_enter_key'] ?? true;\n      _allowDataImport = _content['ai_allow_data_import'] ?? true;\n      _autonomousMode = _content['ai_autonomous_mode'] ?? false;\n      _enableAi = _content['ai_enable_ai'] ?? true;\n      _showAiSettings = _content['ai_show_ai_settings'] ?? true;\n\n      _pressed100();\n    } else {\n      loadContentFromAssets().then((value) => setState(() {\n            _content = value;\n            _title = _content['title'];\n            _mainColor = _content['main_color'] ?? 'Blue';\n            _voice = _content['voice'] ?? false;\n            _selectedModel = _content['ai_selected_model'];\n            _selectedLanguage = _content['ai_selected_language'];\n            _systemPrompt = _content['ai_system_prompt'];\n            _allowEnterKey = _content['ai_allow_enter_key'] ?? true;\n            _allowDataImport = _content['ai_allow_data_import'] ?? true;\n            _autonomousMode = _content['ai_autonomous_mode'] ?? false;\n            _enableAi = _content['ai_enable_ai'] ?? true;\n            _showAiSettings = _content['ai_show_ai_settings'] ?? true;\n\n            _questions = buildQuestions(_content['questions']);\n            _pressed100();\n          }));\n    }\n  }\n\n  List<Map<String, Object>> buildQuestions(List<dynamic> questionsData) {\n    List<Map<String, Object>> questions =\n        List<Map<String, Object>>.empty(growable: true);\n    for (int i = 0; i < questionsData.length; i++) {\n      dynamic item = questionsData[i];\n      Map<String, Object> question = {\n        \"title\": item['title'].toString(),\n        \"description\": item['description'].toString(),\n        \"buttonsTexts\": List<String>.from(item['buttonsTexts']),\n        \"buttonAnswers\": List<int>.from(item['buttonAnswers']),\n        \"answersCount\": item['answersCount'],\n        \"goIndexes\": List<int>.from(item['goIndexes']),\n        \"answerPicture\": item['answerPicture'].toString(),\n        \"answerPictureDelay\": item['answerPictureDelay'],\n        \"goConditions\": [],\n        \"heroValues\": [],\n        \"picturesSpriteNames\": [\"\", \"\", \"\", \"\", \"\", \"\"]\n      };\n      questions.add(question);\n    }\n    return questions;\n  }\n\n  void _pressed100() {\n    _dnsgs = _content != null && _content.containsKey('dnsgs')\n        ? _content['dnsgs']\n        : false;\n\n    if (_dnsgs == true) {\n      setState(() {\n        _appScreen = 'Test100';\n      });\n    } else {\n      setState(() {\n        _appScreen = 'Glowbom';\n      });\n      Future.delayed(const Duration(milliseconds: 1500), () {\n        setState(() {\n          _appScreen = 'Test100';\n        });\n      });\n    }\n  }\n\n  void _startFilePicker() async {\n    Utils.startFilePicker().then((value) {\n      if (value != null) {\n        _content = value;\n        keyIndex.value += 1;\n      }\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      debugShowCheckedModeBanner: false,\n      title: 'Chat',\n      theme: ThemeData(\n        primaryColor: _mainColor == 'Green'\n            ? const Color.fromRGBO(85, 185, 158, 1)\n            : _mainColor == 'Blue'\n                ? Colors.blue\n                : _mainColor == 'Red'\n                    ? Colors.red\n                    : _mainColor == 'Black'\n                        ? Colors.black\n                        : Colors.grey,\n        useMaterial3: true,\n        elevatedButtonTheme: ElevatedButtonThemeData(\n          style: ButtonStyle(\n            backgroundColor: MaterialStateProperty.resolveWith<Color>(\n              (Set<MaterialState> states) {\n                if (states.contains(MaterialState.pressed)) {\n                  // Color when the button is pressed\n                  return Colors.purple;\n                }\n                // Default color\n                return _mainColor == 'Green'\n                    ? const Color.fromRGBO(85, 185, 158, 1)\n                    : _mainColor == 'Blue'\n                        ? Colors.blue\n                        : _mainColor == 'Red'\n                            ? Colors.red\n                            : _mainColor == 'Black'\n                                ? Colors.black\n                                : Colors.grey;\n              },\n            ),\n            // ... other button properties like foregroundColor for text color\n          ),\n        ),\n        inputDecorationTheme: InputDecorationTheme(\n          // Define the focused border with a black underline\n          focusedBorder: UnderlineInputBorder(\n            borderSide: BorderSide(\n                color: _mainColor == 'Green'\n                    ? const Color.fromRGBO(85, 185, 158, 1)\n                    : _mainColor == 'Blue'\n                        ? Colors.blue\n                        : _mainColor == 'Red'\n                            ? Colors.red\n                            : _mainColor == 'Black'\n                                ? Colors.black\n                                : Colors.grey),\n          ),\n          // Define the enabled border with a black underline\n          enabledBorder: UnderlineInputBorder(\n            borderSide: BorderSide(\n                color: _mainColor == 'Green'\n                    ? const Color.fromRGBO(85, 185, 158, 1)\n                    : _mainColor == 'Blue'\n                        ? Colors.blue\n                        : _mainColor == 'Red'\n                            ? Colors.red\n                            : _mainColor == 'Black'\n                                ? Colors.black\n                                : Colors.grey),\n          ),\n          // Defines the color of the label text when the TextField is focused or hovered\n          labelStyle: TextStyle(\n              color: _mainColor == 'Green'\n                  ? const Color.fromRGBO(85, 185, 158, 1)\n                  : _mainColor == 'Blue'\n                      ? Colors.blue\n                      : _mainColor == 'Red'\n                          ? Colors.red\n                          : _mainColor == 'Black'\n                              ? Colors.black\n                              : Colors.grey),\n          // You can also define the hover color if needed\n          // hoverColor: Colors.black,\n        ),\n        textSelectionTheme: const TextSelectionThemeData(\n          selectionColor: Colors.grey, // Change this to your desired color\n        ),\n        primarySwatch: generateMaterialColor(_mainColor == 'Green'\n            ? const Color.fromRGBO(85, 185, 158, 1)\n            : _mainColor == 'Blue'\n                ? Colors.blue\n                : _mainColor == 'Red'\n                    ? Colors.red\n                    : _mainColor == 'Black'\n                        ? Colors.black\n                        : Colors.grey),\n      ),\n      home: Scaffold(\n        appBar: AppBar(\n          title: Text(\n            _title != null ? _title! : 'Chat App',\n            style: TextStyle(\n              color: _mainColor == 'Green'\n                  ? const Color.fromRGBO(85, 185, 158, 1)\n                  : _mainColor == 'Blue'\n                      ? Colors.blue\n                      : _mainColor == 'Red'\n                          ? Colors.red\n                          : _mainColor == 'Black'\n                              ? Colors.black\n                              : Colors.grey,\n            ),\n          ),\n          centerTitle: true,\n          actions: [\n            if (_allowDataImport != null && _allowDataImport == true)\n              IconButton(\n                icon: Icon(\n                  Icons.file_upload,\n                  color: _mainColor == 'Green'\n                      ? const Color.fromRGBO(85, 185, 158, 1)\n                      : _mainColor == 'Blue'\n                          ? Colors.blue\n                          : _mainColor == 'Red'\n                              ? Colors.red\n                              : _mainColor == 'Black'\n                                  ? Colors.black\n                                  : Colors.grey,\n                ),\n                onPressed: _startFilePicker,\n              ),\n          ],\n        ),\n        body: _appScreen == 'Loading'\n            ? const Center(\n                child: Text('Loading...'),\n              )\n            : _appScreen == 'Glowbom'\n                ? const Center(\n                    child: Image(image: AssetImage('assets/glowbom.png')),\n                  )\n                : ChatScreen(\n                    _content != null && _content.containsKey('start_over')\n                        ? _content['start_over']\n                        : 'AI',\n                    _questions,\n                    _voice!,\n                    _selectedModel,\n                    _selectedLanguage,\n                    _systemPrompt,\n                    _allowEnterKey,\n                    _autonomousMode,\n                    _enableAi,\n                    _showAiSettings,\n                    _dnsgs,\n                  ),\n      ),\n    );\n  }\n}\n\nValueNotifier<int> keyIndex = ValueNotifier<int>(0);\n\n// A StatefulWidget that represents the main Talk widget.\nclass Talk extends StatefulWidget {\n  const Talk({super.key});\n\n  @override\n  State<StatefulWidget> createState() {\n    return TalkState();\n  }\n}\n\nclass TalkApp extends StatefulWidget {\n  const TalkApp({super.key});\n\n  @override\n  TalkAppState createState() => TalkAppState();\n}\n\nclass TalkAppState extends State<TalkApp> {\n  @override\n  void initState() {\n    super.initState();\n    keyIndex.addListener(() {\n      setState(() {});\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Talk(\n      key: Key(keyIndex.value.toString()),\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/widgets/message.dart",
    "content": "import '../../utils/timestamp.dart';\n\n/// A class representing a chat message with a text, timestamp, user ID, and optional username and link.\nclass Message {\n  /// The text content of the message.\n  final String text;\n\n  /// The timestamp when the message was created.\n  final Timestamp createdAt;\n\n  /// The user ID of the sender.\n  final String userId;\n\n  /// The username of the sender (optional).\n  final String? username;\n\n  /// A link associated with the message, if any.\n  final String? link;\n\n  Message({\n    required this.text,\n    required this.createdAt,\n    required this.userId,\n    this.username,\n    this.link,\n  });\n\n  @override\n  String toString() {\n    List<String> parts = [\n      'Message(text: $text',\n      'createdAt: $createdAt',\n      'userId: $userId',\n    ];\n\n    if (username != null) parts.add('username: $username');\n    if (link != null) parts.add('link: $link');\n\n    return '${parts.join(', ')})';\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/widgets/message_bubble.dart",
    "content": "import 'package:flutter/gestures.dart';\nimport 'package:flutter/material.dart';\nimport 'package:url_launcher/url_launcher.dart';\nimport 'package:flutter_highlight/flutter_highlight.dart';\nimport 'package:flutter_highlight/themes/github.dart';\nimport 'package:flutter/services.dart';\n\nclass MessageBubble extends StatelessWidget {\n  final String message;\n  final bool isMe;\n  final String? username;\n  final String? link;\n\n  const MessageBubble(this.message, this.username, this.isMe, this.link,\n      {super.key});\n\n  // Launches the link if it is valid\n  void _launchLink({String l = \"\"}) async {\n    final uri = Uri.parse(l == \"\" ? link! : l);\n    if (await canLaunchUrl(uri)) {\n      await launchUrl(uri);\n    } else {\n      throw Exception('Could not launch $link');\n    }\n  }\n\n  // Builds the message bubble container with the appropriate decoration\n  Container _buildMessageBubbleContainer(BuildContext context) {\n    return Container(\n      decoration: BoxDecoration(\n        // Different colors for sender and receiver\n        color: isMe ? Colors.grey[300] : Theme.of(context).primaryColor,\n        borderRadius: BorderRadius.only(\n          topLeft: const Radius.circular(12),\n          topRight: const Radius.circular(12),\n          bottomLeft: Radius.circular(isMe ? 12 : 0),\n          bottomRight: Radius.circular(isMe ? 0 : 12),\n        ),\n      ),\n      width: 280,\n      padding: const EdgeInsets.symmetric(\n        vertical: 10,\n        horizontal: 16,\n      ),\n      margin: const EdgeInsets.symmetric(\n        vertical: 4,\n        horizontal: 8,\n      ),\n      child: _buildMessageContent(context),\n    );\n  }\n\n  // Builds the message content, including the username, message, and link (if available)\n  // CrossAxisAlignment is determined based on the sender (isMe)\n  Column _buildMessageContent(BuildContext context) {\n    return Column(\n      crossAxisAlignment:\n          isMe ? CrossAxisAlignment.end : CrossAxisAlignment.start,\n      children: [\n        _buildUsernameText(context),\n        _buildMessageOrLink(context),\n      ],\n    );\n  }\n\n  // Builds the username text with bold font weight and appropriate color\n  Text _buildUsernameText(BuildContext context) {\n    return Text(\n      username!,\n      style: TextStyle(\n        fontWeight: FontWeight.bold,\n        color: isMe ? Colors.black : Colors.white70,\n      ),\n    );\n  }\n\n  // This method checks if the message indicates an image should be displayed.\n  // The message 'image' is a special keyword in our system that tells the app to render an image from the provided link.\n  // This convention is used to differentiate between messages that are text and ones that should display an image.\n  // The link is expected to be a direct URL to an image resource.\n  // If the link does not result in a valid image, the image widget will handle the error and may fall back to a placeholder or error widget.\n  Widget _buildMessageOrLink(BuildContext context) {\n    if (link == null) {\n      if (message.contains('```')) {\n        // Split the message by the code block\n        final parts = message.split('```');\n        final normalText = parts[0];\n        String codeBlock = parts.length > 1 ? parts[1] : '';\n        String language = 'plaintext';\n\n        // Check if there's a specified language\n        final codeParts = codeBlock.split('\\n');\n        if (codeParts.length > 1 && codeParts[0].trim().isNotEmpty) {\n          language = codeParts[0].trim(); // The first line is the language\n          codeBlock = codeParts.sublist(1).join('\\n'); // The rest is the code\n        }\n\n        return Column(\n          crossAxisAlignment:\n              isMe ? CrossAxisAlignment.end : CrossAxisAlignment.start,\n          children: [\n            // Display normal text as selectable\n            SelectableText(\n              normalText,\n              style: TextStyle(color: isMe ? Colors.black : Colors.white70),\n              textAlign: isMe ? TextAlign.end : TextAlign.start,\n            ),\n            // Display code block with syntax highlighting\n            if (codeBlock.isNotEmpty)\n              Container(\n                padding: const EdgeInsets.all(8.0),\n                color: Colors\n                    .grey[200], // Light grey background for the code block\n                child: Column(\n                  children: [\n                    HighlightView(\n                      codeBlock\n                          .trim(), // Trim the code block to remove leading/trailing whitespace\n                      language: language, // Specify the language\n                      theme:\n                          githubTheme, // Specify the theme for syntax highlighting\n                      textStyle: const TextStyle(\n                          fontFamily:\n                              'monospace'), // Optional: specify text style\n                    ),\n                    // Copy Code button\n                    TextButton(\n                      onPressed: () {\n                        Clipboard.setData(\n                            ClipboardData(text: codeBlock.trim()));\n                        // Optionally, show a snackbar or toast to indicate that the code has been copied\n                        ScaffoldMessenger.of(context).showSnackBar(\n                          const SnackBar(\n                              content: Text('Code copied to clipboard!')),\n                        );\n                      },\n                      child: const Text('Copy Code'),\n                    ),\n                  ],\n                ),\n              ),\n            // Display the rest of the message as selectable, if any\n            if (parts.length > 2)\n              SelectableText(\n                parts.sublist(2).join('```'),\n                style: TextStyle(color: isMe ? Colors.black : Colors.white70),\n                textAlign: isMe ? TextAlign.end : TextAlign.start,\n              ),\n          ],\n        );\n      } else {\n        return _buildMessageText(context);\n      }\n    } else if (message == 'image') {\n      return Image.network(\n        link!,\n        errorBuilder: (context, error, stackTrace) {\n          // Fallback for when the image fails to load\n          return _buildLinkButton(context);\n        },\n      );\n    } else {\n      return _buildLinkButton(context);\n    }\n  }\n\n  // Builds the message text with the appropriate color and alignment\n  Widget _buildMessageText(BuildContext context) {\n    // Split the message by '**' to identify bold sections\n    final parts = message.split('**');\n    List<TextSpan> spans = [];\n\n    // Regular expression to match URLs\n    final urlRegex = RegExp(r'https?:\\/\\/[^\\s)]+', caseSensitive: false);\n\n    // Iterate over the parts and apply bold style to every second element\n    for (int i = 0; i < parts.length; i++) {\n      final part = parts[i];\n      // Check if the part contains a URL\n      if (urlRegex.hasMatch(part)) {\n        final matches = urlRegex.allMatches(part);\n        int lastMatchEnd = 0;\n\n        for (var match in matches) {\n          // Add text before the URL\n          spans.add(TextSpan(\n            text: part.substring(lastMatchEnd, match.start),\n            style: TextStyle(\n              color: isMe ? Colors.black : Colors.white70,\n              fontWeight: i % 2 == 1 ? FontWeight.bold : FontWeight.normal,\n            ),\n          ));\n\n          // Add the URL with a link style and gesture recognizer\n          spans.add(TextSpan(\n            text: part.substring(match.start, match.end),\n            style: const TextStyle(\n              color: Colors.blue,\n              decoration: TextDecoration.underline,\n            ),\n            recognizer: TapGestureRecognizer()\n              ..onTap = () {\n                _launchLink(l: part.substring(match.start, match.end));\n              },\n          ));\n\n          lastMatchEnd = match.end;\n        }\n\n        // Add any remaining text after the last URL\n        if (lastMatchEnd < part.length) {\n          spans.add(TextSpan(\n            text: part.substring(lastMatchEnd),\n            style: TextStyle(\n              color: isMe ? Colors.black : Colors.white70,\n              fontWeight: i % 2 == 1 ? FontWeight.bold : FontWeight.normal,\n            ),\n          ));\n        }\n      } else {\n        spans.add(TextSpan(\n          text: part,\n          style: TextStyle(\n            color: isMe ? Colors.black : Colors.white70,\n            fontWeight: i % 2 == 1 ? FontWeight.bold : FontWeight.normal,\n          ),\n        ));\n      }\n    }\n\n    return SelectableText.rich(\n      TextSpan(children: spans),\n      textAlign: TextAlign.start,\n    );\n  }\n\n// Existing _launchLink method can be used here\n\n  // Builds the link button, which launches the link when pressed\n  ElevatedButton _buildLinkButton(BuildContext context) {\n    return ElevatedButton(\n      style: ElevatedButton.styleFrom(\n        backgroundColor: Colors.blue, // Background color\n      ),\n      onPressed: _launchLink,\n      child: Text(\n        message,\n        textAlign: isMe ? TextAlign.end : TextAlign.start,\n        style: TextStyle(color: isMe ? Colors.black : Colors.white70),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // Aligns the message bubble to the right (sender) or left (receiver) side of the screen\n    return Row(\n      mainAxisAlignment: isMe ? MainAxisAlignment.end : MainAxisAlignment.start,\n      children: <Widget>[\n        _buildMessageBubbleContainer(context),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/widgets/messages.dart",
    "content": "import 'package:glowby/views/screens/global_settings.dart';\n\nimport 'message.dart';\nimport 'message_bubble.dart';\nimport 'package:flutter/material.dart';\n\n/// A class representing the Messages widget, which displays a list of MessageBubble widgets.\nclass Messages extends StatefulWidget {\n  final List<Message> _messages;\n\n  const Messages(this._messages, {super.key});\n\n  @override\n  MessagesState createState() => MessagesState();\n}\n\nclass MessagesState extends State<Messages> {\n  late ScrollController _controller;\n\n  @override\n  void initState() {\n    super.initState();\n    _controller = ScrollController();\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    super.dispose();\n  }\n\n  /// Replaces language prefixes in the message text.\n  String _processMessageText(String messageText) {\n    const List<String> languagePrefixes = [\n      'Italian: ',\n      'German: ',\n      'Portuguese: ',\n      'Dutch: ',\n      'Russian: ',\n      'American Spanish: ',\n      'Mexican Spanish: ',\n      'Canadian French: ',\n      'French: ',\n      'Spanish: ',\n      'American English: ',\n      'Australian English: ',\n      'British English: ',\n      'English: ',\n    ];\n\n    for (final prefix in languagePrefixes) {\n      if (messageText.startsWith(prefix)) {\n        // Replace only the first occurrence of the prefix\n        messageText = messageText.replaceFirst(prefix, '');\n        break; // Since we found the prefix, no need to check the rest\n      }\n    }\n\n    return messageText;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return ListView.builder(\n      reverse: true,\n      itemCount: widget._messages.length,\n      controller: _controller,\n      itemBuilder: (ctx, index) {\n        final message = widget._messages[index];\n        final processedText = _processMessageText(message.text);\n\n        return MessageBubble(\n          processedText,\n          message.username,\n          message.userId == GlobalSettings().userId,\n          message.link,\n          key: ValueKey(message.createdAt.toString()),\n        );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/lib/views/widgets/new_message.dart",
    "content": "import 'dart:async';\nimport 'dart:math';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:glowby/views/screens/global_settings.dart';\nimport 'package:glowby/views/widgets/paint_window.dart';\nimport 'package:glowby/utils/utils.dart';\nimport 'package:url_launcher/url_launcher_string.dart';\n\nimport 'message.dart';\nimport '../../services/openai_api.dart';\nimport '../../utils/timestamp.dart';\nimport 'package:flutter/material.dart';\n\nimport '../../models/ai.dart';\n\n/// A class representing the NewMessage widget, which allows users to send messages and receive AI responses.\nclass NewMessage extends StatefulWidget {\n  final Function _refresh;\n  final List<Message> _messages;\n  final List<Map<String, Object>>? _questions;\n  final String? _name;\n  final bool? _enableAi;\n  final Function(String) onAutonomousModeMessage;\n\n  const NewMessage(this._refresh, this._messages, this._questions, this._name,\n      this._enableAi,\n      {super.key, required this.onAutonomousModeMessage});\n\n  @override\n  NewMessageState createState() => NewMessageState();\n}\n\nclass NewMessageState extends State<NewMessage> {\n  late Ai ai;\n\n  final _controller = TextEditingController();\n  var _enteredMessage = '';\n\n  FocusNode? _focusNode;\n  bool _isRecording = false;\n  Timer? _voiceCancelTimer;\n  bool _isProcessing = false;\n  bool _stopRequested = false;\n\n  void _onVoiceReady(text) {\n    if (_isRecording) {\n      if (_voiceCancelTimer != null) {\n        _voiceCancelTimer!.cancel();\n        _voiceCancelTimer = null;\n      }\n\n      _controller.value = TextEditingValue(text: text);\n      _enteredMessage = text;\n      _sendMessage();\n\n      setState(() {\n        _isRecording = false;\n      });\n    }\n  }\n\n  @override\n  void initState() {\n    if (kIsWeb) {\n      // Uncomment the next line to compile the web version\n      Utils.initializeState(_onVoiceReady);\n    }\n    ai = Ai(\n      widget._name,\n      widget._questions,\n    );\n    super.initState();\n\n    _focusNode = FocusNode();\n  }\n\n  @override\n  void dispose() {\n    // Clean up the focus node when the Form is disposed.\n    _focusNode!.dispose();\n\n    super.dispose();\n  }\n\n  void _voiceMessage() {\n    if (_isRecording) {\n      return;\n    }\n\n    Utils.recordVoice(GlobalSettings().selectedLanguage);\n\n    setState(() {\n      _isRecording = true;\n    });\n\n    if (_voiceCancelTimer != null) {\n      _voiceCancelTimer!.cancel();\n      _voiceCancelTimer = null;\n    }\n\n    _voiceCancelTimer = Timer(const Duration(seconds: 8), () {\n      if (_isRecording) {\n        setState(() {\n          _isRecording = false;\n          _voiceCancelTimer = null;\n        });\n      }\n    });\n  }\n\n  void _sendMessage() async {\n    _stopRequested = false;\n    FocusScope.of(context).unfocus();\n\n    _addUserMessageToChat();\n\n    final message = _enteredMessage.trim();\n    _resetMessageInput();\n\n    if (Utils.isImageGenerationCommand(message)) {\n      await handleImageGenerationCommand(message);\n    }\n    // Check if Autonomous mode is on\n    else if (GlobalSettings().autonomousMode) {\n      handleAutonomousMode(\n          message); // Call the callback function with the user's input\n    } else {\n      await _processUserMessage(message);\n    }\n  }\n\n  void _resetMessageInput() {\n    _controller.value = TextEditingValue.empty;\n    _focusNode!.requestFocus();\n\n    _enteredMessage = '';\n  }\n\n  void _addUserMessageToChat() {\n    widget._messages.insert(\n      0,\n      Message(\n          text: _enteredMessage.trim(),\n          createdAt: Timestamp.now(),\n          userId: GlobalSettings().userId,\n          username: GlobalSettings().userName),\n    );\n  }\n\n  Future<void> _processUserMessage(String message) async {\n    // Add a new message instance indicating that the AI is typing\n    Message typingMessage = Message(\n      text: 'typing...',\n      createdAt: Timestamp.now(),\n      userId: Ai.defaultUserId,\n      username: widget._name == '' ? 'AI' : widget._name,\n    );\n    widget._messages.insert(0, typingMessage);\n    widget._refresh();\n\n    // Select the last 5 messages (excluding the user's input message)\n    int messageHistoryCount = min(20, widget._messages.length - 1);\n    List<Message> previousMessages =\n        widget._messages.sublist(1, messageHistoryCount + 1);\n\n    // Convert previousMessages to the format expected by the API\n    List<Map<String, String?>> formattedPreviousMessages = previousMessages\n        .map((message) {\n          return {\n            'role': message.userId == Ai.defaultUserId ? 'assistant' : 'user',\n            'content': message.text\n          };\n        })\n        .toList()\n        .reversed\n        .toList();\n\n    setState(() {\n      _isProcessing = true; // Set to true before processing\n    });\n\n    var response = await ai.message(message,\n        previousMessages: formattedPreviousMessages,\n        aiEnabled: widget._enableAi == null ? true : widget._enableAi!);\n\n    if (_stopRequested) {\n      return;\n    }\n\n    setState(() {\n      _isProcessing = false; // Set to false after processing\n    });\n\n    // Remove the typing message instance when the response is received\n    widget._messages.remove(typingMessage);\n\n    if (response.isNotEmpty) {\n      for (Message m in response) {\n        widget._messages.insert(\n          0,\n          m,\n        );\n      }\n    }\n\n    widget._refresh();\n  }\n\n  Future<void> handleAutonomousMode(String message) async {\n    widget.onAutonomousModeMessage(message);\n  }\n\n  Future<void> handleImageGenerationCommand(String message) async {\n    final pattern = Utils.getMatchingPattern(message);\n    final description = pattern != null\n        ? message.replaceAll(RegExp(pattern, caseSensitive: false), '').trim()\n        : '';\n    //print('description: $description');\n    //print('enableAi: ${widget._enableAi}');\n    if (description.isNotEmpty &&\n        (widget._enableAi == null || widget._enableAi!)) {\n      Message drawingMessage = Message(\n        text: Utils.getRandomImageGenerationFunnyMessage(),\n        createdAt: Timestamp.now(),\n        userId: Ai.defaultUserId,\n        username: widget._name == '' ? 'AI' : widget._name,\n      );\n      widget._messages.insert(0, drawingMessage);\n      widget._refresh();\n\n      // Generate the image\n      try {\n        final imageUrl = (await OpenAiApi.generateImageUrl(description))!;\n        Message message = Message(\n          text: 'Here is your image!',\n          createdAt: Timestamp.now(),\n          userId: Ai.defaultUserId,\n          username: widget._name == '' ? 'AI' : widget._name,\n          link: imageUrl,\n        );\n\n        widget._messages.remove(drawingMessage);\n        widget._messages.insert(0, message);\n        widget._messages.insert(\n            0,\n            Message(\n              text: Utils.getRandomImageReadyMessage(),\n              createdAt: Timestamp.now(),\n              userId: Ai.defaultUserId,\n              username: widget._name == '' ? 'AI' : widget._name,\n            ));\n\n        widget._refresh();\n\n        Utils.downloadImage(imageUrl, description);\n      } catch (e) {\n        // Handle the exception and emit an error state\n        widget._messages.remove(drawingMessage);\n        Message message = Message(\n          text: 'Something went wrong. Please try again later.',\n          createdAt: Timestamp.now(),\n          userId: Ai.defaultUserId,\n          username: widget._name == '' ? 'AI' : widget._name,\n        );\n\n        widget._messages.remove(drawingMessage);\n        widget._messages.insert(0, message);\n        widget._refresh();\n      }\n    }\n  }\n\n  void _stopProcessing() {\n    // Set the stop requested flag\n    _stopRequested = true;\n\n    // Use setState to update the state and UI accordingly\n    setState(() {\n      // Set the processing flag to false\n      _isProcessing = false;\n\n      // If there's a typing message, remove it\n      if (widget._messages.isNotEmpty &&\n          widget._messages[0].text == \"typing...\") {\n        widget._messages.removeAt(0);\n      }\n\n      // Refresh the widget to reflect the changes\n      widget._refresh();\n    });\n\n    // Cancel any ongoing network operation if it exists\n    ai.getCurrentNetworkOperation()?.cancel();\n  }\n\n  /* method for opening a paint window */\n  void _openPaintWindow() async {\n    const url = 'https://glowbom.com/draw/';\n    if (await canLaunchUrlString(url)) {\n      await launchUrlString(url);\n    } else {\n      throw 'Could not launch $url';\n    }\n\n    /*showDialog(\n      context: context,\n      builder: (BuildContext context) {\n        return const PaintWindow();\n      },\n    );*/\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      margin: const EdgeInsets.only(top: 8),\n      padding: const EdgeInsets.all(8),\n      child: Row(\n        children: <Widget>[\n          Expanded(\n            child: Padding(\n              padding: const EdgeInsets.only(bottom: 20),\n              child: TextField(\n                cursorColor: Theme.of(context).primaryColor,\n                textInputAction: TextInputAction.send,\n                focusNode: _focusNode,\n                autofocus: true,\n                controller: _controller,\n                textCapitalization: TextCapitalization.sentences,\n                autocorrect: true,\n                enableSuggestions: true,\n                style: TextStyle(color: Theme.of(context).primaryColor),\n                decoration: const InputDecoration(labelText: 'Send message...'),\n                onChanged: (value) {\n                  setState(() {\n                    _enteredMessage = value;\n                  });\n                },\n                onSubmitted: (value) {\n                  if (_enteredMessage.trim().isNotEmpty) {\n                    _sendMessage();\n                    // Clear the content of the TextEditingController after sending the message\n                    Future.delayed(const Duration(microseconds: 500), () {\n                      _controller.clear();\n                    });\n                  }\n                },\n                keyboardType: TextInputType.multiline,\n                maxLines: 9,\n                minLines: 1,\n              ),\n            ),\n          ),\n          if (kIsWeb && !_isProcessing)\n            IconButton(\n              color: Theme.of(context).primaryColor,\n              icon: Icon(\n                _isRecording ? Icons.record_voice_over : Icons.keyboard_voice,\n              ),\n              onPressed: _voiceMessage,\n            ),\n          if (!_isProcessing)\n            IconButton(\n              color: Theme.of(context).primaryColor,\n              icon: const Icon(\n                Icons.brush,\n              ),\n              onPressed: _openPaintWindow,\n            ),\n          if (_isProcessing)\n            IconButton(\n              color: Theme.of(context).primaryColor,\n              icon: const Icon(Icons.stop),\n              onPressed: _stopProcessing,\n            ),\n          IconButton(\n            color: Theme.of(context).primaryColor,\n            icon: const Icon(\n              Icons.send,\n            ),\n            onPressed: _enteredMessage.trim().isEmpty ? null : _sendMessage,\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass MediaType {}\n"
  },
  {
    "path": "legacy/app/lib/views/widgets/paint_window.dart",
    "content": "import 'dart:async';\nimport 'dart:convert';\nimport 'dart:math';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_image_compress/flutter_image_compress.dart';\nimport 'package:glowby/views/dialogs/ai_error_dialog.dart';\nimport 'package:glowby/views/html/html_view_screen.dart';\nimport 'dart:ui' as ui;\n\nimport 'package:glowby/services/openai_api.dart';\nimport 'package:glowby/utils/utils.dart';\nimport 'package:flutter/foundation.dart';\n\nclass PaintWindow extends StatefulWidget {\n  const PaintWindow({super.key});\n\n  @override\n  PaintWindowState createState() => PaintWindowState();\n}\n\nclass PaintWindowState extends State<PaintWindow> {\n  final int width = 600;\n  final int height = 450;\n\n  List<Offset?> points = [];\n  final TextEditingController nameController = TextEditingController();\n  String creationName = '';\n  bool isLoading = false;\n  Uint8List? imgBytes;\n  ui.Image? drawingImage;\n\n  @override\n  void dispose() {\n    nameController.dispose();\n    super.dispose();\n  }\n\n  // This function converts the drawing (list of points) to a base64 string\n  Future<String> convertToBase64JpegMobile(List<Offset?> points) async {\n    // Create a picture recorder to record the canvas operations\n    final ui.PictureRecorder recorder = ui.PictureRecorder();\n    final Canvas canvas = Canvas(recorder);\n\n    // Draw your points here onto the canvas\n    final paint = Paint()\n      ..color = Colors.black\n      ..strokeCap = StrokeCap.round\n      ..strokeWidth = 2.0;\n    for (int i = 0; i < points.length - 1; i++) {\n      if (points[i] != null && points[i + 1] != null) {\n        canvas.drawLine(points[i]!, points[i + 1]!, paint);\n      }\n    }\n\n    // End recording the canvas operations\n    final ui.Picture picture = recorder.endRecording();\n\n    // Convert the picture to an image\n    final ui.Image image = await picture.toImage(\n        width, height); // Set the width and height as needed\n    final ByteData? byteData =\n        await image.toByteData(format: ui.ImageByteFormat.rawRgba);\n\n    if (byteData == null) {\n      if (kDebugMode) {\n        print(\"Failed to obtain byte data from image\");\n      }\n      return '';\n    }\n\n    // Compress the image and get JPEG format Uint8List\n    final Uint8List imgBytes = await FlutterImageCompress.compressWithList(\n      byteData.buffer.asUint8List(),\n      minWidth: width,\n      minHeight: height,\n      quality: 100, // Adjust the quality as needed\n      format: CompressFormat.jpeg,\n    );\n\n    // Base64 encode the JPEG bytes\n    final String base64String = base64Encode(imgBytes);\n\n    return base64String;\n  }\n\n  // This function converts the drawing (list of points) to a base64 string\n  Future<String> convertToBase64Png(List<Offset?> points) async {\n    // Create a picture recorder to record the canvas operations\n    final ui.PictureRecorder recorder = ui.PictureRecorder();\n    final Canvas canvas = Canvas(recorder);\n\n    // Draw your points here onto the canvas\n    final paint = Paint()\n      ..color = Colors.black\n      ..strokeCap = StrokeCap.round\n      ..strokeWidth = 2.0;\n    for (int i = 0; i < points.length - 1; i++) {\n      if (points[i] != null && points[i + 1] != null) {\n        canvas.drawLine(points[i]!, points[i + 1]!, paint);\n      }\n    }\n\n    // End recording the canvas operations\n    final ui.Picture picture = recorder.endRecording();\n\n    // Convert the picture to an image\n    final ui.Image image = await picture.toImage(\n        width, height); // Set the width and height as needed\n    final ByteData? byteData =\n        await image.toByteData(format: ui.ImageByteFormat.png);\n\n    // Convert the byte data to a Uint8List\n    final Uint8List imgBytes = byteData!.buffer.asUint8List();\n\n    // Base64 encode the image bytes\n    final String base64String = base64Encode(imgBytes);\n\n    return base64String;\n  }\n\n  Future<void> callOpenAI() async {\n    if (isLoading) {\n      return;\n    }\n\n    setState(() {\n      isLoading = true;\n    });\n\n    // Convert points to a suitable format and call OpenAI method\n    // For example, you might convert points to an image and then to base64\n    //String imageBase64 = await convertToBase64Jpeg(points);\n\n    if (drawingImage != null) {\n      // Introduce a delay before executing the code\n      await Future.delayed(const Duration(milliseconds: 800));\n    }\n    String imageBase64 =\n        await Utils.convertToBase64JpegWeb(points, drawingImage, width, height);\n\n    // this is for testing\n    // imgBytes = base64Decode(imageBase64); // Implement this function\n\n    String htmlResponse =\n        await OpenAiApi().getHtmlFromOpenAI(imageBase64, creationName);\n\n    String htmlContent = creationName;\n\n    if (htmlResponse == '') {\n      if (mounted) {\n        Navigator.of(context).pop();\n      }\n\n      _showAiErrorDialog();\n      return;\n    }\n\n    try {\n      htmlContent = htmlResponse.split(\"```html\")[1].split('```')[0];\n    } catch (e) {\n      htmlContent = htmlResponse;\n    }\n\n    // Use the captured context after the async gap\n    if (mounted) {\n      Navigator.push(\n        context, // use the safeContext that was captured before the async gap\n        MaterialPageRoute(\n          builder: (context) => HtmlViewScreen(\n            htmlContent: htmlContent,\n            appName: creationName,\n          ),\n        ),\n      );\n    }\n\n    setState(() {\n      isLoading = false;\n    });\n\n    clear();\n  }\n\n  void _showAiErrorDialog() {\n    showDialog(\n      context: context,\n      builder: (BuildContext context) {\n        return const AiErrorDialog();\n      },\n    ).then(\n      (value) => setState(() {}),\n    );\n  }\n\n  void clear() {\n    drawingImage = null;\n    nameController.clear();\n    setState(() {\n      points.clear();\n    });\n  }\n\n  Future<void> loadImage(Uint8List imageBytes) async {\n    final Completer<ui.Image> completer = Completer<ui.Image>();\n    ui.decodeImageFromList(imageBytes, (ui.Image img) {\n      if (!completer.isCompleted) {\n        completer.complete(img);\n      }\n    });\n    drawingImage = await completer.future;\n    setState(() {}); // Trigger a repaint\n  }\n\n  Future<void> downloadImage() async {}\n\n  Future<void> uploadImage() async {\n    try {\n      final Uint8List? value = await Utils.pickImage();\n      if (value != null) {\n        await loadImage(value); // Load the image and update the state\n      }\n    } catch (e) {\n      // Handle the error or display an error message\n      if (kDebugMode) {\n        print('Error picking image: $e');\n      }\n    }\n\n    /*final picker = ImagePicker();\n    final pickedFile = await picker.getImage(source: ImageSource.gallery);\n\n    if (pickedFile != null) {\n      // If the pickedFile is not null, then we have a path to the image file.\n      // You can now upload this image to a server or use it in your application.\n      final File imageFile = File(pickedFile.path);\n      // Implement your image upload functionality here\n    } else {\n      print('No image selected.');\n    }*/\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    if (imgBytes != null) {\n      return Image.memory(imgBytes!);\n    }\n\n    return AlertDialog(\n      title: const Text('Magic Window (Powered by GPT-4 with Vision)'),\n      content: SingleChildScrollView(\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: [\n            Container(\n              width: width.toDouble(),\n              height: height.toDouble(),\n              decoration: BoxDecoration(\n                border: Border.all(color: Colors.black),\n                color: Colors.white,\n              ),\n              child: GestureDetector(\n                onPanUpdate: (DragUpdateDetails details) {\n                  setState(() {\n                    RenderBox renderBox =\n                        context.findRenderObject() as RenderBox;\n                    points.add(renderBox.globalToLocal(details.localPosition));\n                  });\n                },\n                onPanEnd: (DragEndDetails details) {\n                  setState(() {\n                    points.add(\n                        null); // Add a null to the list to separate the lines\n                  });\n                },\n                child: CustomPaint(\n                  painter: DrawingPainter(points: points, image: drawingImage),\n                  size: Size.infinite,\n                ),\n              ),\n            ),\n            Padding(\n              padding: const EdgeInsets.all(8.0),\n              child: SizedBox(\n                width: width.toDouble(), // Set your desired maximum width here\n                child: TextField(\n                  controller: nameController,\n                  decoration: const InputDecoration(\n                    labelText: 'Name your creation',\n                  ),\n                  onChanged: (value) {\n                    creationName = value;\n                  },\n                ),\n              ),\n            ),\n            Row(\n              mainAxisAlignment: MainAxisAlignment.start,\n              children: [\n                IconButton(\n                  icon: const Icon(Icons.image),\n                  onPressed: uploadImage,\n                ),\n                IconButton(\n                  icon: const Icon(Icons.download),\n                  onPressed: downloadImage,\n                ),\n              ],\n            ),\n          ],\n        ),\n      ),\n      actions: <Widget>[\n        if (isLoading && drawingImage != null)\n          const Text('Loading...')\n        else if (isLoading)\n          const CircularProgressIndicator()\n        else\n          TextButton(\n            onPressed: clear,\n            child: const Text('Clear'),\n          ),\n        TextButton(\n          onPressed: callOpenAI,\n          child: const Text(\n              'Build'), // Here we call the method to process the drawing\n        ),\n        TextButton(\n          child: const Text('Close'),\n          onPressed: () {\n            Navigator.of(context).pop();\n          },\n        ),\n      ],\n    );\n  }\n}\n\nclass DrawingPainter extends CustomPainter {\n  final List<Offset?> points;\n  final ui.Image? image;\n\n  DrawingPainter({required this.points, this.image});\n\n  void paintImage(\n      {required Canvas canvas, required ui.Image image, required Size size}) {\n    // Calculate the scale factor to fit the image within the canvas if needed\n    final double scaleFactor =\n        min(size.width / image.width, size.height / image.height);\n\n    // Calculate the destination rectangle for the scaled image\n    final Rect destRect = Rect.fromLTWH(\n      (size.width - image.width * scaleFactor) / 2,\n      (size.height - image.height * scaleFactor) / 2,\n      image.width * scaleFactor,\n      image.height * scaleFactor,\n    );\n\n    // Draw the scaled image at the center position\n    canvas.drawImageRect(\n        image,\n        Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble()),\n        destRect,\n        Paint());\n  }\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    // If there's an image, draw it\n    if (image != null) {\n      paintImage(canvas: canvas, image: image!, size: size);\n    }\n\n    var paint = Paint()\n      ..color = Colors.black\n      ..strokeCap = StrokeCap.round\n      ..strokeWidth = 2.0;\n\n    for (int i = 0; i < points.length - 1; i++) {\n      if (points[i] != null && points[i + 1] != null) {\n        // Check if both points are within the bounds of the CustomPaint widget\n        if (points[i]!.dx >= 0 &&\n            points[i]!.dx <= size.width &&\n            points[i]!.dy >= 0 &&\n            points[i]!.dy <= size.height &&\n            points[i + 1]!.dx >= 0 &&\n            points[i + 1]!.dx <= size.width &&\n            points[i + 1]!.dy >= 0 &&\n            points[i + 1]!.dy <= size.height) {\n          canvas.drawLine(points[i]!, points[i + 1]!, paint);\n        }\n      }\n    }\n  }\n\n  @override\n  bool shouldRepaint(covariant CustomPainter oldDelegate) => true;\n}\n"
  },
  {
    "path": "legacy/app/lib/views/widgets/tasks_view.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass TasksView extends StatefulWidget {\n  final List<String> tasks;\n  final String name;\n  final Function onImplementPlanButtonPressed;\n  final Function onRequestNewPlanButtonPressed;\n  final Function onBackButtonPressed;\n\n  const TasksView(\n      {super.key,\n      required this.tasks,\n      required this.name,\n      required this.onImplementPlanButtonPressed,\n      required this.onRequestNewPlanButtonPressed,\n      required this.onBackButtonPressed});\n\n  @override\n  TasksViewState createState() => TasksViewState();\n}\n\nclass TasksViewState extends State<TasksView>\n    with SingleTickerProviderStateMixin {\n  List<String> _tasks = [];\n  final TextEditingController _newTaskController = TextEditingController();\n  final FocusNode _inputFocusNode = FocusNode();\n  final ScrollController _scrollController = ScrollController();\n  int? _selectedTaskIndex;\n  late AnimationController _delayController;\n\n  @override\n  void initState() {\n    super.initState();\n    _delayController = AnimationController(\n      vsync: this,\n      duration: const Duration(milliseconds: 100),\n    );\n    _tasks = widget.tasks;\n  }\n\n  @override\n  void dispose() {\n    _delayController.dispose();\n    _newTaskController.dispose();\n    _inputFocusNode.dispose();\n    _scrollController.dispose();\n    super.dispose();\n  }\n\n  Widget _buildTaskItem(int index) {\n    if (index == _selectedTaskIndex) {\n      return TextFormField(\n        initialValue: _tasks[index],\n        autofocus: true,\n        onFieldSubmitted: (value) {\n          setState(() {\n            _tasks[index] = value;\n            _selectedTaskIndex = null;\n          });\n        },\n      );\n    } else {\n      return InkWell(\n        onTap: () {\n          setState(() {\n            _selectedTaskIndex = index;\n          });\n        },\n        child: Text(_tasks[index]),\n      );\n    }\n  }\n\n  void _confirmDeletion(BuildContext context, int index) {\n    showDialog(\n      context: context,\n      builder: (BuildContext context) {\n        return AlertDialog(\n          title: const Text('Confirm Deletion'),\n          content: const Text('Are you sure you want to delete this task?'),\n          actions: <Widget>[\n            TextButton(\n              child: const Text('Cancel'),\n              onPressed: () {\n                Navigator.of(context).pop(); // Dismiss the dialog\n              },\n            ),\n            TextButton(\n              child: const Text('Delete'),\n              onPressed: () {\n                setState(() {\n                  _tasks.removeAt(index);\n                });\n                Navigator.of(context).pop(); // Dismiss the dialog\n              },\n            ),\n          ],\n        );\n      },\n    );\n  }\n\n  Widget _buildTaskList() {\n    return ListView.separated(\n      controller: _scrollController,\n      itemCount: _tasks.length,\n      separatorBuilder: (context, index) => const Divider(),\n      itemBuilder: (context, index) {\n        return ListTile(\n          title: Row(\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: [\n              Text('${index + 1}. '),\n              Expanded(child: _buildTaskItem(index)),\n              IconButton(\n                icon: const Icon(Icons.delete),\n                onPressed: () => _confirmDeletion(context, index),\n              ),\n            ],\n          ),\n        );\n      },\n    );\n  }\n\n  Widget _buildAddTaskForm() {\n    return TextFormField(\n        controller: _newTaskController,\n        focusNode: _inputFocusNode,\n        decoration: const InputDecoration(labelText: 'Add a new task'),\n        onFieldSubmitted: (value) {\n          setState(() {\n            _tasks.add(value);\n            _newTaskController.clear();\n            _inputFocusNode.requestFocus();\n          });\n          _delayController.forward(from: 0).then((_) {\n            _scrollController.animateTo(\n              _scrollController.position.maxScrollExtent,\n              duration: const Duration(milliseconds: 500),\n              curve: Curves.easeOut,\n            );\n          });\n        });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Column(\n      crossAxisAlignment: CrossAxisAlignment.start,\n      children: [\n        Padding(\n          padding: const EdgeInsets.all(8.0),\n          child: Text(\n            widget.name == 'Unnamed Plan'\n                ? widget.name\n                : 'Plan to ${widget.name}',\n            style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),\n          ),\n        ),\n        Expanded(child: _buildTaskList()),\n        _buildAddTaskForm(),\n        Row(\n          mainAxisAlignment: MainAxisAlignment.end,\n          children: [\n            TextButton(\n              child: const Text('Return to Chat'),\n              onPressed: () {\n                widget.onBackButtonPressed();\n              },\n            ),\n            TextButton(\n              child: const Text('Request New Plan'),\n              onPressed: () {\n                widget.onRequestNewPlanButtonPressed();\n              },\n            ),\n            ElevatedButton(\n              child: const Text('Implement Plan',\n                  style: TextStyle(color: Colors.white)),\n              onPressed: () {\n                widget.onImplementPlanButtonPressed();\n              },\n            ),\n          ],\n        ),\n        const SizedBox(height: 8),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "legacy/app/linux/.gitignore",
    "content": "flutter/ephemeral\n"
  },
  {
    "path": "legacy/app/linux/CMakeLists.txt",
    "content": "# Project-level configuration.\ncmake_minimum_required(VERSION 3.10)\nproject(runner LANGUAGES CXX)\n\n# The name of the executable created for the application. Change this to change\n# the on-disk name of your application.\nset(BINARY_NAME \"app\")\n# The unique GTK application identifier for this application. See:\n# https://wiki.gnome.org/HowDoI/ChooseApplicationID\nset(APPLICATION_ID \"com.yourapp.app\")\n\n# Explicitly opt in to modern CMake behaviors to avoid warnings with recent\n# versions of CMake.\ncmake_policy(SET CMP0063 NEW)\n\n# Load bundled libraries from the lib/ directory relative to the binary.\nset(CMAKE_INSTALL_RPATH \"$ORIGIN/lib\")\n\n# Root filesystem for cross-building.\nif(FLUTTER_TARGET_PLATFORM_SYSROOT)\n  set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})\n  set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})\n  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)\n  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)\n  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)\nendif()\n\n# Define build configuration options.\nif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)\n  set(CMAKE_BUILD_TYPE \"Debug\" CACHE\n    STRING \"Flutter build mode\" FORCE)\n  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS\n    \"Debug\" \"Profile\" \"Release\")\nendif()\n\n# Compilation settings that should be applied to most targets.\n#\n# Be cautious about adding new options here, as plugins use this function by\n# default. In most cases, you should add new options to specific targets instead\n# of modifying this function.\nfunction(APPLY_STANDARD_SETTINGS TARGET)\n  target_compile_features(${TARGET} PUBLIC cxx_std_14)\n  target_compile_options(${TARGET} PRIVATE -Wall -Werror)\n  target_compile_options(${TARGET} PRIVATE \"$<$<NOT:$<CONFIG:Debug>>:-O3>\")\n  target_compile_definitions(${TARGET} PRIVATE \"$<$<NOT:$<CONFIG:Debug>>:NDEBUG>\")\nendfunction()\n\n# Flutter library and tool build rules.\nset(FLUTTER_MANAGED_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/flutter\")\nadd_subdirectory(${FLUTTER_MANAGED_DIR})\n\n# System-level dependencies.\nfind_package(PkgConfig REQUIRED)\npkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)\n\nadd_definitions(-DAPPLICATION_ID=\"${APPLICATION_ID}\")\n\n# Define the application target. To change its name, change BINARY_NAME above,\n# not the value here, or `flutter run` will no longer work.\n#\n# Any new source files that you add to the application should be added here.\nadd_executable(${BINARY_NAME}\n  \"main.cc\"\n  \"my_application.cc\"\n  \"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc\"\n)\n\n# Apply the standard set of build settings. This can be removed for applications\n# that need different build settings.\napply_standard_settings(${BINARY_NAME})\n\n# Add dependency libraries. Add any application-specific dependencies here.\ntarget_link_libraries(${BINARY_NAME} PRIVATE flutter)\ntarget_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)\n\n# Run the Flutter tool portions of the build. This must not be removed.\nadd_dependencies(${BINARY_NAME} flutter_assemble)\n\n# Only the install-generated bundle's copy of the executable will launch\n# correctly, since the resources must in the right relative locations. To avoid\n# people trying to run the unbundled copy, put it in a subdirectory instead of\n# the default top-level location.\nset_target_properties(${BINARY_NAME}\n  PROPERTIES\n  RUNTIME_OUTPUT_DIRECTORY \"${CMAKE_BINARY_DIR}/intermediates_do_not_run\"\n)\n\n\n# Generated plugin build rules, which manage building the plugins and adding\n# them to the application.\ninclude(flutter/generated_plugins.cmake)\n\n\n# === Installation ===\n# By default, \"installing\" just makes a relocatable bundle in the build\n# directory.\nset(BUILD_BUNDLE_DIR \"${PROJECT_BINARY_DIR}/bundle\")\nif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)\n  set(CMAKE_INSTALL_PREFIX \"${BUILD_BUNDLE_DIR}\" CACHE PATH \"...\" FORCE)\nendif()\n\n# Start with a clean build bundle directory every time.\ninstall(CODE \"\n  file(REMOVE_RECURSE \\\"${BUILD_BUNDLE_DIR}/\\\")\n  \" COMPONENT Runtime)\n\nset(INSTALL_BUNDLE_DATA_DIR \"${CMAKE_INSTALL_PREFIX}/data\")\nset(INSTALL_BUNDLE_LIB_DIR \"${CMAKE_INSTALL_PREFIX}/lib\")\n\ninstall(TARGETS ${BINARY_NAME} RUNTIME DESTINATION \"${CMAKE_INSTALL_PREFIX}\"\n  COMPONENT Runtime)\n\ninstall(FILES \"${FLUTTER_ICU_DATA_FILE}\" DESTINATION \"${INSTALL_BUNDLE_DATA_DIR}\"\n  COMPONENT Runtime)\n\ninstall(FILES \"${FLUTTER_LIBRARY}\" DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n  COMPONENT Runtime)\n\nforeach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})\n  install(FILES \"${bundled_library}\"\n    DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n    COMPONENT Runtime)\nendforeach(bundled_library)\n\n# Copy the native assets provided by the build.dart from all packages.\nset(NATIVE_ASSETS_DIR \"${PROJECT_BUILD_DIR}native_assets/linux/\")\ninstall(DIRECTORY \"${NATIVE_ASSETS_DIR}\"\n   DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n   COMPONENT Runtime)\n\n# Fully re-copy the assets directory on each build to avoid having stale files\n# from a previous install.\nset(FLUTTER_ASSET_DIR_NAME \"flutter_assets\")\ninstall(CODE \"\n  file(REMOVE_RECURSE \\\"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\\\")\n  \" COMPONENT Runtime)\ninstall(DIRECTORY \"${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}\"\n  DESTINATION \"${INSTALL_BUNDLE_DATA_DIR}\" COMPONENT Runtime)\n\n# Install the AOT library on non-Debug builds only.\nif(NOT CMAKE_BUILD_TYPE MATCHES \"Debug\")\n  install(FILES \"${AOT_LIBRARY}\" DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n    COMPONENT Runtime)\nendif()\n"
  },
  {
    "path": "legacy/app/linux/flutter/CMakeLists.txt",
    "content": "# This file controls Flutter-level build steps. It should not be edited.\ncmake_minimum_required(VERSION 3.10)\n\nset(EPHEMERAL_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/ephemeral\")\n\n# Configuration provided via flutter tool.\ninclude(${EPHEMERAL_DIR}/generated_config.cmake)\n\n# TODO: Move the rest of this into files in ephemeral. See\n# https://github.com/flutter/flutter/issues/57146.\n\n# Serves the same purpose as list(TRANSFORM ... PREPEND ...),\n# which isn't available in 3.10.\nfunction(list_prepend LIST_NAME PREFIX)\n    set(NEW_LIST \"\")\n    foreach(element ${${LIST_NAME}})\n        list(APPEND NEW_LIST \"${PREFIX}${element}\")\n    endforeach(element)\n    set(${LIST_NAME} \"${NEW_LIST}\" PARENT_SCOPE)\nendfunction()\n\n# === Flutter Library ===\n# System-level dependencies.\nfind_package(PkgConfig REQUIRED)\npkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)\npkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)\npkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)\n\nset(FLUTTER_LIBRARY \"${EPHEMERAL_DIR}/libflutter_linux_gtk.so\")\n\n# Published to parent scope for install step.\nset(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)\nset(FLUTTER_ICU_DATA_FILE \"${EPHEMERAL_DIR}/icudtl.dat\" PARENT_SCOPE)\nset(PROJECT_BUILD_DIR \"${PROJECT_DIR}/build/\" PARENT_SCOPE)\nset(AOT_LIBRARY \"${PROJECT_DIR}/build/lib/libapp.so\" PARENT_SCOPE)\n\nlist(APPEND FLUTTER_LIBRARY_HEADERS\n  \"fl_basic_message_channel.h\"\n  \"fl_binary_codec.h\"\n  \"fl_binary_messenger.h\"\n  \"fl_dart_project.h\"\n  \"fl_engine.h\"\n  \"fl_json_message_codec.h\"\n  \"fl_json_method_codec.h\"\n  \"fl_message_codec.h\"\n  \"fl_method_call.h\"\n  \"fl_method_channel.h\"\n  \"fl_method_codec.h\"\n  \"fl_method_response.h\"\n  \"fl_plugin_registrar.h\"\n  \"fl_plugin_registry.h\"\n  \"fl_standard_message_codec.h\"\n  \"fl_standard_method_codec.h\"\n  \"fl_string_codec.h\"\n  \"fl_value.h\"\n  \"fl_view.h\"\n  \"flutter_linux.h\"\n)\nlist_prepend(FLUTTER_LIBRARY_HEADERS \"${EPHEMERAL_DIR}/flutter_linux/\")\nadd_library(flutter INTERFACE)\ntarget_include_directories(flutter INTERFACE\n  \"${EPHEMERAL_DIR}\"\n)\ntarget_link_libraries(flutter INTERFACE \"${FLUTTER_LIBRARY}\")\ntarget_link_libraries(flutter INTERFACE\n  PkgConfig::GTK\n  PkgConfig::GLIB\n  PkgConfig::GIO\n)\nadd_dependencies(flutter flutter_assemble)\n\n# === Flutter tool backend ===\n# _phony_ is a non-existent file to force this command to run every time,\n# since currently there's no way to get a full input/output list from the\n# flutter tool.\nadd_custom_command(\n  OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}\n    ${CMAKE_CURRENT_BINARY_DIR}/_phony_\n  COMMAND ${CMAKE_COMMAND} -E env\n    ${FLUTTER_TOOL_ENVIRONMENT}\n    \"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh\"\n      ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}\n  VERBATIM\n)\nadd_custom_target(flutter_assemble DEPENDS\n  \"${FLUTTER_LIBRARY}\"\n  ${FLUTTER_LIBRARY_HEADERS}\n)\n"
  },
  {
    "path": "legacy/app/linux/flutter/generated_plugin_registrant.cc",
    "content": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#include \"generated_plugin_registrant.h\"\n\n#include <file_selector_linux/file_selector_plugin.h>\n#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>\n#include <url_launcher_linux/url_launcher_plugin.h>\n\nvoid fl_register_plugins(FlPluginRegistry* registry) {\n  g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =\n      fl_plugin_registry_get_registrar_for_plugin(registry, \"FileSelectorPlugin\");\n  file_selector_plugin_register_with_registrar(file_selector_linux_registrar);\n  g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =\n      fl_plugin_registry_get_registrar_for_plugin(registry, \"FlutterSecureStorageLinuxPlugin\");\n  flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);\n  g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =\n      fl_plugin_registry_get_registrar_for_plugin(registry, \"UrlLauncherPlugin\");\n  url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);\n}\n"
  },
  {
    "path": "legacy/app/linux/flutter/generated_plugin_registrant.h",
    "content": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#ifndef GENERATED_PLUGIN_REGISTRANT_\n#define GENERATED_PLUGIN_REGISTRANT_\n\n#include <flutter_linux/flutter_linux.h>\n\n// Registers Flutter plugins.\nvoid fl_register_plugins(FlPluginRegistry* registry);\n\n#endif  // GENERATED_PLUGIN_REGISTRANT_\n"
  },
  {
    "path": "legacy/app/linux/flutter/generated_plugins.cmake",
    "content": "#\n# Generated file, do not edit.\n#\n\nlist(APPEND FLUTTER_PLUGIN_LIST\n  file_selector_linux\n  flutter_secure_storage_linux\n  url_launcher_linux\n)\n\nlist(APPEND FLUTTER_FFI_PLUGIN_LIST\n)\n\nset(PLUGIN_BUNDLED_LIBRARIES)\n\nforeach(plugin ${FLUTTER_PLUGIN_LIST})\n  add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})\n  target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)\n  list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)\n  list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})\nendforeach(plugin)\n\nforeach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})\n  add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})\n  list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})\nendforeach(ffi_plugin)\n"
  },
  {
    "path": "legacy/app/linux/main.cc",
    "content": "#include \"my_application.h\"\n\nint main(int argc, char** argv) {\n  g_autoptr(MyApplication) app = my_application_new();\n  return g_application_run(G_APPLICATION(app), argc, argv);\n}\n"
  },
  {
    "path": "legacy/app/linux/my_application.cc",
    "content": "#include \"my_application.h\"\n\n#include <flutter_linux/flutter_linux.h>\n#ifdef GDK_WINDOWING_X11\n#include <gdk/gdkx.h>\n#endif\n\n#include \"flutter/generated_plugin_registrant.h\"\n\nstruct _MyApplication {\n  GtkApplication parent_instance;\n  char** dart_entrypoint_arguments;\n};\n\nG_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)\n\n// Implements GApplication::activate.\nstatic void my_application_activate(GApplication* application) {\n  MyApplication* self = MY_APPLICATION(application);\n  GtkWindow* window =\n      GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));\n\n  // Use a header bar when running in GNOME as this is the common style used\n  // by applications and is the setup most users will be using (e.g. Ubuntu\n  // desktop).\n  // If running on X and not using GNOME then just use a traditional title bar\n  // in case the window manager does more exotic layout, e.g. tiling.\n  // If running on Wayland assume the header bar will work (may need changing\n  // if future cases occur).\n  gboolean use_header_bar = TRUE;\n#ifdef GDK_WINDOWING_X11\n  GdkScreen* screen = gtk_window_get_screen(window);\n  if (GDK_IS_X11_SCREEN(screen)) {\n    const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);\n    if (g_strcmp0(wm_name, \"GNOME Shell\") != 0) {\n      use_header_bar = FALSE;\n    }\n  }\n#endif\n  if (use_header_bar) {\n    GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());\n    gtk_widget_show(GTK_WIDGET(header_bar));\n    gtk_header_bar_set_title(header_bar, \"app\");\n    gtk_header_bar_set_show_close_button(header_bar, TRUE);\n    gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));\n  } else {\n    gtk_window_set_title(window, \"app\");\n  }\n\n  gtk_window_set_default_size(window, 1280, 720);\n  gtk_widget_show(GTK_WIDGET(window));\n\n  g_autoptr(FlDartProject) project = fl_dart_project_new();\n  fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);\n\n  FlView* view = fl_view_new(project);\n  gtk_widget_show(GTK_WIDGET(view));\n  gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));\n\n  fl_register_plugins(FL_PLUGIN_REGISTRY(view));\n\n  gtk_widget_grab_focus(GTK_WIDGET(view));\n}\n\n// Implements GApplication::local_command_line.\nstatic gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {\n  MyApplication* self = MY_APPLICATION(application);\n  // Strip out the first argument as it is the binary name.\n  self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);\n\n  g_autoptr(GError) error = nullptr;\n  if (!g_application_register(application, nullptr, &error)) {\n     g_warning(\"Failed to register: %s\", error->message);\n     *exit_status = 1;\n     return TRUE;\n  }\n\n  g_application_activate(application);\n  *exit_status = 0;\n\n  return TRUE;\n}\n\n// Implements GObject::dispose.\nstatic void my_application_dispose(GObject* object) {\n  MyApplication* self = MY_APPLICATION(object);\n  g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);\n  G_OBJECT_CLASS(my_application_parent_class)->dispose(object);\n}\n\nstatic void my_application_class_init(MyApplicationClass* klass) {\n  G_APPLICATION_CLASS(klass)->activate = my_application_activate;\n  G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;\n  G_OBJECT_CLASS(klass)->dispose = my_application_dispose;\n}\n\nstatic void my_application_init(MyApplication* self) {}\n\nMyApplication* my_application_new() {\n  return MY_APPLICATION(g_object_new(my_application_get_type(),\n                                     \"application-id\", APPLICATION_ID,\n                                     \"flags\", G_APPLICATION_NON_UNIQUE,\n                                     nullptr));\n}\n"
  },
  {
    "path": "legacy/app/linux/my_application.h",
    "content": "#ifndef FLUTTER_MY_APPLICATION_H_\n#define FLUTTER_MY_APPLICATION_H_\n\n#include <gtk/gtk.h>\n\nG_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,\n                     GtkApplication)\n\n/**\n * my_application_new:\n *\n * Creates a new Flutter-based application.\n *\n * Returns: a new #MyApplication.\n */\nMyApplication* my_application_new();\n\n#endif  // FLUTTER_MY_APPLICATION_H_\n"
  },
  {
    "path": "legacy/app/macos/.gitignore",
    "content": "# Flutter-related\n**/Flutter/ephemeral/\n**/Pods/\n\n# Xcode-related\n**/dgph\n**/xcuserdata/\n"
  },
  {
    "path": "legacy/app/macos/Flutter/Flutter-Debug.xcconfig",
    "content": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"ephemeral/Flutter-Generated.xcconfig\"\n"
  },
  {
    "path": "legacy/app/macos/Flutter/Flutter-Release.xcconfig",
    "content": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"ephemeral/Flutter-Generated.xcconfig\"\n"
  },
  {
    "path": "legacy/app/macos/Flutter/GeneratedPluginRegistrant.swift",
    "content": "//\n//  Generated file. Do not edit.\n//\n\nimport FlutterMacOS\nimport Foundation\n\nimport file_selector_macos\nimport flutter_image_compress_macos\nimport flutter_secure_storage_macos\nimport flutter_tts\nimport path_provider_foundation\nimport shared_preferences_foundation\nimport url_launcher_macos\n\nfunc RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {\n  FileSelectorPlugin.register(with: registry.registrar(forPlugin: \"FileSelectorPlugin\"))\n  FlutterImageCompressMacosPlugin.register(with: registry.registrar(forPlugin: \"FlutterImageCompressMacosPlugin\"))\n  FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: \"FlutterSecureStoragePlugin\"))\n  FlutterTtsPlugin.register(with: registry.registrar(forPlugin: \"FlutterTtsPlugin\"))\n  PathProviderPlugin.register(with: registry.registrar(forPlugin: \"PathProviderPlugin\"))\n  SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: \"SharedPreferencesPlugin\"))\n  UrlLauncherPlugin.register(with: registry.registrar(forPlugin: \"UrlLauncherPlugin\"))\n}\n"
  },
  {
    "path": "legacy/app/macos/Podfile",
    "content": "platform :osx, '10.15'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['COCOAPODS_DISABLE_STATS'] = 'true'\n\nproject 'Runner', {\n  'Debug' => :debug,\n  'Profile' => :release,\n  'Release' => :release,\n}\n\ndef flutter_root\n  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)\n  unless File.exist?(generated_xcode_build_settings_path)\n    raise \"#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \\\"flutter pub get\\\" is executed first\"\n  end\n\n  File.foreach(generated_xcode_build_settings_path) do |line|\n    matches = line.match(/FLUTTER_ROOT\\=(.*)/)\n    return matches[1].strip if matches\n  end\n  raise \"FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \\\"flutter pub get\\\"\"\nend\n\nrequire File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)\n\nflutter_macos_podfile_setup\n\ntarget 'Runner' do\n  use_frameworks!\n  use_modular_headers!\n\n  flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))\n  target 'RunnerTests' do\n    inherit! :search_paths\n  end\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    flutter_additional_macos_build_settings(target)\n  end\nend\n"
  },
  {
    "path": "legacy/app/macos/Runner/AppDelegate.swift",
    "content": "import Cocoa\nimport FlutterMacOS\n\n@NSApplicationMain\nclass AppDelegate: FlutterAppDelegate {\n  override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {\n    return true\n  }\n}\n"
  },
  {
    "path": "legacy/app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"16.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"32-2.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"32.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"64.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"128.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"256-2.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"256.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"512-2.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"512.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"filename\" : \"1024.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "legacy/app/macos/Runner/Base.lproj/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14490.70\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <deployment identifier=\"macosx\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14490.70\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NSApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"GzC-gU-4Uq\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"Runner\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"applicationMenu\" destination=\"uQy-DD-JDr\" id=\"XBo-yE-nKs\"/>\n                <outlet property=\"mainFlutterWindow\" destination=\"QvC-M9-y7g\" id=\"gIp-Ho-8D9\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n        <menu title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n            <items>\n                <menuItem title=\"APP_NAME\" id=\"1Xt-HY-uBw\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"APP_NAME\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                        <items>\n                            <menuItem title=\"About APP_NAME\" id=\"5kV-Vb-QxS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"orderFrontStandardAboutPanel:\" target=\"-1\" id=\"Exp-CZ-Vem\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                            <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                            <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                            <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                            <menuItem title=\"Hide APP_NAME\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                <connections>\n                                    <action selector=\"hide:\" target=\"-1\" id=\"PnN-Uc-m68\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"hideOtherApplications:\" target=\"-1\" id=\"VT4-aY-XCT\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"unhideAllApplications:\" target=\"-1\" id=\"Dhg-Le-xox\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                            <menuItem title=\"Quit APP_NAME\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                <connections>\n                                    <action selector=\"terminate:\" target=\"-1\" id=\"Te7-pn-YzF\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                        <items>\n                            <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                <connections>\n                                    <action selector=\"undo:\" target=\"-1\" id=\"M6e-cu-g7V\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                <connections>\n                                    <action selector=\"redo:\" target=\"-1\" id=\"oIA-Rs-6OD\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                            <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                <connections>\n                                    <action selector=\"cut:\" target=\"-1\" id=\"YJe-68-I9s\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                <connections>\n                                    <action selector=\"copy:\" target=\"-1\" id=\"G1f-GL-Joy\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                <connections>\n                                    <action selector=\"paste:\" target=\"-1\" id=\"UvS-8e-Qdg\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"pasteAsPlainText:\" target=\"-1\" id=\"cEh-KX-wJQ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"delete:\" target=\"-1\" id=\"0Mk-Ml-PaM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                <connections>\n                                    <action selector=\"selectAll:\" target=\"-1\" id=\"VNm-Mi-diN\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                            <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                    <items>\n                                        <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"cD7-Qs-BN4\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"WD3-Gg-5AJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"NDo-RZ-v9R\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"HOh-sY-3ay\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"U76-nv-p5D\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                            <connections>\n                                                <action selector=\"centerSelectionInVisibleArea:\" target=\"-1\" id=\"IOG-6D-g5B\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                    <items>\n                                        <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                            <connections>\n                                                <action selector=\"showGuessPanel:\" target=\"-1\" id=\"vFj-Ks-hy3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                            <connections>\n                                                <action selector=\"checkSpelling:\" target=\"-1\" id=\"fz7-VC-reM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                        <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleContinuousSpellChecking:\" target=\"-1\" id=\"7w6-Qz-0kB\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleGrammarChecking:\" target=\"-1\" id=\"muD-Qn-j4w\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"-1\" id=\"2lM-Qi-WAP\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                    <items>\n                                        <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontSubstitutionsPanel:\" target=\"-1\" id=\"oku-mr-iSq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                        <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleSmartInsertDelete:\" target=\"-1\" id=\"3IJ-Se-DZD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"-1\" id=\"ptq-xd-QOA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDashSubstitution:\" target=\"-1\" id=\"oCt-pO-9gS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticLinkDetection:\" target=\"-1\" id=\"Gip-E3-Fov\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDataDetection:\" target=\"-1\" id=\"R1I-Nq-Kbl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticTextReplacement:\" target=\"-1\" id=\"DvP-Fe-Py6\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                    <items>\n                                        <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"uppercaseWord:\" target=\"-1\" id=\"sPh-Tk-edu\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"lowercaseWord:\" target=\"-1\" id=\"iUZ-b5-hil\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"capitalizeWord:\" target=\"-1\" id=\"26H-TL-nsh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                    <items>\n                                        <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"startSpeaking:\" target=\"-1\" id=\"654-Ng-kyl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"stopSpeaking:\" target=\"-1\" id=\"dX8-6p-jy9\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                        <items>\n                            <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleFullScreen:\" target=\"-1\" id=\"dU3-MA-1Rq\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                        <items>\n                            <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                <connections>\n                                    <action selector=\"performMiniaturize:\" target=\"-1\" id=\"VwT-WD-YPe\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"performZoom:\" target=\"-1\" id=\"DIl-cC-cCs\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                            <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"arrangeInFront:\" target=\"-1\" id=\"DRN-fu-gQh\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Help\" id=\"EPT-qC-fAb\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"rJ0-wn-3NY\"/>\n                </menuItem>\n            </items>\n            <point key=\"canvasLocation\" x=\"142\" y=\"-258\"/>\n        </menu>\n        <window title=\"APP_NAME\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" animationBehavior=\"default\" id=\"QvC-M9-y7g\" customClass=\"MainFlutterWindow\" customModule=\"Runner\" customModuleProvider=\"target\">\n            <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n            <rect key=\"contentRect\" x=\"335\" y=\"390\" width=\"800\" height=\"600\"/>\n            <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"2560\" height=\"1577\"/>\n            <view key=\"contentView\" wantsLayer=\"YES\" id=\"EiT-Mj-1SZ\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"800\" height=\"600\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n            </view>\n        </window>\n    </objects>\n</document>\n"
  },
  {
    "path": "legacy/app/macos/Runner/Configs/AppInfo.xcconfig",
    "content": "// Application-level settings for the Runner target.\n//\n// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the\n// future. If not, the values below would default to using the project name when this becomes a\n// 'flutter create' template.\n\n// The application's name. By default this is also the title of the Flutter window.\nPRODUCT_NAME = app\n\n// The application's bundle identifier\nPRODUCT_BUNDLE_IDENTIFIER = com.yourapp.app\n\n// The copyright displayed in application information\nPRODUCT_COPYRIGHT = Copyright © 2024 com.yourapp. All rights reserved.\n"
  },
  {
    "path": "legacy/app/macos/Runner/Configs/Debug.xcconfig",
    "content": "#include \"../../Flutter/Flutter-Debug.xcconfig\"\n#include \"Warnings.xcconfig\"\n"
  },
  {
    "path": "legacy/app/macos/Runner/Configs/Release.xcconfig",
    "content": "#include \"../../Flutter/Flutter-Release.xcconfig\"\n#include \"Warnings.xcconfig\"\n"
  },
  {
    "path": "legacy/app/macos/Runner/Configs/Warnings.xcconfig",
    "content": "WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings\nGCC_WARN_UNDECLARED_SELECTOR = YES\nCLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES\nCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE\nCLANG_WARN__DUPLICATE_METHOD_MATCH = YES\nCLANG_WARN_PRAGMA_PACK = YES\nCLANG_WARN_STRICT_PROTOTYPES = YES\nCLANG_WARN_COMMA = YES\nGCC_WARN_STRICT_SELECTOR_MATCH = YES\nCLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES\nCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES\nGCC_WARN_SHADOW = YES\nCLANG_WARN_UNREACHABLE_CODE = YES\n"
  },
  {
    "path": "legacy/app/macos/Runner/DebugProfile.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.cs.allow-jit</key>\n\t<true/>\n\t<key>com.apple.security.network.server</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n<true/>\n\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/macos/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>$(PRODUCT_COPYRIGHT)</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/macos/Runner/MainFlutterWindow.swift",
    "content": "import Cocoa\nimport FlutterMacOS\n\nclass MainFlutterWindow: NSWindow {\n  override func awakeFromNib() {\n    let flutterViewController = FlutterViewController()\n    let windowFrame = self.frame\n    self.contentViewController = flutterViewController\n    self.setFrame(windowFrame, display: true)\n\n    RegisterGeneratedPlugins(registry: flutterViewController)\n\n    super.awakeFromNib()\n  }\n}\n"
  },
  {
    "path": "legacy/app/macos/Runner/Release.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/macos/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\t33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget \"Flutter Assemble\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t33CC111E2044C6BF0003C045 /* ShellScript */,\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"Flutter Assemble\";\n\t\t\tproductName = FLX;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };\n\t\t335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };\n\t\t33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };\n\t\t33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };\n\t\t33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };\n\t\t33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };\n\t\t9F6BD09BA96E2AF7C010FE56 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08E3BDA1523054ED6760AE62 /* Pods_RunnerTests.framework */; };\n\t\tDF8AA9981CDF7F69CEF77F6A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A1A9B9A4D688A3232173CD /* Pods_Runner.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 33CC10E52044A3C60003C045 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 33CC10EC2044A3C60003C045;\n\t\t\tremoteInfo = Runner;\n\t\t};\n\t\t33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 33CC10E52044A3C60003C045 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 33CC111A2044C6BA0003C045;\n\t\t\tremoteInfo = FLX;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t33CC110E2044A8840003C045 /* Bundle Framework */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Bundle Framework\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t003648BC39E5F7D35428A670 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RunnerTests.release.xcconfig\"; path = \"Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t08E3BDA1523054ED6760AE62 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t31FC63F7592C2F05FF120F0E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.release.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = \"<group>\"; };\n\t\t333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = \"<group>\"; };\n\t\t335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = \"<group>\"; };\n\t\t33CC10ED2044A3C60003C045 /* app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = app.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = \"<group>\"; };\n\t\t33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = \"<group>\"; };\n\t\t33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Flutter-Debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = \"Flutter-Release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = \"Flutter-Generated.xcconfig\"; path = \"ephemeral/Flutter-Generated.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = \"<group>\"; };\n\t\t33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = \"<group>\"; };\n\t\t33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = \"<group>\"; };\n\t\t648CB31E22E4C3B35BF264F5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RunnerTests.debug.xcconfig\"; path = \"Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t64A1A9B9A4D688A3232173CD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tA0B1C509DC22BB9DD1C2F40C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.debug.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB7DA457DA0AB9275D34B9AD9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.profile.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE7722ADAA895D039ADB120EA /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RunnerTests.profile.xcconfig\"; path = \"Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t331C80D2294CF70F00263BE5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9F6BD09BA96E2AF7C010FE56 /* Pods_RunnerTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t33CC10EA2044A3C60003C045 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDF8AA9981CDF7F69CEF77F6A /* Pods_Runner.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t331C80D6294CF71000263BE5 /* RunnerTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t331C80D7294CF71000263BE5 /* RunnerTests.swift */,\n\t\t\t);\n\t\t\tpath = RunnerTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33BA886A226E78AF003329D5 /* Configs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33E5194F232828860026EE4D /* AppInfo.xcconfig */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t333000ED22D3DE5D00554162 /* Warnings.xcconfig */,\n\t\t\t);\n\t\t\tpath = Configs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33CC10E42044A3C60003C045 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33FAB671232836740065AC1E /* Runner */,\n\t\t\t\t33CEB47122A05771004F2AC0 /* Flutter */,\n\t\t\t\t331C80D6294CF71000263BE5 /* RunnerTests */,\n\t\t\t\t33CC10EE2044A3C60003C045 /* Products */,\n\t\t\t\tD73912EC22F37F3D000D13A0 /* Frameworks */,\n\t\t\t\tC4F510EC2CAEF115B347A87D /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33CC10EE2044A3C60003C045 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33CC10ED2044A3C60003C045 /* app.app */,\n\t\t\t\t331C80D5294CF71000263BE5 /* RunnerTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33CC11242044D66E0003C045 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33CC10F22044A3C60003C045 /* Assets.xcassets */,\n\t\t\t\t33CC10F42044A3C60003C045 /* MainMenu.xib */,\n\t\t\t\t33CC10F72044A3C60003C045 /* Info.plist */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ..;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33CEB47122A05771004F2AC0 /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,\n\t\t\t\t33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,\n\t\t\t\t33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,\n\t\t\t\t33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,\n\t\t\t);\n\t\t\tpath = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t33FAB671232836740065AC1E /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33CC10F02044A3C60003C045 /* AppDelegate.swift */,\n\t\t\t\t33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,\n\t\t\t\t33E51913231747F40026EE4D /* DebugProfile.entitlements */,\n\t\t\t\t33E51914231749380026EE4D /* Release.entitlements */,\n\t\t\t\t33CC11242044D66E0003C045 /* Resources */,\n\t\t\t\t33BA886A226E78AF003329D5 /* Configs */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC4F510EC2CAEF115B347A87D /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA0B1C509DC22BB9DD1C2F40C /* Pods-Runner.debug.xcconfig */,\n\t\t\t\t31FC63F7592C2F05FF120F0E /* Pods-Runner.release.xcconfig */,\n\t\t\t\tB7DA457DA0AB9275D34B9AD9 /* Pods-Runner.profile.xcconfig */,\n\t\t\t\t648CB31E22E4C3B35BF264F5 /* Pods-RunnerTests.debug.xcconfig */,\n\t\t\t\t003648BC39E5F7D35428A670 /* Pods-RunnerTests.release.xcconfig */,\n\t\t\t\tE7722ADAA895D039ADB120EA /* Pods-RunnerTests.profile.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73912EC22F37F3D000D13A0 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t64A1A9B9A4D688A3232173CD /* Pods_Runner.framework */,\n\t\t\t\t08E3BDA1523054ED6760AE62 /* Pods_RunnerTests.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t331C80D4294CF70F00263BE5 /* RunnerTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget \"RunnerTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE5D55CC14E732717F958607E /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t331C80D1294CF70F00263BE5 /* Sources */,\n\t\t\t\t331C80D2294CF70F00263BE5 /* Frameworks */,\n\t\t\t\t331C80D3294CF70F00263BE5 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t331C80DA294CF71000263BE5 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = RunnerTests;\n\t\t\tproductName = RunnerTests;\n\t\t\tproductReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t33CC10EC2044A3C60003C045 /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t03CC2E75C6CE8FD0244BEC09 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t33CC10E92044A3C60003C045 /* Sources */,\n\t\t\t\t33CC10EA2044A3C60003C045 /* Frameworks */,\n\t\t\t\t33CC10EB2044A3C60003C045 /* Resources */,\n\t\t\t\t33CC110E2044A8840003C045 /* Bundle Framework */,\n\t\t\t\t3399D490228B24CF009A79C7 /* ShellScript */,\n\t\t\t\tF41B3E5579167C54B5D49AAC /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t33CC11202044C79F0003C045 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 33CC10ED2044A3C60003C045 /* app.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t33CC10E52044A3C60003C045 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0920;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tORGANIZATIONNAME = \"\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t331C80D4294CF70F00263BE5 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.0;\n\t\t\t\t\t\tTestTargetID = 33CC10EC2044A3C60003C045;\n\t\t\t\t\t};\n\t\t\t\t\t33CC10EC2044A3C60003C045 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tLastSwiftMigration = 1100;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.Sandbox = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t33CC111A2044C6BA0003C045 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Manual;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 33CC10E42044A3C60003C045;\n\t\t\tproductRefGroup = 33CC10EE2044A3C60003C045 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t33CC10EC2044A3C60003C045 /* Runner */,\n\t\t\t\t331C80D4294CF70F00263BE5 /* RunnerTests */,\n\t\t\t\t33CC111A2044C6BA0003C045 /* Flutter Assemble */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t331C80D3294CF70F00263BE5 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t33CC10EB2044A3C60003C045 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,\n\t\t\t\t33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t03CC2E75C6CE8FD0244BEC09 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t3399D490228B24CF009A79C7 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\talwaysOutOfDate = 1;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"$PRODUCT_NAME.app\\\" > \\\"$PROJECT_DIR\\\"/Flutter/ephemeral/.app_filename && \\\"$FLUTTER_ROOT\\\"/packages/flutter_tools/bin/macos_assemble.sh embed\\n\";\n\t\t};\n\t\t33CC111E2044C6BF0003C045 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\tFlutter/ephemeral/FlutterInputs.xcfilelist,\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\tFlutter/ephemeral/tripwire,\n\t\t\t);\n\t\t\toutputFileListPaths = (\n\t\t\t\tFlutter/ephemeral/FlutterOutputs.xcfilelist,\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"$FLUTTER_ROOT\\\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire\";\n\t\t};\n\t\tE5D55CC14E732717F958607E /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF41B3E5579167C54B5D49AAC /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t331C80D1294CF70F00263BE5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t33CC10E92044A3C60003C045 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,\n\t\t\t\t33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,\n\t\t\t\t335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 33CC10EC2044A3C60003C045 /* Runner */;\n\t\t\ttargetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t33CC11202044C79F0003C045 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;\n\t\t\ttargetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t33CC10F42044A3C60003C045 /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t33CC10F52044A3C60003C045 /* Base */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t331C80DB294CF71000263BE5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 648CB31E22E4C3B35BF264F5 /* Pods-RunnerTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.yourapp.app.RunnerTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/app\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t331C80DC294CF71000263BE5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 003648BC39E5F7D35428A670 /* Pods-RunnerTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.yourapp.app.RunnerTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/app\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t331C80DD294CF71000263BE5 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E7722ADAA895D039ADB120EA /* Pods-RunnerTests.profile.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.yourapp.app.RunnerTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/app\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t338D0CE9231458BD00FA5F75 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t338D0CEA231458BD00FA5F75 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t338D0CEB231458BD00FA5F75 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t33CC10F92044A3C60003C045 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t33CC10FA2044A3C60003C045 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t33CC10FC2044A3C60003C045 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t33CC10FD2044A3C60003C045 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t33CC111C2044C6BA0003C045 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t33CC111D2044C6BA0003C045 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget \"RunnerTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t331C80DB294CF71000263BE5 /* Debug */,\n\t\t\t\t331C80DC294CF71000263BE5 /* Release */,\n\t\t\t\t331C80DD294CF71000263BE5 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t33CC10E82044A3C60003C045 /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t33CC10F92044A3C60003C045 /* Debug */,\n\t\t\t\t33CC10FA2044A3C60003C045 /* Release */,\n\t\t\t\t338D0CE9231458BD00FA5F75 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t33CC10FC2044A3C60003C045 /* Debug */,\n\t\t\t\t33CC10FD2044A3C60003C045 /* Release */,\n\t\t\t\t338D0CEA231458BD00FA5F75 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget \"Flutter Assemble\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t33CC111C2044C6BA0003C045 /* Debug */,\n\t\t\t\t33CC111D2044C6BA0003C045 /* Release */,\n\t\t\t\t338D0CEB231458BD00FA5F75 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 33CC10E52044A3C60003C045 /* Project object */;\n}\n"
  },
  {
    "path": "legacy/app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"33CC10EC2044A3C60003C045\"\n               BuildableName = \"app.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"33CC10EC2044A3C60003C045\"\n            BuildableName = \"app.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"331C80D4294CF70F00263BE5\"\n               BuildableName = \"RunnerTests.xctest\"\n               BlueprintName = \"RunnerTests\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"33CC10EC2044A3C60003C045\"\n            BuildableName = \"app.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"33CC10EC2044A3C60003C045\"\n            BuildableName = \"app.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "legacy/app/macos/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "legacy/app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "legacy/app/macos/RunnerTests/RunnerTests.swift",
    "content": "import FlutterMacOS\nimport Cocoa\nimport XCTest\n\nclass RunnerTests: XCTestCase {\n\n  func testExample() {\n    // If you add code to the Runner application, consider adding tests here.\n    // See https://developer.apple.com/documentation/xctest for more information about using XCTest.\n  }\n\n}\n"
  },
  {
    "path": "legacy/app/pubspec.yaml",
    "content": "name: glowby\ndescription: Glowby app.\n\n# The following line prevents the package from being accidentally published to\n# pub.dev using `pub publish`. This is preferred for private packages.\npublish_to: \"none\" # Remove this line if you wish to publish to pub.dev\n\n# The following defines the version and build number for your application.\n# A version number is three numbers separated by dots, like 1.2.43\n# followed by an optional build number separated by a +.\n# Both the version and the builder number may be overridden in flutter\n# build by specifying --build-name and --build-number, respectively.\n# In Android, build-name is used as versionName while build-number used as versionCode.\n# Read more about Android versioning at https://developer.android.com/studio/publish/versioning\n# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.\n# Read more about iOS versioning at\n# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html\nversion: 2.0.0\n\nenvironment:\n  sdk: \">=2.19.5 <3.0.0\"\n\ndependencies:\n  # Uncomment the next line to compile the web version\n  js: ^0.6.7\n  url_launcher: ^6.2.6\n  flutter_tts: ^4.0.2\n  http: ^1.2.1\n  shared_preferences: ^2.2.3\n  flutter_secure_storage: ^9.2.1\n  file_picker: ^8.0.3\n  flutter_image_compress: ^2.3.0\n  path_provider: ^2.1.3\n  flutter_highlight: ^0.7.0\n  webview_flutter: ^4.7.0\n  flutter_lints: ^4.0.0\n  image_picker: ^1.1.1\n  cupertino_icons: ^1.0.8\n  async: any\n\n  flutter:\n    sdk: flutter\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n# For information on the generic Dart part of this file, see the\n# following page: https://dart.dev/tools/pub/pubspec\n\nflutter_icons:\n  image_path: \"assets/icon.png\"\n  ios: true\n  android: true\n\n# The following section is specific to Flutter.\nflutter:\n  # The following line ensures that the Material Icons font is\n  # included with your application, so that you can use the icons in\n  # the material Icons class.\n  uses-material-design: true\n\n  # To add assets to your application, add an assets section, like this:\n  assets:\n    - assets/talk.glowbom\n    - assets/glowbom.png\n\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.dev/assets-and-images/#resolution-aware.\n\n  # For details regarding adding assets from package dependencies, see\n  # https://flutter.dev/assets-and-images/#from-packages\n\n  # To add custom fonts to your application, add a fonts section here,\n  # in this \"flutter\" section. Each entry in this list should have a\n  # \"family\" key with the font family name, and a \"fonts\" key with a\n  # list giving the asset and other descriptors for the font. For\n  # example:\n  # fonts:\n  #   - family: Schyler\n  #     fonts:\n  #       - asset: fonts/Schyler-Regular.ttf\n  #       - asset: fonts/Schyler-Italic.ttf\n  #         style: italic\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #\n  # For details regarding fonts from package dependencies,\n  # see https://flutter.dev/custom-fonts/#from-packages\n"
  },
  {
    "path": "legacy/app/web/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <meta content=\"IE=Edge\" http-equiv=\"X-UA-Compatible\">\n  <meta name=\"description\" content=\"Glowby\">\n\n  <!-- iOS meta tags & icons -->\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n  <meta name=\"apple-mobile-web-app-title\" content=\"Glowby\">\n  <link rel=\"apple-touch-icon\" href=\"icons/Icon-192.png\">\n\n  <!-- Favicon -->\n  <link rel=\"shortcut icon\" type=\"image/png\" href=\"favicon.png\"/>\n\n  <title>Glowby</title>\n  <link rel=\"manifest\" href=\"manifest.json\">\n</head>\n<body>\n  <script src=\"tv.js\"></script>\n  <!-- This script installs service_worker.js to provide PWA functionality to\n       application. For more information, see:\n       https://developers.google.com/web/fundamentals/primers/service-workers -->\n  <script>\n    if ('serviceWorker' in navigator) {\n      window.addEventListener('load', function () {\n        navigator.serviceWorker.register('flutter_service_worker.js');\n      });\n    }\n  </script>\n  <script src=\"main.dart.js\" type=\"application/javascript\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "legacy/app/web/manifest.json",
    "content": "{\n    \"name\": \"Quiz App\",\n    \"short_name\": \"Quiz\",\n    \"start_url\": \".\",\n    \"display\": \"standalone\",\n    \"background_color\": \"#0175C2\",\n    \"theme_color\": \"#0175C2\",\n    \"description\": \"Answer questions correctly.\",\n    \"orientation\": \"portrait-primary\",\n    \"prefer_related_applications\": false,\n    \"icons\": [\n        {\n          \"src\": \"images/icons/icon-72x72.png\",\n          \"sizes\": \"72x72\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-96x96.png\",\n          \"sizes\": \"96x96\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-128x128.png\",\n          \"sizes\": \"128x128\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-144x144.png\",\n          \"sizes\": \"144x144\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-152x152.png\",\n          \"sizes\": \"152x152\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-192x192.png\",\n          \"sizes\": \"192x192\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-384x384.png\",\n          \"sizes\": \"384x384\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-512x512.png\",\n          \"sizes\": \"512x512\",\n          \"type\": \"image/png\"\n        }\n      ]\n}\n"
  },
  {
    "path": "legacy/app/web/tv.js",
    "content": "const SpeechRecognition =\n  window.SpeechRecognition || window.webkitSpeechRecognition;\n\nif (SpeechRecognition != null) {\n  const r = new SpeechRecognition();\n  r.lang = \"en-US\";\n  r.interimResults = false;\n\n  r.addEventListener(\"result\", (e) => {\n    let last = e.results.length - 1;\n    let text = e.results[last][0].transcript;\n\n    //console.log(\"last: \" + last);\n    //console.log(\"text: \" + text);\n\n    //console.log(\"Confidence: \" + e.results[0][0].confidence);\n\n    vr(text);\n  });\n\n  function rv(lang) {\n    if (typeof lang !== \"undefined\" && lang !== null) {\n      r.lang = lang;\n      //console.log(\"switched to \" + lang);\n    }\n\n    r.start();\n    //console.log(\"recordVoice call\");\n  }\n} else {\n  //console.error(\"SpeechRecognition API not supported in this browser.\");\n}\n"
  },
  {
    "path": "legacy/app/windows/.gitignore",
    "content": "flutter/ephemeral/\n\n# Visual Studio user-specific files.\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Visual Studio build-related files.\nx64/\nx86/\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n"
  },
  {
    "path": "legacy/app/windows/CMakeLists.txt",
    "content": "# Project-level configuration.\ncmake_minimum_required(VERSION 3.14)\nproject(app LANGUAGES CXX)\n\n# The name of the executable created for the application. Change this to change\n# the on-disk name of your application.\nset(BINARY_NAME \"app\")\n\n# Explicitly opt in to modern CMake behaviors to avoid warnings with recent\n# versions of CMake.\ncmake_policy(VERSION 3.14...3.25)\n\n# Define build configuration option.\nget_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)\nif(IS_MULTICONFIG)\n  set(CMAKE_CONFIGURATION_TYPES \"Debug;Profile;Release\"\n    CACHE STRING \"\" FORCE)\nelse()\n  if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)\n    set(CMAKE_BUILD_TYPE \"Debug\" CACHE\n      STRING \"Flutter build mode\" FORCE)\n    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS\n      \"Debug\" \"Profile\" \"Release\")\n  endif()\nendif()\n# Define settings for the Profile build mode.\nset(CMAKE_EXE_LINKER_FLAGS_PROFILE \"${CMAKE_EXE_LINKER_FLAGS_RELEASE}\")\nset(CMAKE_SHARED_LINKER_FLAGS_PROFILE \"${CMAKE_SHARED_LINKER_FLAGS_RELEASE}\")\nset(CMAKE_C_FLAGS_PROFILE \"${CMAKE_C_FLAGS_RELEASE}\")\nset(CMAKE_CXX_FLAGS_PROFILE \"${CMAKE_CXX_FLAGS_RELEASE}\")\n\n# Use Unicode for all projects.\nadd_definitions(-DUNICODE -D_UNICODE)\n\n# Compilation settings that should be applied to most targets.\n#\n# Be cautious about adding new options here, as plugins use this function by\n# default. In most cases, you should add new options to specific targets instead\n# of modifying this function.\nfunction(APPLY_STANDARD_SETTINGS TARGET)\n  target_compile_features(${TARGET} PUBLIC cxx_std_17)\n  target_compile_options(${TARGET} PRIVATE /W4 /WX /wd\"4100\")\n  target_compile_options(${TARGET} PRIVATE /EHsc)\n  target_compile_definitions(${TARGET} PRIVATE \"_HAS_EXCEPTIONS=0\")\n  target_compile_definitions(${TARGET} PRIVATE \"$<$<CONFIG:Debug>:_DEBUG>\")\nendfunction()\n\n# Flutter library and tool build rules.\nset(FLUTTER_MANAGED_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/flutter\")\nadd_subdirectory(${FLUTTER_MANAGED_DIR})\n\n# Application build; see runner/CMakeLists.txt.\nadd_subdirectory(\"runner\")\n\n\n# Generated plugin build rules, which manage building the plugins and adding\n# them to the application.\ninclude(flutter/generated_plugins.cmake)\n\n\n# === Installation ===\n# Support files are copied into place next to the executable, so that it can\n# run in place. This is done instead of making a separate bundle (as on Linux)\n# so that building and running from within Visual Studio will work.\nset(BUILD_BUNDLE_DIR \"$<TARGET_FILE_DIR:${BINARY_NAME}>\")\n# Make the \"install\" step default, as it's required to run.\nset(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)\nif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)\n  set(CMAKE_INSTALL_PREFIX \"${BUILD_BUNDLE_DIR}\" CACHE PATH \"...\" FORCE)\nendif()\n\nset(INSTALL_BUNDLE_DATA_DIR \"${CMAKE_INSTALL_PREFIX}/data\")\nset(INSTALL_BUNDLE_LIB_DIR \"${CMAKE_INSTALL_PREFIX}\")\n\ninstall(TARGETS ${BINARY_NAME} RUNTIME DESTINATION \"${CMAKE_INSTALL_PREFIX}\"\n  COMPONENT Runtime)\n\ninstall(FILES \"${FLUTTER_ICU_DATA_FILE}\" DESTINATION \"${INSTALL_BUNDLE_DATA_DIR}\"\n  COMPONENT Runtime)\n\ninstall(FILES \"${FLUTTER_LIBRARY}\" DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n  COMPONENT Runtime)\n\nif(PLUGIN_BUNDLED_LIBRARIES)\n  install(FILES \"${PLUGIN_BUNDLED_LIBRARIES}\"\n    DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n    COMPONENT Runtime)\nendif()\n\n# Copy the native assets provided by the build.dart from all packages.\nset(NATIVE_ASSETS_DIR \"${PROJECT_BUILD_DIR}native_assets/windows/\")\ninstall(DIRECTORY \"${NATIVE_ASSETS_DIR}\"\n   DESTINATION \"${INSTALL_BUNDLE_LIB_DIR}\"\n   COMPONENT Runtime)\n\n# Fully re-copy the assets directory on each build to avoid having stale files\n# from a previous install.\nset(FLUTTER_ASSET_DIR_NAME \"flutter_assets\")\ninstall(CODE \"\n  file(REMOVE_RECURSE \\\"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\\\")\n  \" COMPONENT Runtime)\ninstall(DIRECTORY \"${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}\"\n  DESTINATION \"${INSTALL_BUNDLE_DATA_DIR}\" COMPONENT Runtime)\n\n# Install the AOT library on non-Debug builds only.\ninstall(FILES \"${AOT_LIBRARY}\" DESTINATION \"${INSTALL_BUNDLE_DATA_DIR}\"\n  CONFIGURATIONS Profile;Release\n  COMPONENT Runtime)\n"
  },
  {
    "path": "legacy/app/windows/flutter/CMakeLists.txt",
    "content": "# This file controls Flutter-level build steps. It should not be edited.\ncmake_minimum_required(VERSION 3.14)\n\nset(EPHEMERAL_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/ephemeral\")\n\n# Configuration provided via flutter tool.\ninclude(${EPHEMERAL_DIR}/generated_config.cmake)\n\n# TODO: Move the rest of this into files in ephemeral. See\n# https://github.com/flutter/flutter/issues/57146.\nset(WRAPPER_ROOT \"${EPHEMERAL_DIR}/cpp_client_wrapper\")\n\n# Set fallback configurations for older versions of the flutter tool.\nif (NOT DEFINED FLUTTER_TARGET_PLATFORM)\n  set(FLUTTER_TARGET_PLATFORM \"windows-x64\")\nendif()\n\n# === Flutter Library ===\nset(FLUTTER_LIBRARY \"${EPHEMERAL_DIR}/flutter_windows.dll\")\n\n# Published to parent scope for install step.\nset(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)\nset(FLUTTER_ICU_DATA_FILE \"${EPHEMERAL_DIR}/icudtl.dat\" PARENT_SCOPE)\nset(PROJECT_BUILD_DIR \"${PROJECT_DIR}/build/\" PARENT_SCOPE)\nset(AOT_LIBRARY \"${PROJECT_DIR}/build/windows/app.so\" PARENT_SCOPE)\n\nlist(APPEND FLUTTER_LIBRARY_HEADERS\n  \"flutter_export.h\"\n  \"flutter_windows.h\"\n  \"flutter_messenger.h\"\n  \"flutter_plugin_registrar.h\"\n  \"flutter_texture_registrar.h\"\n)\nlist(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND \"${EPHEMERAL_DIR}/\")\nadd_library(flutter INTERFACE)\ntarget_include_directories(flutter INTERFACE\n  \"${EPHEMERAL_DIR}\"\n)\ntarget_link_libraries(flutter INTERFACE \"${FLUTTER_LIBRARY}.lib\")\nadd_dependencies(flutter flutter_assemble)\n\n# === Wrapper ===\nlist(APPEND CPP_WRAPPER_SOURCES_CORE\n  \"core_implementations.cc\"\n  \"standard_codec.cc\"\n)\nlist(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND \"${WRAPPER_ROOT}/\")\nlist(APPEND CPP_WRAPPER_SOURCES_PLUGIN\n  \"plugin_registrar.cc\"\n)\nlist(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND \"${WRAPPER_ROOT}/\")\nlist(APPEND CPP_WRAPPER_SOURCES_APP\n  \"flutter_engine.cc\"\n  \"flutter_view_controller.cc\"\n)\nlist(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND \"${WRAPPER_ROOT}/\")\n\n# Wrapper sources needed for a plugin.\nadd_library(flutter_wrapper_plugin STATIC\n  ${CPP_WRAPPER_SOURCES_CORE}\n  ${CPP_WRAPPER_SOURCES_PLUGIN}\n)\napply_standard_settings(flutter_wrapper_plugin)\nset_target_properties(flutter_wrapper_plugin PROPERTIES\n  POSITION_INDEPENDENT_CODE ON)\nset_target_properties(flutter_wrapper_plugin PROPERTIES\n  CXX_VISIBILITY_PRESET hidden)\ntarget_link_libraries(flutter_wrapper_plugin PUBLIC flutter)\ntarget_include_directories(flutter_wrapper_plugin PUBLIC\n  \"${WRAPPER_ROOT}/include\"\n)\nadd_dependencies(flutter_wrapper_plugin flutter_assemble)\n\n# Wrapper sources needed for the runner.\nadd_library(flutter_wrapper_app STATIC\n  ${CPP_WRAPPER_SOURCES_CORE}\n  ${CPP_WRAPPER_SOURCES_APP}\n)\napply_standard_settings(flutter_wrapper_app)\ntarget_link_libraries(flutter_wrapper_app PUBLIC flutter)\ntarget_include_directories(flutter_wrapper_app PUBLIC\n  \"${WRAPPER_ROOT}/include\"\n)\nadd_dependencies(flutter_wrapper_app flutter_assemble)\n\n# === Flutter tool backend ===\n# _phony_ is a non-existent file to force this command to run every time,\n# since currently there's no way to get a full input/output list from the\n# flutter tool.\nset(PHONY_OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/_phony_\")\nset_source_files_properties(\"${PHONY_OUTPUT}\" PROPERTIES SYMBOLIC TRUE)\nadd_custom_command(\n  OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}\n    ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}\n    ${CPP_WRAPPER_SOURCES_APP}\n    ${PHONY_OUTPUT}\n  COMMAND ${CMAKE_COMMAND} -E env\n    ${FLUTTER_TOOL_ENVIRONMENT}\n    \"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat\"\n      ${FLUTTER_TARGET_PLATFORM} $<CONFIG>\n  VERBATIM\n)\nadd_custom_target(flutter_assemble DEPENDS\n  \"${FLUTTER_LIBRARY}\"\n  ${FLUTTER_LIBRARY_HEADERS}\n  ${CPP_WRAPPER_SOURCES_CORE}\n  ${CPP_WRAPPER_SOURCES_PLUGIN}\n  ${CPP_WRAPPER_SOURCES_APP}\n)\n"
  },
  {
    "path": "legacy/app/windows/flutter/generated_plugin_registrant.cc",
    "content": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#include \"generated_plugin_registrant.h\"\n\n#include <file_selector_windows/file_selector_windows.h>\n#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>\n#include <flutter_tts/flutter_tts_plugin.h>\n#include <url_launcher_windows/url_launcher_windows.h>\n\nvoid RegisterPlugins(flutter::PluginRegistry* registry) {\n  FileSelectorWindowsRegisterWithRegistrar(\n      registry->GetRegistrarForPlugin(\"FileSelectorWindows\"));\n  FlutterSecureStorageWindowsPluginRegisterWithRegistrar(\n      registry->GetRegistrarForPlugin(\"FlutterSecureStorageWindowsPlugin\"));\n  FlutterTtsPluginRegisterWithRegistrar(\n      registry->GetRegistrarForPlugin(\"FlutterTtsPlugin\"));\n  UrlLauncherWindowsRegisterWithRegistrar(\n      registry->GetRegistrarForPlugin(\"UrlLauncherWindows\"));\n}\n"
  },
  {
    "path": "legacy/app/windows/flutter/generated_plugin_registrant.h",
    "content": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#ifndef GENERATED_PLUGIN_REGISTRANT_\n#define GENERATED_PLUGIN_REGISTRANT_\n\n#include <flutter/plugin_registry.h>\n\n// Registers Flutter plugins.\nvoid RegisterPlugins(flutter::PluginRegistry* registry);\n\n#endif  // GENERATED_PLUGIN_REGISTRANT_\n"
  },
  {
    "path": "legacy/app/windows/flutter/generated_plugins.cmake",
    "content": "#\n# Generated file, do not edit.\n#\n\nlist(APPEND FLUTTER_PLUGIN_LIST\n  file_selector_windows\n  flutter_secure_storage_windows\n  flutter_tts\n  url_launcher_windows\n)\n\nlist(APPEND FLUTTER_FFI_PLUGIN_LIST\n)\n\nset(PLUGIN_BUNDLED_LIBRARIES)\n\nforeach(plugin ${FLUTTER_PLUGIN_LIST})\n  add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})\n  target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)\n  list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)\n  list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})\nendforeach(plugin)\n\nforeach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})\n  add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})\n  list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})\nendforeach(ffi_plugin)\n"
  },
  {
    "path": "legacy/app/windows/runner/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.14)\nproject(runner LANGUAGES CXX)\n\n# Define the application target. To change its name, change BINARY_NAME in the\n# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer\n# work.\n#\n# Any new source files that you add to the application should be added here.\nadd_executable(${BINARY_NAME} WIN32\n  \"flutter_window.cpp\"\n  \"main.cpp\"\n  \"utils.cpp\"\n  \"win32_window.cpp\"\n  \"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc\"\n  \"Runner.rc\"\n  \"runner.exe.manifest\"\n)\n\n# Apply the standard set of build settings. This can be removed for applications\n# that need different build settings.\napply_standard_settings(${BINARY_NAME})\n\n# Add preprocessor definitions for the build version.\ntarget_compile_definitions(${BINARY_NAME} PRIVATE \"FLUTTER_VERSION=\\\"${FLUTTER_VERSION}\\\"\")\ntarget_compile_definitions(${BINARY_NAME} PRIVATE \"FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}\")\ntarget_compile_definitions(${BINARY_NAME} PRIVATE \"FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}\")\ntarget_compile_definitions(${BINARY_NAME} PRIVATE \"FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}\")\ntarget_compile_definitions(${BINARY_NAME} PRIVATE \"FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}\")\n\n# Disable Windows macros that collide with C++ standard library functions.\ntarget_compile_definitions(${BINARY_NAME} PRIVATE \"NOMINMAX\")\n\n# Add dependency libraries and include directories. Add any application-specific\n# dependencies here.\ntarget_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)\ntarget_link_libraries(${BINARY_NAME} PRIVATE \"dwmapi.lib\")\ntarget_include_directories(${BINARY_NAME} PRIVATE \"${CMAKE_SOURCE_DIR}\")\n\n# Run the Flutter tool portions of the build. This must not be removed.\nadd_dependencies(${BINARY_NAME} flutter_assemble)\n"
  },
  {
    "path": "legacy/app/windows/runner/Runner.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#pragma code_page(65001)\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include \"winres.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE\nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE\nBEGIN\n    \"#include \"\"winres.h\"\"\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE\nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDI_APP_ICON            ICON                    \"resources\\\\app_icon.ico\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\n#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)\n#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD\n#else\n#define VERSION_AS_NUMBER 1,0,0,0\n#endif\n\n#if defined(FLUTTER_VERSION)\n#define VERSION_AS_STRING FLUTTER_VERSION\n#else\n#define VERSION_AS_STRING \"1.0.0\"\n#endif\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION VERSION_AS_NUMBER\n PRODUCTVERSION VERSION_AS_NUMBER\n FILEFLAGSMASK VS_FFI_FILEFLAGSMASK\n#ifdef _DEBUG\n FILEFLAGS VS_FF_DEBUG\n#else\n FILEFLAGS 0x0L\n#endif\n FILEOS VOS__WINDOWS32\n FILETYPE VFT_APP\n FILESUBTYPE 0x0L\nBEGIN\n    BLOCK \"StringFileInfo\"\n    BEGIN\n        BLOCK \"040904e4\"\n        BEGIN\n            VALUE \"CompanyName\", \"com.yourapp\" \"\\0\"\n            VALUE \"FileDescription\", \"app\" \"\\0\"\n            VALUE \"FileVersion\", VERSION_AS_STRING \"\\0\"\n            VALUE \"InternalName\", \"app\" \"\\0\"\n            VALUE \"LegalCopyright\", \"Copyright (C) 2024 com.yourapp. All rights reserved.\" \"\\0\"\n            VALUE \"OriginalFilename\", \"app.exe\" \"\\0\"\n            VALUE \"ProductName\", \"app\" \"\\0\"\n            VALUE \"ProductVersion\", VERSION_AS_STRING \"\\0\"\n        END\n    END\n    BLOCK \"VarFileInfo\"\n    BEGIN\n        VALUE \"Translation\", 0x409, 1252\n    END\nEND\n\n#endif    // English (United States) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n"
  },
  {
    "path": "legacy/app/windows/runner/flutter_window.cpp",
    "content": "#include \"flutter_window.h\"\n\n#include <optional>\n\n#include \"flutter/generated_plugin_registrant.h\"\n\nFlutterWindow::FlutterWindow(const flutter::DartProject& project)\n    : project_(project) {}\n\nFlutterWindow::~FlutterWindow() {}\n\nbool FlutterWindow::OnCreate() {\n  if (!Win32Window::OnCreate()) {\n    return false;\n  }\n\n  RECT frame = GetClientArea();\n\n  // The size here must match the window dimensions to avoid unnecessary surface\n  // creation / destruction in the startup path.\n  flutter_controller_ = std::make_unique<flutter::FlutterViewController>(\n      frame.right - frame.left, frame.bottom - frame.top, project_);\n  // Ensure that basic setup of the controller was successful.\n  if (!flutter_controller_->engine() || !flutter_controller_->view()) {\n    return false;\n  }\n  RegisterPlugins(flutter_controller_->engine());\n  SetChildContent(flutter_controller_->view()->GetNativeWindow());\n\n  flutter_controller_->engine()->SetNextFrameCallback([&]() {\n    this->Show();\n  });\n\n  // Flutter can complete the first frame before the \"show window\" callback is\n  // registered. The following call ensures a frame is pending to ensure the\n  // window is shown. It is a no-op if the first frame hasn't completed yet.\n  flutter_controller_->ForceRedraw();\n\n  return true;\n}\n\nvoid FlutterWindow::OnDestroy() {\n  if (flutter_controller_) {\n    flutter_controller_ = nullptr;\n  }\n\n  Win32Window::OnDestroy();\n}\n\nLRESULT\nFlutterWindow::MessageHandler(HWND hwnd, UINT const message,\n                              WPARAM const wparam,\n                              LPARAM const lparam) noexcept {\n  // Give Flutter, including plugins, an opportunity to handle window messages.\n  if (flutter_controller_) {\n    std::optional<LRESULT> result =\n        flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,\n                                                      lparam);\n    if (result) {\n      return *result;\n    }\n  }\n\n  switch (message) {\n    case WM_FONTCHANGE:\n      flutter_controller_->engine()->ReloadSystemFonts();\n      break;\n  }\n\n  return Win32Window::MessageHandler(hwnd, message, wparam, lparam);\n}\n"
  },
  {
    "path": "legacy/app/windows/runner/flutter_window.h",
    "content": "#ifndef RUNNER_FLUTTER_WINDOW_H_\n#define RUNNER_FLUTTER_WINDOW_H_\n\n#include <flutter/dart_project.h>\n#include <flutter/flutter_view_controller.h>\n\n#include <memory>\n\n#include \"win32_window.h\"\n\n// A window that does nothing but host a Flutter view.\nclass FlutterWindow : public Win32Window {\n public:\n  // Creates a new FlutterWindow hosting a Flutter view running |project|.\n  explicit FlutterWindow(const flutter::DartProject& project);\n  virtual ~FlutterWindow();\n\n protected:\n  // Win32Window:\n  bool OnCreate() override;\n  void OnDestroy() override;\n  LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,\n                         LPARAM const lparam) noexcept override;\n\n private:\n  // The project to run.\n  flutter::DartProject project_;\n\n  // The Flutter instance hosted by this window.\n  std::unique_ptr<flutter::FlutterViewController> flutter_controller_;\n};\n\n#endif  // RUNNER_FLUTTER_WINDOW_H_\n"
  },
  {
    "path": "legacy/app/windows/runner/main.cpp",
    "content": "#include <flutter/dart_project.h>\n#include <flutter/flutter_view_controller.h>\n#include <windows.h>\n\n#include \"flutter_window.h\"\n#include \"utils.h\"\n\nint APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,\n                      _In_ wchar_t *command_line, _In_ int show_command) {\n  // Attach to console when present (e.g., 'flutter run') or create a\n  // new console when running with a debugger.\n  if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {\n    CreateAndAttachConsole();\n  }\n\n  // Initialize COM, so that it is available for use in the library and/or\n  // plugins.\n  ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);\n\n  flutter::DartProject project(L\"data\");\n\n  std::vector<std::string> command_line_arguments =\n      GetCommandLineArguments();\n\n  project.set_dart_entrypoint_arguments(std::move(command_line_arguments));\n\n  FlutterWindow window(project);\n  Win32Window::Point origin(10, 10);\n  Win32Window::Size size(1280, 720);\n  if (!window.Create(L\"app\", origin, size)) {\n    return EXIT_FAILURE;\n  }\n  window.SetQuitOnClose(true);\n\n  ::MSG msg;\n  while (::GetMessage(&msg, nullptr, 0, 0)) {\n    ::TranslateMessage(&msg);\n    ::DispatchMessage(&msg);\n  }\n\n  ::CoUninitialize();\n  return EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "legacy/app/windows/runner/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Runner.rc\n//\n#define IDI_APP_ICON                    101\n\n// Next default values for new objects\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        102\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n"
  },
  {
    "path": "legacy/app/windows/runner/runner.exe.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2</dpiAwareness>\n    </windowsSettings>\n  </application>\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- Windows 10 and Windows 11 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\"/>\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\"/>\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"/>\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/>\n    </application>\n  </compatibility>\n</assembly>\n"
  },
  {
    "path": "legacy/app/windows/runner/utils.cpp",
    "content": "#include \"utils.h\"\n\n#include <flutter_windows.h>\n#include <io.h>\n#include <stdio.h>\n#include <windows.h>\n\n#include <iostream>\n\nvoid CreateAndAttachConsole() {\n  if (::AllocConsole()) {\n    FILE *unused;\n    if (freopen_s(&unused, \"CONOUT$\", \"w\", stdout)) {\n      _dup2(_fileno(stdout), 1);\n    }\n    if (freopen_s(&unused, \"CONOUT$\", \"w\", stderr)) {\n      _dup2(_fileno(stdout), 2);\n    }\n    std::ios::sync_with_stdio();\n    FlutterDesktopResyncOutputStreams();\n  }\n}\n\nstd::vector<std::string> GetCommandLineArguments() {\n  // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.\n  int argc;\n  wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);\n  if (argv == nullptr) {\n    return std::vector<std::string>();\n  }\n\n  std::vector<std::string> command_line_arguments;\n\n  // Skip the first argument as it's the binary name.\n  for (int i = 1; i < argc; i++) {\n    command_line_arguments.push_back(Utf8FromUtf16(argv[i]));\n  }\n\n  ::LocalFree(argv);\n\n  return command_line_arguments;\n}\n\nstd::string Utf8FromUtf16(const wchar_t* utf16_string) {\n  if (utf16_string == nullptr) {\n    return std::string();\n  }\n  int target_length = ::WideCharToMultiByte(\n      CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,\n      -1, nullptr, 0, nullptr, nullptr)\n    -1; // remove the trailing null character\n  int input_length = (int)wcslen(utf16_string);\n  std::string utf8_string;\n  if (target_length <= 0 || target_length > utf8_string.max_size()) {\n    return utf8_string;\n  }\n  utf8_string.resize(target_length);\n  int converted_length = ::WideCharToMultiByte(\n      CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,\n      input_length, utf8_string.data(), target_length, nullptr, nullptr);\n  if (converted_length == 0) {\n    return std::string();\n  }\n  return utf8_string;\n}\n"
  },
  {
    "path": "legacy/app/windows/runner/utils.h",
    "content": "#ifndef RUNNER_UTILS_H_\n#define RUNNER_UTILS_H_\n\n#include <string>\n#include <vector>\n\n// Creates a console for the process, and redirects stdout and stderr to\n// it for both the runner and the Flutter library.\nvoid CreateAndAttachConsole();\n\n// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string\n// encoded in UTF-8. Returns an empty std::string on failure.\nstd::string Utf8FromUtf16(const wchar_t* utf16_string);\n\n// Gets the command line arguments passed in as a std::vector<std::string>,\n// encoded in UTF-8. Returns an empty std::vector<std::string> on failure.\nstd::vector<std::string> GetCommandLineArguments();\n\n#endif  // RUNNER_UTILS_H_\n"
  },
  {
    "path": "legacy/app/windows/runner/win32_window.cpp",
    "content": "#include \"win32_window.h\"\n\n#include <dwmapi.h>\n#include <flutter_windows.h>\n\n#include \"resource.h\"\n\nnamespace {\n\n/// Window attribute that enables dark mode window decorations.\n///\n/// Redefined in case the developer's machine has a Windows SDK older than\n/// version 10.0.22000.0.\n/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute\n#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE\n#define DWMWA_USE_IMMERSIVE_DARK_MODE 20\n#endif\n\nconstexpr const wchar_t kWindowClassName[] = L\"FLUTTER_RUNNER_WIN32_WINDOW\";\n\n/// Registry key for app theme preference.\n///\n/// A value of 0 indicates apps should use dark mode. A non-zero or missing\n/// value indicates apps should use light mode.\nconstexpr const wchar_t kGetPreferredBrightnessRegKey[] =\n  L\"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Themes\\\\Personalize\";\nconstexpr const wchar_t kGetPreferredBrightnessRegValue[] = L\"AppsUseLightTheme\";\n\n// The number of Win32Window objects that currently exist.\nstatic int g_active_window_count = 0;\n\nusing EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd);\n\n// Scale helper to convert logical scaler values to physical using passed in\n// scale factor\nint Scale(int source, double scale_factor) {\n  return static_cast<int>(source * scale_factor);\n}\n\n// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module.\n// This API is only needed for PerMonitor V1 awareness mode.\nvoid EnableFullDpiSupportIfAvailable(HWND hwnd) {\n  HMODULE user32_module = LoadLibraryA(\"User32.dll\");\n  if (!user32_module) {\n    return;\n  }\n  auto enable_non_client_dpi_scaling =\n      reinterpret_cast<EnableNonClientDpiScaling*>(\n          GetProcAddress(user32_module, \"EnableNonClientDpiScaling\"));\n  if (enable_non_client_dpi_scaling != nullptr) {\n    enable_non_client_dpi_scaling(hwnd);\n  }\n  FreeLibrary(user32_module);\n}\n\n}  // namespace\n\n// Manages the Win32Window's window class registration.\nclass WindowClassRegistrar {\n public:\n  ~WindowClassRegistrar() = default;\n\n  // Returns the singleton registrar instance.\n  static WindowClassRegistrar* GetInstance() {\n    if (!instance_) {\n      instance_ = new WindowClassRegistrar();\n    }\n    return instance_;\n  }\n\n  // Returns the name of the window class, registering the class if it hasn't\n  // previously been registered.\n  const wchar_t* GetWindowClass();\n\n  // Unregisters the window class. Should only be called if there are no\n  // instances of the window.\n  void UnregisterWindowClass();\n\n private:\n  WindowClassRegistrar() = default;\n\n  static WindowClassRegistrar* instance_;\n\n  bool class_registered_ = false;\n};\n\nWindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr;\n\nconst wchar_t* WindowClassRegistrar::GetWindowClass() {\n  if (!class_registered_) {\n    WNDCLASS window_class{};\n    window_class.hCursor = LoadCursor(nullptr, IDC_ARROW);\n    window_class.lpszClassName = kWindowClassName;\n    window_class.style = CS_HREDRAW | CS_VREDRAW;\n    window_class.cbClsExtra = 0;\n    window_class.cbWndExtra = 0;\n    window_class.hInstance = GetModuleHandle(nullptr);\n    window_class.hIcon =\n        LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));\n    window_class.hbrBackground = 0;\n    window_class.lpszMenuName = nullptr;\n    window_class.lpfnWndProc = Win32Window::WndProc;\n    RegisterClass(&window_class);\n    class_registered_ = true;\n  }\n  return kWindowClassName;\n}\n\nvoid WindowClassRegistrar::UnregisterWindowClass() {\n  UnregisterClass(kWindowClassName, nullptr);\n  class_registered_ = false;\n}\n\nWin32Window::Win32Window() {\n  ++g_active_window_count;\n}\n\nWin32Window::~Win32Window() {\n  --g_active_window_count;\n  Destroy();\n}\n\nbool Win32Window::Create(const std::wstring& title,\n                         const Point& origin,\n                         const Size& size) {\n  Destroy();\n\n  const wchar_t* window_class =\n      WindowClassRegistrar::GetInstance()->GetWindowClass();\n\n  const POINT target_point = {static_cast<LONG>(origin.x),\n                              static_cast<LONG>(origin.y)};\n  HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);\n  UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);\n  double scale_factor = dpi / 96.0;\n\n  HWND window = CreateWindow(\n      window_class, title.c_str(), WS_OVERLAPPEDWINDOW,\n      Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),\n      Scale(size.width, scale_factor), Scale(size.height, scale_factor),\n      nullptr, nullptr, GetModuleHandle(nullptr), this);\n\n  if (!window) {\n    return false;\n  }\n\n  UpdateTheme(window);\n\n  return OnCreate();\n}\n\nbool Win32Window::Show() {\n  return ShowWindow(window_handle_, SW_SHOWNORMAL);\n}\n\n// static\nLRESULT CALLBACK Win32Window::WndProc(HWND const window,\n                                      UINT const message,\n                                      WPARAM const wparam,\n                                      LPARAM const lparam) noexcept {\n  if (message == WM_NCCREATE) {\n    auto window_struct = reinterpret_cast<CREATESTRUCT*>(lparam);\n    SetWindowLongPtr(window, GWLP_USERDATA,\n                     reinterpret_cast<LONG_PTR>(window_struct->lpCreateParams));\n\n    auto that = static_cast<Win32Window*>(window_struct->lpCreateParams);\n    EnableFullDpiSupportIfAvailable(window);\n    that->window_handle_ = window;\n  } else if (Win32Window* that = GetThisFromHandle(window)) {\n    return that->MessageHandler(window, message, wparam, lparam);\n  }\n\n  return DefWindowProc(window, message, wparam, lparam);\n}\n\nLRESULT\nWin32Window::MessageHandler(HWND hwnd,\n                            UINT const message,\n                            WPARAM const wparam,\n                            LPARAM const lparam) noexcept {\n  switch (message) {\n    case WM_DESTROY:\n      window_handle_ = nullptr;\n      Destroy();\n      if (quit_on_close_) {\n        PostQuitMessage(0);\n      }\n      return 0;\n\n    case WM_DPICHANGED: {\n      auto newRectSize = reinterpret_cast<RECT*>(lparam);\n      LONG newWidth = newRectSize->right - newRectSize->left;\n      LONG newHeight = newRectSize->bottom - newRectSize->top;\n\n      SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth,\n                   newHeight, SWP_NOZORDER | SWP_NOACTIVATE);\n\n      return 0;\n    }\n    case WM_SIZE: {\n      RECT rect = GetClientArea();\n      if (child_content_ != nullptr) {\n        // Size and position the child window.\n        MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,\n                   rect.bottom - rect.top, TRUE);\n      }\n      return 0;\n    }\n\n    case WM_ACTIVATE:\n      if (child_content_ != nullptr) {\n        SetFocus(child_content_);\n      }\n      return 0;\n\n    case WM_DWMCOLORIZATIONCOLORCHANGED:\n      UpdateTheme(hwnd);\n      return 0;\n  }\n\n  return DefWindowProc(window_handle_, message, wparam, lparam);\n}\n\nvoid Win32Window::Destroy() {\n  OnDestroy();\n\n  if (window_handle_) {\n    DestroyWindow(window_handle_);\n    window_handle_ = nullptr;\n  }\n  if (g_active_window_count == 0) {\n    WindowClassRegistrar::GetInstance()->UnregisterWindowClass();\n  }\n}\n\nWin32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {\n  return reinterpret_cast<Win32Window*>(\n      GetWindowLongPtr(window, GWLP_USERDATA));\n}\n\nvoid Win32Window::SetChildContent(HWND content) {\n  child_content_ = content;\n  SetParent(content, window_handle_);\n  RECT frame = GetClientArea();\n\n  MoveWindow(content, frame.left, frame.top, frame.right - frame.left,\n             frame.bottom - frame.top, true);\n\n  SetFocus(child_content_);\n}\n\nRECT Win32Window::GetClientArea() {\n  RECT frame;\n  GetClientRect(window_handle_, &frame);\n  return frame;\n}\n\nHWND Win32Window::GetHandle() {\n  return window_handle_;\n}\n\nvoid Win32Window::SetQuitOnClose(bool quit_on_close) {\n  quit_on_close_ = quit_on_close;\n}\n\nbool Win32Window::OnCreate() {\n  // No-op; provided for subclasses.\n  return true;\n}\n\nvoid Win32Window::OnDestroy() {\n  // No-op; provided for subclasses.\n}\n\nvoid Win32Window::UpdateTheme(HWND const window) {\n  DWORD light_mode;\n  DWORD light_mode_size = sizeof(light_mode);\n  LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey,\n                               kGetPreferredBrightnessRegValue,\n                               RRF_RT_REG_DWORD, nullptr, &light_mode,\n                               &light_mode_size);\n\n  if (result == ERROR_SUCCESS) {\n    BOOL enable_dark_mode = light_mode == 0;\n    DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE,\n                          &enable_dark_mode, sizeof(enable_dark_mode));\n  }\n}\n"
  },
  {
    "path": "legacy/app/windows/runner/win32_window.h",
    "content": "#ifndef RUNNER_WIN32_WINDOW_H_\n#define RUNNER_WIN32_WINDOW_H_\n\n#include <windows.h>\n\n#include <functional>\n#include <memory>\n#include <string>\n\n// A class abstraction for a high DPI-aware Win32 Window. Intended to be\n// inherited from by classes that wish to specialize with custom\n// rendering and input handling\nclass Win32Window {\n public:\n  struct Point {\n    unsigned int x;\n    unsigned int y;\n    Point(unsigned int x, unsigned int y) : x(x), y(y) {}\n  };\n\n  struct Size {\n    unsigned int width;\n    unsigned int height;\n    Size(unsigned int width, unsigned int height)\n        : width(width), height(height) {}\n  };\n\n  Win32Window();\n  virtual ~Win32Window();\n\n  // Creates a win32 window with |title| that is positioned and sized using\n  // |origin| and |size|. New windows are created on the default monitor. Window\n  // sizes are specified to the OS in physical pixels, hence to ensure a\n  // consistent size this function will scale the inputted width and height as\n  // as appropriate for the default monitor. The window is invisible until\n  // |Show| is called. Returns true if the window was created successfully.\n  bool Create(const std::wstring& title, const Point& origin, const Size& size);\n\n  // Show the current window. Returns true if the window was successfully shown.\n  bool Show();\n\n  // Release OS resources associated with window.\n  void Destroy();\n\n  // Inserts |content| into the window tree.\n  void SetChildContent(HWND content);\n\n  // Returns the backing Window handle to enable clients to set icon and other\n  // window properties. Returns nullptr if the window has been destroyed.\n  HWND GetHandle();\n\n  // If true, closing this window will quit the application.\n  void SetQuitOnClose(bool quit_on_close);\n\n  // Return a RECT representing the bounds of the current client area.\n  RECT GetClientArea();\n\n protected:\n  // Processes and route salient window messages for mouse handling,\n  // size change and DPI. Delegates handling of these to member overloads that\n  // inheriting classes can handle.\n  virtual LRESULT MessageHandler(HWND window,\n                                 UINT const message,\n                                 WPARAM const wparam,\n                                 LPARAM const lparam) noexcept;\n\n  // Called when CreateAndShow is called, allowing subclass window-related\n  // setup. Subclasses should return false if setup fails.\n  virtual bool OnCreate();\n\n  // Called when Destroy is called.\n  virtual void OnDestroy();\n\n private:\n  friend class WindowClassRegistrar;\n\n  // OS callback called by message pump. Handles the WM_NCCREATE message which\n  // is passed when the non-client area is being created and enables automatic\n  // non-client DPI scaling so that the non-client area automatically\n  // responds to changes in DPI. All other messages are handled by\n  // MessageHandler.\n  static LRESULT CALLBACK WndProc(HWND const window,\n                                  UINT const message,\n                                  WPARAM const wparam,\n                                  LPARAM const lparam) noexcept;\n\n  // Retrieves a class instance pointer for |window|\n  static Win32Window* GetThisFromHandle(HWND const window) noexcept;\n\n  // Update the window frame's theme to match the system theme.\n  static void UpdateTheme(HWND const window);\n\n  bool quit_on_close_ = false;\n\n  // window handle for top level window.\n  HWND window_handle_ = nullptr;\n\n  // window handle for hosted content.\n  HWND child_content_ = nullptr;\n};\n\n#endif  // RUNNER_WIN32_WINDOW_H_\n"
  },
  {
    "path": "legacy/backend/aws/fetchImageAsBase64/index.mjs",
    "content": "import https from 'https';\nimport http from 'http';\n\nexport async function handler(event) {\n  const imageUrl = event.queryStringParameters?.imageUrl;\n\n  const headers = {\n    'Access-Control-Allow-Origin': '*',\n    'Access-Control-Allow-Methods': 'POST',\n    'Access-Control-Allow-Headers': 'Content-Type'\n  };\n\n  if (!imageUrl) {\n    return {\n      statusCode: 400,\n      headers,\n      body: JSON.stringify({\n        success: false,\n        message: 'Image URL parameter is required',\n      }),\n    };\n  }\n\n  const httpModule = imageUrl.startsWith('https') ? https : http;\n\n  try {\n    const base64Image = await new Promise((resolve, reject) => {\n      httpModule.get(imageUrl, (res) => {\n        if (res.statusCode !== 200) {\n          reject(new Error(`Request failed with status code ${res.statusCode}`));\n          return;\n        }\n\n        const chunks = [];\n        res.on('data', (chunk) => chunks.push(chunk));\n        res.on('end', () => {\n          const buffer = Buffer.concat(chunks);\n          const base64 = buffer.toString('base64');\n          resolve(base64);\n        });\n      }).on('error', (err) => {\n        reject(err);\n      });\n    });\n\n    return {\n      statusCode: 200,\n      headers,\n      body: JSON.stringify({ success: true, base64Image }),\n    };\n  } catch (error) {\n    console.error('Error fetching image:', error);\n    return {\n      statusCode: 500,\n      headers,\n      body: JSON.stringify({\n        success: false,\n        message: `Failed to fetch image: ${error.message}`,\n      }),\n    };\n  }\n}\n"
  },
  {
    "path": "legacy/dist/assets/AssetManifest.bin.json",
    "content": "\"DQQHEmFzc2V0cy9nbG93Ym9tLnBuZwwBDQEHBWFzc2V0BxJhc3NldHMvZ2xvd2JvbS5wbmcHE2Fzc2V0cy90YWxrLmdsb3dib20MAQ0BBwVhc3NldAcTYXNzZXRzL3RhbGsuZ2xvd2JvbQcycGFja2FnZXMvY3VwZXJ0aW5vX2ljb25zL2Fzc2V0cy9DdXBlcnRpbm9JY29ucy50dGYMAQ0BBwVhc3NldAcycGFja2FnZXMvY3VwZXJ0aW5vX2ljb25zL2Fzc2V0cy9DdXBlcnRpbm9JY29ucy50dGYHNnBhY2thZ2VzL2ZsdXR0ZXJfaW1hZ2VfY29tcHJlc3Nfd2ViL2Fzc2V0cy9waWNhLm1pbi5qcwwBDQEHBWFzc2V0BzZwYWNrYWdlcy9mbHV0dGVyX2ltYWdlX2NvbXByZXNzX3dlYi9hc3NldHMvcGljYS5taW4uanM=\""
  },
  {
    "path": "legacy/dist/assets/AssetManifest.json",
    "content": "{\"assets/glowbom.png\":[\"assets/glowbom.png\"],\"assets/talk.glowbom\":[\"assets/talk.glowbom\"],\"packages/cupertino_icons/assets/CupertinoIcons.ttf\":[\"packages/cupertino_icons/assets/CupertinoIcons.ttf\"],\"packages/flutter_image_compress_web/assets/pica.min.js\":[\"packages/flutter_image_compress_web/assets/pica.min.js\"]}"
  },
  {
    "path": "legacy/dist/assets/FontManifest.json",
    "content": "[{\"family\":\"MaterialIcons\",\"fonts\":[{\"asset\":\"fonts/MaterialIcons-Regular.otf\"}]},{\"family\":\"packages/cupertino_icons/CupertinoIcons\",\"fonts\":[{\"asset\":\"packages/cupertino_icons/assets/CupertinoIcons.ttf\"}]}]"
  },
  {
    "path": "legacy/dist/assets/NOTICES",
    "content": "aFileChooser\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2011 - 2013 Paul Burke\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n--------------------------------------------------------------------------------\nabseil-cpp\n\nApache License\nVersion 2.0, January 2004\nhttps://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n   To apply the Apache License to your work, attach the following\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\n   replaced with your own identifying information. (Don't include\n   the brackets!)  The text should be enclosed in the appropriate\n   comment syntax for the file format. We also recommend that a\n   file or class name and description of purpose be included on the\n   same \"printed page\" as the copyright notice for easier\n   identification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n--------------------------------------------------------------------------------\nabseil-cpp\nangle\ndart\netc1\nexpat\nflatbuffers\nfuchsia_sdk\nglslang\nperfetto\nshaderc\nspirv-cross\ntxt\nvulkan\nvulkan-headers\nvulkan-utility-libraries\nvulkan-validation-layers\nwuffs\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n   To apply the Apache License to your work, attach the following\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\n   replaced with your own identifying information. (Don't include\n   the brackets!)  The text should be enclosed in the appropriate\n   comment syntax for the file format. We also recommend that a\n   file or class name and description of purpose be included on the\n   same \"printed page\" as the copyright notice for easier\n   identification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright (c) 2009 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright (c) 2010 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright (c) 2012 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright (c) 2014 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright 2013 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright 2016 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright 2019 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\n\nCopyright 2020 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nangle\n\nCopyright (c) 2011 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nangle\n\nCopyright (c) 2013 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nangle\n\nCopyright 2017 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nangle\nicu\n\nCopyright 2014 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nangle\nskia\n\nCopyright 2018 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nengine\nimage_picker\nspring_animation\ntonic\ntxt\nurl_launcher_web\nweb_test_fonts\nweb_unicode\n\nCopyright 2013 The Flutter Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\naccessibility\nskia\n\nCopyright 2015 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright (c) 2008-2018 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and/or associated documentation files (the\n\"Materials\"), to deal in the Materials without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Materials, and to\npermit persons to whom the Materials are furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Materials.\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n--------------------------------------------------------------------------------\nangle\n\nCopyright (c) 2013-2017 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and/or associated documentation files (the\n\"Materials\"), to deal in the Materials without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Materials, and to\npermit persons to whom the Materials are furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Materials.\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n--------------------------------------------------------------------------------\nangle\n\nCopyright (c) 2013-2018 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and/or associated documentation files (the\n\"Materials\"), to deal in the Materials without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Materials, and to\npermit persons to whom the Materials are furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Materials.\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n--------------------------------------------------------------------------------\nangle\n\nCopyright (c) 2020 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2002 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2010 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2011 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2012 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2013 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2013-2020 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2014 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2015 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2016 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2017 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2018 The ANGLE Project Authors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2018 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2019 The ANGLE Project. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2020 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2020 The ANGLE Project. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2021 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2021 The ANGLE Project. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2021-2022 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2022 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright 2023 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\n\nCopyright The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nangle\nxxhash\n\nCopyright 2019 The ANGLE Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above\n    copyright notice, this list of conditions and the following\n    disclaimer in the documentation and/or other materials provided\n    with the distribution.\n\n    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.\n    Ltd., nor the names of their contributors may be used to endorse\n    or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nasync\ncollection\nmime\nstream_channel\ntyped_data\n\nCopyright 2015, the Dart project authors. \n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nboolean_selector\nmeta\n\nCopyright 2016, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\nAll rights reserved.\n\nThis package is an SSL implementation written\nby Eric Young (eay@cryptsoft.com).\nThe implementation was written so as to conform with Netscapes SSL.\n\nThis library is free for commercial and non-commercial use as long as\nthe following conditions are aheared to.  The following conditions\napply to all code found in this distribution, be it the RC4, RSA,\nlhash, DES, etc., code; not just the SSL code.  The SSL documentation\nincluded with this distribution is covered by the same copyright terms\nexcept that the holder is Tim Hudson (tjh@cryptsoft.com).\n\nCopyright remains Eric Young's, and as such any Copyright notices in\nthe code are not to be removed.\nIf this package is used in a product, Eric Young should be given attribution\nas the author of the parts of the library used.\nThis can be in the form of a textual message at program startup or\nin documentation (online or textual) provided with the package.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n3. All advertising materials mentioning features or use of this software\n   must display the following acknowledgement:\n   \"This product includes cryptographic software written by\n    Eric Young (eay@cryptsoft.com)\"\n   The word 'cryptographic' can be left out if the rouines from the library\n   being used are not cryptographic related :-).\n4. If you include any Windows specific code (or a derivative thereof) from\n   the apps directory (application code) you must include an acknowledgement:\n   \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n\nTHIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n\nThe licence and distribution terms for any publically available version or\nderivative of this code cannot be changed.  i.e. this code cannot simply be\ncopied and put under another distribution licence\n[including the GNU Public Licence.]\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\nAll rights reserved.\n\nThis package is an SSL implementation written\nby Eric Young (eay@cryptsoft.com).\nThe implementation was written so as to conform with Netscapes SSL.\n\nThis library is free for commercial and non-commercial use as long as\nthe following conditions are aheared to.  The following conditions\napply to all code found in this distribution, be it the RC4, RSA,\nlhash, DES, etc., code; not just the SSL code.  The SSL documentation\nincluded with this distribution is covered by the same copyright terms\nexcept that the holder is Tim Hudson (tjh@cryptsoft.com).\n\nCopyright remains Eric Young's, and as such any Copyright notices in\nthe code are not to be removed.\nIf this package is used in a product, Eric Young should be given attribution\nas the author of the parts of the library used.\nThis can be in the form of a textual message at program startup or\nin documentation (online or textual) provided with the package.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n3. All advertising materials mentioning features or use of this software\n   must display the following acknowledgement:\n   \"This product includes cryptographic software written by\n    Eric Young (eay@cryptsoft.com)\"\n   The word 'cryptographic' can be left out if the rouines from the library\n   being used are not cryptographic related :-).\n4. If you include any Windows specific code (or a derivative thereof) from\n   the apps directory (application code) you must include an acknowledgement:\n   \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n\nTHIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n\nThe licence and distribution terms for any publically available version or\nderivative of this code cannot be changed.  i.e. this code cannot simply be\ncopied and put under another distribution licence\n[including the GNU Public Licence.]\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2003 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2004 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2005 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2005 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999-2002 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999-2003 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999-2004 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999-2007 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 1999-2008 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2000 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2000-2002 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2000-2003 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2000-2005 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2001 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2001-2011 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2002-2006 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2003 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2004 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2005 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2006 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2006,2007 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2008 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2010 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2011 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2011 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2012 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2013 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2014, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2015, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2016, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2017, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2017, the HRSS authors.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2018, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2018, Google Inc.\nCopyright (c) 2020, Arm Ltd.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2019, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2020, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2021, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2022, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2022, Robert Nagy <robert.nagy@gmail.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright (c) 2023, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2001-2017 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n\nPortions of the attached software (\"Contribution\") are developed by\nSUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.\n\nThe Contribution is licensed pursuant to the Eric Young open source\nlicense provided above.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n\nPortions of the attached software (\"Contribution\") are developed by\nSUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.\n\nThe Contribution is licensed pursuant to the OpenSSL open source\nlicense provided above.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   licensing@OpenSSL.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\nECC cipher suite support in OpenSSL originally developed by\nSUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\nECDH support in OpenSSL originally developed by\nSUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2005 Nokia. All rights reserved.\n\nThe portions of the attached software (\"Contribution\") is developed by\nNokia Corporation and is licensed pursuant to the OpenSSL open source\nlicense.\n\nThe Contribution, originally written by Mika Kousa and Pasi Eronen of\nNokia Corporation, consists of the \"PSK\" (Pre-Shared Key) ciphersuites\nsupport (see RFC 4279) to OpenSSL.\n\nNo patent licenses or other rights except those expressly stated in\nthe OpenSSL open source license shall be deemed granted or received\nexpressly, by implication, estoppel, or otherwise.\n\nNo assurances are provided by Nokia that the Contribution does not\ninfringe the patent or other intellectual property rights of any third\nparty or that the license provides you with all the necessary rights\nto make use of the Contribution.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND. IN\nADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA\nSPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY\nOTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR\nOTHERWISE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2010 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2011 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2012 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.\nCopyright (c) 2012, Intel Corporation. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2014 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.\nCopyright (c) 2014, Intel Corporation. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.\nCopyright (c) 2015, Intel Inc.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2015 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the OpenSSL license (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\nhttps://www.openssl.org/source/license.html\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2016 Brian Smith.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2016 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2017 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2019 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2022 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright 2023 The Chromium Authors\nUse of this source code is governed by a BSD-style license that can be\nfound in the LICENSE file\n--------------------------------------------------------------------------------\nboringssl\n\nCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nboringssl\n\nDTLS code by Eric Rescorla <ekr@rtfm.com>\n\nCopyright (C) 2006, Network Resonance, Inc.\nCopyright (C) 2011, RTFM, Inc.\n--------------------------------------------------------------------------------\nboringssl\n\nOpenSSL License\n---------------\n\nCopyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\n3. All advertising materials mentioning features or use of this\n   software must display the following acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n\n4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n   endorse or promote products derived from this software without\n   prior written permission. For written permission, please contact\n   openssl-core@openssl.org.\n\n5. Products derived from this software may not be called \"OpenSSL\"\n   nor may \"OpenSSL\" appear in their names without prior written\n   permission of the OpenSSL Project.\n\n6. Redistributions of any form whatsoever must retain the following\n   acknowledgment:\n   \"This product includes software developed by the OpenSSL Project\n   for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n\nTHIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\nEXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\nITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nThis product includes cryptographic software written by Eric Young\n(eay@cryptsoft.com).  This product includes software written by Tim\nHudson (tjh@cryptsoft.com).\n\nOriginal SSLeay License\n-----------------------\n\nCopyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\nAll rights reserved.\n\nThis package is an SSL implementation written\nby Eric Young (eay@cryptsoft.com).\nThe implementation was written so as to conform with Netscapes SSL.\n\nThis library is free for commercial and non-commercial use as long as\nthe following conditions are aheared to.  The following conditions\napply to all code found in this distribution, be it the RC4, RSA,\nlhash, DES, etc., code; not just the SSL code.  The SSL documentation\nincluded with this distribution is covered by the same copyright terms\nexcept that the holder is Tim Hudson (tjh@cryptsoft.com).\n\nCopyright remains Eric Young's, and as such any Copyright notices in\nthe code are not to be removed.\nIf this package is used in a product, Eric Young should be given attribution\nas the author of the parts of the library used.\nThis can be in the form of a textual message at program startup or\nin documentation (online or textual) provided with the package.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n3. All advertising materials mentioning features or use of this software\n   must display the following acknowledgement:\n   \"This product includes cryptographic software written by\n    Eric Young (eay@cryptsoft.com)\"\n   The word 'cryptographic' can be left out if the rouines from the library\n   being used are not cryptographic related :-).\n4. If you include any Windows specific code (or a derivative thereof) from\n   the apps directory (application code) you must include an acknowledgement:\n   \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n\nTHIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n\nThe licence and distribution terms for any publically available version or\nderivative of this code cannot be changed.  i.e. this code cannot simply be\ncopied and put under another distribution licence\n[including the GNU Public Licence.]\n\nISC license used for completely new code in BoringSSL:\n\nCopyright (c) 2015, Google Inc.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nThe code in third_party/fiat carries the MIT license:\n\nCopyright (c) 2015-2016 the fiat-crypto authors (see\nhttps://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nLicenses for support code\n-------------------------\n\nParts of the TLS test suite are under the Go license. This code is not included\nin BoringSSL (i.e. libcrypto and libssl) when compiled, however, so\ndistributing code linked against BoringSSL does not trigger this license:\n\nCopyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nBoringSSL uses the Chromium test infrastructure to run a continuous build,\ntrybots etc. The scripts which manage this, and the script for generating build\nmetadata, are under the Chromium license. Distributing code linked against\nBoringSSL does not trigger this license.\n\nCopyright 2015 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nceval\n\nCopyright (c) 2021 e_t\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\ncharacters\nffi\n\nCopyright 2019, the Dart project authors. \n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nclock\nfake_async\n\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n--------------------------------------------------------------------------------\ncross_file\nfile_selector_linux\nfile_selector_macos\nfile_selector_platform_interface\nfile_selector_windows\nflutter_lints\nflutter_plugin_android_lifecycle\nimage_picker_for_web\nimage_picker_linux\nimage_picker_macos\nimage_picker_platform_interface\nimage_picker_windows\npath_provider\npath_provider_android\npath_provider_foundation\npath_provider_linux\npath_provider_platform_interface\npath_provider_windows\nplatform\nplugin_platform_interface\nshared_preferences\nshared_preferences_android\nshared_preferences_foundation\nshared_preferences_linux\nshared_preferences_platform_interface\nshared_preferences_web\nshared_preferences_windows\nurl_launcher\nurl_launcher_android\nurl_launcher_ios\nurl_launcher_linux\nurl_launcher_macos\nurl_launcher_platform_interface\nurl_launcher_windows\nwebview_flutter\nwebview_flutter_platform_interface\nwebview_flutter_wkwebview\nxdg_directories\n\nCopyright 2013 The Flutter Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\ncupertino_icons\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Vladimir Kharlampidi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2003-2005  Tom Wu\nCopyright (c) 2012 Adam Singer (adam@solvr.io)\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\nEXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\nWARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\nINDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\nRESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\nTHE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\nOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nIn addition, the following condition applies:\n\nAll redistributions must retain an intact copy of this copyright notice\nand disclaimer.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2010, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2011, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2012, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2013, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2014 The Polymer Project Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2014, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2015, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2016, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2017, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2018, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2018, the Dart project authors. Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2019, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2019, the Dart project authors. Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2020, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2021, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2022, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2023, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2023, the Dart project authors. Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2024, the Dart project authors.  Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright (c) 2024, the Dart project authors. Please see the AUTHORS file\nfor details. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndart\n\nCopyright 2012, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndouble-conversion\nicu\n\nCopyright 2006-2008 the V8 project authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndouble-conversion\nicu\n\nCopyright 2010 the V8 project authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\ndouble-conversion\nicu\n\nCopyright 2012 the V8 project authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nengine\n\nLicense for the Ahem font embedded below is from:\nhttps://www.w3.org/Style/CSS/Test/Fonts/Ahem/COPYING\n\nThe Ahem font in this directory belongs to the public domain. In\njurisdictions that do not recognize public domain ownership of these\nfiles, the following Creative Commons Zero declaration applies:\n\n<http://labs.creativecommons.org/licenses/zero-waive/1.0/us/legalcode>\n\nwhich is quoted below:\n\n  The person who has associated a work with this document (the \"Work\")\n  affirms that he or she (the \"Affirmer\") is the/an author or owner of\n  the Work. The Work may be any work of authorship, including a\n  database.\n\n  The Affirmer hereby fully, permanently and irrevocably waives and\n  relinquishes all of her or his copyright and related or neighboring\n  legal rights in the Work available under any federal or state law,\n  treaty or contract, including but not limited to moral rights,\n  publicity and privacy rights, rights protecting against unfair\n  competition and any rights protecting the extraction, dissemination\n  and reuse of data, whether such rights are present or future, vested\n  or contingent (the \"Waiver\"). The Affirmer makes the Waiver for the\n  benefit of the public at large and to the detriment of the Affirmer's\n  heirs or successors.\n\n  The Affirmer understands and intends that the Waiver has the effect\n  of eliminating and entirely removing from the Affirmer's control all\n  the copyright and related or neighboring legal rights previously held\n  by the Affirmer in the Work, to that extent making the Work freely\n  available to the public for any and all uses and purposes without\n  restriction of any kind, including commercial use and uses in media\n  and formats or by methods that have not yet been invented or\n  conceived. Should the Waiver for any reason be judged legally\n  ineffective in any jurisdiction, the Affirmer hereby grants a free,\n  full, permanent, irrevocable, nonexclusive and worldwide license for\n  all her or his copyright and related or neighboring legal rights in\n  the Work.\n--------------------------------------------------------------------------------\netc_decoder\n\nCopyright (c) 2020-2022 Hans-Kristian Arntzen\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2000-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016      Cristian Rodríguez <crrodriguez@opensuse.org>\nCopyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2018      Yury Gribov <tetra2005@gmail.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2000-2005 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2016      Cristian Rodríguez <crrodriguez@opensuse.org>\nCopyright (c) 2016      Thomas Beutlich <tc@tbeu.de>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2022      Thijs Schreijer <thijs@thijsschreijer.nl>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2000-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2005-2009 Steven Solie <steven@solie.ca>\nCopyright (c) 2016      Eric Rahm <erahm@mozilla.com>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2016      Gaurav <g.gupta@samsung.com>\nCopyright (c) 2016      Thomas Beutlich <tc@tbeu.de>\nCopyright (c) 2016      Gustavo Grieco <gustavo.grieco@imag.fr>\nCopyright (c) 2016      Pascal Cuoq <cuoq@trust-in-soft.com>\nCopyright (c) 2016      Ed Schouten <ed@nuxi.nl>\nCopyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2017      Václav Slavík <vaclav@slavik.io>\nCopyright (c) 2017      Viktor Szakats <commit@vsz.me>\nCopyright (c) 2017      Chanho Park <chanho61.park@samsung.com>\nCopyright (c) 2017      Rolf Eike Beer <eike@sf-mail.de>\nCopyright (c) 2017      Hans Wennborg <hans@chromium.org>\nCopyright (c) 2018      Anton Maklakov <antmak.pub@gmail.com>\nCopyright (c) 2018      Benjamin Peterson <benjamin@python.org>\nCopyright (c) 2018      Marco Maggi <marco.maggi-ipsu@poste.it>\nCopyright (c) 2018      Mariusz Zaborski <oshogbo@vexillium.org>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\nCopyright (c) 2019-2020 Ben Wagner <bungeman@chromium.org>\nCopyright (c) 2019      Vadim Zeitlin <vadim@zeitlins.org>\nCopyright (c) 2021      Dong-hee Na <donghee.na@python.org>\nCopyright (c) 2022      Samanta Navarro <ferivoz@riseup.net>\nCopyright (c) 2022      Jeffrey Walton <noloader@gmail.com>\nCopyright (c) 2022      Jann Horn <jannh@google.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2001-2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2006      Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2001-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2002      Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2005-2009 Steven Solie <steven@solie.ca>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2016      Pascal Cuoq <cuoq@trust-in-soft.com>\nCopyright (c) 2016      Don Lewis <truckman@apache.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2017      Alexander Bluhm <alexander.bluhm@gmx.net>\nCopyright (c) 2017      Benbuck Nason <bnason@netflix.com>\nCopyright (c) 2017      José Gutiérrez de la Concha <jose@zeroc.com>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\nCopyright (c) 2021      Dong-hee Na <donghee.na@python.org>\nCopyright (c) 2022      Martin Ettl <ettl.martin78@googlemail.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2001-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2004-2009 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2005-2007 Steven Solie <steven@solie.ca>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\nCopyright (c) 2020      Joe Orton <jorton@redhat.com>\nCopyright (c) 2020      Kleber Tarcísio <klebertarcisio@yahoo.com.br>\nCopyright (c) 2021      Tim Bray <tbray@textuality.com>\nCopyright (c) 2022      Martin Ettl <ettl.martin78@googlemail.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2001-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2002-2009 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2017      Franek Korta <fkorta@gmail.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2002-2005 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2018      Benjamin Peterson <benjamin@python.org>\nCopyright (c) 2018      Anton Maklakov <antmak.pub@gmail.com>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\nCopyright (c) 2020      Boris Kolpackov <boris@codesynthesis.com>\nCopyright (c) 2022      Martin Ettl <ettl.martin78@googlemail.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2005      Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2005-2006 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2022      Martin Ettl <ettl.martin78@googlemail.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2017      Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2005-2009 Steven Solie <steven@solie.ca>\nCopyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\nCopyright (c) 2021      Dong-hee Na <donghee.na@python.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2017      Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2004-2006 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2005-2007 Steven Solie <steven@solie.ca>\nCopyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\nCopyright (c) 2021      Dong-hee Na <donghee.na@python.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2017-2019 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2016-2018 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2018      Marco Maggi <marco.maggi-ipsu@poste.it>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1997-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper\nCopyright (c) 2001-2022 Expat maintainers\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 1999-2000 Thai Open Source Software Center Ltd\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2007      Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2017      Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2002      Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2005      Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>\nCopyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\n\nCopyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>\nCopyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>\nCopyright (c) 2003      Greg Stein <gstein@users.sourceforge.net>\nCopyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>\nCopyright (c) 2018      Yury Gribov <tetra2005@gmail.com>\nCopyright (c) 2019      David Loffredo <loffredo@steptools.com>\n\nLicensed under the MIT license:\n\nPermission is  hereby granted,  free of charge,  to any  person obtaining\na  copy  of  this  software   and  associated  documentation  files  (the\n\"Software\"),  to  deal in  the  Software  without restriction,  including\nwithout  limitation the  rights  to use,  copy,  modify, merge,  publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons  to whom  the Software  is  furnished to  do so,  subject to  the\nfollowing conditions:\n\nThe above copyright  notice and this permission notice  shall be included\nin all copies or substantial portions of the Software.\n\nTHE  SOFTWARE  IS  PROVIDED  \"AS  IS\",  WITHOUT  WARRANTY  OF  ANY  KIND,\nEXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nexpat\nharfbuzz\n\nCopyright (c) 2021 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfallback_root_certificates\n\nMozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in\n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n  This Source Code Form is subject to the terms of the Mozilla Public\n  License, v. 2.0. If a copy of the MPL was not distributed with this\n  file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular\nfile, then You may include the notice in a location (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as\n  defined by the Mozilla Public License, v. 2.0.\n\nYou may obtain a copy of this library's Source Code Form from: https://dart.googlesource.com/sdk/+/bb65648e20e29abc47acf3dd984518d29fd625c3\n/third_party/fallback_root_certificates/\n\n--------------------------------------------------------------------------------\nffx_spd\n\nCopyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved.\nCopyright (c) <2014> <Michal Drobot>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy,\nmodify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nffx_spd\n\nCopyright (c) 2017-2020 Advanced Micro Devices, Inc. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy,\nmodify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nfiat\n\nCopyright (c) 2015-2020 the fiat-crypto authors (see\n\nhttps://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nfile\n\nCopyright 2017, the Dart project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfile_picker\n\nMIT License\n\nCopyright (c) 2018 Miguel Ruivo\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nflatbuffers\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n   To apply the Apache License to your work, attach the following\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\n   replaced with your own identifying information. (Don't include\n   the brackets!)  The text should be enclosed in the appropriate\n   comment syntax for the file format. We also recommend that a\n   file or class name and description of purpose be included on the\n   same \"printed page\" as the copyright notice for easier\n   identification within third-party archives.\n\nCopyright 2014 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n--------------------------------------------------------------------------------\nflutter\n\nCopyright 2014 The Flutter Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nflutter_highlight\nhighlight\n\nMIT License\n\nCopyright (c) 2019 Rongjian Zhang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n--------------------------------------------------------------------------------\nflutter_image_compress\nflutter_image_compress_common\nflutter_image_compress_macos\nflutter_image_compress_ohos\nflutter_image_compress_platform_interface\nflutter_image_compress_web\n\nMIT License\n\nCopyright (c) 2023 FlutterCandies\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n--------------------------------------------------------------------------------\nflutter_secure_storage\nflutter_secure_storage_linux\nflutter_secure_storage_macos\nflutter_secure_storage_platform_interface\nflutter_secure_storage_web\nflutter_secure_storage_windows\n\nBSD 3-Clause License\n\nCopyright 2017 German Saprykin\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nflutter_tts\n\nMIT License\n\nCopyright (c) 2018 Daniel Lutton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright (C) 1995-2017 Jean-loup Gailly and Mark Adler\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright (C) 2000-2004, 2006-2011, 2013, 2014 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright (C) 2001, 2002 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright (C) 2001, 2002, 2003, 2004 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright (C) 2001-2008, 2011, 2013, 2014 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 1990, 1994, 1998  The Open Group\n\nPermission to use, copy, modify, distribute, and sell this software and its\ndocumentation for any purpose is hereby granted without fee, provided that\nthe above copyright notice appear in all copies and that both that\ncopyright notice and this permission notice appear in supporting\ndocumentation.\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name of The Open Group shall not be\nused in advertising or otherwise to promote the sale, use or other dealings\nin this Software without prior written authorization from The Open Group.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000 Computing Research Labs, New Mexico State University\nCopyright 2001-2004, 2011 Francesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\nTHE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\nOR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000 Computing Research Labs, New Mexico State University\nCopyright 2001-2014\n  Francesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\nTHE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\nOR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000 Computing Research Labs, New Mexico State University\nCopyright 2001-2015\n  Francesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\nTHE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\nOR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000, 2001, 2004 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000-2001, 2002 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000-2001, 2003 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2000-2010, 2012-2014 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2001, 2002, 2012 Francesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\nTHE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\nOR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nCopyright 2003 by\nFrancesco Zappa Nardelli\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nfreetype2\n\nThe FreeType Project LICENSE\n----------------------------\n\n                            2006-Jan-27\n\n                    Copyright 1996-2002, 2006 by\n          David Turner, Robert Wilhelm, and Werner Lemberg\n\n\n\nIntroduction\n============\n\n  The FreeType  Project is distributed in  several archive packages;\n  some of them may contain, in addition to the FreeType font engine,\n  various tools and  contributions which rely on, or  relate to, the\n  FreeType Project.\n\n  This  license applies  to all  files found  in such  packages, and\n  which do not  fall under their own explicit  license.  The license\n  affects  thus  the  FreeType   font  engine,  the  test  programs,\n  documentation and makefiles, at the very least.\n\n  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG\n  (Independent JPEG  Group) licenses, which  all encourage inclusion\n  and  use of  free  software in  commercial  and freeware  products\n  alike.  As a consequence, its main points are that:\n\n    o We don't promise that this software works. However, we will be\n      interested in any kind of bug reports. (`as is' distribution)\n\n    o You can  use this software for whatever you  want, in parts or\n      full form, without having to pay us. (`royalty-free' usage)\n\n    o You may not pretend that  you wrote this software.  If you use\n      it, or  only parts of it,  in a program,  you must acknowledge\n      somewhere  in  your  documentation  that  you  have  used  the\n      FreeType code. (`credits')\n\n  We  specifically  permit  and  encourage  the  inclusion  of  this\n  software, with  or without modifications,  in commercial products.\n  We  disclaim  all warranties  covering  The  FreeType Project  and\n  assume no liability related to The FreeType Project.\n\n\n  Finally,  many  people  asked  us  for  a  preferred  form  for  a\n  credit/disclaimer to use in compliance with this license.  We thus\n  encourage you to use the following text:\n\n   \"\"\"\n    Portions of this software are copyright © <year> The FreeType\n    Project (www.freetype.org).  All rights reserved.\n   \"\"\"\n\n  Please replace <year> with the value from the FreeType version you\n  actually use.\n\n\nLegal Terms\n===========\n\n0. Definitions\n--------------\n\n  Throughout this license,  the terms `package', `FreeType Project',\n  and  `FreeType  archive' refer  to  the  set  of files  originally\n  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and\n  Werner Lemberg) as the `FreeType Project', be they named as alpha,\n  beta or final release.\n\n  `You' refers to  the licensee, or person using  the project, where\n  `using' is a generic term including compiling the project's source\n  code as  well as linking it  to form a  `program' or `executable'.\n  This  program is  referred to  as  `a program  using the  FreeType\n  engine'.\n\n  This  license applies  to all  files distributed  in  the original\n  FreeType  Project,   including  all  source   code,  binaries  and\n  documentation,  unless  otherwise  stated   in  the  file  in  its\n  original, unmodified form as  distributed in the original archive.\n  If you are  unsure whether or not a particular  file is covered by\n  this license, you must contact us to verify this.\n\n  The FreeType  Project is copyright (C) 1996-2000  by David Turner,\n  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as\n  specified below.\n\n1. No Warranty\n--------------\n\n  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY\n  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,\n  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR\n  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO\n  USE, OF THE FREETYPE PROJECT.\n\n2. Redistribution\n-----------------\n\n  This  license  grants  a  worldwide, royalty-free,  perpetual  and\n  irrevocable right  and license to use,  execute, perform, compile,\n  display,  copy,   create  derivative  works   of,  distribute  and\n  sublicense the  FreeType Project (in  both source and  object code\n  forms)  and  derivative works  thereof  for  any  purpose; and  to\n  authorize others  to exercise  some or all  of the  rights granted\n  herein, subject to the following conditions:\n\n    o Redistribution of  source code  must retain this  license file\n      (`FTL.TXT') unaltered; any  additions, deletions or changes to\n      the original  files must be clearly  indicated in accompanying\n      documentation.   The  copyright   notices  of  the  unaltered,\n      original  files must  be  preserved in  all  copies of  source\n      files.\n\n    o Redistribution in binary form must provide a  disclaimer  that\n      states  that  the software is based in part of the work of the\n      FreeType Team,  in  the  distribution  documentation.  We also\n      encourage you to put an URL to the FreeType web page  in  your\n      documentation, though this isn't mandatory.\n\n  These conditions  apply to any  software derived from or  based on\n  the FreeType Project,  not just the unmodified files.   If you use\n  our work, you  must acknowledge us.  However, no  fee need be paid\n  to us.\n\n3. Advertising\n--------------\n\n  Neither the  FreeType authors and  contributors nor you  shall use\n  the name of the  other for commercial, advertising, or promotional\n  purposes without specific prior written permission.\n\n  We suggest,  but do not require, that  you use one or  more of the\n  following phrases to refer  to this software in your documentation\n  or advertising  materials: `FreeType Project',  `FreeType Engine',\n  `FreeType library', or `FreeType Distribution'.\n\n  As  you have  not signed  this license,  you are  not  required to\n  accept  it.   However,  as  the FreeType  Project  is  copyrighted\n  material, only  this license, or  another one contracted  with the\n  authors, grants you  the right to use, distribute,  and modify it.\n  Therefore,  by  using,  distributing,  or modifying  the  FreeType\n  Project, you indicate that you understand and accept all the terms\n  of this license.\n\n4. Contacts\n-----------\n\n  There are two mailing lists related to FreeType:\n\n    o freetype@nongnu.org\n\n      Discusses general use and applications of FreeType, as well as\n      future and  wanted additions to the  library and distribution.\n      If  you are looking  for support,  start in  this list  if you\n      haven't found anything to help you in the documentation.\n\n    o freetype-devel@nongnu.org\n\n      Discusses bugs,  as well  as engine internals,  design issues,\n      specific licenses, porting, etc.\n\n  Our home page can be found at\n\n    https://www.freetype.org\n\n\n--- end of FTL.TXT ---\n--------------------------------------------------------------------------------\nfreetype2\n\nThis software was written by Alexander Peslyak in 2001.  No copyright is\nclaimed, and the software is hereby placed in the public domain.\nIn case this attempt to disclaim copyright and place the software in the\npublic domain is deemed null and void, then the software is\nCopyright (c) 2001 Alexander Peslyak and it is hereby released to the\ngeneral public under the following terms:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted.\n\nThere's ABSOLUTELY NO WARRANTY, express or implied.\n--------------------------------------------------------------------------------\nfreetype2\n\nThis software was written by Alexander Peslyak in 2001.  No copyright is\nclaimed, and the software is hereby placed in the public domain.\nIn case this attempt to disclaim copyright and place the software in the\npublic domain is deemed null and void, then the software is\nCopyright (c) 2001 Alexander Peslyak and it is hereby released to the\ngeneral public under the following terms:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted.\n\nThere's ABSOLUTELY NO WARRANTY, express or implied.\n\n(This is a heavily cut-down \"BSD license\".)\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2014 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2016 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2017 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2018 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2019 The Fuchsia Authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2019 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2020 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2021 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2022 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2023 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nCopyright 2024 The Fuchsia Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nfuchsia_sdk\n\nmusl as a whole is licensed under the following standard MIT license:\n\n\nCopyright © 2005-2014 Rich Felker, et al.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nAuthors/contributors include:\n\nAlex Dowad\nAlexander Monakov\nAnthony G. Basile\nArvid Picciani\nBobby Bingham\nBoris Brezillon\nBrent Cook\nChris Spiegel\nClément Vasseur\nDaniel Micay\nDenys Vlasenko\nEmil Renner Berthing\nFelix Fietkau\nFelix Janda\nGianluca Anzolin\nHauke Mehrtens\nHiltjo Posthuma\nIsaac Dunham\nJaydeep Patil\nJens Gustedt\nJeremy Huntwork\nJo-Philipp Wich\nJoakim Sindholt\nJohn Spencer\nJosiah Worcester\nJustin Cormack\nKhem Raj\nKylie McClain\nLuca Barbato\nLuka Perkov\nM Farkas-Dyck (Strake)\nMahesh Bodapati\nMichael Forney\nNatanael Copa\nNicholas J. Kain\norc\nPascal Cuoq\nPetr Hosek\nPierre Carrier\nRich Felker\nRichard Pennington\nShiz\nsin\nSolar Designer\nStefan Kristiansson\nSzabolcs Nagy\nTimo Teräs\nTrutz Behn\nValentin Ochs\nWilliam Haddon\n\nPortions of this software are derived from third-party works licensed\nunder terms compatible with the above MIT license:\n\nMuch of the math library code (third_party/math/* and\nthird_party/complex/*, and third_party/include/libm.h) is\nCopyright © 1993,2004 Sun Microsystems or\nCopyright © 2003-2011 David Schultz or\nCopyright © 2003-2009 Steven G. Kargl or\nCopyright © 2003-2009 Bruce D. Evans or\nCopyright © 2008 Stephen L. Moshier\nand labelled as such in comments in the individual source files. All\nhave been licensed under extremely permissive terms.\n\nThe smoothsort implementation (third_party/smoothsort/qsort.c) is\nCopyright © 2011 Valentin Ochs and is licensed under an MIT-style\nlicense.\n\nThe x86_64 files in third_party/arch were written by Nicholas J. Kain\nand is licensed under the standard MIT terms.\n\nAll other files which have no copyright comments are original works\nproduced specifically for use as part of this library, written either\nby Rich Felker, the main author of the library, or by one or more\ncontibutors listed above. Details on authorship of individual files\ncan be found in the git version control history of the project. The\nomission of copyright and license comments in each file is in the\ninterest of source tree size.\n\nIn addition, permission is hereby granted for all public header files\n(include/* and arch/*/bits/*) and crt files intended to be linked into\napplications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit\nthe copyright notice and permission notice otherwise required by the\nlicense, and to use these files without any requirement of\nattribution. These files include substantial contributions from:\n\nBobby Bingham\nJohn Spencer\nNicholas J. Kain\nRich Felker\nRichard Pennington\nStefan Kristiansson\nSzabolcs Nagy\n\nall of whom have explicitly granted such permission.\n\nThis file previously contained text expressing a belief that most of\nthe files covered by the above exception were sufficiently trivial not\nto be subject to copyright, resulting in confusion over whether it\nnegated the permissions granted in the license. In the spirit of\npermissive licensing, and of not having licensing issues being an\nobstacle to adoption, that text has been removed.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>\n\nThis software is provided 'as-is', without any express or implied warranty.\nIn no event will the authors be held liable for any damages arising from the\nuse of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2002-2006 Marcus Geelnard\n\nCopyright (c) 2006-2019 Camilla Löwy\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2016 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>\nCopyright (c) 2012 Torsten Walluhn <tw@mad-cad.net>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2009-2016 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>\nCopyright (c) 2012 Torsten Walluhn <tw@mad-cad.net>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2009-2021 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2016 Google Inc.\nCopyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2016 Google Inc.\nCopyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2021 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglfw\n\nCopyright (c) 2022 Camilla Löwy <elmindreda@glfw.org>\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would\n   be appreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not\n   be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\n   distribution.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2015-2018 Google, Inc.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2015-2019 Google, Inc.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2018-2020 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2017, 2022-2024 Arm Limited.\nCopyright (C) 2015-2018 Google, Inc.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2013 LunarG, Inc.\nCopyright (C) 2017, 2022-2024 Arm Limited.\nCopyright (C) 2015-2020 Google, Inc.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2015 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\nCopyright (C) 2017, 2019 ARM Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2015 LunarG, Inc.\nCopyright (C) 2015-2020 Google, Inc.\nCopyright (C) 2017 ARM Limited.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2016 LunarG, Inc.\nCopyright (C) 2015-2016 Google, Inc.\nCopyright (C) 2017 ARM Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2016 LunarG, Inc.\nCopyright (C) 2015-2020 Google, Inc.\nCopyright (C) 2017, 2022-2024 Arm Limited.\nModifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2012-2016 LunarG, Inc.\nCopyright (C) 2017, 2022-2024 Arm Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2015-2018 Google, Inc.\nCopyright (c) 2023, Mobica Limited\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2020 Google, Inc.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013 LunarG, Inc.\nCopyright (c) 2002-2010 The ANGLE Project Authors.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013-2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013-2016 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013-2016 LunarG, Inc.\nCopyright (C) 2015-2020 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2013-2016 LunarG, Inc.\nCopyright (C) 2016-2020 Google, Inc.\nModifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2016 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2016 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2015-2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2002-2005  3Dlabs Inc. Ltd.\nCopyright (C) 2017 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2013 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2013 LunarG, Inc.\nCopyright (C) 2017 ARM Limited.\nCopyright (C) 2015-2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2013-2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2015 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2015 LunarG, Inc.\nCopyright (C) 2015-2018 Google, Inc.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2015 LunarG, Inc.\nCopyright (C) 2015-2020 Google, Inc.\nCopyright (C) 2017 ARM Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2015 LunarG, Inc.\nCopyright (C) 2022-2024 Arm Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2016 LunarG, Inc.\nCopyright (C) 2015-2020 Google, Inc.\nCopyright (C) 2017, 2022-2024 Arm Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2016 LunarG, Inc.\nCopyright (C) 2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2014-2016 LunarG, Inc.\nCopyright (C) 2018-2020 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2015 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2015-2016 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2015-2018 Google, Inc.\nCopyright (C) 2017 ARM Limited.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google, Inc., nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\nCopyright (C) 2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\nCopyright (C) 2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google, Inc., nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\nCopyright (C) 2019, 2022-2024 Arm Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 Google, Inc.\nCopyright (C) 2022-2024 Arm Limited.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google, Inc., nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016-2017 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016-2017 Google, Inc.\nCopyright (C) 2020 The Khronos Group Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016-2017 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016-2018 Google, Inc.\nCopyright (C) 2016 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2016-2018 Google, Inc.\nCopyright (C) 2016 LunarG, Inc.\nCopyright (C) 2023 Mobica Limited.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google, Inc., nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2017 LunarG, Inc.\nCopyright (C) 2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2017 LunarG, Inc.\nCopyright (C) 2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of Google, Inc., nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2017-2018 Google, Inc.\nCopyright (C) 2017 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2018 Google, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2018 The Khronos Group Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2020 The Khronos Group Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of The Khronos Group Inc. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (C) 2023 LunarG, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2002, NVIDIA Corporation.\n\nNVIDIA Corporation(\"NVIDIA\") supplies this software to you in\nconsideration of your agreement to the following terms, and your use,\ninstallation, modification or redistribution of this NVIDIA software\nconstitutes acceptance of these terms.  If you do not agree with these\nterms, please do not use, install, modify or redistribute this NVIDIA\nsoftware.\n\nIn consideration of your agreement to abide by the following terms, and\nsubject to these terms, NVIDIA grants you a personal, non-exclusive\nlicense, under NVIDIA's copyrights in this original NVIDIA software (the\n\"NVIDIA Software\"), to use, reproduce, modify and redistribute the\nNVIDIA Software, with or without modifications, in source and/or binary\nforms; provided that if you redistribute the NVIDIA Software, you must\nretain the copyright notice of NVIDIA, this notice and the following\ntext and disclaimers in all such redistributions of the NVIDIA Software.\nNeither the name, trademarks, service marks nor logos of NVIDIA\nCorporation may be used to endorse or promote products derived from the\nNVIDIA Software without specific prior written permission from NVIDIA.\nExcept as expressly stated in this notice, no other rights or licenses\nexpress or implied, are granted by NVIDIA herein, including but not\nlimited to any patent rights that may be infringed by your derivative\nworks or by other works in which the NVIDIA Software may be\nincorporated. No hardware is licensed hereunder.\n\nTHE NVIDIA SOFTWARE IS BEING PROVIDED ON AN \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED,\nINCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR\nITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER\nPRODUCTS.\n\nIN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT,\nINCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\nUSE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY\nOUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE\nNVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT,\nTORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF\nNVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2013 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and/or associated documentation files (the\n\"Materials\"), to deal in the Materials without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Materials, and to\npermit persons to whom the Materials are furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Materials.\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2014-2017 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2014-2020 The Khronos Group Inc.\nCopyright (C) 2022-2024 Arm Limited.\nModifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2018 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2019, Viktor Latypov\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2020 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and/or associated documentation files (the\n\"Materials\"), to deal in the Materials without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Materials, and to\npermit persons to whom the Materials are furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS\nKHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS\nSPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT\n   https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2020, Travis Fort\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2021 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright (c) 2022 ARM Limited\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\n\nCopyright(C) 2021 Advanced Micro Devices, Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n   Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following\n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n\n   Neither the name of 3Dlabs Inc. Ltd. nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nglslang\nskia\n\nCopyright (c) 2014-2016 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nglslang\nspirv-cross\n\nCopyright (c) 2014-2020 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and/or associated documentation files (the \"Materials\"),\nto deal in the Materials without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Materials, and to permit persons to whom the\nMaterials are furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Materials.\n\nMODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\nSTANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\nHEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\nIN THE MATERIALS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright (C) 2011  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright (C) 2012 Grigori Goronzy <greg@kinoho.net>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright (C) 2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright (c) Microsoft Corporation.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 1998-2004  David Turner and Werner Lemberg\nCopyright © 2004,2007,2009  Red Hat, Inc.\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 1998-2004  David Turner and Werner Lemberg\nCopyright © 2004,2007,2009,2010  Red Hat, Inc.\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 1998-2004  David Turner and Werner Lemberg\nCopyright © 2006  Behdad Esfahbod\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007  Chris Wilson\nCopyright © 2009,2010  Red Hat, Inc.\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2010,2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2010,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2012,2013  Google, Inc.\nCopyright © 2019, Facebook Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009  Red Hat, Inc.\nCopyright © 2018,2019,2020  Ebrahim Byagowi\nCopyright © 2018  Khaled Hosny\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009,2010  Red Hat, Inc.\nCopyright © 2010,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009,2010  Red Hat, Inc.\nCopyright © 2010,2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009,2010  Red Hat, Inc.\nCopyright © 2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009,2010  Red Hat, Inc.\nCopyright © 2012,2018  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2007,2008,2009,2010  Red Hat, Inc.\nCopyright © 2012,2018  Google, Inc.\nCopyright © 2019  Facebook, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2009  Keith Stribley\nCopyright © 2011  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2009  Keith Stribley\nCopyright © 2015  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2011  Codethink Limited\nCopyright © 2010,2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2011  Codethink Limited\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2011  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2015  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2018  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009  Red Hat, Inc.\nCopyright © 2018  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009,2010  Red Hat, Inc.\nCopyright © 2010,2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009,2010  Red Hat, Inc.\nCopyright © 2010,2011,2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009,2010  Red Hat, Inc.\nCopyright © 2010,2011,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2009,2010  Red Hat, Inc.\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2010  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2010  Red Hat, Inc.\nCopyright © 2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2010,2011  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2010,2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2010,2011,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2010,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011  Martin Hosken\nCopyright © 2011  SIL International\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011  Martin Hosken\nCopyright © 2011  SIL International\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011,2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011,2012  Google, Inc.\nCopyright © 2018  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011,2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011,2012,2013  Google, Inc.\nCopyright © 2021  Khaled Hosny\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011,2012,2014  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2011,2014  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2012  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2012  Mozilla Foundation.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2012,2013  Mozilla Foundation.\nCopyright © 2012,2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2012,2017  Google, Inc.\nCopyright © 2021 Behdad Esfahbod\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2012,2018  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2013  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2013  Red Hat, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2014  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2015  Google, Inc.\nCopyright © 2019  Adobe Inc.\nCopyright © 2019  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2015  Mozilla Foundation.\nCopyright © 2015  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2015-2019  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2016  Elie Roux <elie.roux@telecom-bretagne.eu>\nCopyright © 2018  Google, Inc.\nCopyright © 2018-2019  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2016  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2016  Google, Inc.\nCopyright © 2018  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2016  Google, Inc.\nCopyright © 2018  Khaled Hosny\nCopyright © 2018  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2016  Igalia S.L.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2017  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2017  Google, Inc.\nCopyright © 2018  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2017  Google, Inc.\nCopyright © 2019  Facebook, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2017,2018  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Ebrahim Byagowi\nCopyright © 2018  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Ebrahim Byagowi\nCopyright © 2020  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Ebrahim Byagowi.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Google, Inc.\nCopyright © 2019  Facebook, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018  Google, Inc.\nCopyright © 2023  Behdad Esfahbod\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018 Adobe Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2018-2019  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2019  Adobe Inc.\nCopyright © 2019  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2019  Adobe, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2019  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2019  Facebook, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2019 Adobe Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2019-2020  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2020  Ebrahim Byagowi\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2020  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2021  Behdad Esfahbod\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2021  Behdad Esfahbod.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2021  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022  Behdad Esfahbod\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022  Red Hat, Inc\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022  Red Hat, Inc\nCopyright © 2021, 2022  Black Foundry\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022  Red Hat, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022 Behdad Esfahbod\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022 Matthias Clasen\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2022 Red Hat, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2023  Behdad Esfahbod\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2023  Behdad Esfahbod\nCopyright © 1999  David Turner\nCopyright © 2005  Werner Lemberg\nCopyright © 2013-2015  Alexei Podtelezhnikov\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nCopyright © 2023  Google, Inc.\n\nThis is part of HarfBuzz, a text shaping library.\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\n\nHarfBuzz is licensed under the so-called \"Old MIT\" license.  Details follow.\nFor parts of HarfBuzz that are licensed under different licenses see individual\nfiles names COPYING in subdirectories where applicable.\n\nCopyright © 2010-2022  Google, Inc.\nCopyright © 2015-2020  Ebrahim Byagowi\nCopyright © 2019,2020  Facebook, Inc.\nCopyright © 2012,2015  Mozilla Foundation\nCopyright © 2011  Codethink Limited\nCopyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)\nCopyright © 2009  Keith Stribley\nCopyright © 2011  Martin Hosken and SIL International\nCopyright © 2007  Chris Wilson\nCopyright © 2005,2006,2020,2021,2022,2023  Behdad Esfahbod\nCopyright © 2004,2007,2008,2009,2010,2013,2021,2022,2023  Red Hat, Inc.\nCopyright © 1998-2005  David Turner and Werner Lemberg\nCopyright © 2016  Igalia S.L.\nCopyright © 2022  Matthias Clasen\nCopyright © 2018,2021  Khaled Hosny\nCopyright © 2018,2019,2020  Adobe, Inc\nCopyright © 2013-2015  Alexei Podtelezhnikov\n\nFor full copyright notices consult the individual files in the package.\n\n\nPermission is hereby granted, without written agreement and without\nlicense or royalty fees, to use, copy, modify, and distribute this\nsoftware and its documentation for any purpose, provided that the\nabove copyright notice and the following two paragraphs appear in\nall copies of this software.\n\nIN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\nARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\nIF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\nTHE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\nPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n--------------------------------------------------------------------------------\nharfbuzz\nicu\nweb_unicode\n\nUnicode® Copyright and Terms of Use\nFor the general privacy policy governing access to this site, see the  Unicode Privacy Policy.\n\nA. Unicode Copyright\n1. Copyright © 1991-2022 Unicode, Inc. All rights reserved.\nB. Definitions\nUnicode Data Files (\"DATA FILES\") include all data files under the directories:\nhttps://www.unicode.org/Public/\nhttps://www.unicode.org/reports/\nhttps://www.unicode.org/ivd/data/\n\nUnicode Data Files do not include PDF online code charts under the directory:\nhttps://www.unicode.org/Public/\n\nUnicode Software (\"SOFTWARE\") includes any source code published in the Unicode Standard\nor any source code or compiled code under the directories:\nhttps://www.unicode.org/Public/PROGRAMS/\nhttps://www.unicode.org/Public/cldr/\nhttp://site.icu-project.org/download/\nC. Terms of Use\n1. Certain documents and files on this website contain a legend indicating that \"Modification is permitted.\" Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein.\n2. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein.\n3. Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License.\n4. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page.\n5. The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart.\n6. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use.\n7. No license is granted to \"mirror\" the Unicode website where a fee is charged for access to the \"mirror\" site.\n8. Modification is not permitted with respect to this document. All copies of this document must be verbatim.\nD. Restricted Rights Legend\n1. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement.\nE.Warranties and Disclaimers\n1. This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time.\n2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase.\n3. EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.\nF. Waiver of Damages\n1. In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives.\nG. Trademarks & Logos\n1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names.\n3. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.\n4. All third party trademarks referenced herein are the property of their respective owners.\nH. Miscellaneous\n1. Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum.\n2. Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent.\n3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income.\n4. Severability.  If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect.\n5. Entire Agreement. This Agreement constitutes the entire agreement between the parties.\n\nEXHIBIT 1\nUNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE\n\nSee Terms of Use <https://www.unicode.org/copyright.html>\nfor definitions of Unicode Inc.’s Data Files and Software.\n\nNOTICE TO USER: Carefully read the following legal agreement.\nBY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\nDATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\nYOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\nTERMS AND CONDITIONS OF THIS AGREEMENT.\nIF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\nTHE DATA FILES OR SOFTWARE.\n\nCOPYRIGHT AND PERMISSION NOTICE\n\nCopyright © 1991-2022 Unicode, Inc. All rights reserved.\nDistributed under the Terms of Use in https://www.unicode.org/copyright.html.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nhttp\nhttp_parser\nmatcher\npath\nsource_span\nstring_scanner\n\nCopyright 2014, the Dart project authors. \n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nicu\n\n#      Copyright (c) 2006-2015 International Business Machines Corporation,\n  #      Apple Inc., and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2001, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2002, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2009, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1995-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2008, International Business Machines Corporation *\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2012, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2013, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2014, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2015, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2016, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1996-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2000, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2009,2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2010, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2011, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2011,2014-2015 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2012, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2013, International Business Machines                     *\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2013, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2013, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2015, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2015, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2015, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2015, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2016, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1997-2016, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2008, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1998-2016, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2001, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2006,2013 IBM Corp. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2007, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2008, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2009, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2010, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2011, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2014 International Business Machines Corporation   *\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2014, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2015 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016 International Business Machines Corporation\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016 International Business Machines Corporation   *\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016, International Business Machines\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016, International Business Machines Corporation\n              and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 1999-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2004, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2008, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2012, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2000-2016, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2008, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2008,2010 IBM and others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011 IBM and others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011, International Business Machines                   *\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011, International Business Machines Corporation.       *\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2011,2014 IBM and others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2012, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2013, International Business Machines\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014 IBM and others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014, International Business Machines\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014, International Business Machines                   *\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2014, International Business Machines Corporation.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2015 IBM and others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2015, International Business Machines\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2016, International Business Machines\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2001-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2005, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2008 International Business Machines Corporation   *\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2008, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2011 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2011, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2013, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2014 International Business Machines Corporation\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2015 International Business Machines Corporation\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2015, International Business Machines Corporation and others.\n    All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2015, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016 International Business Machines Corporation\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016 International Business Machines Corporation   *\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016 International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016, International Business Machines Corporation and others.\n    All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2002-2016, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003 - 2008, International Business Machines Corporation and  *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003 - 2009, International Business Machines Corporation and  *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003 - 2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003 - 2013, International Business Machines Corporation and  *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2008, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2009, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2009,2012,2016 International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2010, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2013, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2013, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2014, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2015, International Business Machines                   *\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2015, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2016, International Business Machines                   *\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2003-2016, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004 - 2008, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2015, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2004-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2008, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2005-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2006 International Business Machines Corporation        *\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2006-2012, International Business Machines Corporation and others. *\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2006-2014, International Business Machines Corporation   *\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2006-2016, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2008, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2008, International Business Machines Corporation and         *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2008, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2013, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2013, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2014, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2007-2016, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008, Google, International Business Machines Corporation and *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2009, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2011, International Business Machines\nCorporation, Google and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2012, International Business Machines Corporation         *\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2013, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2014, Google, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2014, Google, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2015, Google, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2015, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2016, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2008-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2010 IBM Corporation and Others.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2010, Google, International Business Machines Corporation and *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2010, International Business Machines Corporation and         *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2011, International Business Machines\n               Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2011, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2011, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2012, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2013, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2013, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2015, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2016, International Business Machines Corporation,       *\nGoogle, and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2009-2017, International Business Machines Corporation,       *\nGoogle, and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010 , Yahoo! Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2011, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2012, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2012,2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2012,2015 International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2013, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2014, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2014, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2016 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2016, International Business Machines Corporation and\nothers.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2010-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2012, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2013, Apple Inc. and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2013, Apple Inc.; Unicode, Inc.; and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2015, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2011-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2012 International Business Machines Corporation\nand others. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2012,2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2012-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2012-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2012-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013, International Business Machines Corporation and         *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2014, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2014, International Business Machines Corporation and    *\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2014, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2015, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2013-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014 International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014-2016, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014-2016, International Business Machines Corporation and\nothers.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2014-2016, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015-2016, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2015-2016, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2016 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2016 and later: Unicode, Inc. and others.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) 2016, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) The Internet Society (2002).  All Rights Reserved.\n\nThis document and translations of it may be copied and furnished to\nothers, and derivative works that comment on or otherwise explain it\nor assist in its implementation may be prepared, copied, published\nand distributed, in whole or in part, without restriction of any\nkind, provided that the above copyright notice and this paragraph are\nincluded on all such copies and derivative works.  However, this\ndocument itself may not be modified in any way, such as by removing\nthe copyright notice or references to the Internet Society or other\nInternet organizations, except as needed for the purpose of\ndeveloping Internet standards in which case the procedures for\ncopyrights defined in the Internet Standards process must be\nfollowed, or as required to translate it into languages other than\nEnglish.\n\nThe limited permissions granted above are perpetual and will not be\nrevoked by the Internet Society or its successors or assigns.\n\nThis document and the information contained herein is provided on an\n\"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\nTASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\nBUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\nHEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\nMERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (C) {1999-2001}, International Business Machines Corporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1996-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1996-2014, International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1996-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1996-2015, International Business Machines Corporation and others.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1996-2016, International Business Machines Corporation\n              and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1996-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1997-2011, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1997-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1997-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1997-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1997-2016, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1999-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 1999-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2000-2004 IBM, Inc. and Others.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2000-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2000-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2005, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2007, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2010 International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2012, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2001-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2005, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2005, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2006, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2007, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2010, International Business Machines Corporation *\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2011, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2012, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2014, International Business Machines Corporation\nand others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2016  International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2002-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003-2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003-2008, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003-2010 International Business Machines\nCorporation and others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003-2011, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003-2013, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2003-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2006, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2010, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2014 International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2015, International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2004-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2007-2012, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2007-2012, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2007-2013, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2007-2014, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2007-2016, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2008-2010, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2008-2011, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2008-2015, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2009, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2011-2012 International Business Machines Corporation\nand others. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2014, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2014-2016, International Business Machines\nCorporation and others.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) 2015, International Business Machines Corporation and\nothers. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) IBM Corporation, 2000-2010.   All rights reserved.\n\nThis software is made available under the terms of the\nICU License -- ICU 1.8.1 and later.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) IBM Corporation, 2000-2011.   All rights reserved.\n\nThis software is made available under the terms of the\nICU License -- ICU 1.8.1 and later.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) IBM Corporation, 2000-2012.  All rights reserved.\n\nThis software is made available under the terms of the\nICU License -- ICU 1.8.1 and later.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) IBM Corporation, 2000-2014.  All rights reserved.\n\nThis software is made available under the terms of the\nICU License -- ICU 1.8.1 and later.\n--------------------------------------------------------------------------------\nicu\n\nCopyright (c) IBM Corporation, 2000-2016.   All rights reserved.\n\nThis software is made available under the terms of the\nICU License -- ICU 1.8.1 and later.\n--------------------------------------------------------------------------------\nicu\n\nCopyright 2001 and onwards Google Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright 2004 and onwards Google Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nCopyright 2007 Google Inc. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n--------------------------------------------------------------------------------\nicu\n\nUNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE\n\nSee Terms of Use <https://www.unicode.org/copyright.html>\nfor definitions of Unicode Inc.’s Data Files and Software.\n\nNOTICE TO USER: Carefully read the following legal agreement.\nBY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\nDATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\nYOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\nTERMS AND CONDITIONS OF THIS AGREEMENT.\nIF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\nTHE DATA FILES OR SOFTWARE.\n\nCOPYRIGHT AND PERMISSION NOTICE\n\nCopyright © 1991-2023 Unicode, Inc. All rights reserved.\nDistributed under the Terms of Use in https://www.unicode.org/copyright.html.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n\nThird-Party Software Licenses\n\nThis section contains third-party software notices and/or additional\nterms for licensed third-party software components included within ICU\nlibraries.\n\nICU License - ICU 1.8.1 to ICU 57.1\n\nCOPYRIGHT AND PERMISSION NOTICE\n\nCopyright (c) 1995-2016 International Business Machines Corporation and others\nAll rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, and/or sell copies of the Software, and to permit persons\nto whom the Software is furnished to do so, provided that the above\ncopyright notice(s) and this permission notice appear in all copies of\nthe Software and that both the above copyright notice(s) and this\npermission notice appear in supporting documentation.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\nHOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY\nSPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER\nRESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF\nCONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale, use\nor other dealings in this Software without prior written authorization\nof the copyright holder.\n\nAll trademarks and registered trademarks mentioned herein are the\nproperty of their respective owners.\n\nChinese/Japanese Word Break Dictionary Data (cjdict.txt)\n\nThe Google Chrome software developed by Google is licensed under\nthe BSD license. Other software included in this distribution is\nprovided under other licenses, as set forth below.\n\nThe BSD License\nhttp://opensource.org/licenses/bsd-license.php\nCopyright (C) 2006-2008, Google Inc.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice,\nthis list of conditions and the following disclaimer.\nRedistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following\ndisclaimer in the documentation and/or other materials provided with\nthe distribution.\nNeither the name of  Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\nCONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\nINCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe word list in cjdict.txt are generated by combining three word lists\nlisted below with further processing for compound word breaking. The\nfrequency is generated with an iterative training against Google web\ncorpora.\n\n* Libtabe (Chinese)\n   - https://sourceforge.net/project/?group_id=1519\n   - Its license terms and conditions are shown below.\n\n* IPADIC (Japanese)\n   - http://chasen.aist-nara.ac.jp/chasen/distribution.html\n   - Its license terms and conditions are shown below.\n\nCopyright (c) 1999 TaBE Project.\nCopyright (c) 1999 Pai-Hsiang Hsiao.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n. Redistributions of source code must retain the above copyright\n  notice, this list of conditions and the following disclaimer.\n. Redistributions in binary form must reproduce the above copyright\n  notice, this list of conditions and the following disclaimer in\n  the documentation and/or other materials provided with the\n  distribution.\n. Neither the name of the TaBE Project nor the names of its\n  contributors may be used to endorse or promote products derived\n  from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nREGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n\nCopyright (c) 1999 Computer Systems and Communication Lab,\n                   Institute of Information Science, Academia\n                   Sinica. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n. Redistributions of source code must retain the above copyright\n  notice, this list of conditions and the following disclaimer.\n. Redistributions in binary form must reproduce the above copyright\n  notice, this list of conditions and the following disclaimer in\n  the documentation and/or other materials provided with the\n  distribution.\n. Neither the name of the Computer Systems and Communication Lab\n  nor the names of its contributors may be used to endorse or\n  promote products derived from this software without specific\n  prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nREGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n\nCopyright 1996 Chih-Hao Tsai @ Beckman Institute,\n    University of Illinois\nc-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4\n\nCopyright 2000, 2001, 2002, 2003 Nara Institute of Science\nand Technology.  All Rights Reserved.\n\nUse, reproduction, and distribution of this software is permitted.\nAny copy of this software, whether in its original form or modified,\nmust include both the above copyright notice and the following\nparagraphs.\n\nNara Institute of Science and Technology (NAIST),\nthe copyright holders, disclaims all warranties with regard to this\nsoftware, including all implied warranties of merchantability and\nfitness, in no event shall NAIST be liable for\nany special, indirect or consequential damages or any damages\nwhatsoever resulting from loss of use, data or profits, whether in an\naction of contract, negligence or other tortuous action, arising out\nof or in connection with the use or performance of this software.\n\nA large portion of the dictionary entries\noriginate from ICOT Free Software.  The following conditions for ICOT\nFree Software applies to the current dictionary as well.\n\nEach User may also freely distribute the Program, whether in its\noriginal form or modified, to any third party or parties, PROVIDED\nthat the provisions of Section 3 (\"NO WARRANTY\") will ALWAYS appear\non, or be attached to, the Program, which is distributed substantially\nin the same form as set out herein and that such intended\ndistribution, if actually made, will neither violate or otherwise\ncontravene any of the laws and regulations of the countries having\njurisdiction over the User or the intended distribution itself.\n\nNO WARRANTY\n\nThe program was produced on an experimental basis in the course of the\nresearch and development conducted during the project and is provided\nto users as so produced on an experimental basis.  Accordingly, the\nprogram is provided without any warranty whatsoever, whether express,\nimplied, statutory or otherwise.  The term \"warranty\" used herein\nincludes, but is not limited to, any warranty of the quality,\nperformance, merchantability and fitness for a particular purpose of\nthe program and the nonexistence of any infringement or violation of\nany right of any third party.\n\nEach user of the program will agree and understand, and be deemed to\nhave agreed and understood, that there is no warranty whatsoever for\nthe program and, accordingly, the entire risk arising from or\notherwise connected with the program is assumed by the user.\n\nTherefore, neither ICOT, the copyright holder, or any other\norganization that participated in or was otherwise related to the\ndevelopment of the program and their respective officials, directors,\nofficers and other employees shall be held liable for any and all\ndamages, including, without limitation, general, special, incidental\nand consequential damages, arising out of or otherwise in connection\nwith the use or inability to use the program or any product, material\nor result produced or otherwise obtained by using the program,\nregardless of whether they have been advised of, or otherwise had\nknowledge of, the possibility of such damages at any time during the\nproject or thereafter.  Each user will be deemed to have agreed to the\nforegoing by his or her commencement of use of the program.  The term\n\"use\" as used herein includes, but is not limited to, the use,\nmodification, copying and distribution of the program and the\nproduction of secondary products from the program.\n\nIn the case where the program, whether in its original form or\nmodified, was distributed or delivered to or received by a user from\nany person, organization or entity other than ICOT, unless it makes or\ngrants independently of ICOT any specific warranty to the user in\nwriting, such person, organization or entity, will also be exempted\nfrom and not be held liable to the user for any such damages as noted\nabove as far as the program is concerned.\n\nLao Word Break Dictionary Data (laodict.txt)\n\nCopyright (C) 2016 and later: Unicode, Inc. and others.\nLicense & terms of use: http://www.unicode.org/copyright.html\nCopyright (c) 2015 International Business Machines Corporation\nand others. All Rights Reserved.\n\nProject: https://github.com/rober42539/lao-dictionary\nDictionary: https://github.com/rober42539/lao-dictionary/laodict.txt\nLicense: https://github.com/rober42539/lao-dictionary/LICENSE.txt\n         (copied below)\n\nThis file is derived from the above dictionary version of Nov 22, 2020\n\nCopyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer. Redistributions in binary\nform must reproduce the above copyright notice, this list of conditions and\nthe following disclaimer in the documentation and/or other materials\nprovided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\nOF THE POSSIBILITY OF SUCH DAMAGE.\n\nBurmese Word Break Dictionary Data (burmesedict.txt)\n\nCopyright (c) 2014 International Business Machines Corporation\nand others. All Rights Reserved.\n\nThis list is part of a project hosted at:\n  github.com/kanyawtech/myanmar-karen-word-lists\n\nCopyright (c) 2013, LeRoy Benjamin Sharon\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met: Redistributions of source code must retain the above\ncopyright notice, this list of conditions and the following\ndisclaimer.  Redistributions in binary form must reproduce the\nabove copyright notice, this list of conditions and the following\ndisclaimer in the documentation and/or other materials provided\nwith the distribution.\n\n  Neither the name Myanmar Karen Word Lists, nor the names of its\n  contributors may be used to endorse or promote products derived\n  from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\nCONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\nINCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\nTORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\nTHE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n\nGoogle double-conversion\n\nCopyright 2006-2011, the V8 project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nFile: install-sh (only for ICU4C)\n\n\nCopyright 1991 by the Massachusetts Institute of Technology\n\nPermission to use, copy, modify, distribute, and sell this software and its\ndocumentation for any purpose is hereby granted without fee, provided that\nthe above copyright notice appear in all copies and that both that\ncopyright notice and this permission notice appear in supporting\ndocumentation, and that the name of M.I.T. not be used in advertising or\npublicity pertaining to distribution of the software without specific,\nwritten prior permission.  M.I.T. makes no representations about the\nsuitability of this software for any purpose.  It is provided \"as is\"\nwithout express or implied warranty.\n--------------------------------------------------------------------------------\nicu\n\npunycode.c 0.4.0 (2001-Nov-17-Sat)\nhttp://www.cs.berkeley.edu/~amc/idn/\nAdam M. Costello\nhttp://www.nicemice.net/amc/\n\nDisclaimer and license\n\n    Regarding this entire document or any portion of it (including\n    the pseudocode and C code), the author makes no guarantees and\n    is not responsible for any damage resulting from its use.  The\n    author grants irrevocable permission to anyone to use, modify,\n    and distribute it in any way that does not diminish the rights\n    of anyone else to use, modify, and distribute it, provided that\n    redistributed derivative works do not contain misleading author or\n    version information.  Derivative works need not be licensed under\n    similar terms.\n--------------------------------------------------------------------------------\ninclude\n\nCopyright (C) 2011 Nick Bruun <nick@bruun.co>\nCopyright (C) 2013 Vlad Lazarenko <vlad@lazarenko.me>\nCopyright (C) 2014 Nicolas Pauss <nicolas.pauss@gmail.com>\n--------------------------------------------------------------------------------\ninclude\n\nCopyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>\n\nPermission is hereby  granted, free of charge, to any  person obtaining a copy\nof this software and associated  documentation files (the \"Software\"), to deal\nin the Software  without restriction, including without  limitation the rights\nto  use, copy,  modify, merge,  publish, distribute,  sublicense, and/or  sell\ncopies  of  the Software,  and  to  permit persons  to  whom  the Software  is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE  IS PROVIDED \"AS  IS\", WITHOUT WARRANTY  OF ANY KIND,  EXPRESS OR\nIMPLIED,  INCLUDING BUT  NOT  LIMITED TO  THE  WARRANTIES OF  MERCHANTABILITY,\nFITNESS FOR  A PARTICULAR PURPOSE AND  NONINFRINGEMENT. IN NO EVENT  SHALL THE\nAUTHORS  OR COPYRIGHT  HOLDERS  BE  LIABLE FOR  ANY  CLAIM,  DAMAGES OR  OTHER\nLIABILITY, WHETHER IN AN ACTION OF  CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE  OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\ninclude\n\nCopyright (c) 2009 Florian Loitsch.\n\nPermission is hereby  granted, free of charge, to any  person obtaining a copy\nof this software and associated  documentation files (the \"Software\"), to deal\nin the Software  without restriction, including without  limitation the rights\nto  use, copy,  modify, merge,  publish, distribute,  sublicense, and/or  sell\ncopies  of  the Software,  and  to  permit persons  to  whom  the Software  is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE  IS PROVIDED \"AS  IS\", WITHOUT WARRANTY  OF ANY KIND,  EXPRESS OR\nIMPLIED,  INCLUDING BUT  NOT  LIMITED TO  THE  WARRANTIES OF  MERCHANTABILITY,\nFITNESS FOR  A PARTICULAR PURPOSE AND  NONINFRINGEMENT. IN NO EVENT  SHALL THE\nAUTHORS  OR COPYRIGHT  HOLDERS  BE  LIABLE FOR  ANY  CLAIM,  DAMAGES OR  OTHER\nLIABILITY, WHETHER IN AN ACTION OF  CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE  OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\ninclude\n\nCopyright (c) 2011 - Nick Bruun.\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1.  The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n2.  Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n3.  If you meet (any of) the author(s), you're encouraged to buy them a beer,\n    a drink or whatever is suited to the situation, given that you like the\n    software.\n4.  This notice may not be removed or altered from any source\n    distribution.\n--------------------------------------------------------------------------------\ninclude\n\nCopyright (c) 2013-2019 Niels Lohmann <http://nlohmann.me>.\n\nPermission is hereby  granted, free of charge, to any  person obtaining a copy\nof this software and associated  documentation files (the \"Software\"), to deal\nin the Software  without restriction, including without  limitation the rights\nto  use, copy,  modify, merge,  publish, distribute,  sublicense, and/or  sell\ncopies  of  the Software,  and  to  permit persons  to  whom  the Software  is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE  IS PROVIDED \"AS  IS\", WITHOUT WARRANTY  OF ANY KIND,  EXPRESS OR\nIMPLIED,  INCLUDING BUT  NOT  LIMITED TO  THE  WARRANTIES OF  MERCHANTABILITY,\nFITNESS FOR  A PARTICULAR PURPOSE AND  NONINFRINGEMENT. IN NO EVENT  SHALL THE\nAUTHORS  OR COPYRIGHT  HOLDERS  BE  LIABLE FOR  ANY  CLAIM,  DAMAGES OR  OTHER\nLIABILITY, WHETHER IN AN ACTION OF  CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE  OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\ninja\n\nCopyright (c) 2018-2021 Berscheid\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\ninja\n\nCopyright (c) 2018-2021 Lars Berscheid\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\njs\n\nCopyright 2012, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\njson\n\nCopyright (c) 2013-2022 Niels Lohmann\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nkhronos\n\nCopyright (c) 2013-2014 The Khronos Group Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and/or associated documentation files (the\n\"Materials\"), to deal in the Materials without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Materials, and to\npermit persons to whom the Materials are furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Materials.\n\nTHE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n--------------------------------------------------------------------------------\nleak_tracker\nleak_tracker_flutter_testing\nleak_tracker_testing\n\nCopyright 2022, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nlibXNVCtrl\n\nCopyright (c) 2008 NVIDIA, Corporation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice (including the next\nparagraph) shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nlibXNVCtrl\n\nCopyright (c) 2010 NVIDIA, Corporation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice (including the next\nparagraph) shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nlibcxx\n\nCopyright 2018 Ulf Adams\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nlibcxx\nlibcxxabi\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n  \"License\" shall mean the terms and conditions for use, reproduction,\n  and distribution as defined by Sections 1 through 9 of this document.\n\n  \"Licensor\" shall mean the copyright owner or entity authorized by\n  the copyright owner that is granting the License.\n\n  \"Legal Entity\" shall mean the union of the acting entity and all\n  other entities that control, are controlled by, or are under common\n  control with that entity. For the purposes of this definition,\n  \"control\" means (i) the power, direct or indirect, to cause the\n  direction or management of such entity, whether by contract or\n  otherwise, or (ii) ownership of fifty percent (50%) or more of the\n  outstanding shares, or (iii) beneficial ownership of such entity.\n\n  \"You\" (or \"Your\") shall mean an individual or Legal Entity\n  exercising permissions granted by this License.\n\n  \"Source\" form shall mean the preferred form for making modifications,\n  including but not limited to software source code, documentation\n  source, and configuration files.\n\n  \"Object\" form shall mean any form resulting from mechanical\n  transformation or translation of a Source form, including but\n  not limited to compiled object code, generated documentation,\n  and conversions to other media types.\n\n  \"Work\" shall mean the work of authorship, whether in Source or\n  Object form, made available under the License, as indicated by a\n  copyright notice that is included in or attached to the work\n  (an example is provided in the Appendix below).\n\n  \"Derivative Works\" shall mean any work, whether in Source or Object\n  form, that is based on (or derived from) the Work and for which the\n  editorial revisions, annotations, elaborations, or other modifications\n  represent, as a whole, an original work of authorship. For the purposes\n  of this License, Derivative Works shall not include works that remain\n  separable from, or merely link (or bind by name) to the interfaces of,\n  the Work and Derivative Works thereof.\n\n  \"Contribution\" shall mean any work of authorship, including\n  the original version of the Work and any modifications or additions\n  to that Work or Derivative Works thereof, that is intentionally\n  submitted to Licensor for inclusion in the Work by the copyright owner\n  or by an individual or Legal Entity authorized to submit on behalf of\n  the copyright owner. For the purposes of this definition, \"submitted\"\n  means any form of electronic, verbal, or written communication sent\n  to the Licensor or its representatives, including but not limited to\n  communication on electronic mailing lists, source code control systems,\n  and issue tracking systems that are managed by, or on behalf of, the\n  Licensor for the purpose of discussing and improving the Work, but\n  excluding communication that is conspicuously marked or otherwise\n  designated in writing by the copyright owner as \"Not a Contribution.\"\n\n  \"Contributor\" shall mean Licensor and any individual or Legal Entity\n  on behalf of whom a Contribution has been received by Licensor and\n  subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n  this License, each Contributor hereby grants to You a perpetual,\n  worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n  copyright license to reproduce, prepare Derivative Works of,\n  publicly display, publicly perform, sublicense, and distribute the\n  Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n  this License, each Contributor hereby grants to You a perpetual,\n  worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n  (except as stated in this section) patent license to make, have made,\n  use, offer to sell, sell, import, and otherwise transfer the Work,\n  where such license applies only to those patent claims licensable\n  by such Contributor that are necessarily infringed by their\n  Contribution(s) alone or by combination of their Contribution(s)\n  with the Work to which such Contribution(s) was submitted. If You\n  institute patent litigation against any entity (including a\n  cross-claim or counterclaim in a lawsuit) alleging that the Work\n  or a Contribution incorporated within the Work constitutes direct\n  or contributory patent infringement, then any patent licenses\n  granted to You under this License for that Work shall terminate\n  as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n  Work or Derivative Works thereof in any medium, with or without\n  modifications, and in Source or Object form, provided that You\n  meet the following conditions:\n\n  (a) You must give any other recipients of the Work or\n      Derivative Works a copy of this License; and\n\n  (b) You must cause any modified files to carry prominent notices\n      stating that You changed the files; and\n\n  (c) You must retain, in the Source form of any Derivative Works\n      that You distribute, all copyright, patent, trademark, and\n      attribution notices from the Source form of the Work,\n      excluding those notices that do not pertain to any part of\n      the Derivative Works; and\n\n  (d) If the Work includes a \"NOTICE\" text file as part of its\n      distribution, then any Derivative Works that You distribute must\n      include a readable copy of the attribution notices contained\n      within such NOTICE file, excluding those notices that do not\n      pertain to any part of the Derivative Works, in at least one\n      of the following places: within a NOTICE text file distributed\n      as part of the Derivative Works; within the Source form or\n      documentation, if provided along with the Derivative Works; or,\n      within a display generated by the Derivative Works, if and\n      wherever such third-party notices normally appear. The contents\n      of the NOTICE file are for informational purposes only and\n      do not modify the License. You may add Your own attribution\n      notices within Derivative Works that You distribute, alongside\n      or as an addendum to the NOTICE text from the Work, provided\n      that such additional attribution notices cannot be construed\n      as modifying the License.\n\n  You may add Your own copyright statement to Your modifications and\n  may provide additional or different license terms and conditions\n  for use, reproduction, or distribution of Your modifications, or\n  for any such Derivative Works as a whole, provided Your use,\n  reproduction, and distribution of the Work otherwise complies with\n  the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n  any Contribution intentionally submitted for inclusion in the Work\n  by You to the Licensor shall be under the terms and conditions of\n  this License, without any additional terms or conditions.\n  Notwithstanding the above, nothing herein shall supersede or modify\n  the terms of any separate license agreement you may have executed\n  with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n  names, trademarks, service marks, or product names of the Licensor,\n  except as required for reasonable and customary use in describing the\n  origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n  agreed to in writing, Licensor provides the Work (and each\n  Contributor provides its Contributions) on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n  implied, including, without limitation, any warranties or conditions\n  of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n  PARTICULAR PURPOSE. You are solely responsible for determining the\n  appropriateness of using or redistributing the Work and assume any\n  risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n  whether in tort (including negligence), contract, or otherwise,\n  unless required by applicable law (such as deliberate and grossly\n  negligent acts) or agreed to in writing, shall any Contributor be\n  liable to You for damages, including any direct, indirect, special,\n  incidental, or consequential damages of any character arising as a\n  result of this License or out of the use or inability to use the\n  Work (including but not limited to damages for loss of goodwill,\n  work stoppage, computer failure or malfunction, or any and all\n  other commercial damages or losses), even if such Contributor\n  has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n  the Work or Derivative Works thereof, You may choose to offer,\n  and charge a fee for, acceptance of support, warranty, indemnity,\n  or other liability obligations and/or rights consistent with this\n  License. However, in accepting such obligations, You may act only\n  on Your own behalf and on Your sole responsibility, not on behalf\n  of any other Contributor, and only if You agree to indemnify,\n  defend, and hold each Contributor harmless for any liability\n  incurred by, or claims asserted against, such Contributor by reason\n  of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n  To apply the Apache License to your work, attach the following\n  boilerplate notice, with the fields enclosed by brackets \"[]\"\n  replaced with your own identifying information. (Don't include\n  the brackets!)  The text should be enclosed in the appropriate\n  comment syntax for the file format. We also recommend that a\n  file or class name and description of purpose be included on the\n  same \"printed page\" as the copyright notice for easier\n  identification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n--- LLVM Exceptions to the Apache 2.0 License ----\n\nAs an exception, if, as a result of your compiling your source code, portions\nof this Software are embedded into an Object form of such source code, you\nmay redistribute such embedded portions in such Object form without complying\nwith the conditions of Sections 4(a), 4(b) and 4(d) of the License.\n\nIn addition, if you combine or link compiled forms of this Software with\nsoftware that is licensed under the GPLv2 (\"Combined Software\") and if a\ncourt of competent jurisdiction determines that the patent provision (Section\n3), the indemnity provision (Section 9) or other Section of the License\nconflicts with the conditions of the GPLv2, you may retroactively and\nprospectively choose to deem waived or otherwise exclude such Section(s) of\nthe License, but only in their entirety and only with respect to the Combined\nSoftware.\n--------------------------------------------------------------------------------\nlibcxx\nlibcxxabi\n\nCopyright (c) 2009-2014 by the contributors listed in CREDITS.TXT\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nlibcxx\nlibcxxabi\n\nCopyright (c) 2009-2019 by the contributors listed in CREDITS.TXT\n\nAll rights reserved.\n\nDeveloped by:\n\n    LLVM Team\n\n    University of Illinois at Urbana-Champaign\n\n    http://llvm.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal with\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimers.\n\n    * Redistributions in binary form must reproduce the above copyright notice,\n      this list of conditions and the following disclaimers in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the names of the LLVM Team, University of Illinois at\n      Urbana-Champaign, nor the names of its contributors may be used to\n      endorse or promote products derived from this Software without specific\n      prior written permission.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nCONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 1988 by Jef Poskanzer.\n\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose and without fee is hereby granted, provided\nthat the above copyright notice appear in all copies and that both that\ncopyright notice and this permission notice appear in supporting\ndocumentation.  This software is provided \"as is\" without express or\nimplied warranty.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 1989 by Jef Poskanzer.\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose and without fee is hereby granted, provided\nthat the above copyright notice appear in all copies and that both that\ncopyright notice and this permission notice appear in supporting\ndocumentation.  This software is provided \"as is\" without express or\nimplied warranty.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies).\nAll Rights Reserved.\nAuthor: Siarhei Siamashka <siarhei.siamashka@nokia.com>\nCopyright (C) 2013-2014, Linaro Limited.  All Rights Reserved.\nAuthor: Ragesh Radhakrishnan <ragesh.r@linaro.org>\nCopyright (C) 2014-2016, D. R. Commander.  All Rights Reserved.\nCopyright (C) 2015-2016, Matthieu Darbois.  All Rights Reserved.\nCopyright (C) 2016, Siarhei Siamashka.  All Rights Reserved.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies).\nAll Rights Reserved.\nAuthor: Siarhei Siamashka <siarhei.siamashka@nokia.com>\nCopyright (C) 2014, Siarhei Siamashka.  All Rights Reserved.\nCopyright (C) 2014, Linaro Limited.  All Rights Reserved.\nCopyright (C) 2015, D. R. Commander.  All Rights Reserved.\nCopyright (C) 2015-2016, Matthieu Darbois.  All Rights Reserved.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2013, MIPS Technologies, Inc., California.\nAll Rights Reserved.\nAuthors:  Teodora Novkovic (teodora.novkovic@imgtec.com)\n          Darko Laus       (darko.laus@imgtec.com)\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2013-2014, MIPS Technologies, Inc., California.\nAll Rights Reserved.\nAuthors:  Teodora Novkovic (teodora.novkovic@imgtec.com)\n          Darko Laus       (darko.laus@imgtec.com)\nCopyright (C) 2015, D. R. Commander.  All Rights Reserved.\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2014, D. R. Commander.  All Rights Reserved.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2014-2015, D. R. Commander.  All Rights Reserved.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2014-2015, D. R. Commander.  All Rights Reserved.\nCopyright (C) 2014, Jay Foad.  All Rights Reserved.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C) 2015, D. R. Commander.  All Rights Reserved.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C)2009-2014 D. R. Commander.  All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n- Neither the name of the libjpeg-turbo Project nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C)2009-2015 D. R. Commander.  All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n- Neither the name of the libjpeg-turbo Project nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C)2009-2016 D. R. Commander.  All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n- Neither the name of the libjpeg-turbo Project nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C)2011 D. R. Commander.  All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n- Neither the name of the libjpeg-turbo Project nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C)2011, 2015 D. R. Commander.  All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n- Neither the name of the libjpeg-turbo Project nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright (C)2011-2016 D. R. Commander.  All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n- Neither the name of the libjpeg-turbo Project nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nCopyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB\nCopyright (C) 2010, D. R. Commander.\n\nBased on the x86 SIMD extension for IJG JPEG library - version 1.02\n\nCopyright (C) 1999-2006, MIYASAKA Masaru.\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nWe are also required to state that\n   \"The Graphics Interchange Format(c) is the Copyright property of\n   CompuServe Incorporated. GIF(sm) is a Service Mark property of\n   CompuServe Incorporated.\"\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nlibjpeg-turbo Licenses\n======================\n\nlibjpeg-turbo is covered by three compatible BSD-style open source licenses:\n\n- The IJG (Independent JPEG Group) License, which is listed in\n  [README.ijg](README.ijg)\n\n  This license applies to the libjpeg API library and associated programs\n  (any code inherited from libjpeg, and any modifications to that code.)\n\n- The Modified (3-clause) BSD License, which is listed in\n  [turbojpeg.c](turbojpeg.c)\n\n  This license covers the TurboJPEG API library and associated programs.\n\n- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc)\n\n  This license is a subset of the other two, and it covers the libjpeg-turbo\n  SIMD extensions.\n\n\nComplying with the libjpeg-turbo Licenses\n=========================================\n\nThis section provides a roll-up of the libjpeg-turbo licensing terms, to the\nbest of our understanding.\n\n1.  If you are distributing a modified version of the libjpeg-turbo source,\n    then:\n\n    1.  You cannot alter or remove any existing copyright or license notices\n        from the source.\n\n        **Origin**\n        - Clause 1 of the IJG License\n        - Clause 1 of the Modified BSD License\n        - Clauses 1 and 3 of the zlib License\n\n    2.  You must add your own copyright notice to the header of each source\n        file you modified, so others can tell that you modified that file (if\n        there is not an existing copyright header in that file, then you can\n        simply add a notice stating that you modified the file.)\n\n        **Origin**\n        - Clause 1 of the IJG License\n        - Clause 2 of the zlib License\n\n    3.  You must include the IJG README file, and you must not alter any of the\n        copyright or license text in that file.\n\n        **Origin**\n        - Clause 1 of the IJG License\n\n2.  If you are distributing only libjpeg-turbo binaries without the source, or\n    if you are distributing an application that statically links with\n    libjpeg-turbo, then:\n\n    1.  Your product documentation must include a message stating:\n\n        This software is based in part on the work of the Independent JPEG\n        Group.\n\n        **Origin**\n        - Clause 2 of the IJG license\n\n    2.  If your binary distribution includes or uses the TurboJPEG API, then\n        your product documentation must include the text of the Modified BSD\n        License.\n\n        **Origin**\n        - Clause 2 of the Modified BSD License\n\n3.  You cannot use the name of the IJG or The libjpeg-turbo Project or the\n    contributors thereof in advertising, publicity, etc.\n\n    **Origin**\n    - IJG License\n    - Clause 3 of the Modified BSD License\n\n4.  The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be\n    free of defects, nor do we accept any liability for undesirable\n    consequences resulting from your use of the software.\n\n    **Origin**\n    - IJG License\n    - Modified BSD License\n    - zlib License\n--------------------------------------------------------------------------------\nlibjpeg-turbo\n\nlibjpeg-turbo note:  This file has been modified by The libjpeg-turbo Project\nto include only information relevant to libjpeg-turbo, to wordsmith certain\nsections, and to remove impolitic language that existed in the libjpeg v8\nREADME.  It is included only for reference.  Please see README.md for\ninformation specific to libjpeg-turbo.\n\n\nThe Independent JPEG Group's JPEG software\n==========================================\n\nThis distribution contains a release of the Independent JPEG Group's free JPEG\nsoftware.  You are welcome to redistribute this software and to use it for any\npurpose, subject to the conditions under LEGAL ISSUES, below.\n\nThis software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,\nBill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,\nJulian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,\nand other members of the Independent JPEG Group.\n\nIJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee\n(also known as JPEG, together with ITU-T SG16).\n\n\nDOCUMENTATION ROADMAP\n=====================\n\nThis file contains the following sections:\n\nOVERVIEW            General description of JPEG and the IJG software.\nLEGAL ISSUES        Copyright, lack of warranty, terms of distribution.\nREFERENCES          Where to learn more about JPEG.\nARCHIVE LOCATIONS   Where to find newer versions of this software.\nFILE FORMAT WARS    Software *not* to get.\nTO DO               Plans for future IJG releases.\n\nOther documentation files in the distribution are:\n\nUser documentation:\n  usage.txt         Usage instructions for cjpeg, djpeg, jpegtran,\n                    rdjpgcom, and wrjpgcom.\n  *.1               Unix-style man pages for programs (same info as usage.txt).\n  wizard.txt        Advanced usage instructions for JPEG wizards only.\n  change.log        Version-to-version change highlights.\nProgrammer and internal documentation:\n  libjpeg.txt       How to use the JPEG library in your own programs.\n  example.c         Sample code for calling the JPEG library.\n  structure.txt     Overview of the JPEG library's internal structure.\n  coderules.txt     Coding style rules --- please read if you contribute code.\n\nPlease read at least usage.txt.  Some information can also be found in the JPEG\nFAQ (Frequently Asked Questions) article.  See ARCHIVE LOCATIONS below to find\nout where to obtain the FAQ article.\n\nIf you want to understand how the JPEG code works, we suggest reading one or\nmore of the REFERENCES, then looking at the documentation files (in roughly\nthe order listed) before diving into the code.\n\n\nOVERVIEW\n========\n\nThis package contains C software to implement JPEG image encoding, decoding,\nand transcoding.  JPEG (pronounced \"jay-peg\") is a standardized compression\nmethod for full-color and grayscale images.  JPEG's strong suit is compressing\nphotographic images or other types of images that have smooth color and\nbrightness transitions between neighboring pixels.  Images with sharp lines or\nother abrupt features may not compress well with JPEG, and a higher JPEG\nquality may have to be used to avoid visible compression artifacts with such\nimages.\n\nJPEG is lossy, meaning that the output pixels are not necessarily identical to\nthe input pixels.  However, on photographic content and other \"smooth\" images,\nvery good compression ratios can be obtained with no visible compression\nartifacts, and extremely high compression ratios are possible if you are\nwilling to sacrifice image quality (by reducing the \"quality\" setting in the\ncompressor.)\n\nThis software implements JPEG baseline, extended-sequential, and progressive\ncompression processes.  Provision is made for supporting all variants of these\nprocesses, although some uncommon parameter settings aren't implemented yet.\nWe have made no provision for supporting the hierarchical or lossless\nprocesses defined in the standard.\n\nWe provide a set of library routines for reading and writing JPEG image files,\nplus two sample applications \"cjpeg\" and \"djpeg\", which use the library to\nperform conversion between JPEG and some other popular image file formats.\nThe library is intended to be reused in other applications.\n\nIn order to support file conversion and viewing software, we have included\nconsiderable functionality beyond the bare JPEG coding/decoding capability;\nfor example, the color quantization modules are not strictly part of JPEG\ndecoding, but they are essential for output to colormapped file formats or\ncolormapped displays.  These extra functions can be compiled out of the\nlibrary if not required for a particular application.\n\nWe have also included \"jpegtran\", a utility for lossless transcoding between\ndifferent JPEG processes, and \"rdjpgcom\" and \"wrjpgcom\", two simple\napplications for inserting and extracting textual comments in JFIF files.\n\nThe emphasis in designing this software has been on achieving portability and\nflexibility, while also making it fast enough to be useful.  In particular,\nthe software is not intended to be read as a tutorial on JPEG.  (See the\nREFERENCES section for introductory material.)  Rather, it is intended to\nbe reliable, portable, industrial-strength code.  We do not claim to have\nachieved that goal in every aspect of the software, but we strive for it.\n\nWe welcome the use of this software as a component of commercial products.\nNo royalty is required, but we do ask for an acknowledgement in product\ndocumentation, as described under LEGAL ISSUES.\n\n\nLEGAL ISSUES\n============\n\nIn plain English:\n\n1. We don't promise that this software works.  (But if you find any bugs,\n   please let us know!)\n2. You can use this software for whatever you want.  You don't have to pay us.\n3. You may not pretend that you wrote this software.  If you use it in a\n   program, you must acknowledge somewhere in your documentation that\n   you've used the IJG code.\n\nIn legalese:\n\nThe authors make NO WARRANTY or representation, either express or implied,\nwith respect to this software, its quality, accuracy, merchantability, or\nfitness for a particular purpose.  This software is provided \"AS IS\", and you,\nits user, assume the entire risk as to its quality and accuracy.\n\nThis software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding.\nAll Rights Reserved except as specified below.\n\nPermission is hereby granted to use, copy, modify, and distribute this\nsoftware (or portions thereof) for any purpose, without fee, subject to these\nconditions:\n(1) If any part of the source code for this software is distributed, then this\nREADME file must be included, with this copyright and no-warranty notice\nunaltered; and any additions, deletions, or changes to the original files\nmust be clearly indicated in accompanying documentation.\n(2) If only executable code is distributed, then the accompanying\ndocumentation must state that \"this software is based in part on the work of\nthe Independent JPEG Group\".\n(3) Permission for use of this software is granted only if the user accepts\nfull responsibility for any undesirable consequences; the authors accept\nNO LIABILITY for damages of any kind.\n\nThese conditions apply to any software derived from or based on the IJG code,\nnot just to the unmodified library.  If you use our work, you ought to\nacknowledge us.\n\nPermission is NOT granted for the use of any IJG author's name or company name\nin advertising or publicity relating to this software or products derived from\nit.  This software may be referred to only as \"the Independent JPEG Group's\nsoftware\".\n\nWe specifically permit and encourage the use of this software as the basis of\ncommercial products, provided that all warranty or liability claims are\nassumed by the product vendor.\n\n\nThe Unix configuration script \"configure\" was produced with GNU Autoconf.\nIt is copyright by the Free Software Foundation but is freely distributable.\nThe same holds for its supporting scripts (config.guess, config.sub,\nltmain.sh).  Another support script, install-sh, is copyright by X Consortium\nbut is also freely distributable.\n\nThe IJG distribution formerly included code to read and write GIF files.\nTo avoid entanglement with the Unisys LZW patent (now expired), GIF reading\nsupport has been removed altogether, and the GIF writer has been simplified\nto produce \"uncompressed GIFs\".  This technique does not use the LZW\nalgorithm; the resulting GIF files are larger than usual, but are readable\nby all standard GIF decoders.\n\nWe are required to state that\n    \"The Graphics Interchange Format(c) is the Copyright property of\n    CompuServe Incorporated.  GIF(sm) is a Service Mark property of\n    CompuServe Incorporated.\"\n\n\nREFERENCES\n==========\n\nWe recommend reading one or more of these references before trying to\nunderstand the innards of the JPEG software.\n\nThe best short technical introduction to the JPEG compression algorithm is\n    Wallace, Gregory K.  \"The JPEG Still Picture Compression Standard\",\n    Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.\n(Adjacent articles in that issue discuss MPEG motion picture compression,\napplications of JPEG, and related topics.)  If you don't have the CACM issue\nhandy, a PDF file containing a revised version of Wallace's article is\navailable at http://www.ijg.org/files/Wallace.JPEG.pdf.  The file (actually\na preprint for an article that appeared in IEEE Trans. Consumer Electronics)\nomits the sample images that appeared in CACM, but it includes corrections\nand some added material.  Note: the Wallace article is copyright ACM and IEEE,\nand it may not be used for commercial purposes.\n\nA somewhat less technical, more leisurely introduction to JPEG can be found in\n\"The Data Compression Book\" by Mark Nelson and Jean-loup Gailly, published by\nM&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides\ngood explanations and example C code for a multitude of compression methods\nincluding JPEG.  It is an excellent source if you are comfortable reading C\ncode but don't know much about data compression in general.  The book's JPEG\nsample code is far from industrial-strength, but when you are ready to look\nat a full implementation, you've got one here...\n\nThe best currently available description of JPEG is the textbook \"JPEG Still\nImage Data Compression Standard\" by William B. Pennebaker and Joan L.\nMitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.\nPrice US$59.95, 638 pp.  The book includes the complete text of the ISO JPEG\nstandards (DIS 10918-1 and draft DIS 10918-2).\n\nThe original JPEG standard is divided into two parts, Part 1 being the actual\nspecification, while Part 2 covers compliance testing methods.  Part 1 is\ntitled \"Digital Compression and Coding of Continuous-tone Still Images,\nPart 1: Requirements and guidelines\" and has document numbers ISO/IEC IS\n10918-1, ITU-T T.81.  Part 2 is titled \"Digital Compression and Coding of\nContinuous-tone Still Images, Part 2: Compliance testing\" and has document\nnumbers ISO/IEC IS 10918-2, ITU-T T.83.\n\nThe JPEG standard does not specify all details of an interchangeable file\nformat.  For the omitted details we follow the \"JFIF\" conventions, revision\n1.02.  JFIF 1.02 has been adopted as an Ecma International Technical Report\nand thus received a formal publication status.  It is available as a free\ndownload in PDF format from\nhttp://www.ecma-international.org/publications/techreports/E-TR-098.htm.\nA PostScript version of the JFIF document is available at\nhttp://www.ijg.org/files/jfif.ps.gz.  There is also a plain text version at\nhttp://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.\n\nThe TIFF 6.0 file format specification can be obtained by FTP from\nftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme\nfound in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.\nIJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).\nInstead, we recommend the JPEG design proposed by TIFF Technical Note #2\n(Compression tag 7).  Copies of this Note can be obtained from\nhttp://www.ijg.org/files/.  It is expected that the next revision\nof the TIFF spec will replace the 6.0 JPEG design with the Note's design.\nAlthough IJG's own code does not support TIFF/JPEG, the free libtiff library\nuses our library to implement TIFF/JPEG per the Note.\n\n\nARCHIVE LOCATIONS\n=================\n\nThe \"official\" archive site for this software is www.ijg.org.\nThe most recent released version can always be found there in\ndirectory \"files\".\n\nThe JPEG FAQ (Frequently Asked Questions) article is a source of some\ngeneral information about JPEG.\nIt is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/\nand other news.answers archive sites, including the official news.answers\narchive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.\nIf you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu\nwith body\n    send usenet/news.answers/jpeg-faq/part1\n    send usenet/news.answers/jpeg-faq/part2\n\n\nFILE FORMAT WARS\n================\n\nThe ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together\nwith ITU-T SG16) currently promotes different formats containing the name\n\"JPEG\" which are incompatible with original DCT-based JPEG.  IJG therefore does\nnot support these formats (see REFERENCES).  Indeed, one of the original\nreasons for developing this free software was to help force convergence on\ncommon, interoperable format standards for JPEG files.\nDon't use an incompatible file format!\n(In any case, our decoder will remain capable of reading existing JPEG\nimage files indefinitely.)\n\n\nTO DO\n=====\n\nPlease send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.\n--------------------------------------------------------------------------------\nlibjxl\n\nCopyright 2021 The Chromium Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibmicrohttpd\nskia\n\nCopyright (c) 2011 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibpng\n\nCOPYRIGHT NOTICE, DISCLAIMER, and LICENSE\n=========================================\n\nPNG Reference Library License version 2\n---------------------------------------\n\n* Copyright (c) 1995-2019 The PNG Reference Library Authors.\n* Copyright (c) 2018-2019 Cosmin Truta.\n* Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.\n* Copyright (c) 1996-1997 Andreas Dilger.\n* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n\nThe software is supplied \"as is\", without warranty of any kind,\nexpress or implied, including, without limitation, the warranties\nof merchantability, fitness for a particular purpose, title, and\nnon-infringement.  In no event shall the Copyright owners, or\nanyone distributing the software, be liable for any damages or\nother liability, whether in contract, tort or otherwise, arising\nfrom, out of, or in connection with the software, or the use or\nother dealings in the software, even if advised of the possibility\nof such damage.\n\nPermission is hereby granted to use, copy, modify, and distribute\nthis software, or portions hereof, for any purpose, without fee,\nsubject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you\n    must not claim that you wrote the original software.  If you\n    use this software in a product, an acknowledgment in the product\n    documentation would be appreciated, but is not required.\n\n2. Altered source versions must be plainly marked as such, and must\n    not be misrepresented as being the original software.\n\n3. This Copyright notice may not be removed or altered from any\n    source or altered source distribution.\n\n\nPNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)\n-----------------------------------------------------------------------\n\nlibpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are\nCopyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are\nderived from libpng-1.0.6, and are distributed according to the same\ndisclaimer and license as libpng-1.0.6 with the following individuals\nadded to the list of Contributing Authors:\n\n    Simon-Pierre Cadieux\n    Eric S. Raymond\n    Mans Rullgard\n    Cosmin Truta\n    Gilles Vollant\n    James Yu\n    Mandar Sahastrabuddhe\n    Google Inc.\n    Vadim Barkov\n\nand with the following additions to the disclaimer:\n\n    There is no warranty against interference with your enjoyment of\n    the library or against infringement.  There is no warranty that our\n    efforts or the library will fulfill any of your particular purposes\n    or needs.  This library is provided with all faults, and the entire\n    risk of satisfactory quality, performance, accuracy, and effort is\n    with the user.\n\nSome files in the \"contrib\" directory and some configure-generated\nfiles that are distributed with libpng have other copyright owners, and\nare released under other open source licenses.\n\nlibpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are\nCopyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from\nlibpng-0.96, and are distributed according to the same disclaimer and\nlicense as libpng-0.96, with the following individuals added to the\nlist of Contributing Authors:\n\n    Tom Lane\n    Glenn Randers-Pehrson\n    Willem van Schaik\n\nlibpng versions 0.89, June 1996, through 0.96, May 1997, are\nCopyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,\nand are distributed according to the same disclaimer and license as\nlibpng-0.88, with the following individuals added to the list of\nContributing Authors:\n\n    John Bowler\n    Kevin Bracey\n    Sam Bushell\n    Magnus Holmgren\n    Greg Roelofs\n    Tom Tanner\n\nSome files in the \"scripts\" directory have other copyright owners,\nbut are released under this license.\n\nlibpng versions 0.5, May 1995, through 0.88, January 1996, are\nCopyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n\nFor the purposes of this copyright and license, \"Contributing Authors\"\nis defined as the following set of individuals:\n\n    Andreas Dilger\n    Dave Martindale\n    Guy Eric Schalnat\n    Paul Schmidt\n    Tim Wegner\n\nThe PNG Reference Library is supplied \"AS IS\".  The Contributing\nAuthors and Group 42, Inc. disclaim all warranties, expressed or\nimplied, including, without limitation, the warranties of\nmerchantability and of fitness for any purpose.  The Contributing\nAuthors and Group 42, Inc. assume no liability for direct, indirect,\nincidental, special, exemplary, or consequential damages, which may\nresult from the use of the PNG Reference Library, even if advised of\nthe possibility of such damage.\n\nPermission is hereby granted to use, copy, modify, and distribute this\nsource code, or portions hereof, for any purpose, without fee, subject\nto the following restrictions:\n\n1. The origin of this source code must not be misrepresented.\n\n2. Altered versions must be plainly marked as such and must not\n    be misrepresented as being the original source.\n\n3. This Copyright notice may not be removed or altered from any\n    source or altered source distribution.\n\nThe Contributing Authors and Group 42, Inc. specifically permit,\nwithout fee, and encourage the use of this source code as a component\nto supporting the PNG file format in commercial products.  If you use\nthis source code in a product, acknowledgment is not required but would\nbe appreciated.\n--------------------------------------------------------------------------------\nlibtess2\n\nCopyright (C) [dates of first publication] Silicon Graphics, Inc.\nAll Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice including the dates of first publication and either this\npermission notice or a reference to http://oss.sgi.com/projects/FreeB/ shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON GRAPHICS, INC.\nBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\nOR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name of Silicon Graphics, Inc. shall not\nbe used in advertising or otherwise to promote the sale, use or other dealings in\nthis Software without prior written authorization from Silicon Graphics, Inc.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright (c) 2010, Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2010 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2011 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2012 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2013 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2014 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2015 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2016 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2017 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2018 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2021 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlibwebp\n\nCopyright 2022 Google Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of Google nor the names of its contributors may\n    be used to endorse or promote products derived from this software\n    without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nlints\n\nCopyright 2021, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nmaterial_color_utilities\n\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   Copyright 2021 Google LLC\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n--------------------------------------------------------------------------------\nperfetto\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nCopyright (c) 2017, The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n--------------------------------------------------------------------------------\nplatform_detect\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2017 Workiva Inc.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n--------------------------------------------------------------------------------\nrapidjson\n\nCopyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip-> All rights reserved->\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nrapidjson\n\nCopyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nrapidjson\n\nCopyright (c) 2006-2013 Alexander Chemeris\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  1. Redistributions of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n  2. Redistributions in binary form must reproduce the above copyright\n     notice, this list of conditions and the following disclaimer in the\n     documentation and/or other materials provided with the distribution.\n\n  3. Neither the name of the product nor the names of its contributors may\n     be used to endorse or promote products derived from this software\n     without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\nEVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\nOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\nOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nrapidjson\n\nThe above software in this distribution may have been modified by\nTHL A29 Limited (\"Tencent Modifications\").\nAll Tencent Modifications are Copyright (C) 2015 THL A29 Limited.\n--------------------------------------------------------------------------------\nskia\n\nCopyright (C) 2014 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright (c) 2011 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright (c) 2014 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2005 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2006 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2006-2012 The Android Open Source Project\nCopyright 2012 Mozilla Foundation\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2007 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2008 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2008 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2009 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2009-2015 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2010 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2010 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2011 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2011 Google Inc.\nCopyright 2012 Mozilla Foundation\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2011 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2012 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2012 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2012 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2013 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2013 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2014 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2014 Google Inc.\nCopyright 2017 ARM Ltd.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2014 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2015 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2015 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2016 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2016 Mozilla Foundation\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2016 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2017 ARM Ltd.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2017 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2018 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2018 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2018 Google LLC.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2018 Google, LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2018 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2019 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2019 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2019 Google LLC.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2019 Google LLC.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2019 Google, LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2019 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2020 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2020 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2020 Google LLC.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2020 Google LLC.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2020 Google, LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2021 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2021 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2021 Google LLC.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2021 Google, LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2022 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2022 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2022 Google LLC.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2022 Google, LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2023 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2023 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2023 Google LLC.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2023 Google, LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2023 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2024 Google Inc.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2024 Google LLC\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nskia\n\nCopyright 2024 The Android Open Source Project\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n  * Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nspirv-cross\n\nCopyright 2014-2016,2021 The Khronos Group, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n--------------------------------------------------------------------------------\nspring_animation\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nsqlite\n\nThe source code for SQLite is in the public domain. No claim of\ncopyright is made on any part of the core source code. (The\ndocumentation and test code is a different matter - some sections of\ndocumentation and test logic are governed by open-source licenses.)\nAll contributors to the SQLite core software have signed affidavits\nspecifically disavowing any copyright interest in the code. This means\nthat anybody is able to legally do anything they want with the SQLite\nsource code.\n\nThere are other SQL database engines with liberal licenses that allow\nthe code to be broadly and freely used. But those other engines are\nstill governed by copyright law. SQLite is different in that copyright\nlaw simply does not apply.\n\nThe source code files for other SQL database engines typically begin\nwith a comment describing your legal rights to view and copy that\nfile. The SQLite source code contains no license since it is not\ngoverned by copyright. Instead of a license, the SQLite source code\noffers a blessing:\n\nMay you do good and not evil\nMay you find forgiveness for yourself and forgive others\nMay you share freely, never taking more than you give.\n--------------------------------------------------------------------------------\nstack_trace\n\nCopyright 2014, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nterm_glyph\n\nCopyright 2017, the Dart project authors. \n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\ntest_api\n\nCopyright 2018, the Dart project authors. \n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nvector_math\n\nCopyright 2015, Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nCopyright (C) 2013 Andrew Magill\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n\n--------------------------------------------------------------------------------\nvm_service\n\nCopyright 2015, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nvulkan-validation-layers\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n\nFile: layers/external/vma/vk_mem_alloc.h\n\n\nCopyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nvulkan-validation-layers\n\nCopyright (C) 2012-2021 Yann Collet\n\nBSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\n     notice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\n     copyright notice, this list of conditions and the following disclaimer\n     in the documentation and/or other materials provided with the\n     distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nvulkan-validation-layers\nvulkan_memory_allocator\n\nCopyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n--------------------------------------------------------------------------------\nweb\n\nCopyright 2023, the Dart project authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google LLC nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n--------------------------------------------------------------------------------\nweb_locale_keymap\n\nCopyright (c) 2022 Google LLC\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n--------------------------------------------------------------------------------\nwebview_flutter_android\n\nCopyright 2013 The Flutter Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n--------------------------------------------------------------------------------\nwin32\n\nCopyright 2019, Dart | Windows. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nxxhash\n\nCopyright (C) 2012-2016, Yann Collet\n\nBSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n* Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nxxhash\n\nCopyright (C) 2012-2016, Yann Collet.\n\nBSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nzlib\n\nCopyright (C) 1995-2022 Jean-loup Gailly and Mark Adler\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nzlib\n\nCopyright (C) 1998-2005 Gilles Vollant\n--------------------------------------------------------------------------------\nzlib\n\nCopyright (C) 2017 ARM, Inc.\nCopyright 2017 The Chromium Authors\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nzlib\n\nCopyright 2017 The Chromium Authors\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nzlib\n\nCopyright 2018 The Chromium Authors\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nzlib\n\nCopyright 2019 The Chromium Authors\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nzlib\n\nCopyright 2022 The Chromium Authors\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n--------------------------------------------------------------------------------\nzlib\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n--------------------------------------------------------------------------------\nzlib\n\nversion 1.2.12, March 27th, 2022\n\nCopyright (C) 1995-2022 Jean-loup Gailly and Mark Adler\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n"
  },
  {
    "path": "legacy/dist/assets/assets/talk.glowbom",
    "content": "{\"title\":\"Glowby\",\"main_color\":\"Black\",\"conclusion\":\"Please send us your information and we'll come back to you shortly!\",\"start_over\":\"Glowby\",\"show_number_result\":true,\"show_percentage_result\":true,\"voice\":true,\"questions\":[{\"title\":\"\",\"description\":\"Hello\",\"buttonsTexts\":[\"Hello!\",\"Hi!\",\"Hi there!\",\"Hey, What's up?\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"How's it going?\",\"buttonsTexts\":[\"I'm ok.\",\"I'm doing quite well, thank you.\",\"Pretty good. How goes it for you?\",\"I'm good, thanks for asking!\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"What's up?\",\"buttonsTexts\":[\"Not much. Just enjoying my time on this sim.\",\"You just summed up my worldview.\",\"Nothing really, just keeping busy.\",\"I can't tell you!\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]}],\"dnsgs\":false}"
  },
  {
    "path": "legacy/dist/assets/shaders/ink_sparkle.frag",
    "content": "{\n  \"sksl\": {\n    \"entrypoint\": \"ink_sparkle_fragment_main\",\n    \"shader\": \"// This SkSL shader is autogenerated by spirv-cross.\\n\\nfloat4 flutter_FragCoord;\\n\\nuniform vec4 u_color;\\nuniform vec4 u_composite_1;\\nuniform vec2 u_center;\\nuniform float u_max_radius;\\nuniform vec2 u_resolution_scale;\\nuniform vec2 u_noise_scale;\\nuniform float u_noise_phase;\\nuniform vec2 u_circle1;\\nuniform vec2 u_circle2;\\nuniform vec2 u_circle3;\\nuniform vec2 u_rotation1;\\nuniform vec2 u_rotation2;\\nuniform vec2 u_rotation3;\\n\\nvec4 fragColor;\\n\\nfloat u_alpha;\\nfloat u_sparkle_alpha;\\nfloat u_blur;\\nfloat u_radius_scale;\\n\\nvec2 FLT_flutter_local_FlutterFragCoord()\\n{\\n    return flutter_FragCoord.xy;\\n}\\n\\nmat2 FLT_flutter_local_rotate2d(vec2 rad)\\n{\\n    return mat2(vec2(rad.x, -rad.y), vec2(rad.y, rad.x));\\n}\\n\\nfloat FLT_flutter_local_soft_circle(vec2 uv, vec2 xy, float radius, float blur)\\n{\\n    float blur_half = blur * 0.5;\\n    float d = distance(uv, xy);\\n    return 1.0 - smoothstep(1.0 - blur_half, 1.0 + blur_half, d / radius);\\n}\\n\\nfloat FLT_flutter_local_circle_grid(vec2 resolution, inout vec2 p, vec2 xy, vec2 rotation, float cell_diameter)\\n{\\n    vec2 param = rotation;\\n    p = (FLT_flutter_local_rotate2d(param) * (xy - p)) + xy;\\n    p = mod(p, vec2(cell_diameter)) / resolution;\\n    float cell_uv = (cell_diameter / resolution.y) * 0.5;\\n    float r = 0.64999997615814208984375 * cell_uv;\\n    vec2 param_1 = p;\\n    vec2 param_2 = vec2(cell_uv);\\n    float param_3 = r;\\n    float param_4 = r * 50.0;\\n    return FLT_flutter_local_soft_circle(param_1, param_2, param_3, param_4);\\n}\\n\\nfloat FLT_flutter_local_turbulence(vec2 uv)\\n{\\n    vec2 uv_scale = uv * vec2(0.800000011920928955078125);\\n    vec2 param = vec2(0.800000011920928955078125);\\n    vec2 param_1 = uv_scale;\\n    vec2 param_2 = u_circle1;\\n    vec2 param_3 = u_rotation1;\\n    float param_4 = 0.17000000178813934326171875;\\n    float _319 = FLT_flutter_local_circle_grid(param, param_1, param_2, param_3, param_4);\\n    float g1 = _319;\\n    vec2 param_5 = vec2(0.800000011920928955078125);\\n    vec2 param_6 = uv_scale;\\n    vec2 param_7 = u_circle2;\\n    vec2 param_8 = u_rotation2;\\n    float param_9 = 0.20000000298023223876953125;\\n    float _331 = FLT_flutter_local_circle_grid(param_5, param_6, param_7, param_8, param_9);\\n    float g2 = _331;\\n    vec2 param_10 = vec2(0.800000011920928955078125);\\n    vec2 param_11 = uv_scale;\\n    vec2 param_12 = u_circle3;\\n    vec2 param_13 = u_rotation3;\\n    float param_14 = 0.2750000059604644775390625;\\n    float _344 = FLT_flutter_local_circle_grid(param_10, param_11, param_12, param_13, param_14);\\n    float g3 = _344;\\n    float v = (((g1 * g1) + g2) - g3) * 0.5;\\n    return clamp(0.449999988079071044921875 + (0.800000011920928955078125 * v), 0.0, 1.0);\\n}\\n\\nfloat FLT_flutter_local_soft_ring(vec2 uv, vec2 xy, float radius, float thickness, float blur)\\n{\\n    vec2 param = uv;\\n    vec2 param_1 = xy;\\n    float param_2 = radius + thickness;\\n    float param_3 = blur;\\n    float circle_outer = FLT_flutter_local_soft_circle(param, param_1, param_2, param_3);\\n    vec2 param_4 = uv;\\n    vec2 param_5 = xy;\\n    float param_6 = max(radius - thickness, 0.0);\\n    float param_7 = blur;\\n    float circle_inner = FLT_flutter_local_soft_circle(param_4, param_5, param_6, param_7);\\n    return clamp(circle_outer - circle_inner, 0.0, 1.0);\\n}\\n\\nfloat FLT_flutter_local_triangle_noise(inout vec2 n)\\n{\\n    n = fract(n * vec2(5.398700237274169921875, 5.442100048065185546875));\\n    n += vec2(dot(n.yx, n + vec2(21.5351009368896484375, 14.3136997222900390625)));\\n    float xy = n.x * n.y;\\n    return (fract(xy * 95.43070220947265625) + fract(xy * 75.0496063232421875)) - 1.0;\\n}\\n\\nfloat FLT_flutter_local_threshold(float v, float l, float h)\\n{\\n    return step(l, v) * (1.0 - step(h, v));\\n}\\n\\nfloat FLT_flutter_local_sparkle(vec2 uv, float t)\\n{\\n    vec2 param = uv;\\n    float _242 = FLT_flutter_local_triangle_noise(param);\\n    float n = _242;\\n    float param_1 = n;\\n    float param_2 = 0.0;\\n    float param_3 = 0.0500000007450580596923828125;\\n    float s = FLT_flutter_local_threshold(param_1, param_2, param_3);\\n    float param_4 = n + sin(3.1415927410125732421875 * (t + 0.3499999940395355224609375));\\n    float param_5 = 0.100000001490116119384765625;\\n    float param_6 = 0.1500000059604644775390625;\\n    s += FLT_flutter_local_threshold(param_4, param_5, param_6);\\n    float param_7 = n + sin(3.1415927410125732421875 * (t + 0.699999988079071044921875));\\n    float param_8 = 0.20000000298023223876953125;\\n    float param_9 = 0.25;\\n    s += FLT_flutter_local_threshold(param_7, param_8, param_9);\\n    float param_10 = n + sin(3.1415927410125732421875 * (t + 1.0499999523162841796875));\\n    float param_11 = 0.300000011920928955078125;\\n    float param_12 = 0.3499999940395355224609375;\\n    s += FLT_flutter_local_threshold(param_10, param_11, param_12);\\n    return clamp(s, 0.0, 1.0) * 0.550000011920928955078125;\\n}\\n\\nvoid FLT_main()\\n{\\n    u_alpha = u_composite_1.x;\\n    u_sparkle_alpha = u_composite_1.y;\\n    u_blur = u_composite_1.z;\\n    u_radius_scale = u_composite_1.w;\\n    vec2 p = FLT_flutter_local_FlutterFragCoord();\\n    vec2 uv_1 = p * u_resolution_scale;\\n    vec2 density_uv = uv_1 - mod(p, u_noise_scale);\\n    float radius = u_max_radius * u_radius_scale;\\n    vec2 param_13 = uv_1;\\n    float turbulence = FLT_flutter_local_turbulence(param_13);\\n    vec2 param_14 = p;\\n    vec2 param_15 = u_center;\\n    float param_16 = radius;\\n    float param_17 = 0.0500000007450580596923828125 * u_max_radius;\\n    float param_18 = u_blur;\\n    float ring = FLT_flutter_local_soft_ring(param_14, param_15, param_16, param_17, param_18);\\n    vec2 param_19 = density_uv;\\n    float param_20 = u_noise_phase;\\n    float sparkle = ((FLT_flutter_local_sparkle(param_19, param_20) * ring) * turbulence) * u_sparkle_alpha;\\n    vec2 param_21 = p;\\n    vec2 param_22 = u_center;\\n    float param_23 = radius;\\n    float param_24 = u_blur;\\n    float wave_alpha = (FLT_flutter_local_soft_circle(param_21, param_22, param_23, param_24) * u_alpha) * u_color.w;\\n    vec4 wave_color = vec4(u_color.xyz * wave_alpha, wave_alpha);\\n    fragColor = mix(wave_color, vec4(1.0), vec4(sparkle));\\n}\\n\\nhalf4 main(float2 iFragCoord)\\n{\\n      flutter_FragCoord = float4(iFragCoord, 0, 0);\\n      FLT_main();\\n      return fragColor;\\n}\\n\",\n    \"stage\": 1,\n    \"uniforms\": [\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 0,\n        \"name\": \"u_color\",\n        \"rows\": 4,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 1,\n        \"name\": \"u_composite_1\",\n        \"rows\": 4,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 2,\n        \"name\": \"u_center\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 3,\n        \"name\": \"u_max_radius\",\n        \"rows\": 1,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 4,\n        \"name\": \"u_resolution_scale\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 5,\n        \"name\": \"u_noise_scale\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 6,\n        \"name\": \"u_noise_phase\",\n        \"rows\": 1,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 7,\n        \"name\": \"u_circle1\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 8,\n        \"name\": \"u_circle2\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 9,\n        \"name\": \"u_circle3\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 10,\n        \"name\": \"u_rotation1\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 11,\n        \"name\": \"u_rotation2\",\n        \"rows\": 2,\n        \"type\": 10\n      },\n      {\n        \"array_elements\": 0,\n        \"bit_width\": 32,\n        \"columns\": 1,\n        \"location\": 12,\n        \"name\": \"u_rotation3\",\n        \"rows\": 2,\n        \"type\": 10\n      }\n    ]\n  }\n}"
  },
  {
    "path": "legacy/dist/canvaskit/canvaskit.js",
    "content": "\nvar CanvasKitInit = (() => {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n  return (\nfunction(moduleArg = {}) {\n\nvar r=moduleArg,aa,ba;r.ready=new Promise((a,b)=>{aa=a;ba=b});\n(function(a){a.Md=a.Md||[];a.Md.push(function(){a.MakeSWCanvasSurface=function(b){var c=b,d=\"undefined\"!==typeof OffscreenCanvas&&c instanceof OffscreenCanvas;if(!(\"undefined\"!==typeof HTMLCanvasElement&&c instanceof HTMLCanvasElement||d||(c=document.getElementById(b),c)))throw\"Canvas with id \"+b+\" was not found\";if(b=a.MakeSurface(c.width,c.height))b.me=c;return b};a.MakeCanvasSurface||(a.MakeCanvasSurface=a.MakeSWCanvasSurface);a.MakeSurface=function(b,c){var d={width:b,height:c,colorType:a.ColorType.RGBA_8888,\nalphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},f=b*c*4,k=a._malloc(f);if(d=a.Surface._makeRasterDirect(d,k,4*b))d.me=null,d.Ue=b,d.Re=c,d.Se=f,d.xe=k,d.getCanvas().clear(a.TRANSPARENT);return d};a.MakeRasterDirectSurface=function(b,c,d){return a.Surface._makeRasterDirect(b,c.byteOffset,d)};a.Surface.prototype.flush=function(b){a.Jd(this.Id);this._flush();if(this.me){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.xe,this.Se);c=new ImageData(c,this.Ue,this.Re);b?this.me.getContext(\"2d\").putImageData(c,\n0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.me.getContext(\"2d\").putImageData(c,0,0)}};a.Surface.prototype.dispose=function(){this.xe&&a._free(this.xe);this.delete()};a.Jd=a.Jd||function(){};a.ne=a.ne||function(){return null}})})(r);\n(function(a){a.Md=a.Md||[];a.Md.push(function(){function b(m,p,w){return m&&m.hasOwnProperty(p)?m[p]:w}function c(m){var p=da(ea);ea[p]=m;return p}function d(m){return m.naturalHeight||m.videoHeight||m.displayHeight||m.height}function f(m){return m.naturalWidth||m.videoWidth||m.displayWidth||m.width}function k(m,p,w,y){m.bindTexture(m.TEXTURE_2D,p);y||w.alphaType!==a.AlphaType.Premul||m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);return p}function l(m,p,w){w||p.alphaType!==a.AlphaType.Premul||\nm.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);m.bindTexture(m.TEXTURE_2D,null)}a.GetWebGLContext=function(m,p){if(!m)throw\"null canvas passed into makeWebGLContext\";var w={alpha:b(p,\"alpha\",1),depth:b(p,\"depth\",1),stencil:b(p,\"stencil\",8),antialias:b(p,\"antialias\",0),premultipliedAlpha:b(p,\"premultipliedAlpha\",1),preserveDrawingBuffer:b(p,\"preserveDrawingBuffer\",0),preferLowPowerToHighPerformance:b(p,\"preferLowPowerToHighPerformance\",0),failIfMajorPerformanceCaveat:b(p,\"failIfMajorPerformanceCaveat\",\n0),enableExtensionsByDefault:b(p,\"enableExtensionsByDefault\",1),explicitSwapControl:b(p,\"explicitSwapControl\",0),renderViaOffscreenBackBuffer:b(p,\"renderViaOffscreenBackBuffer\",0)};w.majorVersion=p&&p.majorVersion?p.majorVersion:\"undefined\"!==typeof WebGL2RenderingContext?2:1;if(w.explicitSwapControl)throw\"explicitSwapControl is not supported\";m=fa(m,w);if(!m)return 0;ha(m);v.Ud.getExtension(\"WEBGL_debug_renderer_info\");return m};a.deleteContext=function(m){v===ia[m]&&(v=null);\"object\"==typeof JSEvents&&\nJSEvents.yf(ia[m].Ud.canvas);ia[m]&&ia[m].Ud.canvas&&(ia[m].Ud.canvas.Oe=void 0);ia[m]=null};a._setTextureCleanup({deleteTexture:function(m,p){var w=ea[p];w&&ia[m].Ud.deleteTexture(w);ea[p]=null}});a.MakeWebGLContext=function(m){if(!this.Jd(m))return null;var p=this._MakeGrContext();if(!p)return null;p.Id=m;var w=p.delete.bind(p);p[\"delete\"]=function(){a.Jd(this.Id);w()}.bind(p);return v.ze=p};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.Jd(this.Id);\nthis._getResourceCacheLimitBytes()};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.Jd(this.Id);this._getResourceCacheUsageBytes()};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.Jd(this.Id);this._releaseResourcesAndAbandonContext()};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(m){a.Jd(this.Id);this._setResourceCacheLimitBytes(m)};a.MakeOnScreenGLSurface=function(m,p,w,y,B,D){if(!this.Jd(m.Id))return null;p=void 0===B||void 0===D?\nthis._MakeOnScreenGLSurface(m,p,w,y):this._MakeOnScreenGLSurface(m,p,w,y,B,D);if(!p)return null;p.Id=m.Id;return p};a.MakeRenderTarget=function(){var m=arguments[0];if(!this.Jd(m.Id))return null;if(3===arguments.length){var p=this._MakeRenderTargetWH(m,arguments[1],arguments[2]);if(!p)return null}else if(2===arguments.length){if(p=this._MakeRenderTargetII(m,arguments[1]),!p)return null}else return null;p.Id=m.Id;return p};a.MakeWebGLCanvasSurface=function(m,p,w){p=p||null;var y=m,B=\"undefined\"!==\ntypeof OffscreenCanvas&&y instanceof OffscreenCanvas;if(!(\"undefined\"!==typeof HTMLCanvasElement&&y instanceof HTMLCanvasElement||B||(y=document.getElementById(m),y)))throw\"Canvas with id \"+m+\" was not found\";m=this.GetWebGLContext(y,w);if(!m||0>m)throw\"failed to create webgl context: err \"+m;m=this.MakeWebGLContext(m);p=this.MakeOnScreenGLSurface(m,y.width,y.height,p);return p?p:(p=y.cloneNode(!0),y.parentNode.replaceChild(p,y),p.classList.add(\"ck-replaced\"),a.MakeSWCanvasSurface(p))};a.MakeCanvasSurface=\na.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(m,p){a.Jd(this.Id);m=c(m);if(p=this._makeImageFromTexture(this.Id,m,p))p.he=m;return p};a.Surface.prototype.makeImageFromTextureSource=function(m,p,w){p||(p={height:d(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});p.colorSpace||(p.colorSpace=a.ColorSpace.SRGB);a.Jd(this.Id);var y=v.Ud;w=k(y,y.createTexture(),p,w);2===v.version?y.texImage2D(y.TEXTURE_2D,0,y.RGBA,p.width,p.height,\n0,y.RGBA,y.UNSIGNED_BYTE,m):y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,m);l(y,p);this._resetContext();return this.makeImageFromTexture(w,p)};a.Surface.prototype.updateTextureFromSource=function(m,p,w){if(m.he){a.Jd(this.Id);var y=m.getImageInfo(),B=v.Ud,D=k(B,ea[m.he],y,w);2===v.version?B.texImage2D(B.TEXTURE_2D,0,B.RGBA,f(p),d(p),0,B.RGBA,B.UNSIGNED_BYTE,p):B.texImage2D(B.TEXTURE_2D,0,B.RGBA,B.RGBA,B.UNSIGNED_BYTE,p);l(B,y,w);this._resetContext();ea[m.he]=null;m.he=c(D);y.colorSpace=\nm.getColorSpace();p=this._makeImageFromTexture(this.Id,m.he,y);w=m.kd.Kd;B=m.kd.Pd;m.kd.Kd=p.kd.Kd;m.kd.Pd=p.kd.Pd;p.kd.Kd=w;p.kd.Pd=B;p.delete();y.colorSpace.delete()}};a.MakeLazyImageFromTextureSource=function(m,p,w){p||(p={height:d(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});p.colorSpace||(p.colorSpace=a.ColorSpace.SRGB);var y={makeTexture:function(){var B=v,D=B.Ud,u=k(D,D.createTexture(),p,w);2===B.version?D.texImage2D(D.TEXTURE_2D,0,D.RGBA,\np.width,p.height,0,D.RGBA,D.UNSIGNED_BYTE,m):D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,m);l(D,p,w);return c(u)},freeSrc:function(){}};\"VideoFrame\"===m.constructor.name&&(y.freeSrc=function(){m.close()});return a.Image._makeFromGenerator(p,y)};a.Jd=function(m){return m?ha(m):!1};a.ne=function(){return v&&v.ze&&!v.ze.isDeleted()?v.ze:null}})})(r);\n(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 e=Math.floor(g.length/4),h=new Uint32Array(e),n=0;n<e;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 d(g){if(void 0===g)return 1;var e=parseFloat(g);return g&&-1!==g.indexOf(\"%\")?e/100:e}function f(g){return Math.round(Math.max(0,\nMath.min(g||0,255)))}function k(g,e){e&&e._ck||a._free(g)}function l(g,e,h){if(!g||!g.length)return M;if(g&&g._ck)return g.byteOffset;var n=a[e].BYTES_PER_ELEMENT;h||(h=a._malloc(g.length*n));a[e].set(g,h/n);return h}function m(g){var e={Rd:M,count:g.length,colorType:a.ColorType.RGBA_F32};if(g instanceof Float32Array)e.Rd=l(g,\"HEAPF32\"),e.count=g.length/4;else if(g instanceof Uint32Array)e.Rd=l(g,\"HEAPU32\"),e.colorType=a.ColorType.RGBA_8888;else if(g instanceof Array){if(g&&g.length){for(var h=a._malloc(16*\ng.length),n=0,t=h/4,x=0;x<g.length;x++)for(var z=0;4>z;z++)a.HEAPF32[t+n]=g[x][z],n++;g=h}else g=M;e.Rd=g}else throw\"Invalid argument to copyFlexibleColorArray, Not a color array \"+typeof g;return e}function p(g){if(!g)return M;var e=T.toTypedArray();if(g.length){if(6===g.length||9===g.length)return l(g,\"HEAPF32\",H),6===g.length&&a.HEAPF32.set(fd,6+H/4),H;if(16===g.length)return e[0]=g[0],e[1]=g[1],e[2]=g[3],e[3]=g[4],e[4]=g[5],e[5]=g[7],e[6]=g[12],e[7]=g[13],e[8]=g[15],H;throw\"invalid matrix size\";\n}if(void 0===g.m11)throw\"invalid matrix argument\";e[0]=g.m11;e[1]=g.m21;e[2]=g.m41;e[3]=g.m12;e[4]=g.m22;e[5]=g.m42;e[6]=g.m14;e[7]=g.m24;e[8]=g.m44;return H}function w(g){if(!g)return M;var e=Y.toTypedArray();if(g.length){if(16!==g.length&&6!==g.length&&9!==g.length)throw\"invalid matrix size\";if(16===g.length)return l(g,\"HEAPF32\",ca);e.fill(0);e[0]=g[0];e[1]=g[1];e[3]=g[2];e[4]=g[3];e[5]=g[4];e[7]=g[5];e[10]=1;e[12]=g[6];e[13]=g[7];e[15]=g[8];6===g.length&&(e[12]=0,e[13]=0,e[15]=1);return ca}if(void 0===\ng.m11)throw\"invalid matrix argument\";e[0]=g.m11;e[1]=g.m21;e[2]=g.m31;e[3]=g.m41;e[4]=g.m12;e[5]=g.m22;e[6]=g.m32;e[7]=g.m42;e[8]=g.m13;e[9]=g.m23;e[10]=g.m33;e[11]=g.m43;e[12]=g.m14;e[13]=g.m24;e[14]=g.m34;e[15]=g.m44;return ca}function y(g,e){return l(g,\"HEAPF32\",e||va)}function B(g,e,h,n){var t=Ma.toTypedArray();t[0]=g;t[1]=e;t[2]=h;t[3]=n;return va}function D(g){for(var e=new Float32Array(4),h=0;4>h;h++)e[h]=a.HEAPF32[g/4+h];return e}function u(g,e){return l(g,\"HEAPF32\",e||X)}function F(g,e){return l(g,\n\"HEAPF32\",e||Eb)}a.Color=function(g,e,h,n){void 0===n&&(n=1);return a.Color4f(f(g)/255,f(e)/255,f(h)/255,n)};a.ColorAsInt=function(g,e,h,n){void 0===n&&(n=255);return(f(n)<<24|f(g)<<16|f(e)<<8|f(h)<<0&268435455)>>>0};a.Color4f=function(g,e,h,n){void 0===n&&(n=1);return Float32Array.of(g,e,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,\n1,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*\ng[0]),Math.floor(255*g[1]),Math.floor(255*g[2]),g[3]]};a.parseColorString=function(g,e){g=g.toLowerCase();if(g.startsWith(\"#\")){e=255;switch(g.length){case 9:e=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:e=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,e/255)}return g.startsWith(\"rgba\")?(g=g.slice(5,\n-1),g=g.split(\",\"),a.Color(+g[0],+g[1],+g[2],d(g[3]))):g.startsWith(\"rgb\")?(g=g.slice(4,-1),g=g.split(\",\"),a.Color(+g[0],+g[1],+g[2],d(g[3]))):g.startsWith(\"gray(\")||g.startsWith(\"hsl\")||!e||(g=e[g],void 0===g)?a.BLACK:g};a.multiplyByAlpha=function(g,e){g=g.slice();g[3]=Math.max(0,Math.min(g[3]*e,1));return g};a.Malloc=function(g,e){var h=a._malloc(e*g.BYTES_PER_ELEMENT);return{_ck:!0,length:e,byteOffset:h,be:null,subarray:function(n,t){n=this.toTypedArray().subarray(n,t);n._ck=!0;return n},toTypedArray:function(){if(this.be&&\nthis.be.length)return this.be;this.be=new g(a.HEAPU8.buffer,h,e);this.be._ck=!0;return this.be}}};a.Free=function(g){a._free(g.byteOffset);g.byteOffset=M;g.toTypedArray=null;g.be=null};var H=M,T,ca=M,Y,va=M,Ma,na,X=M,fc,Ba=M,gc,Fb=M,hc,Gb=M,hb,Sa=M,ic,Eb=M,jc,kc=M,fd=Float32Array.of(0,0,1),M=0;a.onRuntimeInitialized=function(){function g(e,h,n,t,x,z,E){z||(z=4*t.width,t.colorType===a.ColorType.RGBA_F16?z*=2:t.colorType===a.ColorType.RGBA_F32&&(z*=4));var J=z*t.height;var I=x?x.byteOffset:a._malloc(J);\nif(E?!e._readPixels(t,I,z,h,n,E):!e._readPixels(t,I,z,h,n))return x||a._free(I),null;if(x)return x.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:e=(new Uint8Array(a.HEAPU8.buffer,I,J)).slice();break;case a.ColorType.RGBA_F32:e=(new Float32Array(a.HEAPU8.buffer,I,J)).slice();break;default:return null}a._free(I);return e}Ma=a.Malloc(Float32Array,4);va=Ma.byteOffset;Y=a.Malloc(Float32Array,16);ca=Y.byteOffset;T=a.Malloc(Float32Array,9);H=T.byteOffset;ic=a.Malloc(Float32Array,\n12);Eb=ic.byteOffset;jc=a.Malloc(Float32Array,12);kc=jc.byteOffset;na=a.Malloc(Float32Array,4);X=na.byteOffset;fc=a.Malloc(Float32Array,4);Ba=fc.byteOffset;gc=a.Malloc(Float32Array,3);Fb=gc.byteOffset;hc=a.Malloc(Float32Array,3);Gb=hc.byteOffset;hb=a.Malloc(Int32Array,4);Sa=hb.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=\nfunction(e){var h=l(e,\"HEAPF32\"),n=a.Path._MakeFromCmds(h,e.length);k(h,e);return n};a.Path.MakeFromVerbsPointsWeights=function(e,h,n){var t=l(e,\"HEAPU8\"),x=l(h,\"HEAPF32\"),z=l(n,\"HEAPF32\"),E=a.Path._MakeFromVerbsPointsWeights(t,e.length,x,h.length,z,n&&n.length||0);k(t,e);k(x,h);k(z,n);return E};a.Path.prototype.addArc=function(e,h,n){e=u(e);this._addArc(e,h,n);return this};a.Path.prototype.addCircle=function(e,h,n,t){this._addCircle(e,h,n,!!t);return this};a.Path.prototype.addOval=function(e,h,n){void 0===\nn&&(n=1);e=u(e);this._addOval(e,!!h,n);return this};a.Path.prototype.addPath=function(){var e=Array.prototype.slice.call(arguments),h=e[0],n=!1;\"boolean\"===typeof e[e.length-1]&&(n=e.pop());if(1===e.length)this._addPath(h,1,0,0,0,1,0,0,0,1,n);else if(2===e.length)e=e[1],this._addPath(h,e[0],e[1],e[2],e[3],e[4],e[5],e[6]||0,e[7]||0,e[8]||1,n);else if(7===e.length||10===e.length)this._addPath(h,e[1],e[2],e[3],e[4],e[5],e[6],e[7]||0,e[8]||0,e[9]||1,n);else return null;return this};a.Path.prototype.addPoly=\nfunction(e,h){var n=l(e,\"HEAPF32\");this._addPoly(n,e.length/2,h);k(n,e);return this};a.Path.prototype.addRect=function(e,h){e=u(e);this._addRect(e,!!h);return this};a.Path.prototype.addRRect=function(e,h){e=F(e);this._addRRect(e,!!h);return this};a.Path.prototype.addVerbsPointsWeights=function(e,h,n){var t=l(e,\"HEAPU8\"),x=l(h,\"HEAPF32\"),z=l(n,\"HEAPF32\");this._addVerbsPointsWeights(t,e.length,x,h.length,z,n&&n.length||0);k(t,e);k(x,h);k(z,n)};a.Path.prototype.arc=function(e,h,n,t,x,z){e=a.LTRBRect(e-\nn,h-n,e+n,h+n);x=(x-t)/Math.PI*180-360*!!z;z=new a.Path;z.addArc(e,t/Math.PI*180,x);this.addPath(z,!0);z.delete();return this};a.Path.prototype.arcToOval=function(e,h,n,t){e=u(e);this._arcToOval(e,h,n,t);return this};a.Path.prototype.arcToRotated=function(e,h,n,t,x,z,E){this._arcToRotated(e,h,n,!!t,!!x,z,E);return this};a.Path.prototype.arcToTangent=function(e,h,n,t,x){this._arcToTangent(e,h,n,t,x);return this};a.Path.prototype.close=function(){this._close();return this};a.Path.prototype.conicTo=\nfunction(e,h,n,t,x){this._conicTo(e,h,n,t,x);return this};a.Path.prototype.computeTightBounds=function(e){this._computeTightBounds(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.Path.prototype.cubicTo=function(e,h,n,t,x,z){this._cubicTo(e,h,n,t,x,z);return this};a.Path.prototype.dash=function(e,h,n){return this._dash(e,h,n)?this:null};a.Path.prototype.getBounds=function(e){this._getBounds(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.Path.prototype.lineTo=function(e,\nh){this._lineTo(e,h);return this};a.Path.prototype.moveTo=function(e,h){this._moveTo(e,h);return this};a.Path.prototype.offset=function(e,h){this._transform(1,0,e,0,1,h,0,0,1);return this};a.Path.prototype.quadTo=function(e,h,n,t){this._quadTo(e,h,n,t);return this};a.Path.prototype.rArcTo=function(e,h,n,t,x,z,E){this._rArcTo(e,h,n,t,x,z,E);return this};a.Path.prototype.rConicTo=function(e,h,n,t,x){this._rConicTo(e,h,n,t,x);return this};a.Path.prototype.rCubicTo=function(e,h,n,t,x,z){this._rCubicTo(e,\nh,n,t,x,z);return this};a.Path.prototype.rLineTo=function(e,h){this._rLineTo(e,h);return this};a.Path.prototype.rMoveTo=function(e,h){this._rMoveTo(e,h);return this};a.Path.prototype.rQuadTo=function(e,h,n,t){this._rQuadTo(e,h,n,t);return this};a.Path.prototype.stroke=function(e){e=e||{};e.width=e.width||1;e.miter_limit=e.miter_limit||4;e.cap=e.cap||a.StrokeCap.Butt;e.join=e.join||a.StrokeJoin.Miter;e.precision=e.precision||1;return this._stroke(e)?this:null};a.Path.prototype.transform=function(){if(1===\narguments.length){var e=arguments[0];this._transform(e[0],e[1],e[2],e[3],e[4],e[5],e[6]||0,e[7]||0,e[8]||1)}else if(6===arguments.length||9===arguments.length)e=arguments,this._transform(e[0],e[1],e[2],e[3],e[4],e[5],e[6]||0,e[7]||0,e[8]||1);else throw\"transform expected to take 1 or 9 arguments. Got \"+arguments.length;return this};a.Path.prototype.trim=function(e,h,n){return this._trim(e,h,!!n)?this:null};a.Image.prototype.encodeToBytes=function(e,h){var n=a.ne();e=e||a.ImageFormat.PNG;h=h||100;\nreturn n?this._encodeToBytes(e,h,n):this._encodeToBytes(e,h)};a.Image.prototype.makeShaderCubic=function(e,h,n,t,x){x=p(x);return this._makeShaderCubic(e,h,n,t,x)};a.Image.prototype.makeShaderOptions=function(e,h,n,t,x){x=p(x);return this._makeShaderOptions(e,h,n,t,x)};a.Image.prototype.readPixels=function(e,h,n,t,x){var z=a.ne();return g(this,e,h,n,t,x,z)};a.Canvas.prototype.clear=function(e){a.Jd(this.Id);e=y(e);this._clear(e)};a.Canvas.prototype.clipRRect=function(e,h,n){a.Jd(this.Id);e=F(e);this._clipRRect(e,\nh,n)};a.Canvas.prototype.clipRect=function(e,h,n){a.Jd(this.Id);e=u(e);this._clipRect(e,h,n)};a.Canvas.prototype.concat=function(e){a.Jd(this.Id);e=w(e);this._concat(e)};a.Canvas.prototype.drawArc=function(e,h,n,t,x){a.Jd(this.Id);e=u(e);this._drawArc(e,h,n,t,x)};a.Canvas.prototype.drawAtlas=function(e,h,n,t,x,z,E){if(e&&t&&h&&n&&h.length===n.length){a.Jd(this.Id);x||(x=a.BlendMode.SrcOver);var J=l(h,\"HEAPF32\"),I=l(n,\"HEAPF32\"),U=n.length/4,V=l(c(z),\"HEAPU32\");if(E&&\"B\"in E&&\"C\"in E)this._drawAtlasCubic(e,\nI,J,V,U,x,E.B,E.C,t);else{let q=a.FilterMode.Linear,A=a.MipmapMode.None;E&&(q=E.filter,\"mipmap\"in E&&(A=E.mipmap));this._drawAtlasOptions(e,I,J,V,U,x,q,A,t)}k(J,h);k(I,n);k(V,z)}};a.Canvas.prototype.drawCircle=function(e,h,n,t){a.Jd(this.Id);this._drawCircle(e,h,n,t)};a.Canvas.prototype.drawColor=function(e,h){a.Jd(this.Id);e=y(e);void 0!==h?this._drawColor(e,h):this._drawColor(e)};a.Canvas.prototype.drawColorInt=function(e,h){a.Jd(this.Id);this._drawColorInt(e,h||a.BlendMode.SrcOver)};a.Canvas.prototype.drawColorComponents=\nfunction(e,h,n,t,x){a.Jd(this.Id);e=B(e,h,n,t);void 0!==x?this._drawColor(e,x):this._drawColor(e)};a.Canvas.prototype.drawDRRect=function(e,h,n){a.Jd(this.Id);e=F(e,Eb);h=F(h,kc);this._drawDRRect(e,h,n)};a.Canvas.prototype.drawImage=function(e,h,n,t){a.Jd(this.Id);this._drawImage(e,h,n,t||null)};a.Canvas.prototype.drawImageCubic=function(e,h,n,t,x,z){a.Jd(this.Id);this._drawImageCubic(e,h,n,t,x,z||null)};a.Canvas.prototype.drawImageOptions=function(e,h,n,t,x,z){a.Jd(this.Id);this._drawImageOptions(e,\nh,n,t,x,z||null)};a.Canvas.prototype.drawImageNine=function(e,h,n,t,x){a.Jd(this.Id);h=l(h,\"HEAP32\",Sa);n=u(n);this._drawImageNine(e,h,n,t,x||null)};a.Canvas.prototype.drawImageRect=function(e,h,n,t,x){a.Jd(this.Id);u(h,X);u(n,Ba);this._drawImageRect(e,X,Ba,t,!!x)};a.Canvas.prototype.drawImageRectCubic=function(e,h,n,t,x,z){a.Jd(this.Id);u(h,X);u(n,Ba);this._drawImageRectCubic(e,X,Ba,t,x,z||null)};a.Canvas.prototype.drawImageRectOptions=function(e,h,n,t,x,z){a.Jd(this.Id);u(h,X);u(n,Ba);this._drawImageRectOptions(e,\nX,Ba,t,x,z||null)};a.Canvas.prototype.drawLine=function(e,h,n,t,x){a.Jd(this.Id);this._drawLine(e,h,n,t,x)};a.Canvas.prototype.drawOval=function(e,h){a.Jd(this.Id);e=u(e);this._drawOval(e,h)};a.Canvas.prototype.drawPaint=function(e){a.Jd(this.Id);this._drawPaint(e)};a.Canvas.prototype.drawParagraph=function(e,h,n){a.Jd(this.Id);this._drawParagraph(e,h,n)};a.Canvas.prototype.drawPatch=function(e,h,n,t,x){if(24>e.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\";\na.Jd(this.Id);const z=l(e,\"HEAPF32\"),E=h?l(c(h),\"HEAPU32\"):M,J=n?l(n,\"HEAPF32\"):M;t||(t=a.BlendMode.Modulate);this._drawPatch(z,E,J,t,x);k(J,n);k(E,h);k(z,e)};a.Canvas.prototype.drawPath=function(e,h){a.Jd(this.Id);this._drawPath(e,h)};a.Canvas.prototype.drawPicture=function(e){a.Jd(this.Id);this._drawPicture(e)};a.Canvas.prototype.drawPoints=function(e,h,n){a.Jd(this.Id);var t=l(h,\"HEAPF32\");this._drawPoints(e,t,h.length/2,n);k(t,h)};a.Canvas.prototype.drawRRect=function(e,h){a.Jd(this.Id);e=F(e);\nthis._drawRRect(e,h)};a.Canvas.prototype.drawRect=function(e,h){a.Jd(this.Id);e=u(e);this._drawRect(e,h)};a.Canvas.prototype.drawRect4f=function(e,h,n,t,x){a.Jd(this.Id);this._drawRect4f(e,h,n,t,x)};a.Canvas.prototype.drawShadow=function(e,h,n,t,x,z,E){a.Jd(this.Id);var J=l(x,\"HEAPF32\"),I=l(z,\"HEAPF32\");h=l(h,\"HEAPF32\",Fb);n=l(n,\"HEAPF32\",Gb);this._drawShadow(e,h,n,t,J,I,E);k(J,x);k(I,z)};a.getShadowLocalBounds=function(e,h,n,t,x,z,E){e=p(e);n=l(n,\"HEAPF32\",Fb);t=l(t,\"HEAPF32\",Gb);if(!this._getShadowLocalBounds(e,\nh,n,t,x,z,X))return null;h=na.toTypedArray();return E?(E.set(h),E):h.slice()};a.Canvas.prototype.drawTextBlob=function(e,h,n,t){a.Jd(this.Id);this._drawTextBlob(e,h,n,t)};a.Canvas.prototype.drawVertices=function(e,h,n){a.Jd(this.Id);this._drawVertices(e,h,n)};a.Canvas.prototype.getDeviceClipBounds=function(e){this._getDeviceClipBounds(Sa);var h=hb.toTypedArray();e?e.set(h):e=h.slice();return e};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(ca);for(var e=ca,h=Array(16),n=0;16>\nn;n++)h[n]=a.HEAPF32[e/4+n];return h};a.Canvas.prototype.getTotalMatrix=function(){this._getTotalMatrix(H);for(var e=Array(9),h=0;9>h;h++)e[h]=a.HEAPF32[H/4+h];return e};a.Canvas.prototype.makeSurface=function(e){e=this._makeSurface(e);e.Id=this.Id;return e};a.Canvas.prototype.readPixels=function(e,h,n,t,x){a.Jd(this.Id);return g(this,e,h,n,t,x)};a.Canvas.prototype.saveLayer=function(e,h,n,t){h=u(h);return this._saveLayer(e||null,h,n||null,t||0)};a.Canvas.prototype.writePixels=function(e,h,n,t,x,\nz,E,J){if(e.byteLength%(h*n))throw\"pixels length must be a multiple of the srcWidth * srcHeight\";a.Jd(this.Id);var I=e.byteLength/(h*n);z=z||a.AlphaType.Unpremul;E=E||a.ColorType.RGBA_8888;J=J||a.ColorSpace.SRGB;var U=I*h;I=l(e,\"HEAPU8\");h=this._writePixels({width:h,height:n,colorType:E,alphaType:z,colorSpace:J},I,U,t,x);k(I,e);return h};a.ColorFilter.MakeBlend=function(e,h,n){e=y(e);n=n||a.ColorSpace.SRGB;return a.ColorFilter._MakeBlend(e,h,n)};a.ColorFilter.MakeMatrix=function(e){if(!e||20!==e.length)throw\"invalid color matrix\";\nvar h=l(e,\"HEAPF32\"),n=a.ColorFilter._makeMatrix(h);k(h,e);return n};a.ContourMeasure.prototype.getPosTan=function(e,h){this._getPosTan(e,X);e=na.toTypedArray();return h?(h.set(e),h):e.slice()};a.ImageFilter.prototype.getOutputBounds=function(e,h,n){e=u(e,X);h=p(h);this._getOutputBounds(e,h,Sa);h=hb.toTypedArray();return n?(n.set(h),n):h.slice()};a.ImageFilter.MakeDropShadow=function(e,h,n,t,x,z){x=y(x,va);return a.ImageFilter._MakeDropShadow(e,h,n,t,x,z)};a.ImageFilter.MakeDropShadowOnly=function(e,\nh,n,t,x,z){x=y(x,va);return a.ImageFilter._MakeDropShadowOnly(e,h,n,t,x,z)};a.ImageFilter.MakeImage=function(e,h,n,t){n=u(n,X);t=u(t,Ba);if(\"B\"in h&&\"C\"in h)return a.ImageFilter._MakeImageCubic(e,h.B,h.C,n,t);const x=h.filter;let z=a.MipmapMode.None;\"mipmap\"in h&&(z=h.mipmap);return a.ImageFilter._MakeImageOptions(e,x,z,n,t)};a.ImageFilter.MakeMatrixTransform=function(e,h,n){e=p(e);if(\"B\"in h&&\"C\"in h)return a.ImageFilter._MakeMatrixTransformCubic(e,h.B,h.C,n);const t=h.filter;let x=a.MipmapMode.None;\n\"mipmap\"in h&&(x=h.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(e,t,x,n)};a.Paint.prototype.getColor=function(){this._getColor(va);return D(va)};a.Paint.prototype.setColor=function(e,h){h=h||null;e=y(e);this._setColor(e,h)};a.Paint.prototype.setColorComponents=function(e,h,n,t,x){x=x||null;e=B(e,h,n,t);this._setColor(e,x)};a.Path.prototype.getPoint=function(e,h){this._getPoint(e,X);e=na.toTypedArray();return h?(h[0]=e[0],h[1]=e[1],h):e.slice(0,2)};a.Picture.prototype.makeShader=function(e,\nh,n,t,x){t=p(t);x=u(x);return this._makeShader(e,h,n,t,x)};a.Picture.prototype.cullRect=function(e){this._cullRect(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.PictureRecorder.prototype.beginRecording=function(e,h){e=u(e);return this._beginRecording(e,!!h)};a.Surface.prototype.getCanvas=function(){var e=this._getCanvas();e.Id=this.Id;return e};a.Surface.prototype.makeImageSnapshot=function(e){a.Jd(this.Id);e=l(e,\"HEAP32\",Sa);return this._makeImageSnapshot(e)};a.Surface.prototype.makeSurface=\nfunction(e){a.Jd(this.Id);e=this._makeSurface(e);e.Id=this.Id;return e};a.Surface.prototype.Te=function(e,h){this.ge||(this.ge=this.getCanvas());return requestAnimationFrame(function(){a.Jd(this.Id);e(this.ge);this.flush(h)}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=a.Surface.prototype.Te);a.Surface.prototype.Qe=function(e,h){this.ge||(this.ge=this.getCanvas());requestAnimationFrame(function(){a.Jd(this.Id);e(this.ge);this.flush(h);this.dispose()}.bind(this))};\na.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Qe);a.PathEffect.MakeDash=function(e,h){h||(h=0);if(!e.length||1===e.length%2)throw\"Intervals array must have even length\";var n=l(e,\"HEAPF32\");h=a.PathEffect._MakeDash(n,e.length,h);k(n,e);return h};a.PathEffect.MakeLine2D=function(e,h){h=p(h);return a.PathEffect._MakeLine2D(e,h)};a.PathEffect.MakePath2D=function(e,h){e=p(e);return a.PathEffect._MakePath2D(e,h)};a.Shader.MakeColor=function(e,h){h=h||null;e=y(e);return a.Shader._MakeColor(e,\nh)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(e,h,n,t,x,z,E,J){J=J||null;var I=m(n),U=l(t,\"HEAPF32\");E=E||0;z=p(z);var V=na.toTypedArray();V.set(e);V.set(h,2);e=a.Shader._MakeLinearGradient(X,I.Rd,I.colorType,U,I.count,x,E,z,J);k(I.Rd,n);t&&k(U,t);return e};a.Shader.MakeRadialGradient=function(e,h,n,t,x,z,E,J){J=J||null;var I=m(n),U=l(t,\"HEAPF32\");E=E||0;z=p(z);e=a.Shader._MakeRadialGradient(e[0],e[1],h,I.Rd,I.colorType,U,I.count,x,E,\nz,J);k(I.Rd,n);t&&k(U,t);return e};a.Shader.MakeSweepGradient=function(e,h,n,t,x,z,E,J,I,U){U=U||null;var V=m(n),q=l(t,\"HEAPF32\");E=E||0;J=J||0;I=I||360;z=p(z);e=a.Shader._MakeSweepGradient(e,h,V.Rd,V.colorType,q,V.count,x,J,I,E,z,U);k(V.Rd,n);t&&k(q,t);return e};a.Shader.MakeTwoPointConicalGradient=function(e,h,n,t,x,z,E,J,I,U){U=U||null;var V=m(x),q=l(z,\"HEAPF32\");I=I||0;J=p(J);var A=na.toTypedArray();A.set(e);A.set(n,2);e=a.Shader._MakeTwoPointConicalGradient(X,h,t,V.Rd,V.colorType,q,V.count,E,\nI,J,U);k(V.Rd,x);z&&k(q,z);return e};a.Vertices.prototype.bounds=function(e){this._bounds(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.Md&&a.Md.forEach(function(e){e()})};a.computeTonalColors=function(g){var e=l(g.ambient,\"HEAPF32\"),h=l(g.spot,\"HEAPF32\");this._computeTonalColors(e,h);var n={ambient:D(e),spot:D(h)};k(e,g.ambient);k(h,g.spot);return n};a.LTRBRect=function(g,e,h,n){return Float32Array.of(g,e,h,n)};a.XYWHRect=function(g,e,h,n){return Float32Array.of(g,e,g+h,e+n)};a.LTRBiRect=\nfunction(g,e,h,n){return Int32Array.of(g,e,h,n)};a.XYWHiRect=function(g,e,h,n){return Int32Array.of(g,e,g+h,e+n)};a.RRectXY=function(g,e,h){return Float32Array.of(g[0],g[1],g[2],g[3],e,h,e,h,e,h,e,h)};a.MakeAnimatedImageFromEncoded=function(g){g=new Uint8Array(g);var e=a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._decodeAnimatedImage(e,g.byteLength))?g:null};a.MakeImageFromEncoded=function(g){g=new Uint8Array(g);var e=a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._decodeImage(e,g.byteLength))?\ng:null};var Ta=null;a.MakeImageFromCanvasImageSource=function(g){var e=g.width,h=g.height;Ta||(Ta=document.createElement(\"canvas\"));Ta.width=e;Ta.height=h;var n=Ta.getContext(\"2d\",{willReadFrequently:!0});n.drawImage(g,0,0);g=n.getImageData(0,0,e,h);return a.MakeImage({width:e,height:h,alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},g.data,4*e)};a.MakeImage=function(g,e,h){var n=a._malloc(e.length);a.HEAPU8.set(e,n);return a._MakeImage(g,n,e.length,h)};\na.MakeVertices=function(g,e,h,n,t,x){var z=t&&t.length||0,E=0;h&&h.length&&(E|=1);n&&n.length&&(E|=2);void 0===x||x||(E|=4);g=new a._VerticesBuilder(g,e.length/2,z,E);l(e,\"HEAPF32\",g.positions());g.texCoords()&&l(h,\"HEAPF32\",g.texCoords());g.colors()&&l(c(n),\"HEAPU32\",g.colors());g.indices()&&l(t,\"HEAPU16\",g.indices());return g.detach()};(function(g){g.Md=g.Md||[];g.Md.push(function(){function e(q){q&&(q.dir=0===q.dir?g.TextDirection.RTL:g.TextDirection.LTR);return q}function h(q){if(!q||!q.length)return[];\nfor(var A=[],P=0;P<q.length;P+=5){var Z=g.LTRBRect(q[P],q[P+1],q[P+2],q[P+3]),za=g.TextDirection.LTR;0===q[P+4]&&(za=g.TextDirection.RTL);A.push({rect:Z,dir:za})}g._free(q.byteOffset);return A}function n(q){q=q||{};void 0===q.weight&&(q.weight=g.FontWeight.Normal);q.width=q.width||g.FontWidth.Normal;q.slant=q.slant||g.FontSlant.Upright;return q}function t(q){if(!q||!q.length)return M;for(var A=[],P=0;P<q.length;P++){var Z=x(q[P]);A.push(Z)}return l(A,\"HEAPU32\")}function x(q){if(J[q])return J[q];var A=\nja(q)+1,P=g._malloc(A);ka(q,C,P,A);return J[q]=P}function z(q){q._colorPtr=y(q.color);q._foregroundColorPtr=M;q._backgroundColorPtr=M;q._decorationColorPtr=M;q.foregroundColor&&(q._foregroundColorPtr=y(q.foregroundColor,I));q.backgroundColor&&(q._backgroundColorPtr=y(q.backgroundColor,U));q.decorationColor&&(q._decorationColorPtr=y(q.decorationColor,V));Array.isArray(q.fontFamilies)&&q.fontFamilies.length?(q._fontFamiliesPtr=t(q.fontFamilies),q._fontFamiliesLen=q.fontFamilies.length):(q._fontFamiliesPtr=\nM,q._fontFamiliesLen=0);if(q.locale){var A=q.locale;q._localePtr=x(A);q._localeLen=ja(A)}else q._localePtr=M,q._localeLen=0;if(Array.isArray(q.shadows)&&q.shadows.length){A=q.shadows;var P=A.map(function(qa){return qa.color||g.BLACK}),Z=A.map(function(qa){return qa.blurRadius||0});q._shadowLen=A.length;for(var za=g._malloc(8*A.length),Hb=za/4,Ib=0;Ib<A.length;Ib++){var lc=A[Ib].offset||[0,0];g.HEAPF32[Hb]=lc[0];g.HEAPF32[Hb+1]=lc[1];Hb+=2}q._shadowColorsPtr=m(P).Rd;q._shadowOffsetsPtr=za;q._shadowBlurRadiiPtr=\nl(Z,\"HEAPF32\")}else q._shadowLen=0,q._shadowColorsPtr=M,q._shadowOffsetsPtr=M,q._shadowBlurRadiiPtr=M;Array.isArray(q.fontFeatures)&&q.fontFeatures.length?(A=q.fontFeatures,P=A.map(function(qa){return qa.name}),Z=A.map(function(qa){return qa.value}),q._fontFeatureLen=A.length,q._fontFeatureNamesPtr=t(P),q._fontFeatureValuesPtr=l(Z,\"HEAPU32\")):(q._fontFeatureLen=0,q._fontFeatureNamesPtr=M,q._fontFeatureValuesPtr=M);Array.isArray(q.fontVariations)&&q.fontVariations.length?(A=q.fontVariations,P=A.map(function(qa){return qa.axis}),\nZ=A.map(function(qa){return qa.value}),q._fontVariationLen=A.length,q._fontVariationAxesPtr=t(P),q._fontVariationValuesPtr=l(Z,\"HEAPF32\")):(q._fontVariationLen=0,q._fontVariationAxesPtr=M,q._fontVariationValuesPtr=M)}function E(q){g._free(q._fontFamiliesPtr);g._free(q._shadowColorsPtr);g._free(q._shadowOffsetsPtr);g._free(q._shadowBlurRadiiPtr);g._free(q._fontFeatureNamesPtr);g._free(q._fontFeatureValuesPtr);g._free(q._fontVariationAxesPtr);g._free(q._fontVariationValuesPtr)}g.Paragraph.prototype.getRectsForRange=\nfunction(q,A,P,Z){q=this._getRectsForRange(q,A,P,Z);return h(q)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var q=this._getRectsForPlaceholders();return h(q)};g.Paragraph.prototype.getGlyphInfoAt=function(q){return e(this._getGlyphInfoAt(q))};g.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(q,A){return e(this._getClosestGlyphInfoAtCoordinate(q,A))};g.TypefaceFontProvider.prototype.registerFont=function(q,A){q=g.Typeface.MakeTypefaceFromData(q);if(!q)return null;A=x(A);\nthis._registerFont(q,A)};g.ParagraphStyle=function(q){q.disableHinting=q.disableHinting||!1;if(q.ellipsis){var A=q.ellipsis;q._ellipsisPtr=x(A);q._ellipsisLen=ja(A)}else q._ellipsisPtr=M,q._ellipsisLen=0;null==q.heightMultiplier&&(q.heightMultiplier=-1);q.maxLines=q.maxLines||0;q.replaceTabCharacters=q.replaceTabCharacters||!1;A=(A=q.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=t(A.fontFamilies),A._fontFamiliesLen=\nA.fontFamilies.length):(A._fontFamiliesPtr=M,A._fontFamiliesLen=0);A.fontStyle=n(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;q.strutStyle=A;q.textAlign=q.textAlign||g.TextAlign.Start;q.textDirection=q.textDirection||g.TextDirection.LTR;q.textHeightBehavior=q.textHeightBehavior||g.TextHeightBehavior.All;q.textStyle=g.TextStyle(q.textStyle);q.applyRoundingHack=\n!1!==q.applyRoundingHack;return q};g.TextStyle=function(q){q.color||(q.color=g.BLACK);q.decoration=q.decoration||0;q.decorationThickness=q.decorationThickness||0;q.decorationStyle=q.decorationStyle||g.DecorationStyle.Solid;q.textBaseline=q.textBaseline||g.TextBaseline.Alphabetic;null==q.fontSize&&(q.fontSize=-1);q.letterSpacing=q.letterSpacing||0;q.wordSpacing=q.wordSpacing||0;null==q.heightMultiplier&&(q.heightMultiplier=-1);q.halfLeading=q.halfLeading||!1;q.fontStyle=n(q.fontStyle);return q};var J=\n{},I=g._malloc(16),U=g._malloc(16),V=g._malloc(16);g.ParagraphBuilder.Make=function(q,A){z(q.textStyle);A=g.ParagraphBuilder._Make(q,A);E(q.textStyle);return A};g.ParagraphBuilder.MakeFromFontProvider=function(q,A){z(q.textStyle);A=g.ParagraphBuilder._MakeFromFontProvider(q,A);E(q.textStyle);return A};g.ParagraphBuilder.MakeFromFontCollection=function(q,A){z(q.textStyle);A=g.ParagraphBuilder._MakeFromFontCollection(q,A);E(q.textStyle);return A};g.ParagraphBuilder.ShapeText=function(q,A,P){let Z=0;\nfor(const za of A)Z+=za.length;if(Z!==q.length)throw\"Accumulated block lengths must equal text.length\";return g.ParagraphBuilder._ShapeText(q,A,P)};g.ParagraphBuilder.prototype.pushStyle=function(q){z(q);this._pushStyle(q);E(q)};g.ParagraphBuilder.prototype.pushPaintStyle=function(q,A,P){z(q);this._pushPaintStyle(q,A,P);E(q)};g.ParagraphBuilder.prototype.addPlaceholder=function(q,A,P,Z,za){P=P||g.PlaceholderAlignment.Baseline;Z=Z||g.TextBaseline.Alphabetic;this._addPlaceholder(q||0,A||0,P,Z,za||0)};\ng.ParagraphBuilder.prototype.setWordsUtf8=function(q){var A=l(q,\"HEAPU32\");this._setWordsUtf8(A,q&&q.length||0);k(A,q)};g.ParagraphBuilder.prototype.setWordsUtf16=function(q){var A=l(q,\"HEAPU32\");this._setWordsUtf16(A,q&&q.length||0);k(A,q)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf8=function(q){var A=l(q,\"HEAPU32\");this._setGraphemeBreaksUtf8(A,q&&q.length||0);k(A,q)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf16=function(q){var A=l(q,\"HEAPU32\");this._setGraphemeBreaksUtf16(A,q&&q.length||\n0);k(A,q)};g.ParagraphBuilder.prototype.setLineBreaksUtf8=function(q){var A=l(q,\"HEAPU32\");this._setLineBreaksUtf8(A,q&&q.length||0);k(A,q)};g.ParagraphBuilder.prototype.setLineBreaksUtf16=function(q){var A=l(q,\"HEAPU32\");this._setLineBreaksUtf16(A,q&&q.length||0);k(A,q)}})})(r);a.Md=a.Md||[];a.Md.push(function(){a.Path.prototype.op=function(g,e){return this._op(g,e)?this:null};a.Path.prototype.simplify=function(){return this._simplify()?this:null}});a.Md=a.Md||[];a.Md.push(function(){a.Canvas.prototype.drawText=\nfunction(g,e,h,n,t){var x=ja(g),z=a._malloc(x+1);ka(g,C,z,x+1);this._drawSimpleText(z,x,e,h,t,n);a._free(z)};a.Canvas.prototype.drawGlyphs=function(g,e,h,n,t,x){if(!(2*g.length<=e.length))throw\"Not enough positions for the array of gyphs\";a.Jd(this.Id);const z=l(g,\"HEAPU16\"),E=l(e,\"HEAPF32\");this._drawGlyphs(g.length,z,E,h,n,t,x);k(E,e);k(z,g)};a.Font.prototype.getGlyphBounds=function(g,e,h){var n=l(g,\"HEAPU16\"),t=a._malloc(16*g.length);this._getGlyphWidthBounds(n,g.length,M,t,e||null);e=new Float32Array(a.HEAPU8.buffer,\nt,4*g.length);k(n,g);if(h)return h.set(e),a._free(t),h;g=Float32Array.from(e);a._free(t);return g};a.Font.prototype.getGlyphIDs=function(g,e,h){e||(e=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*e);e=this._getGlyphIDs(t,n-1,e,g);a._free(t);if(0>e)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);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,e,h,n){var t=l(g,\"HEAPU16\"),x=l(e,\"HEAPF32\");return this._getGlyphIntercepts(t,\ng.length,!(g&&g._ck),x,e.length,!(e&&e._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,e,h){var n=l(g,\"HEAPU16\"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,e||null);e=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(e),a._free(t),h;g=Float32Array.from(e);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 e=[],h=[],n=\n0;n<g.length;n++){var t=new Uint8Array(g[n]),x=l(t,\"HEAPU8\");e.push(x);h.push(t.byteLength)}e=l(e,\"HEAPU32\");h=l(h,\"HEAPU32\");g=a.FontMgr._fromData(e,h,g.length);a._free(e);a._free(h);return g};a.Typeface.MakeTypefaceFromData=function(g){g=new Uint8Array(g);var e=l(g,\"HEAPU8\");return(g=a.Typeface._MakeTypefaceFromData(e,g.byteLength))?g:null};a.Typeface.MakeFreeTypeFaceFromData=a.Typeface.MakeTypefaceFromData;a.Typeface.prototype.getGlyphIDs=function(g,e,h){e||(e=g.length);var n=ja(g)+1,t=a._malloc(n);\nka(g,C,t,n);g=a._malloc(2*e);e=this._getGlyphIDs(t,n-1,e,g);a._free(t);if(0>e)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,e,h,n){if(g&&g.length&&e&&e.countPoints()){if(1===e.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var x=[];e=new a.ContourMeasureIter(e,!1,1);for(var z=e.next(),E=new Float32Array(4),J=0;J<g.length&&\nz;J++){var I=t[J];n+=I/2;if(n>z.length()){z.delete();z=e.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];x.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,x,h);z&&z.delete();e.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,e,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(e,\"HEAPF32\");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,e,h){var n=l(g,\"HEAPU16\");e=l(e,\"HEAPF32\");\nh=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,e,h);k(n,g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,e){var h=l(g,\"HEAPU16\");e=a.TextBlob._MakeFromGlyphs(h,2*g.length,e);k(h,g);return e?e:null};a.TextBlob.MakeFromText=function(g,e){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,e);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Md=a.Md||[];a.Md.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var e=\na._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._MakePicture(e,g.byteLength))?g:null}});a.Md=a.Md||[];a.Md.push(function(){a.RuntimeEffect.Make=function(g,e){return a.RuntimeEffect._Make(g,{onError:e||function(h){console.log(\"RuntimeEffect error\",h)}})};a.RuntimeEffect.MakeForBlender=function(g,e){return a.RuntimeEffect._MakeForBlender(g,{onError:e||function(h){console.log(\"RuntimeEffect error\",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,e){var h=!g._ck,n=l(g,\"HEAPF32\");e=p(e);return this._makeShader(n,\n4*g.length,h,e)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(g,e,h){var n=!g._ck,t=l(g,\"HEAPF32\");h=p(h);for(var x=[],z=0;z<e.length;z++)x.push(e[z].kd.Kd);e=l(x,\"HEAPU32\");return this._makeShaderWithChildren(t,4*g.length,n,e,x.length,h)};a.RuntimeEffect.prototype.makeBlender=function(g){var e=!g._ck,h=l(g,\"HEAPF32\");return this._makeBlender(h,4*g.length,e)}})})(r);\nvar la=Object.assign({},r),ma=\"./this.program\",oa=(a,b)=>{throw b;},pa=\"object\"==typeof window,ra=\"function\"==typeof importScripts,sa=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,ta=\"\",ua,wa,xa;\nif(sa){var fs=require(\"fs\"),ya=require(\"path\");ta=ra?ya.dirname(ta)+\"/\":__dirname+\"/\";ua=(a,b)=>{a=a.startsWith(\"file://\")?new URL(a):ya.normalize(a);return fs.readFileSync(a,b?void 0:\"utf8\")};xa=a=>{a=ua(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c,d=!0)=>{a=a.startsWith(\"file://\")?new URL(a):ya.normalize(a);fs.readFile(a,d?void 0:\"utf8\",(f,k)=>{f?c(f):b(d?k.buffer:k)})};!r.thisProgram&&1<process.argv.length&&(ma=process.argv[1].replace(/\\\\/g,\"/\"));process.argv.slice(2);oa=(a,b)=>{process.exitCode=\na;throw b;};r.inspect=()=>\"[Emscripten Module object]\"}else if(pa||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=\"\",ua=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText},ra&&(xa=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}),\nwa=(a,b,c)=>{var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onload=()=>{200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)};var Aa=r.print||console.log.bind(console),Ca=r.printErr||console.error.bind(console);Object.assign(r,la);la=null;r.thisProgram&&(ma=r.thisProgram);r.quit&&(oa=r.quit);var Da;r.wasmBinary&&(Da=r.wasmBinary);var noExitRuntime=r.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&Ea(\"no native wasm support detected\");\nvar Fa,G,Ga=!1,Ha,C,Ia,Ja,K,L,N,Ka;function La(){var a=Fa.buffer;r.HEAP8=Ha=new Int8Array(a);r.HEAP16=Ia=new Int16Array(a);r.HEAP32=K=new Int32Array(a);r.HEAPU8=C=new Uint8Array(a);r.HEAPU16=Ja=new Uint16Array(a);r.HEAPU32=L=new Uint32Array(a);r.HEAPF32=N=new Float32Array(a);r.HEAPF64=Ka=new Float64Array(a)}var Na,Oa=[],Pa=[],Qa=[];function Ra(){var a=r.preRun.shift();Oa.unshift(a)}var Ua=0,Va=null,Wa=null;\nfunction Ea(a){if(r.onAbort)r.onAbort(a);a=\"Aborted(\"+a+\")\";Ca(a);Ga=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ba(a);throw a;}function Xa(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var Ya;Ya=\"canvaskit.wasm\";if(!Xa(Ya)){var Za=Ya;Ya=r.locateFile?r.locateFile(Za,ta):ta+Za}function $a(a){if(a==Ya&&Da)return new Uint8Array(Da);if(xa)return xa(a);throw\"both async and sync fetching of the wasm failed\";}\nfunction ab(a){if(!Da&&(pa||ra)){if(\"function\"==typeof fetch&&!a.startsWith(\"file://\"))return fetch(a,{credentials:\"same-origin\"}).then(b=>{if(!b.ok)throw\"failed to load wasm binary file at '\"+a+\"'\";return b.arrayBuffer()}).catch(()=>$a(a));if(wa)return new Promise((b,c)=>{wa(a,d=>b(new Uint8Array(d)),c)})}return Promise.resolve().then(()=>$a(a))}function bb(a,b,c){return ab(a).then(d=>WebAssembly.instantiate(d,b)).then(d=>d).then(c,d=>{Ca(\"failed to asynchronously prepare wasm: \"+d);Ea(d)})}\nfunction cb(a,b){var c=Ya;return Da||\"function\"!=typeof WebAssembly.instantiateStreaming||Xa(c)||c.startsWith(\"file://\")||sa||\"function\"!=typeof fetch?bb(c,a,b):fetch(c,{credentials:\"same-origin\"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(f){Ca(\"wasm streaming compile failed: \"+f);Ca(\"falling back to ArrayBuffer instantiation\");return bb(c,a,b)}))}function db(a){this.name=\"ExitStatus\";this.message=`Program terminated with exit(${a})`;this.status=a}var eb=a=>{for(;0<a.length;)a.shift()(r)};\nfunction fb(a){this.Kd=a-24;this.Pe=function(b){L[this.Kd+4>>2]=b};this.we=function(b){L[this.Kd+8>>2]=b};this.Zd=function(b,c){this.ve();this.Pe(b);this.we(c)};this.ve=function(){L[this.Kd+16>>2]=0}}\nvar gb=0,ib=0,jb=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,kb=(a,b,c)=>{var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.buffer&&jb)return jb.decode(a.subarray(b,c));for(d=\"\";b<c;){var f=a[b++];if(f&128){var k=a[b++]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|k);else{var l=a[b++]&63;f=224==(f&240)?(f&15)<<12|k<<6|l:(f&7)<<18|k<<12|l<<6|a[b++]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d},\nlb={};function mb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function nb(a){return this.fromWireType(K[a>>2])}var ob={},pb={},qb={},rb=void 0;function sb(a){throw new rb(a);}\nfunction tb(a,b,c){function d(m){m=c(m);m.length!==a.length&&sb(\"Mismatched type converter count\");for(var p=0;p<a.length;++p)ub(a[p],m[p])}a.forEach(function(m){qb[m]=b});var f=Array(b.length),k=[],l=0;b.forEach((m,p)=>{pb.hasOwnProperty(m)?f[p]=pb[m]:(k.push(m),ob.hasOwnProperty(m)||(ob[m]=[]),ob[m].push(()=>{f[p]=pb[m];++l;l===k.length&&d(f)}))});0===k.length&&d(f)}\nfunction vb(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 wb=void 0;function O(a){for(var b=\"\";C[a];)b+=wb[C[a++]];return b}var xb=void 0;function Q(a){throw new xb(a);}\nfunction yb(a,b,c={}){var d=b.name;a||Q(`type \"${d}\" must have a positive integer typeid pointer`);if(pb.hasOwnProperty(a)){if(c.ff)return;Q(`Cannot register type '${d}' twice`)}pb[a]=b;delete qb[a];ob.hasOwnProperty(a)&&(b=ob[a],delete ob[a],b.forEach(f=>f()))}function ub(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");yb(a,b,c)}function zb(a){Q(a.kd.Nd.Ld.name+\" instance already deleted\")}var Ab=!1;function Bb(){}\nfunction Cb(a){--a.count.value;0===a.count.value&&(a.Pd?a.Td.Xd(a.Pd):a.Nd.Ld.Xd(a.Kd))}function Db(a,b,c){if(b===c)return a;if(void 0===c.Qd)return null;a=Db(a,b,c.Qd);return null===a?null:c.Ye(a)}var Jb={},Kb=[];function Lb(){for(;Kb.length;){var a=Kb.pop();a.kd.ee=!1;a[\"delete\"]()}}var Mb=void 0,Nb={};function Ob(a,b){for(void 0===b&&Q(\"ptr should not be undefined\");a.Qd;)b=a.ke(b),a=a.Qd;return Nb[b]}\nfunction Pb(a,b){b.Nd&&b.Kd||sb(\"makeClassHandle requires ptr and ptrType\");!!b.Td!==!!b.Pd&&sb(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return Qb(Object.create(a,{kd:{value:b}}))}function Qb(a){if(\"undefined\"===typeof FinalizationRegistry)return Qb=b=>b,a;Ab=new FinalizationRegistry(b=>{Cb(b.kd)});Qb=b=>{var c=b.kd;c.Pd&&Ab.register(b,{kd:c},b);return b};Bb=b=>{Ab.unregister(b)};return Qb(a)}function Rb(){}\nfunction Sb(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 Tb(a,b){a=Sb(a);return{[a]:function(){return b.apply(this,arguments)}}[a]}\nfunction Ub(a,b,c){if(void 0===a[b].Od){var d=a[b];a[b]=function(){a[b].Od.hasOwnProperty(arguments.length)||Q(`Function '${c}' called with an invalid number of arguments (${arguments.length}) - expects one of (${a[b].Od})!`);return a[b].Od[arguments.length].apply(this,arguments)};a[b].Od=[];a[b].Od[d.ce]=d}}\nfunction Vb(a,b,c){r.hasOwnProperty(a)?((void 0===c||void 0!==r[a].Od&&void 0!==r[a].Od[c])&&Q(`Cannot register public name '${a}' twice`),Ub(r,a,a),r.hasOwnProperty(c)&&Q(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`),r[a].Od[c]=b):(r[a]=b,void 0!==c&&(r[a].xf=c))}function Wb(a,b,c,d,f,k,l,m){this.name=a;this.constructor=b;this.fe=c;this.Xd=d;this.Qd=f;this.af=k;this.ke=l;this.Ye=m;this.kf=[]}\nfunction Xb(a,b,c){for(;b!==c;)b.ke||Q(`Expected null or instance of ${c.name}, got an instance of ${b.name}`),a=b.ke(a),b=b.Qd;return a}function Yb(a,b){if(null===b)return this.Ae&&Q(`null is not a valid ${this.name}`),0;b.kd||Q(`Cannot pass \"${Zb(b)}\" as a ${this.name}`);b.kd.Kd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);return Xb(b.kd.Kd,b.kd.Nd.Ld,this.Ld)}\nfunction $b(a,b){if(null===b){this.Ae&&Q(`null is not a valid ${this.name}`);if(this.pe){var c=this.Be();null!==a&&a.push(this.Xd,c);return c}return 0}b.kd||Q(`Cannot pass \"${Zb(b)}\" as a ${this.name}`);b.kd.Kd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);!this.oe&&b.kd.Nd.oe&&Q(`Cannot convert argument of type ${b.kd.Td?b.kd.Td.name:b.kd.Nd.name} to parameter type ${this.name}`);c=Xb(b.kd.Kd,b.kd.Nd.Ld,this.Ld);if(this.pe)switch(void 0===b.kd.Pd&&Q(\"Passing raw pointer to smart pointer is illegal\"),\nthis.qf){case 0:b.kd.Td===this?c=b.kd.Pd:Q(`Cannot convert argument of type ${b.kd.Td?b.kd.Td.name:b.kd.Nd.name} to parameter type ${this.name}`);break;case 1:c=b.kd.Pd;break;case 2:if(b.kd.Td===this)c=b.kd.Pd;else{var d=b.clone();c=this.lf(c,ac(function(){d[\"delete\"]()}));null!==a&&a.push(this.Xd,c)}break;default:Q(\"Unsupporting sharing policy\")}return c}\nfunction bc(a,b){if(null===b)return this.Ae&&Q(`null is not a valid ${this.name}`),0;b.kd||Q(`Cannot pass \"${Zb(b)}\" as a ${this.name}`);b.kd.Kd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);b.kd.Nd.oe&&Q(`Cannot convert argument of type ${b.kd.Nd.name} to parameter type ${this.name}`);return Xb(b.kd.Kd,b.kd.Nd.Ld,this.Ld)}\nfunction cc(a,b,c,d,f,k,l,m,p,w,y){this.name=a;this.Ld=b;this.Ae=c;this.oe=d;this.pe=f;this.jf=k;this.qf=l;this.Ke=m;this.Be=p;this.lf=w;this.Xd=y;f||void 0!==b.Qd?this.toWireType=$b:(this.toWireType=d?Yb:bc,this.Sd=null)}function dc(a,b,c){r.hasOwnProperty(a)||sb(\"Replacing nonexistant public symbol\");void 0!==r[a].Od&&void 0!==c?r[a].Od[c]=b:(r[a]=b,r[a].ce=c)}\nvar ec=(a,b)=>{var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=r[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=Na.get(b).apply(null,c);return d}};function mc(a,b){a=O(a);var c=a.includes(\"j\")?ec(a,b):Na.get(b);\"function\"!=typeof c&&Q(`unknown function pointer with signature ${a}: ${b}`);return c}var nc=void 0;function oc(a){a=pc(a);var b=O(a);qc(a);return b}\nfunction rc(a,b){function c(k){f[k]||pb[k]||(qb[k]?qb[k].forEach(c):(d.push(k),f[k]=!0))}var d=[],f={};b.forEach(c);throw new nc(`${a}: `+d.map(oc).join([\", \"]));}\nfunction sc(a,b,c,d,f){var k=b.length;2>k&&Q(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var l=null!==b[1]&&null!==c,m=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].Sd){m=!0;break}var p=\"void\"!==b[0].name,w=k-2,y=Array(w),B=[],D=[];return function(){arguments.length!==w&&Q(`function ${a} called with ${arguments.length} arguments, expected ${w} args!`);D.length=0;B.length=l?2:1;B[0]=f;if(l){var u=b[1].toWireType(D,this);B[1]=u}for(var F=0;F<w;++F)y[F]=\nb[F+2].toWireType(D,arguments[F]),B.push(y[F]);F=d.apply(null,B);if(m)mb(D);else for(var H=l?1:2;H<b.length;H++){var T=1===H?u:y[H-2];null!==b[H].Sd&&b[H].Sd(T)}u=p?b[0].fromWireType(F):void 0;return u}}function tc(a,b){for(var c=[],d=0;d<a;d++)c.push(L[b+4*d>>2]);return c}function uc(){this.Wd=[void 0];this.Ie=[]}var vc=new uc;function wc(a){a>=vc.Zd&&0===--vc.get(a).Le&&vc.we(a)}\nvar xc=a=>{a||Q(\"Cannot use deleted val. handle = \"+a);return vc.get(a).value},ac=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:return vc.ve({Le:1,value:a})}};function yc(a,b,c){switch(b){case 0:return function(d){return this.fromWireType((c?Ha:C)[d])};case 1:return function(d){return this.fromWireType((c?Ia:Ja)[d>>1])};case 2:return function(d){return this.fromWireType((c?K:L)[d>>2])};default:throw new TypeError(\"Unknown integer type: \"+a);}}\nfunction zc(a,b){var c=pb[a];void 0===c&&Q(b+\" has unknown type \"+oc(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 Ac(a,b){switch(b){case 2:return function(c){return this.fromWireType(N[c>>2])};case 3:return function(c){return this.fromWireType(Ka[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction Bc(a,b,c){switch(b){case 0:return c?function(d){return Ha[d]}:function(d){return C[d]};case 1:return c?function(d){return Ia[d>>1]}:function(d){return Ja[d>>1]};case 2:return c?function(d){return K[d>>2]}:function(d){return L[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}\nvar ka=(a,b,c,d)=>{if(!(0<d))return 0;var f=c;d=c+d-1;for(var k=0;k<a.length;++k){var l=a.charCodeAt(k);if(55296<=l&&57343>=l){var m=a.charCodeAt(++k);l=65536+((l&1023)<<10)|m&1023}if(127>=l){if(c>=d)break;b[c++]=l}else{if(2047>=l){if(c+1>=d)break;b[c++]=192|l>>6}else{if(65535>=l){if(c+2>=d)break;b[c++]=224|l>>12}else{if(c+3>=d)break;b[c++]=240|l>>18;b[c++]=128|l>>12&63}b[c++]=128|l>>6&63}b[c++]=128|l&63}}b[c]=0;return c-f},ja=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=\nd?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Cc=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-16le\"):void 0,Dc=(a,b)=>{var c=a>>1;for(var d=c+b/2;!(c>=d)&&Ja[c];)++c;c<<=1;if(32<c-a&&Cc)return Cc.decode(C.subarray(a,c));c=\"\";for(d=0;!(d>=b/2);++d){var f=Ia[a+2*d>>1];if(0==f)break;c+=String.fromCharCode(f)}return c},Ec=(a,b,c)=>{void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)Ia[b>>1]=a.charCodeAt(f),b+=2;Ia[b>>1]=0;return b-d},\nFc=a=>2*a.length,Gc=(a,b)=>{for(var c=0,d=\"\";!(c>=b/4);){var f=K[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d},Hc=(a,b,c)=>{void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var k=a.charCodeAt(f);if(55296<=k&&57343>=k){var l=a.charCodeAt(++f);k=65536+((k&1023)<<10)|l&1023}K[b>>2]=k;b+=4;if(b+4>c)break}K[b>>2]=0;return b-d},Ic=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);\n55296<=d&&57343>=d&&++c;b+=4}return b},Jc={};function Kc(a){var b=Jc[a];return void 0===b?O(a):b}var Lc=[];\nfunction Mc(){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.\");\n}function Nc(a){var b=Lc.length;Lc.push(a);return b}function Oc(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=zc(L[b+4*d>>2],\"parameter \"+d);return c}var Pc=[];function Qc(a){var b=Array(a+1);return function(c,d,f){b[0]=c;for(var k=0;k<a;++k){var l=zc(L[d+4*k>>2],\"parameter \"+k);b[k+1]=l.readValueFromPointer(f);f+=l.argPackAdvance}c=new (c.bind.apply(c,b));return ac(c)}}var Rc={};\nfunction Sc(a){var b=a.getExtension(\"ANGLE_instanced_arrays\");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,f,k){b.drawArraysInstancedANGLE(c,d,f,k)},a.drawElementsInstanced=function(c,d,f,k,l){b.drawElementsInstancedANGLE(c,d,f,k,l)})}\nfunction 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,d){b.drawBuffersWEBGL(c,d)})}\nvar Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],dd={},ed={},gd=4;function R(a){hd||(hd=a)}function da(a){for(var b=Vc++,c=a.length;c<b;c++)a[c]=null;return b}function fa(a,b){a.Zd||(a.Zd=a.getContext,a.getContext=function(d,f){f=a.Zd(d,f);return\"webgl\"==d==f instanceof WebGLRenderingContext?f:null});var c=1<b.majorVersion?a.getContext(\"webgl2\",b):a.getContext(\"webgl\",b);return c?jd(c,b):0}\nfunction jd(a,b){var c=da(ia),d={handle:c,attributes:b,version:b.majorVersion,Ud:a};a.canvas&&(a.canvas.Oe=d);ia[c]=d;(\"undefined\"==typeof b.Ze||b.Ze)&&kd(d);return c}function ha(a){v=ia[a];r.vf=S=v&&v.Ud;return!(a&&!S)}\nfunction kd(a){a||(a=v);if(!a.gf){a.gf=!0;var b=a.Ud;Sc(b);Tc(b);Uc(b);b.Fe=b.getExtension(\"WEBGL_draw_instanced_base_vertex_base_instance\");b.Je=b.getExtension(\"WEBGL_multi_draw_instanced_base_vertex_base_instance\");2<=a.version&&(b.Ge=b.getExtension(\"EXT_disjoint_timer_query_webgl2\"));if(2>a.version||!b.Ge)b.Ge=b.getExtension(\"EXT_disjoint_timer_query\");b.wf=b.getExtension(\"WEBGL_multi_draw\");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes(\"lose_context\")||c.includes(\"debug\")||b.getExtension(c)})}}\nvar v,hd,ld={},nd=()=>{if(!md){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\",_:ma||\"./this.program\"},b;for(b in ld)void 0===ld[b]?delete a[b]:a[b]=ld[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);md=c}return md},md,od=[null,[],[]];function pd(a){S.bindVertexArray(ad[a])}\nfunction qd(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2];S.deleteVertexArray(ad[d]);ad[d]=null}}var rd=[];function sd(a,b,c,d){S.drawElements(a,b,c,d)}function td(a,b,c,d){for(var f=0;f<a;f++){var k=S[c](),l=k&&da(d);k?(k.name=l,d[l]=k):R(1282);K[b+4*f>>2]=l}}function ud(a,b){td(a,b,\"createVertexArray\",ad)}\nfunction vd(a,b,c){if(b){var d=void 0;switch(a){case 36346:d=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:d=0;break;case 34466:var f=S.getParameter(34467);d=f?f.length:0;break;case 33309:if(2>v.version){R(1282);return}d=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>v.version){R(1280);return}d=33307==a?3:0}if(void 0===d)switch(f=S.getParameter(a),typeof f){case \"number\":d=f;break;case \"boolean\":d=f?1:0;break;case \"string\":R(1280);return;case \"object\":if(null===\nf)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:d=0;break;default:R(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:K[b+4*a>>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ha[b+a>>0]=f[a]?1:0}return}try{d=f.name|0}catch(k){R(1280);\nCa(\"GL_INVALID_ENUM in glGet\"+c+\"v: Unknown object returned from WebGL getParameter(\"+a+\")! (error: \"+k+\")\");return}}break;default:R(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=d;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=d;break;case 2:N[b>>2]=d;break;case 4:Ha[b>>0]=d?1:0}}else R(1281)}var xd=a=>{var b=ja(a)+1,c=wd(b);c&&ka(a,C,c,b);return c};\nfunction yd(a){return\"]\"==a.slice(-1)&&a.lastIndexOf(\"[\")}function zd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function Ad(a,b,c,d,f){a=zd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+d*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+l-1&-l)>>k)}\nfunction W(a){var b=S.We;if(b){var c=b.je[a];\"number\"==typeof c&&(b.je[a]=c=S.getUniformLocation(b,b.Me[a]+(0<c?\"[\"+c+\"]\":\"\")));return c}R(1282)}var Bd=[],Cd=[],Dd=a=>0===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}\nvar Hd=(a,b,c,d)=>{function f(u,F,H){for(u=\"number\"==typeof u?u.toString():u||\"\";u.length<F;)u=H[0]+u;return u}function k(u,F){return f(u,F,\"0\")}function l(u,F){function H(ca){return 0>ca?-1:0<ca?1:0}var T;0===(T=H(u.getFullYear()-F.getFullYear()))&&0===(T=H(u.getMonth()-F.getMonth()))&&(T=H(u.getDate()-F.getDate()));return T}function m(u){switch(u.getDay()){case 0:return new Date(u.getFullYear()-1,11,29);case 1:return u;case 2:return new Date(u.getFullYear(),0,3);case 3:return new Date(u.getFullYear(),\n0,2);case 4:return new Date(u.getFullYear(),0,1);case 5:return new Date(u.getFullYear()-1,11,31);case 6:return new Date(u.getFullYear()-1,11,30)}}function p(u){var F=u.$d;for(u=new Date((new Date(u.ae+1900,0,1)).getTime());0<F;){var H=u.getMonth(),T=(Dd(u.getFullYear())?Ed:Fd)[H];if(F>T-u.getDate())F-=T-u.getDate()+1,u.setDate(1),11>H?u.setMonth(H+1):(u.setMonth(0),u.setFullYear(u.getFullYear()+1));else{u.setDate(u.getDate()+F);break}}H=new Date(u.getFullYear()+1,0,4);F=m(new Date(u.getFullYear(),\n0,4));H=m(H);return 0>=l(F,u)?0>=l(H,u)?u.getFullYear()+1:u.getFullYear():u.getFullYear()-1}var w=K[d+40>>2];d={tf:K[d>>2],sf:K[d+4>>2],te:K[d+8>>2],Ce:K[d+12>>2],ue:K[d+16>>2],ae:K[d+20>>2],Vd:K[d+24>>2],$d:K[d+28>>2],zf:K[d+32>>2],rf:K[d+36>>2],uf:w?w?kb(C,w):\"\":\"\"};c=c?kb(C,c):\"\";w={\"%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\",\n\"%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 w)c=c.replace(new RegExp(y,\"g\"),w[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(\" \");w={\"%a\":u=>B[u.Vd].substring(0,3),\"%A\":u=>B[u.Vd],\"%b\":u=>D[u.ue].substring(0,3),\"%B\":u=>D[u.ue],\"%C\":u=>k((u.ae+1900)/\n100|0,2),\"%d\":u=>k(u.Ce,2),\"%e\":u=>f(u.Ce,2,\" \"),\"%g\":u=>p(u).toString().substring(2),\"%G\":u=>p(u),\"%H\":u=>k(u.te,2),\"%I\":u=>{u=u.te;0==u?u=12:12<u&&(u-=12);return k(u,2)},\"%j\":u=>{for(var F=0,H=0;H<=u.ue-1;F+=(Dd(u.ae+1900)?Ed:Fd)[H++]);return k(u.Ce+F,3)},\"%m\":u=>k(u.ue+1,2),\"%M\":u=>k(u.sf,2),\"%n\":()=>\"\\n\",\"%p\":u=>0<=u.te&&12>u.te?\"AM\":\"PM\",\"%S\":u=>k(u.tf,2),\"%t\":()=>\"\\t\",\"%u\":u=>u.Vd||7,\"%U\":u=>k(Math.floor((u.$d+7-u.Vd)/7),2),\"%V\":u=>{var F=Math.floor((u.$d+7-(u.Vd+6)%7)/7);2>=(u.Vd+371-u.$d-\n2)%7&&F++;if(F)53==F&&(H=(u.Vd+371-u.$d)%7,4==H||3==H&&Dd(u.ae)||(F=1));else{F=52;var H=(u.Vd+7-u.$d-1)%7;(4==H||5==H&&Dd(u.ae%400-1))&&F++}return k(F,2)},\"%w\":u=>u.Vd,\"%W\":u=>k(Math.floor((u.$d+7-(u.Vd+6)%7)/7),2),\"%y\":u=>(u.ae+1900).toString().substring(2),\"%Y\":u=>u.ae+1900,\"%z\":u=>{u=u.rf;var F=0<=u;u=Math.abs(u)/60;return(F?\"+\":\"-\")+String(\"0000\"+(u/60*100+u%60)).slice(-4)},\"%Z\":u=>u.uf,\"%%\":()=>\"%\"};c=c.replace(/%%/g,\"\\x00\\x00\");for(y in w)c.includes(y)&&(c=c.replace(new RegExp(y,\"g\"),w[y](d)));\nc=c.replace(/\\0\\0/g,\"%\");y=Gd(c);if(y.length>b)return 0;Ha.set(y,a);return y.length-1};rb=r.InternalError=class extends Error{constructor(a){super(a);this.name=\"InternalError\"}};for(var Id=Array(256),Jd=0;256>Jd;++Jd)Id[Jd]=String.fromCharCode(Jd);wb=Id;xb=r.BindingError=class extends Error{constructor(a){super(a);this.name=\"BindingError\"}};\nRb.prototype.isAliasOf=function(a){if(!(this instanceof Rb&&a instanceof Rb))return!1;var b=this.kd.Nd.Ld,c=this.kd.Kd,d=a.kd.Nd.Ld;for(a=a.kd.Kd;b.Qd;)c=b.ke(c),b=b.Qd;for(;d.Qd;)a=d.ke(a),d=d.Qd;return b===d&&c===a};\nRb.prototype.clone=function(){this.kd.Kd||zb(this);if(this.kd.ie)return this.kd.count.value+=1,this;var a=Qb,b=Object,c=b.create,d=Object.getPrototypeOf(this),f=this.kd;a=a(c.call(b,d,{kd:{value:{count:f.count,ee:f.ee,ie:f.ie,Kd:f.Kd,Nd:f.Nd,Pd:f.Pd,Td:f.Td}}}));a.kd.count.value+=1;a.kd.ee=!1;return a};Rb.prototype[\"delete\"]=function(){this.kd.Kd||zb(this);this.kd.ee&&!this.kd.ie&&Q(\"Object already scheduled for deletion\");Bb(this);Cb(this.kd);this.kd.ie||(this.kd.Pd=void 0,this.kd.Kd=void 0)};\nRb.prototype.isDeleted=function(){return!this.kd.Kd};Rb.prototype.deleteLater=function(){this.kd.Kd||zb(this);this.kd.ee&&!this.kd.ie&&Q(\"Object already scheduled for deletion\");Kb.push(this);1===Kb.length&&Mb&&Mb(Lb);this.kd.ee=!0;return this};r.getInheritedInstanceCount=function(){return Object.keys(Nb).length};r.getLiveInheritedInstances=function(){var a=[],b;for(b in Nb)Nb.hasOwnProperty(b)&&a.push(Nb[b]);return a};r.flushPendingDeletes=Lb;r.setDelayFunction=function(a){Mb=a;Kb.length&&Mb&&Mb(Lb)};\ncc.prototype.bf=function(a){this.Ke&&(a=this.Ke(a));return a};cc.prototype.Ee=function(a){this.Xd&&this.Xd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=nb;cc.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\ncc.prototype.fromWireType=function(a){function b(){return this.pe?Pb(this.Ld.fe,{Nd:this.jf,Kd:c,Td:this,Pd:a}):Pb(this.Ld.fe,{Nd:this,Kd:a})}var c=this.bf(a);if(!c)return this.Ee(a),null;var d=Ob(this.Ld,c);if(void 0!==d){if(0===d.kd.count.value)return d.kd.Kd=c,d.kd.Pd=a,d.clone();d=d.clone();this.Ee(a);return d}d=this.Ld.af(c);d=Jb[d];if(!d)return b.call(this);d=this.oe?d.Ve:d.pointerType;var f=Db(c,this.Ld,d.Ld);return null===f?b.call(this):this.pe?Pb(d.Ld.fe,{Nd:d,Kd:f,Td:this,Pd:a}):Pb(d.Ld.fe,\n{Nd:d,Kd:f})};nc=r.UnboundTypeError=function(a,b){var c=Tb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,\"UnboundTypeError\");\nObject.assign(uc.prototype,{get(a){return this.Wd[a]},has(a){return void 0!==this.Wd[a]},ve(a){var b=this.Ie.pop()||this.Wd.length;this.Wd[b]=a;return b},we(a){this.Wd[a]=void 0;this.Ie.push(a)}});vc.Wd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Zd=vc.Wd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Zd;b<vc.Wd.length;++b)void 0!==vc.Wd[b]&&++a;return a};for(var S,Kd=0;32>Kd;++Kd)rd.push(Array(Kd));var Ld=new Float32Array(288);\nfor(Kd=0;288>Kd;++Kd)Bd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)Cd[Kd]=Md.subarray(0,Kd+1);\nvar $d={H:function(a,b,c){(new fb(a)).Zd(b,c);gb=a;ib++;throw gb;},$:function(){return 0},$c:()=>{},_c:function(){return 0},Zc:()=>{},Yc:()=>{},_:function(){},Xc:()=>{},D:function(a){var b=lb[a];delete lb[a];var c=b.Be,d=b.Xd,f=b.He,k=f.map(l=>l.ef).concat(f.map(l=>l.nf));tb([a],k,l=>{var m={};f.forEach((p,w)=>{var y=l[w],B=p.cf,D=p.df,u=l[w+f.length],F=p.mf,H=p.pf;m[p.$e]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(p){var w=\n{},y;for(y in m)w[y]=m[y].read(p);d(p);return w},toWireType:function(p,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: \"${y}\"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==p&&p.push(d,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:d}]})},fa:function(){},Tc:function(a,b,c,d,f){var k=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia;\nelse if(4===c)m=K;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(m[l>>k])},Sd:null})},l:function(a,b,c,d,f,k,l,m,p,w,y,B,D){y=O(y);k=mc(f,k);m&&(m=mc(l,m));w&&(w=mc(p,w));D=mc(B,D);var u=Sb(y);Vb(u,function(){rc(`Cannot construct ${y} due to unbound types`,[d])});tb([a,b,c],d?[d]:[],function(F){F=F[0];if(d){var H=F.Ld;var T=H.fe}else T=Rb.prototype;F=Tb(u,function(){if(Object.getPrototypeOf(this)!==ca)throw new xb(\"Use 'new' to construct \"+y);if(void 0===Y.Yd)throw new xb(y+\n\" has no accessible constructor\");var Ma=Y.Yd[arguments.length];if(void 0===Ma)throw new xb(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(Y.Yd).toString()}) parameters instead!`);return Ma.apply(this,arguments)});var ca=Object.create(T,{constructor:{value:F}});F.prototype=ca;var Y=new Wb(y,F,ca,D,H,k,m,w);Y.Qd&&(void 0===Y.Qd.le&&(Y.Qd.le=[]),Y.Qd.le.push(Y));H=new cc(y,Y,!0,!1,!1);T=new cc(y+\"*\",Y,!1,!1,!1);var va=new cc(y+\" const*\",\nY,!1,!0,!1);Jb[a]={pointerType:T,Ve:va};dc(u,F);return[H,T,va]})},e:function(a,b,c,d,f,k,l){var m=tc(c,d);b=O(b);k=mc(f,k);tb([],[a],function(p){function w(){rc(`Cannot call ${y} due to unbound types`,m)}p=p[0];var y=`${p.name}.${b}`;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var B=p.Ld.constructor;void 0===B[b]?(w.ce=c-1,B[b]=w):(Ub(B,b,y),B[b].Od[c-1]=w);tb([],m,function(D){D=[D[0],null].concat(D.slice(1));D=sc(y,D,null,k,l);void 0===B[b].Od?(D.ce=c-1,B[b]=D):B[b].Od[c-1]=D;if(p.Ld.le)for(const u of p.Ld.le)u.constructor.hasOwnProperty(b)||\n(u.constructor[b]=D);return[]});return[]})},B:function(a,b,c,d,f,k){var l=tc(b,c);f=mc(d,f);tb([],[a],function(m){m=m[0];var p=`constructor ${m.name}`;void 0===m.Ld.Yd&&(m.Ld.Yd=[]);if(void 0!==m.Ld.Yd[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Ld.Yd[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)};\ntb([],l,function(w){w.splice(1,0,null);m.Ld.Yd[b-1]=sc(p,w,null,f,k);return[]});return[]})},a:function(a,b,c,d,f,k,l,m){var p=tc(c,d);b=O(b);k=mc(f,k);tb([],[a],function(w){function y(){rc(`Cannot call ${B} due to unbound types`,p)}w=w[0];var B=`${w.name}.${b}`;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);m&&w.Ld.kf.push(b);var D=w.Ld.fe,u=D[b];void 0===u||void 0===u.Od&&u.className!==w.name&&u.ce===c-2?(y.ce=c-2,y.className=w.name,D[b]=y):(Ub(D,b,B),D[b].Od[c-2]=y);tb([],p,function(F){F=sc(B,F,\nw,k,l);void 0===D[b].Od?(F.ce=c-2,D[b]=F):D[b].Od[c-2]=F;return[]});return[]})},s:function(a,b,c){a=O(a);tb([],[b],function(d){d=d[0];r[a]=d.fromWireType(c);return[]})},Sc:function(a,b){b=O(b);ub(a,{name:b,fromWireType:function(c){var d=xc(c);wc(c);return d},toWireType:function(c,d){return ac(d)},argPackAdvance:8,readValueFromPointer:nb,Sd:null})},j:function(a,b,c,d){function f(){}c=vb(c);b=O(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,\nl){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,d),Sd:null});Vb(b,f)},b:function(a,b,c){var d=zc(a,\"enum\");b=O(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},Y:function(a,b,c){c=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Sd:null})},v:function(a,b,c,d,f,k){var l=tc(b,c);a=O(a);f=\nmc(d,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},E:function(a,b,c,d,f){b=O(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===d){var l=32-8*c;k=m=>m<<l>>>l}c=b.includes(\"unsigned\")?function(m,p){return p>>>0}:function(m,p){return p};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==d),Sd:null})},r:function(a,b,c){function d(k){k>>=2;var l=\nL;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);ub(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ff:!0})},p:function(a,b,c,d,f,k,l,m,p,w,y,B){c=O(c);k=mc(f,k);m=mc(l,m);w=mc(p,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Ld,!1,!1,!0,D,d,k,m,w,B)]})},X:function(a,b){b=O(b);var c=\"std::string\"===b;ub(a,{name:b,fromWireType:function(d){var f=L[d>>2],k=d+4;if(c)for(var l=\nk,m=0;m<=f;++m){var p=k+m;if(m==f||0==C[p]){l=l?kb(C,l,p-l):\"\";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=p+1}}else{w=Array(f);for(m=0;m<f;++m)w[m]=String.fromCharCode(C[k+m]);w=w.join(\"\")}qc(d);return w},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k=\"string\"==typeof f;k||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q(\"Cannot pass non-string to std::string\");var l=c&&k?ja(f):f.length;var m=wd(4+l+1),p=m+4;L[m>>2]=\nl;if(c&&k)ka(f,C,p,l+1);else if(k)for(k=0;k<l;++k){var w=f.charCodeAt(k);255<w&&(qc(p),Q(\"String has UTF-16 code units that do not fit in 8 bits\"));C[p+k]=w}else for(k=0;k<l;++k)C[p+k]=f[k];null!==d&&d.push(qc,m);return m},argPackAdvance:8,readValueFromPointer:nb,Sd:function(d){qc(d)}})},O:function(a,b,c){c=O(c);if(2===b){var d=Dc;var f=Ec;var k=Fc;var l=()=>Ja;var m=1}else 4===b&&(d=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(p){for(var w=L[p>>2],y=l(),B,D=p+4,u=0;u<=w;++u){var F=\np+4+u*b;if(u==w||0==y[F>>m])D=d(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(p);return B},toWireType:function(p,w){\"string\"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=wd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==p&&p.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:function(p){qc(p)}})},C:function(a,b,c,d,f,k){lb[a]={name:O(b),Be:mc(c,d),Xd:mc(f,k),He:[]}},d:function(a,b,c,d,f,k,l,m,p,w){lb[a].He.push({$e:O(b),ef:c,cf:mc(d,f),df:k,\nnf:l,mf:mc(m,p),pf:w})},Rc:function(a,b){b=O(b);ub(a,{hf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},Qc:()=>!0,Pc:()=>{throw Infinity;},G:function(a,b,c){a=xc(a);b=zc(b,\"emval::as\");var d=[],f=ac(d);L[c>>2]=f;return b.toWireType(d,a)},N:function(a,b,c,d,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[d>>2]=ac(k);return a(b,c,k,f)},t:function(a,b,c,d){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,d)},c:wc,M:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},q:function(a,\nb){var c=Oc(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(l){return l.name}).join(\"_\")+\"$\";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,p,w)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(w+y),y+=c[B+1].argPackAdvance;l=l[m].apply(l,k);for(B=0;B<a-1;++B)c[B+1].Xe&&c[B+1].Xe(k[B]);if(!d.hf)return d.toWireType(p,l)});return Pc[b]=f},A:function(a,b){a=xc(a);b=xc(b);return ac(a[b])},m:function(a){4<a&&(vc.get(a).Le+=1)},L:function(a,b,c,d){a=xc(a);var f=Rc[b];f||(f=\nQc(b),Rc[b]=f);return f(a,c,d)},I:function(){return ac([])},f:function(a){return ac(Kc(a))},F:function(){return ac({})},Oc:function(a){a=xc(a);return!a},z:function(a){var b=xc(a);mb(b);wc(a)},i:function(a,b,c){a=xc(a);b=xc(b);c=xc(c);a[b]=c},g:function(a,b){a=zc(a,\"_emval_take_value\");a=a.readValueFromPointer(b);return ac(a)},ea:function(){return-52},da:function(){},h:()=>{Ea(\"\")},Nc:()=>performance.now(),Mc:a=>{var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);\nd=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);a:{f=f.min.call(f,2147483648,d+(65536-d%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},Lc:function(){return v?v.handle:0},Wc:(a,b)=>{var c=0;nd().forEach(function(d,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k<d.length;++k)Ha[f++>>0]=d.charCodeAt(k);Ha[f>>0]=0;c+=d.length+1});return 0},Vc:(a,b)=>{var c=nd();L[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});L[b>>\n2]=d;return 0},Kc:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,new db(a))},P:()=>52,ha:function(){return 52},Uc:()=>52,ga:function(){return 70},Z:(a,b,c,d)=>{for(var f=0,k=0;k<c;k++){var l=L[b>>2],m=L[b+4>>2];b+=8;for(var p=0;p<m;p++){var w=C[l+p],y=od[a];0===w||10===w?((1===a?Aa:Ca)(kb(y,0)),y.length=0):y.push(w)}f+=m}L[d>>2]=f;return 0},Jc:function(a){S.activeTexture(a)},Ic:function(a,b){S.attachShader(Xc[a],$c[b])},Hc:function(a,b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):\"\")},Gc:function(a,\nb){35051==a?S.ye=b:35052==a&&(S.de=b);S.bindBuffer(a,Wc[b])},W:function(a,b){S.bindFramebuffer(a,Yc[b])},Fc:function(a,b){S.bindRenderbuffer(a,Zc[b])},Ec:function(a,b){S.bindSampler(a,bd[b])},Dc:function(a,b){S.bindTexture(a,ea[b])},Cc:pd,Bc:pd,Ac:function(a,b,c,d){S.blendColor(a,b,c,d)},zc:function(a){S.blendEquation(a)},yc:function(a,b){S.blendFunc(a,b)},xc:function(a,b,c,d,f,k,l,m,p,w){S.blitFramebuffer(a,b,c,d,f,k,l,m,p,w)},wc:function(a,b,c,d){2<=v.version?c&&b?S.bufferData(a,C,d,c,b):S.bufferData(a,\nb,d):S.bufferData(a,c?C.subarray(c,c+b):b,d)},vc:function(a,b,c,d){2<=v.version?c&&S.bufferSubData(a,b,C,d,c):S.bufferSubData(a,b,C.subarray(d,d+c))},uc:function(a){return S.checkFramebufferStatus(a)},V:function(a){S.clear(a)},U:function(a,b,c,d){S.clearColor(a,b,c,d)},T:function(a){S.clearStencil(a)},ca:function(a,b,c,d){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*d)},tc:function(a,b,c,d){S.colorMask(!!a,!!b,!!c,!!d)},sc:function(a){S.compileShader($c[a])},rc:function(a,b,c,d,f,k,l,m){2<=\nv.version?S.de||!l?S.compressedTexImage2D(a,b,c,d,f,k,l,m):S.compressedTexImage2D(a,b,c,d,f,k,C,m,l):S.compressedTexImage2D(a,b,c,d,f,k,m?C.subarray(m,m+l):null)},qc:function(a,b,c,d,f,k,l,m,p){2<=v.version?S.de||!m?S.compressedTexSubImage2D(a,b,c,d,f,k,l,m,p):S.compressedTexSubImage2D(a,b,c,d,f,k,l,C,p,m):S.compressedTexSubImage2D(a,b,c,d,f,k,l,p?C.subarray(p,p+m):null)},pc:function(a,b,c,d,f){S.copyBufferSubData(a,b,c,d,f)},oc:function(a,b,c,d,f,k,l,m){S.copyTexSubImage2D(a,b,c,d,f,k,l,m)},nc:function(){var a=\nda(Xc),b=S.createProgram();b.name=a;b.se=b.qe=b.re=0;b.De=1;Xc[a]=b;return a},mc:function(a){var b=da($c);$c[b]=S.createShader(a);return b},lc:function(a){S.cullFace(a)},kc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=Wc[d];f&&(S.deleteBuffer(f),f.name=0,Wc[d]=null,d==S.ye&&(S.ye=0),d==S.de&&(S.de=0))}},jc:function(a,b){for(var c=0;c<a;++c){var d=K[b+4*c>>2],f=Yc[d];f&&(S.deleteFramebuffer(f),f.name=0,Yc[d]=null)}},ic:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),b.name=0,Xc[a]=null):\nR(1281)}},hc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=Zc[d];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[d]=null)}},gc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=bd[d];f&&(S.deleteSampler(f),f.name=0,bd[d]=null)}},fc:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},ec:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},dc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=ea[d];f&&(S.deleteTexture(f),f.name=0,ea[d]=null)}},\ncc:qd,bc:qd,ac:function(a){S.depthMask(!!a)},$b:function(a){S.disable(a)},_b:function(a){S.disableVertexAttribArray(a)},Zb:function(a,b,c){S.drawArrays(a,b,c)},Yb:function(a,b,c,d){S.drawArraysInstanced(a,b,c,d)},Xb:function(a,b,c,d,f){S.Fe.drawArraysInstancedBaseInstanceWEBGL(a,b,c,d,f)},Wb:function(a,b){for(var c=rd[a],d=0;d<a;d++)c[d]=K[b+4*d>>2];S.drawBuffers(c)},Vb:sd,Ub:function(a,b,c,d,f){S.drawElementsInstanced(a,b,c,d,f)},Tb:function(a,b,c,d,f,k,l){S.Fe.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,\nb,c,d,f,k,l)},Sb:function(a,b,c,d,f,k){sd(a,d,f,k)},Rb:function(a){S.enable(a)},Qb:function(a){S.enableVertexAttribArray(a)},Pb:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},Ob:function(){S.finish()},Nb:function(){S.flush()},Mb:function(a,b,c,d){S.framebufferRenderbuffer(a,b,c,Zc[d])},Lb:function(a,b,c,d,f){S.framebufferTexture2D(a,b,c,ea[d],f)},Kb:function(a){S.frontFace(a)},Jb:function(a,b){td(a,b,\"createBuffer\",Wc)},Ib:function(a,b){td(a,b,\"createFramebuffer\",Yc)},Hb:function(a,\nb){td(a,b,\"createRenderbuffer\",Zc)},Gb:function(a,b){td(a,b,\"createSampler\",bd)},Fb:function(a,b){td(a,b,\"createTexture\",ea)},Eb:ud,Db:ud,Cb:function(a){S.generateMipmap(a)},Bb:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},Ab:function(){var a=S.getError()||hd;hd=0;return a},zb:function(a,b){vd(a,b,2)},yb:function(a,b,c,d){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[d>>2]=a},K:function(a,b){vd(a,b,0)},xb:function(a,\nb,c,d){a=S.getProgramInfoLog(Xc[a]);null===a&&(a=\"(unknown error)\");b=0<b&&d?ka(a,C,d,b):0;c&&(K[c>>2]=b)},wb:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a=\"(unknown error)\"),K[c>>2]=a.length+1;else if(35719==b){if(!a.se)for(b=0;b<S.getProgramParameter(a,35718);++b)a.se=Math.max(a.se,S.getActiveUniform(a,b).name.length+1);K[c>>2]=a.se}else if(35722==b){if(!a.qe)for(b=0;b<S.getProgramParameter(a,35721);++b)a.qe=Math.max(a.qe,S.getActiveAttrib(a,\nb).name.length+1);K[c>>2]=a.qe}else if(35381==b){if(!a.re)for(b=0;b<S.getProgramParameter(a,35382);++b)a.re=Math.max(a.re,S.getActiveUniformBlockName(a,b).length+1);K[c>>2]=a.re}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},vb:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},ub:function(a,b,c,d){a=S.getShaderInfoLog($c[a]);null===a&&(a=\"(unknown error)\");b=0<b&&d?ka(a,C,d,b):0;c&&(K[c>>2]=b)},tb:function(a,b,c,d){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>>\n2]=a.rangeMax;K[d>>2]=a.precision},sb:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a=\"(unknown error)\"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},S:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return\"GL_\"+d}));b=xd(b.join(\" \"));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&xd(b);break;\ncase 7938:b=S.getParameter(7938);b=2<=v.version?\"OpenGL ES 3.0 (\"+b+\")\":\"OpenGL ES 2.0 (\"+b+\")\";b=xd(b);break;case 35724:b=S.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=xd(b);break;default:R(1280)}dd[a]=b}return b},rb:function(a,b){if(2>v.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[],\nc=c.concat(c.map(function(d){return\"GL_\"+d})),c=c.map(function(d){return xd(d)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},qb:function(a,b){b=b?kb(C,b):\"\";if(a=Xc[a]){var c=a,d=c.je,f=c.Ne,k;if(!d)for(c.je=d={},c.Me={},k=0;k<S.getProgramParameter(c,35718);++k){var l=S.getActiveUniform(c,k);var m=l.name;l=l.size;var p=yd(m);p=0<p?m.slice(0,p):m;var w=c.De;c.De+=l;f[p]=[l,w];for(m=0;m<l;++m)d[w]=m,c.Me[w++]=p}c=a.je;d=0;f=b;k=yd(b);0<k&&(d=parseInt(b.slice(k+1))>>>0,f=b.slice(0,\nk));if((f=a.Ne[f])&&d<f[0]&&(d+=f[1],c[d]=c[d]||S.getUniformLocation(a,b)))return d}else R(1281);return-1},pb:function(a,b,c){for(var d=rd[b],f=0;f<b;f++)d[f]=K[c+4*f>>2];S.invalidateFramebuffer(a,d)},ob:function(a,b,c,d,f,k,l){for(var m=rd[b],p=0;p<b;p++)m[p]=K[c+4*p>>2];S.invalidateSubFramebuffer(a,m,d,f,k,l)},nb:function(a){return S.isSync(cd[a])},mb:function(a){return(a=ea[a])?S.isTexture(a):0},lb:function(a){S.lineWidth(a)},kb:function(a){a=Xc[a];S.linkProgram(a);a.je=0;a.Ne={}},jb:function(a,\nb,c,d,f,k){S.Je.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,d>>2,L,f>>2,k)},ib:function(a,b,c,d,f,k,l,m){S.Je.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,d>>2,K,f>>2,K,k>>2,L,l>>2,m)},hb:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},gb:function(a){S.readBuffer(a)},fb:function(a,b,c,d,f,k,l){if(2<=v.version)if(S.ye)S.readPixels(a,b,c,d,f,k,l);else{var m=zd(k);S.readPixels(a,b,c,d,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=Ad(k,f,c,d,l))?S.readPixels(a,\nb,c,d,f,k,l):R(1280)},eb:function(a,b,c,d){S.renderbufferStorage(a,b,c,d)},db:function(a,b,c,d,f){S.renderbufferStorageMultisample(a,b,c,d,f)},cb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},bb:function(a,b,c){S.samplerParameteri(bd[a],b,c)},ab:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},$a:function(a,b,c,d){S.scissor(a,b,c,d)},_a:function(a,b,c,d){for(var f=\"\",k=0;k<b;++k){var l=d?K[d+4*k>>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):\"\";f+=l}S.shaderSource($c[a],f)},Za:function(a,b,\nc){S.stencilFunc(a,b,c)},Ya:function(a,b,c,d){S.stencilFuncSeparate(a,b,c,d)},Xa:function(a){S.stencilMask(a)},Wa:function(a,b){S.stencilMaskSeparate(a,b)},Va:function(a,b,c){S.stencilOp(a,b,c)},Ua:function(a,b,c,d){S.stencilOpSeparate(a,b,c,d)},Ta:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=zd(m);S.texImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,d,f,k,l,m,null);else S.texImage2D(a,b,c,d,f,k,l,m,p?\nAd(m,l,d,f,p):null)},Sa:function(a,b,c){S.texParameterf(a,b,c)},Ra:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Qa:function(a,b,c){S.texParameteri(a,b,c)},Pa:function(a,b,c){S.texParameteri(a,b,K[c>>2])},Oa:function(a,b,c,d,f){S.texStorage2D(a,b,c,d,f)},Na:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texSubImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=zd(m);S.texSubImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,d,f,k,l,m,null);else w=null,p&&(w=\nAd(m,l,f,k,p)),S.texSubImage2D(a,b,c,d,f,k,l,m,w)},Ma:function(a,b){S.uniform1f(W(a),b)},La:function(a,b,c){if(2<=v.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var d=Bd[b-1],f=0;f<b;++f)d[f]=N[c+4*f>>2];else d=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),d)}},Ka:function(a,b){S.uniform1i(W(a),b)},Ja:function(a,b,c){if(2<=v.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var d=Cd[b-1],f=0;f<b;++f)d[f]=K[c+4*f>>2];else d=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),d)}},Ia:function(a,\nb,c){S.uniform2f(W(a),b,c)},Ha:function(a,b,c){if(2<=v.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var d=Bd[2*b-1],f=0;f<2*b;f+=2)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2];else d=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),d)}},Ga:function(a,b,c){S.uniform2i(W(a),b,c)},Fa:function(a,b,c){if(2<=v.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var d=Cd[2*b-1],f=0;f<2*b;f+=2)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2];else d=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),d)}},Ea:function(a,\nb,c,d){S.uniform3f(W(a),b,c,d)},Da:function(a,b,c){if(2<=v.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var d=Bd[3*b-1],f=0;f<3*b;f+=3)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2],d[f+2]=N[c+(4*f+8)>>2];else d=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),d)}},Ca:function(a,b,c,d){S.uniform3i(W(a),b,c,d)},Ba:function(a,b,c){if(2<=v.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var d=Cd[3*b-1],f=0;f<3*b;f+=3)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2];else d=\nK.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),d)}},Aa:function(a,b,c,d,f){S.uniform4f(W(a),b,c,d,f)},za:function(a,b,c){if(2<=v.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var d=Bd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;d[k]=f[l];d[k+1]=f[l+1];d[k+2]=f[l+2];d[k+3]=f[l+3]}}else d=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),d)}},ya:function(a,b,c,d,f){S.uniform4i(W(a),b,c,d,f)},xa:function(a,b,c){if(2<=v.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var d=Cd[4*b-\n1],f=0;f<4*b;f+=4)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2],d[f+3]=K[c+(4*f+12)>>2];else d=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),d)}},wa:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix2fv(W(a),!!c,N,d>>2,4*b);else{if(72>=b)for(var f=Bd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2];else f=N.subarray(d>>2,d+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},va:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix3fv(W(a),\n!!c,N,d>>2,9*b);else{if(32>=b)for(var f=Bd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2],f[k+4]=N[d+(4*k+16)>>2],f[k+5]=N[d+(4*k+20)>>2],f[k+6]=N[d+(4*k+24)>>2],f[k+7]=N[d+(4*k+28)>>2],f[k+8]=N[d+(4*k+32)>>2];else f=N.subarray(d>>2,d+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},ua:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix4fv(W(a),!!c,N,d>>2,16*b);else{if(18>=b){var f=Bd[16*b-1],k=N;d>>=2;for(var l=0;l<16*b;l+=16){var m=d+l;f[l]=\nk[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(d>>2,d+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},ta:function(a){a=Xc[a];S.useProgram(a);S.We=a},sa:function(a,b){S.vertexAttrib1f(a,b)},ra:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},qa:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},\npa:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},oa:function(a,b){S.vertexAttribDivisor(a,b)},na:function(a,b,c,d,f){S.vertexAttribIPointer(a,b,c,d,f)},ma:function(a,b,c,d,f,k){S.vertexAttribPointer(a,b,c,!!d,f,k)},la:function(a,b,c,d){S.viewport(a,b,c,d)},ba:function(a,b,c,d){S.waitSync(cd[a],b,(c>>>0)+4294967296*d)},n:Nd,u:Od,k:Pd,J:Qd,R:Rd,Q:Sd,x:Td,y:Ud,o:Vd,w:Wd,ka:Xd,ja:Yd,ia:Zd,aa:(a,b,c,d)=>Hd(a,b,c,d)};\n(function(){function a(c){G=c=c.exports;Fa=G.ad;La();Na=G.dd;Pa.unshift(G.bd);Ua--;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(0==Ua&&(null!==Va&&(clearInterval(Va),Va=null),Wa)){var d=Wa;Wa=null;d()}return c}var b={a:$d};Ua++;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca(\"Module.instantiateWasm callback failed with error: \"+c),ba(c)}cb(b,function(c){a(c.instance)}).catch(ba);return{}})();\nvar wd=r._malloc=a=>(wd=r._malloc=G.cd)(a),qc=r._free=a=>(qc=r._free=G.ed)(a),pc=a=>(pc=G.fd)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.gd)();var ae=(a,b)=>(ae=G.hd)(a,b),be=()=>(be=G.id)(),ce=a=>(ce=G.jd)(a);r.dynCall_viji=(a,b,c,d,f)=>(r.dynCall_viji=G.ld)(a,b,c,d,f);r.dynCall_vijiii=(a,b,c,d,f,k,l)=>(r.dynCall_vijiii=G.md)(a,b,c,d,f,k,l);r.dynCall_viiiiij=(a,b,c,d,f,k,l,m)=>(r.dynCall_viiiiij=G.nd)(a,b,c,d,f,k,l,m);\nr.dynCall_iiiji=(a,b,c,d,f,k)=>(r.dynCall_iiiji=G.od)(a,b,c,d,f,k);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.pd)(a,b,c);r.dynCall_vij=(a,b,c,d)=>(r.dynCall_vij=G.qd)(a,b,c,d);r.dynCall_iiij=(a,b,c,d,f)=>(r.dynCall_iiij=G.rd)(a,b,c,d,f);r.dynCall_iiiij=(a,b,c,d,f,k)=>(r.dynCall_iiiij=G.sd)(a,b,c,d,f,k);r.dynCall_viij=(a,b,c,d,f)=>(r.dynCall_viij=G.td)(a,b,c,d,f);r.dynCall_viiij=(a,b,c,d,f,k)=>(r.dynCall_viiij=G.ud)(a,b,c,d,f,k);\nr.dynCall_jiiiiii=(a,b,c,d,f,k,l)=>(r.dynCall_jiiiiii=G.vd)(a,b,c,d,f,k,l);r.dynCall_jiiiiji=(a,b,c,d,f,k,l,m)=>(r.dynCall_jiiiiji=G.wd)(a,b,c,d,f,k,l,m);r.dynCall_ji=(a,b)=>(r.dynCall_ji=G.xd)(a,b);r.dynCall_iijj=(a,b,c,d,f,k)=>(r.dynCall_iijj=G.yd)(a,b,c,d,f,k);r.dynCall_iiji=(a,b,c,d,f)=>(r.dynCall_iiji=G.zd)(a,b,c,d,f);r.dynCall_iijjiii=(a,b,c,d,f,k,l,m,p)=>(r.dynCall_iijjiii=G.Ad)(a,b,c,d,f,k,l,m,p);r.dynCall_iij=(a,b,c,d)=>(r.dynCall_iij=G.Bd)(a,b,c,d);\nr.dynCall_vijjjii=(a,b,c,d,f,k,l,m,p,w)=>(r.dynCall_vijjjii=G.Cd)(a,b,c,d,f,k,l,m,p,w);r.dynCall_jiji=(a,b,c,d,f)=>(r.dynCall_jiji=G.Dd)(a,b,c,d,f);r.dynCall_viijii=(a,b,c,d,f,k,l)=>(r.dynCall_viijii=G.Ed)(a,b,c,d,f,k,l);r.dynCall_iiiiij=(a,b,c,d,f,k,l)=>(r.dynCall_iiiiij=G.Fd)(a,b,c,d,f,k,l);r.dynCall_iiiiijj=(a,b,c,d,f,k,l,m,p)=>(r.dynCall_iiiiijj=G.Gd)(a,b,c,d,f,k,l,m,p);r.dynCall_iiiiiijj=(a,b,c,d,f,k,l,m,p,w)=>(r.dynCall_iiiiiijj=G.Hd)(a,b,c,d,f,k,l,m,p,w);\nfunction Wd(a,b,c,d,f){var k=be();try{Na.get(a)(b,c,d,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Od(a,b,c){var d=be();try{return Na.get(a)(b,c)}catch(f){ce(d);if(f!==f+0)throw f;ae(1,0)}}function Ud(a,b,c){var d=be();try{Na.get(a)(b,c)}catch(f){ce(d);if(f!==f+0)throw f;ae(1,0)}}function Nd(a,b){var c=be();try{return Na.get(a)(b)}catch(d){ce(c);if(d!==d+0)throw d;ae(1,0)}}function Td(a,b){var c=be();try{Na.get(a)(b)}catch(d){ce(c);if(d!==d+0)throw d;ae(1,0)}}\nfunction Pd(a,b,c,d){var f=be();try{return Na.get(a)(b,c,d)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Zd(a,b,c,d,f,k,l,m,p,w){var y=be();try{Na.get(a)(b,c,d,f,k,l,m,p,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}function Vd(a,b,c,d){var f=be();try{Na.get(a)(b,c,d)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Yd(a,b,c,d,f,k,l){var m=be();try{Na.get(a)(b,c,d,f,k,l)}catch(p){ce(m);if(p!==p+0)throw p;ae(1,0)}}\nfunction Qd(a,b,c,d,f){var k=be();try{return Na.get(a)(b,c,d,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Rd(a,b,c,d,f,k,l){var m=be();try{return Na.get(a)(b,c,d,f,k,l)}catch(p){ce(m);if(p!==p+0)throw p;ae(1,0)}}function Xd(a,b,c,d,f,k){var l=be();try{Na.get(a)(b,c,d,f,k)}catch(m){ce(l);if(m!==m+0)throw m;ae(1,0)}}function Sd(a,b,c,d,f,k,l,m,p,w){var y=be();try{return Na.get(a)(b,c,d,f,k,l,m,p,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}var de;Wa=function ee(){de||fe();de||(Wa=ee)};\nfunction fe(){function a(){if(!de&&(de=!0,r.calledRun=!0,!Ga)){eb(Pa);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();Qa.unshift(b)}eb(Qa)}}if(!(0<Ua)){if(r.preRun)for(\"function\"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)Ra();eb(Oa);0<Ua||(r.setStatus?(r.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){r.setStatus(\"\")},1);a()},1)):a())}}\nif(r.preInit)for(\"function\"==typeof r.preInit&&(r.preInit=[r.preInit]);0<r.preInit.length;)r.preInit.pop()();fe();\n\n\n  return moduleArg.ready\n}\n\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n  module.exports = CanvasKitInit;\nelse if (typeof define === 'function' && define['amd'])\n  define([], () => CanvasKitInit);\n"
  },
  {
    "path": "legacy/dist/canvaskit/canvaskit.js.symbols",
    "content": "0:_embind_register_class_function\n1:_embind_register_enum_value\n2:_emval_decref\n3:_embind_register_value_object_field\n4:_embind_register_class_class_function\n5:_emval_new_cstring\n6:_emval_take_value\n7:abort\n8:_emval_set_property\n9:_embind_register_enum\n10:invoke_iiii\n11:_embind_register_class\n12:_emval_incref\n13:invoke_ii\n14:invoke_viii\n15:_embind_register_smart_ptr\n16:_emval_get_method_caller\n17:_embind_register_memory_view\n18:_embind_register_constant\n19:_emval_call_void_method\n20:invoke_iii\n21:_embind_register_function\n22:invoke_viiii\n23:invoke_vi\n24:invoke_vii\n25:_emval_run_destructors\n26:_emval_get_property\n27:_embind_register_class_constructor\n28:_embind_register_value_object\n29:_embind_finalize_value_object\n30:_embind_register_integer\n31:_emval_new_object\n32:_emval_as\n33:__cxa_throw\n34:_emval_new_array\n35:invoke_iiiii\n36:glGetIntegerv\n37:_emval_new\n38:_emval_get_global\n39:_emval_call_method\n40:_embind_register_std_wstring\n41:__wasi_fd_close\n42:invoke_iiiiiiiiii\n43:invoke_iiiiiii\n44:glGetString\n45:glClearStencil\n46:glClearColor\n47:glClear\n48:glBindFramebuffer\n49:_embind_register_std_string\n50:_embind_register_float\n51:__wasi_fd_write\n52:__syscall_openat\n53:__syscall_fcntl64\n54:strftime_l\n55:legalimport$glWaitSync\n56:legalimport$glClientWaitSync\n57:legalimport$_munmap_js\n58:legalimport$_mmap_js\n59:legalimport$_embind_register_bigint\n60:legalimport$__wasi_fd_seek\n61:legalimport$__wasi_fd_pread\n62:invoke_viiiiiiiii\n63:invoke_viiiiii\n64:invoke_viiiii\n65:glViewport\n66:glVertexAttribPointer\n67:glVertexAttribIPointer\n68:glVertexAttribDivisor\n69:glVertexAttrib4fv\n70:glVertexAttrib3fv\n71:glVertexAttrib2fv\n72:glVertexAttrib1f\n73:glUseProgram\n74:glUniformMatrix4fv\n75:glUniformMatrix3fv\n76:glUniformMatrix2fv\n77:glUniform4iv\n78:glUniform4i\n79:glUniform4fv\n80:glUniform4f\n81:glUniform3iv\n82:glUniform3i\n83:glUniform3fv\n84:glUniform3f\n85:glUniform2iv\n86:glUniform2i\n87:glUniform2fv\n88:glUniform2f\n89:glUniform1iv\n90:glUniform1i\n91:glUniform1fv\n92:glUniform1f\n93:glTexSubImage2D\n94:glTexStorage2D\n95:glTexParameteriv\n96:glTexParameteri\n97:glTexParameterfv\n98:glTexParameterf\n99:glTexImage2D\n100:glStencilOpSeparate\n101:glStencilOp\n102:glStencilMaskSeparate\n103:glStencilMask\n104:glStencilFuncSeparate\n105:glStencilFunc\n106:glShaderSource\n107:glScissor\n108:glSamplerParameteriv\n109:glSamplerParameteri\n110:glSamplerParameterf\n111:glRenderbufferStorageMultisample\n112:glRenderbufferStorage\n113:glReadPixels\n114:glReadBuffer\n115:glPixelStorei\n116:glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL\n117:glMultiDrawArraysInstancedBaseInstanceWEBGL\n118:glLinkProgram\n119:glLineWidth\n120:glIsTexture\n121:glIsSync\n122:glInvalidateSubFramebuffer\n123:glInvalidateFramebuffer\n124:glGetUniformLocation\n125:glGetStringi\n126:glGetShaderiv\n127:glGetShaderPrecisionFormat\n128:glGetShaderInfoLog\n129:glGetRenderbufferParameteriv\n130:glGetProgramiv\n131:glGetProgramInfoLog\n132:glGetFramebufferAttachmentParameteriv\n133:glGetFloatv\n134:glGetError\n135:glGetBufferParameteriv\n136:glGenerateMipmap\n137:glGenVertexArraysOES\n138:glGenVertexArrays\n139:glGenTextures\n140:glGenSamplers\n141:glGenRenderbuffers\n142:glGenFramebuffers\n143:glGenBuffers\n144:glFrontFace\n145:glFramebufferTexture2D\n146:glFramebufferRenderbuffer\n147:glFlush\n148:glFinish\n149:glFenceSync\n150:glEnableVertexAttribArray\n151:glEnable\n152:glDrawRangeElements\n153:glDrawElementsInstancedBaseVertexBaseInstanceWEBGL\n154:glDrawElementsInstanced\n155:glDrawElements\n156:glDrawBuffers\n157:glDrawArraysInstancedBaseInstanceWEBGL\n158:glDrawArraysInstanced\n159:glDrawArrays\n160:glDisableVertexAttribArray\n161:glDisable\n162:glDepthMask\n163:glDeleteVertexArraysOES\n164:glDeleteVertexArrays\n165:glDeleteTextures\n166:glDeleteSync\n167:glDeleteShader\n168:glDeleteSamplers\n169:glDeleteRenderbuffers\n170:glDeleteProgram\n171:glDeleteFramebuffers\n172:glDeleteBuffers\n173:glCullFace\n174:glCreateShader\n175:glCreateProgram\n176:glCopyTexSubImage2D\n177:glCopyBufferSubData\n178:glCompressedTexSubImage2D\n179:glCompressedTexImage2D\n180:glCompileShader\n181:glColorMask\n182:glCheckFramebufferStatus\n183:glBufferSubData\n184:glBufferData\n185:glBlitFramebuffer\n186:glBlendFunc\n187:glBlendEquation\n188:glBlendColor\n189:glBindVertexArrayOES\n190:glBindVertexArray\n191:glBindTexture\n192:glBindSampler\n193:glBindRenderbuffer\n194:glBindBuffer\n195:glBindAttribLocation\n196:glAttachShader\n197:glActiveTexture\n198:exit\n199:emscripten_webgl_get_current_context\n200:emscripten_resize_heap\n201:emscripten_get_now\n202:_emval_not\n203:_emscripten_throw_longjmp\n204:_emscripten_get_now_is_monotonic\n205:_embind_register_void\n206:_embind_register_emval\n207:_embind_register_bool\n208:__wasi_fd_read\n209:__wasi_environ_sizes_get\n210:__wasi_environ_get\n211:__syscall_stat64\n212:__syscall_newfstatat\n213:__syscall_lstat64\n214:__syscall_ioctl\n215:__syscall_fstat64\n216:dlfree\n217:operator\\20new\\28unsigned\\20long\\29\n218:void\\20emscripten::internal::raw_destructor<SkColorSpace>\\28SkColorSpace*\\29\n219:__memcpy\n220:SkString::~SkString\\28\\29\n221:__memset\n222:GrGLSLShaderBuilder::codeAppendf\\28char\\20const*\\2c\\20...\\29\n223:uprv_free_73\n224:SkColorInfo::~SkColorInfo\\28\\29\n225:memcmp\n226:SkContainerAllocator::allocate\\28int\\2c\\20double\\29\n227:SkDebugf\\28char\\20const*\\2c\\20...\\29\n228:SkString::SkString\\28\\29\n229:SkData::~SkData\\28\\29\n230:memmove\n231:SkString::insert\\28unsigned\\20long\\2c\\20char\\20const*\\29\n232:hb_blob_destroy\n233:sk_report_container_overflow_and_die\\28\\29\n234:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\28char\\20const*\\29\n235:SkPath::~SkPath\\28\\29\n236:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::~__func\\28\\29\n237:strlen\n238:uprv_malloc_73\n239:SkArenaAlloc::ensureSpace\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n240:SkSL::ErrorReporter::error\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n241:SkRasterPipeline::append\\28SkRasterPipelineOp\\2c\\20void*\\29\n242:SkString::SkString\\28char\\20const*\\29\n243:ft_mem_free\n244:FT_MulFix\n245:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::share\\28void*\\29\n246:strcmp\n247:SkTDStorage::append\\28\\29\n248:SkMatrix::computeTypeMask\\28\\29\\20const\n249:GrGpuResource::notifyARefCntIsZero\\28GrIORef<GrGpuResource>::LastRemovedRef\\29\\20const\n250:SkWriter32::growToAtLeast\\28unsigned\\20long\\29\n251:testSetjmp\n252:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\28char\\20const*\\2c\\20unsigned\\20long\\29\n253:fmaxf\n254:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::size\\5babi:v160004\\5d\\28\\29\\20const\n255:SkString::SkString\\28SkString&&\\29\n256:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n257:SkSL::Pool::AllocMemory\\28unsigned\\20long\\29\n258:GrColorInfo::~GrColorInfo\\28\\29\n259:SkIRect::intersect\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n260:GrBackendFormat::~GrBackendFormat\\28\\29\n261:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::insert\\28unsigned\\20long\\2c\\20char\\20const*\\29\n262:icu_73::UnicodeString::~UnicodeString\\28\\29\n263:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n264:GrContext_Base::caps\\28\\29\\20const\n265:SkPaint::~SkPaint\\28\\29\n266:strncmp\n267:SkTDStorage::~SkTDStorage\\28\\29\n268:sk_malloc_throw\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n269:SkSL::RP::Generator::pushExpression\\28SkSL::Expression\\20const&\\2c\\20bool\\29\n270:SkTDStorage::SkTDStorage\\28int\\29\n271:SkString::SkString\\28SkString\\20const&\\29\n272:SkStrokeRec::getStyle\\28\\29\\20const\n273:icu_73::UMemory::operator\\20delete\\28void*\\29\n274:void\\20emscripten::internal::raw_destructor<SkContourMeasure>\\28SkContourMeasure*\\29\n275:hb_ot_map_builder_t::add_feature\\28unsigned\\20int\\2c\\20hb_ot_map_feature_flags_t\\2c\\20unsigned\\20int\\29\n276:SkMatrix::mapRect\\28SkRect*\\2c\\20SkRect\\20const&\\2c\\20SkApplyPerspectiveClip\\29\\20const\n277:SkFontMgr*\\20emscripten::base<SkFontMgr>::convertPointer<skia::textlayout::TypefaceFontProvider\\2c\\20SkFontMgr>\\28skia::textlayout::TypefaceFontProvider*\\29\n278:SkBitmap::~SkBitmap\\28\\29\n279:hb_buffer_t::make_room_for\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n280:SkArenaAlloc::installFooter\\28char*\\20\\28*\\29\\28char*\\29\\2c\\20unsigned\\20int\\29\n281:SkArenaAlloc::allocObjectWithFooter\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n282:fminf\n283:icu_73::CharString::append\\28char\\20const*\\2c\\20int\\2c\\20UErrorCode&\\29\n284:skia_private::TArray<SkPoint\\2c\\20true>::push_back\\28SkPoint\\20const&\\29\n285:SkString::operator=\\28SkString&&\\29\n286:SkSemaphore::osSignal\\28int\\29\n287:SkPath::SkPath\\28\\29\n288:skia_png_error\n289:hb_buffer_t::message\\28hb_font_t*\\2c\\20char\\20const*\\2c\\20...\\29\n290:SkSL::Parser::nextRawToken\\28\\29\n291:SkArenaAlloc::~SkArenaAlloc\\28\\29\n292:SkMatrix::computePerspectiveTypeMask\\28\\29\\20const\n293:SkColorInfo::SkColorInfo\\28SkColorInfo\\20const&\\29\n294:SkSemaphore::osWait\\28\\29\n295:std::__2::__shared_weak_count::__release_weak\\28\\29\n296:SkIntersections::insert\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\n297:dlmalloc\n298:std::__throw_bad_array_new_length\\5babi:v160004\\5d\\28\\29\n299:FT_DivFix\n300:SkString::appendf\\28char\\20const*\\2c\\20...\\29\n301:uprv_isASCIILetter_73\n302:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_string\\28\\29\n303:skia_png_free\n304:SkPath::lineTo\\28float\\2c\\20float\\29\n305:skia_png_crc_finish\n306:SkChecksum::Hash32\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n307:skia_png_chunk_benign_error\n308:icu_73::StringPiece::StringPiece\\28char\\20const*\\29\n309:utext_getNativeIndex_73\n310:utext_setNativeIndex_73\n311:SkMatrix::mapPoints\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n312:dlrealloc\n313:ures_closeBundle\\28UResourceBundle*\\2c\\20signed\\20char\\29\n314:SkMatrix::setTranslate\\28float\\2c\\20float\\29\n315:skia_png_warning\n316:SkBlitter::~SkBlitter\\28\\29\n317:OT::VarData::get_delta\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20OT::VarRegionList\\20const&\\2c\\20float*\\29\\20const\n318:ft_mem_qrealloc\n319:SkColorInfo::bytesPerPixel\\28\\29\\20const\n320:SkPaint::SkPaint\\28SkPaint\\20const&\\29\n321:GrVertexChunkBuilder::allocChunk\\28int\\29\n322:OT::DeltaSetIndexMap::map\\28unsigned\\20int\\29\\20const\n323:strchr\n324:ft_mem_realloc\n325:SkReadBuffer::readUInt\\28\\29\n326:strstr\n327:SkMatrix::reset\\28\\29\n328:SkImageInfo::MakeUnknown\\28int\\2c\\20int\\29\n329:GrSurfaceProxyView::asRenderTargetProxy\\28\\29\\20const\n330:skia_private::TArray<unsigned\\20char\\2c\\20true>::push_back\\28unsigned\\20char&&\\29\n331:skia_private::TArray<unsigned\\20long\\2c\\20true>::push_back\\28unsigned\\20long\\20const&\\29\n332:SkPath::SkPath\\28SkPath\\20const&\\29\n333:SkPaint::SkPaint\\28\\29\n334:ft_validator_error\n335:SkSL::RP::Builder::appendInstruction\\28SkSL::RP::BuilderOp\\2c\\20SkSL::RP::Builder::SlotList\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n336:SkBitmap::SkBitmap\\28\\29\n337:SkOpPtT::segment\\28\\29\\20const\n338:sk_malloc_flags\\28unsigned\\20long\\2c\\20unsigned\\20int\\29\n339:SkSL::Parser::expect\\28SkSL::Token::Kind\\2c\\20char\\20const*\\2c\\20SkSL::Token*\\29\n340:SkJSONWriter::appendName\\28char\\20const*\\29\n341:GrTextureGenerator::isTextureGenerator\\28\\29\\20const\n342:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_pointer\\5babi:v160004\\5d\\28\\29\n343:skia_private::TArray<sk_sp<SkIDChangeListener>\\2c\\20true>::push_back\\28sk_sp<SkIDChangeListener>&&\\29\n344:SkMatrix::invertNonIdentity\\28SkMatrix*\\29\\20const\n345:SkJSONWriter::beginValue\\28bool\\29\n346:dlcalloc\n347:SkImageGenerator::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n348:skia_png_get_uint_32\n349:skia_png_calculate_crc\n350:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::resize\\5babi:v160004\\5d\\28unsigned\\20long\\29\n351:skgpu::Swizzle::Swizzle\\28char\\20const*\\29\n352:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\29\n353:SkSL::GLSLCodeGenerator::writeExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n354:SkPoint::Length\\28float\\2c\\20float\\29\n355:GrImageInfo::GrImageInfo\\28GrImageInfo\\20const&\\29\n356:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n357:uhash_close_73\n358:std::__2::locale::~locale\\28\\29\n359:SkPath::getBounds\\28\\29\\20const\n360:SkLoadICULib\\28\\29\n361:ucptrie_internalSmallIndex_73\n362:skia_private::TArray<SkString\\2c\\20true>::push_back\\28SkString&&\\29\n363:SkRect::intersect\\28SkRect\\20const&\\29\n364:FT_Stream_Seek\n365:skia_private::TArray<SkSL::RP::Instruction\\2c\\20true>::push_back\\28SkSL::RP::Instruction&&\\29\n366:SkRect::join\\28SkRect\\20const&\\29\n367:SkPathRef::Editor::Editor\\28sk_sp<SkPathRef>*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n368:hb_blob_reference\n369:cf2_stack_popFixed\n370:SkRect::setBoundsCheck\\28SkPoint\\20const*\\2c\\20int\\29\n371:GrGLExtensions::has\\28char\\20const*\\29\\20const\n372:std::__2::__throw_bad_function_call\\5babi:v160004\\5d\\28\\29\n373:SkCachedData::internalUnref\\28bool\\29\\20const\n374:GrProcessor::operator\\20new\\28unsigned\\20long\\29\n375:FT_MulDiv\n376:strcpy\n377:std::__2::to_string\\28int\\29\n378:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>::operator=\\28skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>&&\\29\n379:SkRasterPipeline::uncheckedAppend\\28SkRasterPipelineOp\\2c\\20void*\\29\n380:std::__2::ios_base::getloc\\28\\29\\20const\n381:icu_73::UnicodeString::doAppend\\28char16_t\\20const*\\2c\\20int\\2c\\20int\\29\n382:SkRegion::~SkRegion\\28\\29\n383:skia_png_read_push_finish_row\n384:skia::textlayout::TextStyle::~TextStyle\\28\\29\n385:icu_73::CharString::append\\28char\\2c\\20UErrorCode&\\29\n386:hb_blob_make_immutable\n387:SkString::operator=\\28char\\20const*\\29\n388:SkSemaphore::~SkSemaphore\\28\\29\n389:SkReadBuffer::setInvalid\\28\\29\n390:hb_ot_map_builder_t::add_pause\\28unsigned\\20int\\2c\\20bool\\20\\28*\\29\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\\29\n391:cff1_path_procs_extents_t::curve\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n392:VP8GetValue\n393:SkColorInfo::operator=\\28SkColorInfo&&\\29\n394:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28\\29\n395:skgpu::ganesh::SurfaceContext::caps\\28\\29\\20const\n396:icu_73::UnicodeSet::~UnicodeSet\\28\\29\n397:icu_73::UnicodeSet::contains\\28int\\29\\20const\n398:SkSL::Type::matches\\28SkSL::Type\\20const&\\29\\20const\n399:SkSL::String::printf\\28char\\20const*\\2c\\20...\\29\n400:SkPoint::normalize\\28\\29\n401:SkColorInfo::operator=\\28SkColorInfo\\20const&\\29\n402:SkArenaAlloc::SkArenaAlloc\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n403:FT_Stream_ReadUShort\n404:jdiv_round_up\n405:SkSL::RP::Builder::binary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n406:SkImageGenerator::onQueryYUVAInfo\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\2c\\20SkYUVAPixmapInfo*\\29\\20const\n407:utext_next32_73\n408:umtx_unlock_73\n409:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n410:jzero_far\n411:hb_blob_get_data_writable\n412:SkPathRef::growForVerb\\28int\\2c\\20float\\29\n413:SkColorInfo::SkColorInfo\\28SkColorInfo&&\\29\n414:skia_png_write_data\n415:bool\\20std::__2::operator==\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20const&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n416:SkRuntimeEffect::uniformSize\\28\\29\\20const\n417:FT_Stream_ExitFrame\n418:subtag_matches\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n419:skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::push_back_raw\\28int\\29\n420:__shgetc\n421:SkBlitter::~SkBlitter\\28\\29.1\n422:FT_Stream_GetUShort\n423:uhash_get_73\n424:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator=\\5babi:v160004\\5d\\28wchar_t\\20const*\\29\n425:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\5babi:v160004\\5d\\28char\\20const*\\29\n426:bool\\20std::__2::operator==\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20const&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20const&\\29\n427:SkPoint::scale\\28float\\2c\\20SkPoint*\\29\\20const\n428:SkNullBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n429:GrFragmentProcessor::ProgramImpl::invokeChild\\28int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrFragmentProcessor::ProgramImpl::EmitArgs&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n430:sktext::gpu::BagOfBytes::~BagOfBytes\\28\\29\n431:skia_png_chunk_error\n432:hb_face_reference_table\n433:SkMatrix::setConcat\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n434:GrSurfaceProxyView::asTextureProxy\\28\\29\\20const\n435:umtx_lock_73\n436:icu_73::UVector32::expandCapacity\\28int\\2c\\20UErrorCode&\\29\n437:RoughlyEqualUlps\\28float\\2c\\20float\\29\n438:GrGLSLVaryingHandler::addVarying\\28char\\20const*\\2c\\20GrGLSLVarying*\\2c\\20GrGLSLVaryingHandler::Interpolation\\29\n439:SkTDStorage::reserve\\28int\\29\n440:SkStringPrintf\\28char\\20const*\\2c\\20...\\29\n441:SkSL::SymbolTable::addWithoutOwnershipOrDie\\28SkSL::Symbol*\\29\n442:SkPath::Iter::next\\28SkPoint*\\29\n443:OT::Layout::Common::Coverage::get_coverage\\28unsigned\\20int\\29\\20const\n444:GrQuad::MakeFromRect\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n445:round\n446:SkRecord::grow\\28\\29\n447:SkRGBA4f<\\28SkAlphaType\\293>::toBytes_RGBA\\28\\29\\20const\n448:GrProcessor::operator\\20new\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n449:std::__2::default_delete<SkSL::SymbolTable>::operator\\28\\29\\5babi:v160004\\5d\\28SkSL::SymbolTable*\\29\\20const\n450:skgpu::ganesh::SurfaceDrawContext::addDrawOp\\28GrClip\\20const*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20std::__2::function<void\\20\\28GrOp*\\2c\\20unsigned\\20int\\29>\\20const&\\29\n451:skgpu::ResourceKeyHash\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20long\\29\n452:icu_73::UVector::elementAt\\28int\\29\\20const\n453:VP8LoadFinalBytes\n454:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitStatement\\28SkSL::Statement\\20const&\\29\n455:SkSL::RP::Builder::discard_stack\\28int\\2c\\20int\\29\n456:SkPath::moveTo\\28float\\2c\\20float\\29\n457:SkPath::conicTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n458:SkCanvas::predrawNotify\\28bool\\29\n459:std::__2::__cloc\\28\\29\n460:sscanf\n461:SkSurfaceProps::SkSurfaceProps\\28\\29\n462:SkStrikeSpec::~SkStrikeSpec\\28\\29\n463:GrSkSLFP::GrSkSLFP\\28sk_sp<SkRuntimeEffect>\\2c\\20char\\20const*\\2c\\20GrSkSLFP::OptFlags\\29\n464:GrBackendFormat::GrBackendFormat\\28\\29\n465:__multf3\n466:VP8LReadBits\n467:SkTDStorage::append\\28int\\29\n468:SkPath::isFinite\\28\\29\\20const\n469:SkMatrix::setScale\\28float\\2c\\20float\\29\n470:SkIRect\\20skif::Mapping::map<SkIRect>\\28SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n471:GrOpsRenderPass::setScissorRect\\28SkIRect\\20const&\\29\n472:GrOpsRenderPass::bindPipeline\\28GrProgramInfo\\20const&\\2c\\20SkRect\\20const&\\29\n473:hb_draw_funcs_t::start_path\\28void*\\2c\\20hb_draw_state_t&\\29\n474:SkPath::operator=\\28SkPath\\20const&\\29\n475:SkColorSpaceXformSteps::SkColorSpaceXformSteps\\28SkColorSpace\\20const*\\2c\\20SkAlphaType\\2c\\20SkColorSpace\\20const*\\2c\\20SkAlphaType\\29\n476:GrSimpleMeshDrawOpHelper::~GrSimpleMeshDrawOpHelper\\28\\29\n477:GrProcessorSet::GrProcessorSet\\28GrPaint&&\\29\n478:GrCaps::getDefaultBackendFormat\\28GrColorType\\2c\\20skgpu::Renderable\\29\\20const\n479:GrBackendFormats::AsGLFormat\\28GrBackendFormat\\20const&\\29\n480:std::__2::locale::id::__get\\28\\29\n481:std::__2::locale::facet::facet\\5babi:v160004\\5d\\28unsigned\\20long\\29\n482:skia_private::TArray<SkPoint\\2c\\20true>::push_back_raw\\28int\\29\n483:icu_73::umtx_initImplPreInit\\28icu_73::UInitOnce&\\29\n484:icu_73::umtx_initImplPostInit\\28icu_73::UInitOnce&\\29\n485:hb_buffer_t::_infos_set_glyph_flags\\28hb_glyph_info_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n486:SkSL::PipelineStage::PipelineStageCodeGenerator::writeExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n487:SkSL::Inliner::inlineExpression\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::Expression\\20const&\\29\n488:SkSL::GLSLCodeGenerator::writeIdentifier\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n489:SkPath::reset\\28\\29\n490:SkPath::isEmpty\\28\\29\\20const\n491:SkPaint::setStyle\\28SkPaint::Style\\29\n492:GrGeometryProcessor::AttributeSet::initImplicit\\28GrGeometryProcessor::Attribute\\20const*\\2c\\20int\\29\n493:GrContext_Base::contextID\\28\\29\\20const\n494:FT_Stream_EnterFrame\n495:AlmostEqualUlps\\28float\\2c\\20float\\29\n496:udata_close_73\n497:std::__2::locale::__imp::install\\28std::__2::locale::facet*\\2c\\20long\\29\n498:skia_png_read_data\n499:SkSpinlock::contendedAcquire\\28\\29\n500:SkSL::evaluate_n_way_intrinsic\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\\20\\28.18\\29\n501:SkSL::FunctionDeclaration::description\\28\\29\\20const\n502:SkRuntimeEffect::MakeForShader\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n503:SkDPoint::approximatelyEqual\\28SkDPoint\\20const&\\29\\20const\n504:GrSurfaceProxy::backingStoreDimensions\\28\\29\\20const\n505:GrOpsRenderPass::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29\n506:uprv_asciitolower_73\n507:ucln_common_registerCleanup_73\n508:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::~basic_string\\28\\29\n509:skgpu::ganesh::SurfaceContext::drawingManager\\28\\29\n510:skgpu::UniqueKey::GenerateDomain\\28\\29\n511:hb_buffer_t::_set_glyph_flags\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n512:emscripten_longjmp\n513:SkDynamicMemoryWStream::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n514:GrMeshDrawOp::GrMeshDrawOp\\28unsigned\\20int\\29\n515:FT_RoundFix\n516:uprv_realloc_73\n517:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n518:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::unique_ptr\\5babi:v160004\\5d<true\\2c\\20void>\\28unsigned\\20char*\\2c\\20std::__2::__dependent_type<std::__2::__unique_ptr_deleter_sfinae<void\\20\\28*\\29\\28void*\\29>\\2c\\20true>::__good_rval_ref_type\\29\n519:icu_73::UnicodeSet::UnicodeSet\\28\\29\n520:hb_face_get_glyph_count\n521:cf2_stack_pushFixed\n522:__multi3\n523:SkSL::RP::Builder::push_duplicates\\28int\\29\n524:SkSL::ConstructorCompound::MakeFromConstants\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20const*\\29\n525:SkMatrix::postTranslate\\28float\\2c\\20float\\29\n526:SkBlockAllocator::reset\\28\\29\n527:SkBitmapDevice::drawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n528:GrTextureEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\29\n529:GrGLSLVaryingHandler::addPassThroughAttribute\\28GrShaderVar\\20const&\\2c\\20char\\20const*\\2c\\20GrGLSLVaryingHandler::Interpolation\\29\n530:GrFragmentProcessor::registerChild\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSL::SampleUsage\\29\n531:FT_Stream_ReleaseFrame\n532:void\\20emscripten::internal::raw_destructor<GrDirectContext>\\28GrDirectContext*\\29\n533:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n534:skia::textlayout::TextStyle::TextStyle\\28skia::textlayout::TextStyle\\20const&\\29\n535:hb_buffer_t::merge_clusters_impl\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n536:decltype\\28fp.sanitize\\28this\\29\\29\\20hb_sanitize_context_t::_dispatch<OT::Layout::Common::Coverage>\\28OT::Layout::Common::Coverage\\20const&\\2c\\20hb_priority<1u>\\29\n537:byn$mgfn-shared$decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkNullBlitter*\\20SkArenaAlloc::make<SkNullBlitter>\\28\\29::'lambda'\\28void*\\29>\\28SkNullBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n538:SkWStream::writePackedUInt\\28unsigned\\20long\\29\n539:SkSurface_Base::aboutToDraw\\28SkSurface::ContentChangeMode\\29\n540:SkSL::RP::Builder::push_constant_i\\28int\\2c\\20int\\29\n541:SkSL::BreakStatement::~BreakStatement\\28\\29\n542:SkNullBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n543:SkColorInfo::refColorSpace\\28\\29\\20const\n544:GrPipeline::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n545:GrGeometryProcessor::GrGeometryProcessor\\28GrProcessor::ClassID\\29\n546:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n547:icu_73::UnicodeSet::add\\28int\\2c\\20int\\29\n548:SkSL::fold_expression\\28SkSL::Position\\2c\\20double\\2c\\20SkSL::Type\\20const*\\29\n549:SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0::operator\\28\\29\\28SkSL::FunctionDefinition\\20const*\\2c\\20SkSL::FunctionDefinition\\20const*\\29\\20const\n550:SkSL::RP::Generator::binaryOp\\28SkSL::Type\\20const&\\2c\\20SkSL::RP::Generator::TypedOps\\20const&\\29\n551:SkJSONWriter::appendf\\28char\\20const*\\2c\\20...\\29\n552:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\\28\\29\n553:SkBitmap::setImmutable\\28\\29\n554:GrGeometryProcessor::Attribute&\\20skia_private::TArray<GrGeometryProcessor::Attribute\\2c\\20true>::emplace_back<char\\20const\\20\\28&\\29\\20\\5b10\\5d\\2c\\20GrVertexAttribType\\2c\\20SkSLType>\\28char\\20const\\20\\28&\\29\\20\\5b10\\5d\\2c\\20GrVertexAttribType&&\\2c\\20SkSLType&&\\29\n555:Cr_z_crc32\n556:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::push_back\\28char\\29\n557:skia_png_push_save_buffer\n558:cosf\n559:SkString::equals\\28SkString\\20const&\\29\\20const\n560:SkShaderBase::SkShaderBase\\28\\29\n561:SkSL::RP::SlotManager::getVariableSlots\\28SkSL::Variable\\20const&\\29\n562:SkSL::RP::Builder::unary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n563:SkSL::Pool::FreeMemory\\28void*\\29\n564:SkReadBuffer::readScalar\\28\\29\n565:SkPaint::setShader\\28sk_sp<SkShader>\\29\n566:GrProcessorSet::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n567:GrGLTexture::target\\28\\29\\20const\n568:sk_srgb_singleton\\28\\29\n569:fma\n570:SkPaint::SkPaint\\28SkPaint&&\\29\n571:SkDPoint::ApproximatelyEqual\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n572:SkBitmap::SkBitmap\\28SkBitmap\\20const&\\29\n573:void\\20std::__2::vector<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>>>::__push_back_slow_path<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>>\\28std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>&&\\29\n574:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__init_copy_ctor_external\\28char\\20const*\\2c\\20unsigned\\20long\\29\n575:skip_spaces\n576:sk_realloc_throw\\28void*\\2c\\20unsigned\\20long\\29\n577:emscripten::smart_ptr_trait<sk_sp<GrDirectContext>>::get\\28sk_sp<GrDirectContext>\\20const&\\29\n578:cff2_path_param_t::cubic_to\\28CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n579:cff1_path_param_t::cubic_to\\28CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n580:bool\\20OT::Layout::Common::Coverage::collect_coverage<hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>>\\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>*\\29\\20const\n581:SkString::operator=\\28SkString\\20const&\\29\n582:SkSL::Type::toCompound\\28SkSL::Context\\20const&\\2c\\20int\\2c\\20int\\29\\20const\n583:SkPath::transform\\28SkMatrix\\20const&\\2c\\20SkPath*\\2c\\20SkApplyPerspectiveClip\\29\\20const\n584:SkPath::quadTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n585:SkBlockAllocator::addBlock\\28int\\2c\\20int\\29\n586:SkAAClipBlitter::~SkAAClipBlitter\\28\\29\n587:OT::hb_ot_apply_context_t::match_properties_mark\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n588:GrThreadSafeCache::VertexData::~VertexData\\28\\29\n589:GrShape::asPath\\28SkPath*\\2c\\20bool\\29\\20const\n590:GrShaderVar::appendDecl\\28GrShaderCaps\\20const*\\2c\\20SkString*\\29\\20const\n591:GrPixmapBase<void\\2c\\20GrPixmap>::~GrPixmapBase\\28\\29\n592:GrGLSLVaryingHandler::emitAttributes\\28GrGeometryProcessor\\20const&\\29\n593:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::reset\\5babi:v160004\\5d\\28unsigned\\20char*\\29\n594:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator++\\5babi:v160004\\5d\\28\\29\n595:skia_private::TArray<SkPaint\\2c\\20true>::push_back\\28SkPaint\\20const&\\29\n596:skcms_Transform\n597:png_icc_profile_error\n598:icu_73::UnicodeString::getChar32At\\28int\\29\\20const\n599:SkSL::evaluate_pairwise_intrinsic\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n600:SkSL::Type::MakeAliasType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Type\\20const&\\29\n601:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitExpression\\28SkSL::Expression\\20const&\\29\n602:SkRasterClip::~SkRasterClip\\28\\29\n603:SkPixmap::reset\\28SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n604:SkPath::countPoints\\28\\29\\20const\n605:SkPaint::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n606:SkPaint::canComputeFastBounds\\28\\29\\20const\n607:SkOpPtT::contains\\28SkOpPtT\\20const*\\29\\20const\n608:SkOpAngle::segment\\28\\29\\20const\n609:SkMatrix::preConcat\\28SkMatrix\\20const&\\29\n610:SkMatrix::mapVectors\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n611:SkMasks::getRed\\28unsigned\\20int\\29\\20const\n612:SkMasks::getGreen\\28unsigned\\20int\\29\\20const\n613:SkMasks::getBlue\\28unsigned\\20int\\29\\20const\n614:SkColorInfo::shiftPerPixel\\28\\29\\20const\n615:SkBitmap::tryAllocPixels\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n616:GrProcessorSet::~GrProcessorSet\\28\\29\n617:GrMeshDrawOp::createProgramInfo\\28GrMeshDrawTarget*\\29\n618:FT_Stream_ReadFields\n619:AutoLayerForImageFilter::~AutoLayerForImageFilter\\28\\29\n620:ures_getByKey_73\n621:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator++\\5babi:v160004\\5d\\28\\29\n622:saveSetjmp\n623:operator==\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n624:icu_73::UnicodeSet::compact\\28\\29\n625:hb_face_t::load_num_glyphs\\28\\29\\20const\n626:fmodf\n627:emscripten::internal::MethodInvoker<int\\20\\28SkAnimatedImage::*\\29\\28\\29\\2c\\20int\\2c\\20SkAnimatedImage*>::invoke\\28int\\20\\28SkAnimatedImage::*\\20const&\\29\\28\\29\\2c\\20SkAnimatedImage*\\29\n628:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::construct_null\\28\\29\n629:byn$mgfn-shared$std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28\\29\\20const\n630:VP8GetSignedValue\n631:SkSafeMath::Mul\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n632:SkSL::Type::MakeVectorType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20int\\29\n633:SkRasterPipeline::SkRasterPipeline\\28SkArenaAlloc*\\29\n634:SkPoint::setLength\\28float\\29\n635:SkMatrix::postConcat\\28SkMatrix\\20const&\\29\n636:SkImageGenerator::onIsValid\\28GrRecordingContext*\\29\\20const\n637:OT::GDEF::accelerator_t::mark_set_covers\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n638:GrTextureProxy::mipmapped\\28\\29\\20const\n639:GrGpuResource::~GrGpuResource\\28\\29\n640:FT_Stream_GetULong\n641:FT_Get_Char_Index\n642:Cr_z__tr_flush_bits\n643:void\\20emscripten::internal::raw_destructor<sk_sp<GrDirectContext>>\\28sk_sp<GrDirectContext>*\\29\n644:void\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20int>::setWire<RuntimeEffectUniform>\\28int\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform&\\2c\\20int\\29\n645:uhash_setKeyDeleter_73\n646:uhash_put_73\n647:std::__2::ctype<char>::widen\\5babi:v160004\\5d\\28char\\29\\20const\n648:std::__2::__throw_overflow_error\\5babi:v160004\\5d\\28char\\20const*\\29\n649:skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::set\\28char\\20const*\\2c\\20unsigned\\20int\\29\n650:skia_png_chunk_report\n651:skgpu::UniqueKey::operator=\\28skgpu::UniqueKey\\20const&\\29\n652:sk_double_nearly_zero\\28double\\29\n653:int\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20int>::getWire<RuntimeEffectUniform>\\28int\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform\\20const&\\29\n654:icu_73::UnicodeString::tempSubString\\28int\\2c\\20int\\29\\20const\n655:hb_font_get_glyph\n656:ft_mem_qalloc\n657:fit_linear\\28skcms_Curve\\20const*\\2c\\20int\\2c\\20float\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n658:expf\n659:_output_with_dotted_circle\\28hb_buffer_t*\\29\n660:WebPSafeMalloc\n661:SkStream::readS32\\28int*\\29\n662:SkSL::GLSLCodeGenerator::getTypeName\\28SkSL::Type\\20const&\\29\n663:SkRGBA4f<\\28SkAlphaType\\293>::FromColor\\28unsigned\\20int\\29\n664:SkPathRef::~SkPathRef\\28\\29\n665:SkPath::Iter::Iter\\28SkPath\\20const&\\2c\\20bool\\29\n666:SkPaint::setPathEffect\\28sk_sp<SkPathEffect>\\29\n667:SkMatrix::setRectToRect\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix::ScaleToFit\\29\n668:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_3::operator\\28\\29\\28\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n669:SkImageFilter::getInput\\28int\\29\\20const\n670:SkGlyph::rowBytes\\28\\29\\20const\n671:SkDrawable::getFlattenableType\\28\\29\\20const\n672:SkDrawable::getBounds\\28\\29\n673:SkDCubic::ptAtT\\28double\\29\\20const\n674:SkColorSpace::MakeSRGB\\28\\29\n675:SkColorInfo::SkColorInfo\\28\\29\n676:GrOpFlushState::drawMesh\\28GrSimpleMesh\\20const&\\29\n677:GrImageInfo::GrImageInfo\\28SkImageInfo\\20const&\\29\n678:DefaultGeoProc::Impl::~Impl\\28\\29\n679:uhash_init_73\n680:out\n681:jpeg_fill_bit_buffer\n682:icu_73::UnicodeString::setToBogus\\28\\29\n683:icu_73::UnicodeString::UnicodeString\\28icu_73::UnicodeString\\20const&\\29\n684:icu_73::ReorderingBuffer::appendZeroCC\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20UErrorCode&\\29\n685:icu_73::CharStringByteSink::CharStringByteSink\\28icu_73::CharString*\\29\n686:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\n687:SkString::data\\28\\29\n688:SkSL::Type::coerceExpression\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Context\\20const&\\29\\20const\n689:SkSL::Type::MakeGenericType\\28char\\20const*\\2c\\20SkSpan<SkSL::Type\\20const*\\20const>\\2c\\20SkSL::Type\\20const*\\29\n690:SkSL::ConstantFolder::GetConstantValueForVariable\\28SkSL::Expression\\20const&\\29\n691:SkSL::Analysis::HasSideEffects\\28SkSL::Expression\\20const&\\29\n692:SkRegion::setRect\\28SkIRect\\20const&\\29\n693:SkRegion::SkRegion\\28\\29\n694:SkRecords::FillBounds::adjustForSaveLayerPaints\\28SkRect*\\2c\\20int\\29\\20const\n695:SkPathStroker::lineTo\\28SkPoint\\20const&\\2c\\20SkPath::Iter\\20const*\\29\n696:SkPaint::setMaskFilter\\28sk_sp<SkMaskFilter>\\29\n697:SkPaint::setColor\\28unsigned\\20int\\29\n698:SkOpContourBuilder::flush\\28\\29\n699:SkCanvas::restoreToCount\\28int\\29\n700:SkCanvas::internalQuickReject\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\29\n701:SkAutoPixmapStorage::~SkAutoPixmapStorage\\28\\29\n702:GrMatrixEffect::Make\\28SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n703:u_strlen_73\n704:std::__2::char_traits<char>::assign\\28char&\\2c\\20char\\20const&\\29\n705:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\5babi:v160004\\5d\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\29\n706:std::__2::__check_grouping\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int&\\29\n707:skia_png_malloc\n708:skia::textlayout::Cluster::run\\28\\29\\20const\n709:skgpu::ganesh::SurfaceDrawContext::drawFilledQuad\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\29\n710:sk_sp<SkData>::~sk_sp\\28\\29\n711:png_write_complete_chunk\n712:pad\n713:icu_73::Locale::~Locale\\28\\29\n714:hb_lockable_set_t<hb_user_data_array_t::hb_user_data_item_t\\2c\\20hb_mutex_t>::fini\\28hb_mutex_t&\\29\n715:ft_mem_alloc\n716:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\n717:__ashlti3\n718:SkWBuffer::writeNoSizeCheck\\28void\\20const*\\2c\\20unsigned\\20long\\29\n719:SkTCoincident::setPerp\\28SkTCurve\\20const&\\2c\\20double\\2c\\20SkDPoint\\20const&\\2c\\20SkTCurve\\20const&\\29\n720:SkStrokeRec::SkStrokeRec\\28SkStrokeRec::InitStyle\\29\n721:SkString::printf\\28char\\20const*\\2c\\20...\\29\n722:SkSL::Type::MakeMatrixType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20int\\2c\\20signed\\20char\\29\n723:SkSL::Operator::tightOperatorName\\28\\29\\20const\n724:SkReadBuffer::readColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\n725:SkPixmap::reset\\28\\29\n726:SkPictureData::requiredPaint\\28SkReadBuffer*\\29\\20const\n727:SkPath::cubicTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n728:SkPath::close\\28\\29\n729:SkPaintToGrPaint\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n730:SkPaint::setColor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkColorSpace*\\29\n731:SkMatrix::preTranslate\\28float\\2c\\20float\\29\n732:SkMatrix::mapXY\\28float\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n733:SkFindUnitQuadRoots\\28float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n734:SkDeque::push_back\\28\\29\n735:SkData::MakeWithCopy\\28void\\20const*\\2c\\20unsigned\\20long\\29\n736:SkCanvas::~SkCanvas\\28\\29.1\n737:SkCanvas::concat\\28SkMatrix\\20const&\\29\n738:SkBinaryWriteBuffer::writeBool\\28bool\\29\n739:OT::hb_paint_context_t::return_t\\20OT::Paint::dispatch<OT::hb_paint_context_t>\\28OT::hb_paint_context_t*\\29\\20const\n740:GrProgramInfo::GrProgramInfo\\28GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrGeometryProcessor\\20const*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n741:GrPixmapBase<void\\2c\\20GrPixmap>::GrPixmapBase\\28GrImageInfo\\2c\\20void*\\2c\\20unsigned\\20long\\29\n742:GrColorInfo::GrColorInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n743:FT_Outline_Translate\n744:FT_Load_Glyph\n745:FT_GlyphLoader_CheckPoints\n746:DefaultGeoProc::~DefaultGeoProc\\28\\29\n747:u_memcpy_73\n748:std::__2::ctype<char>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::ctype<char>>\\28std::__2::locale\\20const&\\29\n749:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_short_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n750:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_long_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n751:skcms_TransferFunction_eval\n752:sinf\n753:icu_73::UnicodeString::UnicodeString\\28char16_t\\20const*\\29\n754:icu_73::BMPSet::~BMPSet\\28\\29.1\n755:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28GrDirectContext&\\2c\\20unsigned\\20long\\29\\2c\\20void\\2c\\20GrDirectContext&\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28**\\29\\28GrDirectContext&\\2c\\20unsigned\\20long\\29\\2c\\20GrDirectContext*\\2c\\20unsigned\\20long\\29\n756:cbrtf\n757:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28\\29\\20const\n758:SkTextBlob::~SkTextBlob\\28\\29\n759:SkRasterPipeline::extend\\28SkRasterPipeline\\20const&\\29\n760:SkPaint::setBlendMode\\28SkBlendMode\\29\n761:SkMatrix::mapRadius\\28float\\29\\20const\n762:SkIRect::join\\28SkIRect\\20const&\\29\n763:SkData::MakeUninitialized\\28unsigned\\20long\\29\n764:SkDQuad::RootsValidT\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n765:SkDLine::nearPoint\\28SkDPoint\\20const&\\2c\\20bool*\\29\\20const\n766:SkConic::chopIntoQuadsPOW2\\28SkPoint*\\2c\\20int\\29\\20const\n767:SkColorSpaceXformSteps::apply\\28float*\\29\\20const\n768:SkCodec::applyColorXform\\28void*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n769:SkCachedData::internalRef\\28bool\\29\\20const\n770:SkBitmap::installPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29\n771:GrSurface::RefCntedReleaseProc::~RefCntedReleaseProc\\28\\29\n772:GrStyle::initPathEffect\\28sk_sp<SkPathEffect>\\29\n773:GrShape::bounds\\28\\29\\20const\n774:GrProcessor::operator\\20delete\\28void*\\29\n775:GrGpuResource::hasRef\\28\\29\\20const\n776:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::~Impl\\28\\29\n777:GrBufferAllocPool::~GrBufferAllocPool\\28\\29.1\n778:AutoLayerForImageFilter::AutoLayerForImageFilter\\28SkCanvas*\\2c\\20SkPaint\\20const&\\2c\\20SkRect\\20const*\\2c\\20bool\\29\n779:u_terminateUChars_73\n780:std::__2::numpunct<char>::thousands_sep\\5babi:v160004\\5d\\28\\29\\20const\n781:std::__2::numpunct<char>::grouping\\5babi:v160004\\5d\\28\\29\\20const\n782:std::__2::ctype<wchar_t>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::ctype<wchar_t>>\\28std::__2::locale\\20const&\\29\n783:skia_png_malloc_warn\n784:rewind\\28GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n785:icu_73::UnicodeString::setTo\\28signed\\20char\\2c\\20icu_73::ConstChar16Ptr\\2c\\20int\\29\n786:icu_73::UnicodeSet::add\\28int\\29\n787:icu_73::UVector::removeAllElements\\28\\29\n788:cf2_stack_popInt\n789:SkUTF::NextUTF8\\28char\\20const**\\2c\\20char\\20const*\\29\n790:SkSL::Analysis::IsCompileTimeConstant\\28SkSL::Expression\\20const&\\29\n791:SkPaint::setColorFilter\\28sk_sp<SkColorFilter>\\29\n792:SkMatrixPriv::MapRect\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\29\n793:SkDevice::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n794:SkData::MakeEmpty\\28\\29\n795:SkConic::computeQuadPOW2\\28float\\29\\20const\n796:SkColorInfo::makeColorType\\28SkColorType\\29\\20const\n797:SkCodec::~SkCodec\\28\\29\n798:SkAAClip::quickContains\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n799:SkAAClip::isRect\\28\\29\\20const\n800:GrSurface::ComputeSize\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20bool\\29\n801:GrSimpleMeshDrawOpHelper::GrSimpleMeshDrawOpHelper\\28GrProcessorSet*\\2c\\20GrAAType\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n802:GrGeometryProcessor::ProgramImpl::SetTransform\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix*\\29\n803:GrDrawingManager::flushIfNecessary\\28\\29\n804:GrBlendFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkBlendMode\\2c\\20bool\\29\n805:FT_Stream_ExtractFrame\n806:AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n807:utext_current32_73\n808:std::__2::ctype<wchar_t>::widen\\5babi:v160004\\5d\\28char\\29\\20const\n809:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__is_long\\5babi:v160004\\5d\\28\\29\\20const\n810:std::__2::__throw_bad_optional_access\\5babi:v160004\\5d\\28\\29\n811:snprintf\n812:skia_png_malloc_base\n813:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\\28\\29\n814:skgpu::ganesh::AsView\\28GrRecordingContext*\\2c\\20SkImage\\20const*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n815:icu_73::UnicodeString::releaseBuffer\\28int\\29\n816:icu_73::UnicodeSet::_appendToPat\\28icu_73::UnicodeString&\\2c\\20int\\2c\\20signed\\20char\\29\n817:icu_73::UVector::~UVector\\28\\29\n818:hb_ot_face_t::init0\\28hb_face_t*\\29\n819:hb_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\2025u>\\2c\\20hb_face_t\\2c\\2025u\\2c\\20OT::GSUB_accelerator_t>::get\\28\\29\\20const\n820:__addtf3\n821:SkTDStorage::reset\\28\\29\n822:SkScan::AntiHairLineRgn\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n823:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n824:SkSL::RP::Builder::label\\28int\\29\n825:SkSL::BinaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n826:SkRuntimeEffect::MakeForColorFilter\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n827:SkReadBuffer::skip\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n828:SkPath::countVerbs\\28\\29\\20const\n829:SkMatrix::set9\\28float\\20const*\\29\n830:SkMatrix::getMaxScale\\28\\29\\20const\n831:SkImageInfo::computeByteSize\\28unsigned\\20long\\29\\20const\n832:SkImageInfo::Make\\28int\\2c\\20int\\2c\\20SkColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n833:SkImageInfo::MakeA8\\28int\\2c\\20int\\29\n834:SkImageGenerator::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageGenerator::Options\\20const&\\29\n835:SkImageFilter_Base::SkImageFilter_Base\\28sk_sp<SkImageFilter>\\20const*\\2c\\20int\\2c\\20std::__2::optional<bool>\\29\n836:SkDrawBase::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\2c\\20bool\\2c\\20SkBlitter*\\29\\20const\n837:SkData::MakeWithProc\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20void\\20\\28*\\29\\28void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n838:SkColorTypeIsAlwaysOpaque\\28SkColorType\\29\n839:SkBlockAllocator::SkBlockAllocator\\28SkBlockAllocator::GrowthPolicy\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n840:SkBlender::Mode\\28SkBlendMode\\29\n841:ReadHuffmanCode\n842:GrSurfaceProxy::~GrSurfaceProxy\\28\\29\n843:GrRenderTask::makeClosed\\28GrRecordingContext*\\29\n844:GrGpuBuffer::unmap\\28\\29\n845:GrContext_Base::options\\28\\29\\20const\n846:GrCaps::getReadSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n847:GrBufferAllocPool::reset\\28\\29\n848:FT_Stream_ReadByte\n849:std::__2::char_traits<wchar_t>::assign\\28wchar_t&\\2c\\20wchar_t\\20const&\\29\n850:std::__2::char_traits<char>::copy\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n851:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::begin\\5babi:v160004\\5d\\28\\29\n852:std::__2::__next_prime\\28unsigned\\20long\\29\n853:std::__2::__libcpp_snprintf_l\\28char*\\2c\\20unsigned\\20long\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n854:skif::LayerSpace<SkMatrix>::mapRect\\28skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n855:locale_get_default_73\n856:is_equal\\28std::type_info\\20const*\\2c\\20std::type_info\\20const*\\2c\\20bool\\29\n857:icu_73::BytesTrie::~BytesTrie\\28\\29\n858:hb_buffer_t::sync\\28\\29\n859:__floatsitf\n860:WebPSafeCalloc\n861:StreamRemainingLengthIsBelow\\28SkStream*\\2c\\20unsigned\\20long\\29\n862:SkSL::RP::Builder::swizzle\\28int\\2c\\20SkSpan<signed\\20char\\20const>\\29\n863:SkSL::Parser::expression\\28\\29\n864:SkRGBA4f<\\28SkAlphaType\\293>::toSkColor\\28\\29\\20const\n865:SkPath::isConvex\\28\\29\\20const\n866:SkPaint::asBlendMode\\28\\29\\20const\n867:SkImageFilter_Base::getFlattenableType\\28\\29\\20const\n868:SkImageFilter_Base::getChildOutputLayerBounds\\28int\\2c\\20skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n869:SkImageFilter_Base::getChildInputLayerBounds\\28int\\2c\\20skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n870:SkIDChangeListener::List::~List\\28\\29\n871:SkFontMgr::countFamilies\\28\\29\\20const\n872:SkDQuad::ptAtT\\28double\\29\\20const\n873:SkDLine::exactPoint\\28SkDPoint\\20const&\\29\\20const\n874:SkDConic::ptAtT\\28double\\29\\20const\n875:SkColorInfo::makeAlphaType\\28SkAlphaType\\29\\20const\n876:SkCanvas::save\\28\\29\n877:SkCanvas::drawImage\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n878:SkBitmap::setInfo\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n879:SkAAClip::Builder::addRun\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n880:GrSkSLFP::addChild\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20bool\\29\n881:GrGLSLShaderBuilder::appendTextureLookup\\28SkString*\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\29\\20const\n882:GrFragmentProcessor::cloneAndRegisterAllChildProcessors\\28GrFragmentProcessor\\20const&\\29\n883:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::~SwizzleFragmentProcessor\\28\\29\n884:GrDrawOpAtlas::~GrDrawOpAtlas\\28\\29\n885:GrBackendFormat::GrBackendFormat\\28GrBackendFormat\\20const&\\29\n886:AutoFTAccess::AutoFTAccess\\28SkTypeface_FreeType\\20const*\\29\n887:AlmostPequalUlps\\28float\\2c\\20float\\29\n888:void\\20std::__2::vector<std::__2::pair<unsigned\\20int\\2c\\20sk_sp<SkData>>\\2c\\20std::__2::allocator<std::__2::pair<unsigned\\20int\\2c\\20sk_sp<SkData>>>>::__emplace_back_slow_path<unsigned\\20int\\20const&\\2c\\20sk_sp<SkData>>\\28unsigned\\20int\\20const&\\2c\\20sk_sp<SkData>&&\\29\n889:strncpy\n890:std::__2::ctype<char>::is\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20char\\29\\20const\n891:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<std::nullptr_t>\\28char\\20const*\\29\n892:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_long_cap\\5babi:v160004\\5d\\28unsigned\\20long\\29\n893:skia_private::TArray<unsigned\\20char\\2c\\20true>::operator=\\28skia_private::TArray<unsigned\\20char\\2c\\20true>&&\\29\n894:skia_png_reset_crc\n895:memchr\n896:icu_73::UnicodeString::operator=\\28icu_73::UnicodeString\\20const&\\29\n897:icu_73::UnicodeString::doReplace\\28int\\2c\\20int\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20int\\29\n898:icu_73::MlBreakEngine::initKeyValue\\28UResourceBundle*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20icu_73::Hashtable&\\2c\\20UErrorCode&\\29\n899:icu_73::CharString::appendInvariantChars\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\n900:icu_73::ByteSinkUtil::appendUnchanged\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20icu_73::ByteSink&\\2c\\20unsigned\\20int\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\n901:hb_buffer_t::sync_so_far\\28\\29\n902:hb_buffer_t::move_to\\28unsigned\\20int\\29\n903:VP8ExitCritical\n904:SkTDStorage::resize\\28int\\29\n905:SkSwizzler::swizzle\\28void*\\2c\\20unsigned\\20char\\20const*\\29\n906:SkStream::readPackedUInt\\28unsigned\\20long*\\29\n907:SkSL::Type::coercionCost\\28SkSL::Type\\20const&\\29\\20const\n908:SkSL::Type::clone\\28SkSL::Context\\20const&\\2c\\20SkSL::SymbolTable*\\29\\20const\n909:SkSL::RP::Generator::writeStatement\\28SkSL::Statement\\20const&\\29\n910:SkSL::Parser::operatorRight\\28SkSL::Parser::AutoDepth&\\2c\\20SkSL::OperatorKind\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20\\28SkSL::Parser::*\\29\\28\\29\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&\\29\n911:SkResourceCache::Key::init\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20unsigned\\20long\\29\n912:SkReadBuffer::skip\\28unsigned\\20long\\29\n913:SkReadBuffer::readFlattenable\\28SkFlattenable::Type\\29\n914:SkRBuffer::read\\28void*\\2c\\20unsigned\\20long\\29\n915:SkIDChangeListener::List::List\\28\\29\n916:SkGlyph::path\\28\\29\\20const\n917:GrStyledShape::GrStyledShape\\28GrStyledShape\\20const&\\29\n918:GrRenderTargetProxy::arenas\\28\\29\n919:GrOpFlushState::caps\\28\\29\\20const\n920:GrGpuResource::hasNoCommandBufferUsages\\28\\29\\20const\n921:GrGeometryProcessor::ProgramImpl::WriteLocalCoord\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20GrShaderVar\\2c\\20SkMatrix\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n922:GrGLTextureParameters::SamplerOverriddenState::SamplerOverriddenState\\28\\29\n923:GrGLGpu::deleteFramebuffer\\28unsigned\\20int\\29\n924:GrFragmentProcessors::Make\\28SkShader\\20const*\\2c\\20GrFPArgs\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\n925:FT_Stream_ReadULong\n926:FT_Get_Module\n927:Cr_z__tr_flush_block\n928:AlmostBequalUlps\\28float\\2c\\20float\\29\n929:utext_previous32_73\n930:ures_getByKeyWithFallback_73\n931:std::__2::numpunct<char>::truename\\5babi:v160004\\5d\\28\\29\\20const\n932:std::__2::moneypunct<char\\2c\\20false>::do_grouping\\28\\29\\20const\n933:std::__2::locale::use_facet\\28std::__2::locale::id&\\29\\20const\n934:std::__2::ctype<wchar_t>::is\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20wchar_t\\29\\20const\n935:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::empty\\5babi:v160004\\5d\\28\\29\\20const\n936:sktext::gpu::BagOfBytes::needMoreBytes\\28int\\2c\\20int\\29\n937:skia_png_save_int_32\n938:skia_png_safecat\n939:skia_png_gamma_significant\n940:skgpu::ganesh::SurfaceContext::readPixels\\28GrDirectContext*\\2c\\20GrPixmap\\2c\\20SkIPoint\\29\n941:icu_73::UnicodeString::getBuffer\\28int\\29\n942:icu_73::UnicodeString::doAppend\\28icu_73::UnicodeString\\20const&\\2c\\20int\\2c\\20int\\29\n943:icu_73::UVector32::~UVector32\\28\\29\n944:icu_73::RuleBasedBreakIterator::handleNext\\28\\29\n945:hb_lazy_loader_t<OT::GPOS_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GPOS_accelerator_t\\2c\\2026u>\\2c\\20hb_face_t\\2c\\2026u\\2c\\20OT::GPOS_accelerator_t>::get\\28\\29\\20const\n946:hb_font_get_nominal_glyph\n947:hb_buffer_t::clear_output\\28\\29\n948:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20SkPaint*\\29\n949:cff_parse_num\n950:T_CString_toLowerCase_73\n951:SkTSect::SkTSect\\28SkTCurve\\20const&\\29\n952:SkStrokeRec::SkStrokeRec\\28SkPaint\\20const&\\2c\\20float\\29\n953:SkString::set\\28char\\20const*\\2c\\20unsigned\\20long\\29\n954:SkSize\\20skif::Mapping::map<SkSize>\\28SkSize\\20const&\\2c\\20SkMatrix\\20const&\\29\n955:SkSL::SymbolTable::addWithoutOwnership\\28SkSL::Context\\20const&\\2c\\20SkSL::Symbol*\\29\n956:SkSL::Swizzle::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29\n957:SkSL::String::appendf\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20char\\20const*\\2c\\20...\\29\n958:SkSL::Parser::layoutInt\\28\\29\n959:SkSL::Parser::expectIdentifier\\28SkSL::Token*\\29\n960:SkRegion::Cliperator::next\\28\\29\n961:SkRegion::Cliperator::Cliperator\\28SkRegion\\20const&\\2c\\20SkIRect\\20const&\\29\n962:SkRRect::initializeRect\\28SkRect\\20const&\\29\n963:SkPictureRecorder::~SkPictureRecorder\\28\\29\n964:SkPathRef::CreateEmpty\\28\\29\n965:SkPath::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n966:SkPaint::setImageFilter\\28sk_sp<SkImageFilter>\\29\n967:SkMasks::getAlpha\\28unsigned\\20int\\29\\20const\n968:SkM44::setConcat\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\29\n969:SkImageFilters::Crop\\28SkRect\\20const&\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\n970:SkImageFilter_Base::getChildOutput\\28int\\2c\\20skif::Context\\20const&\\29\\20const\n971:SkData::MakeFromMalloc\\28void\\20const*\\2c\\20unsigned\\20long\\29\n972:SkDRect::setBounds\\28SkTCurve\\20const&\\29\n973:SkColorFilter::isAlphaUnchanged\\28\\29\\20const\n974:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\29\n975:SkCanvas::translate\\28float\\2c\\20float\\29\n976:SkBitmapCache::Rec::getKey\\28\\29\\20const\n977:PS_Conv_ToFixed\n978:OT::hb_ot_apply_context_t::hb_ot_apply_context_t\\28unsigned\\20int\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20hb_blob_t*\\29\n979:GrTriangulator::Line::intersect\\28GrTriangulator::Line\\20const&\\2c\\20SkPoint*\\29\\20const\n980:GrSimpleMeshDrawOpHelper::isCompatible\\28GrSimpleMeshDrawOpHelper\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\29\\20const\n981:GrQuad::MakeFromSkQuad\\28SkPoint\\20const*\\2c\\20SkMatrix\\20const&\\29\n982:GrOpsRenderPass::bindBuffers\\28sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20GrPrimitiveRestart\\29\n983:GrImageInfo::GrImageInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkISize\\20const&\\29\n984:GrColorInfo::GrColorInfo\\28SkColorInfo\\20const&\\29\n985:AlmostDequalUlps\\28double\\2c\\20double\\29\n986:utrace_exit_73\n987:utrace_entry_73\n988:ures_hasNext_73\n989:ures_getNextResource_73\n990:uprv_toupper_73\n991:tt_face_get_name\n992:strrchr\n993:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::size\\5babi:v160004\\5d\\28\\29\\20const\n994:std::__2::to_string\\28long\\20long\\29\n995:std::__2::__libcpp_locale_guard::~__libcpp_locale_guard\\5babi:v160004\\5d\\28\\29\n996:std::__2::__libcpp_locale_guard::__libcpp_locale_guard\\5babi:v160004\\5d\\28__locale_struct*&\\29\n997:skia_png_benign_error\n998:skia_png_app_error\n999:skgpu::ganesh::SurfaceFillContext::getOpsTask\\28\\29\n1000:isdigit\n1001:icu_73::Locale::Locale\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n1002:hb_sanitize_context_t::return_t\\20OT::Paint::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n1003:hb_ot_layout_lookup_would_substitute\n1004:hb_buffer_t::unsafe_to_break\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1005:ft_module_get_service\n1006:emscripten::internal::FunctionInvoker<unsigned\\20long\\20\\28*\\29\\28GrDirectContext&\\29\\2c\\20unsigned\\20long\\2c\\20GrDirectContext&>::invoke\\28unsigned\\20long\\20\\28**\\29\\28GrDirectContext&\\29\\2c\\20GrDirectContext*\\29\n1007:cf2_hintmap_map\n1008:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>*\\29\\20const\n1009:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28\\29\\20const\n1010:blit_trapezoid_row\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n1011:__sindf\n1012:__shlim\n1013:__cosdf\n1014:\\28anonymous\\20namespace\\29::init_resb_result\\28UResourceDataEntry*\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\2c\\20int\\2c\\20UResourceDataEntry*\\2c\\20char\\20const*\\2c\\20int\\2c\\20UResourceBundle*\\2c\\20UErrorCode*\\29\n1015:SkTiffImageFileDirectory::getEntryValuesGeneric\\28unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20int\\2c\\20void*\\29\\20const\n1016:SkSurface::getCanvas\\28\\29\n1017:SkSL::cast_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n1018:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitType\\28SkSL::Type\\20const&\\29\n1019:SkSL::Variable::initialValue\\28\\29\\20const\n1020:SkSL::SymbolTable::addArrayDimension\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20int\\29\n1021:SkSL::StringStream::str\\28\\29\\20const\n1022:SkSL::RP::Program::appendCopy\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20std::byte*\\2c\\20SkSL::RP::ProgramOp\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\\20const\n1023:SkSL::RP::Generator::makeLValue\\28SkSL::Expression\\20const&\\2c\\20bool\\29\n1024:SkSL::RP::DynamicIndexLValue::dynamicSlotRange\\28\\29\n1025:SkSL::GLSLCodeGenerator::writeStatement\\28SkSL::Statement\\20const&\\29\n1026:SkSL::Expression::description\\28\\29\\20const\n1027:SkSL::Analysis::UpdateVariableRefKind\\28SkSL::Expression*\\2c\\20SkSL::VariableRefKind\\2c\\20SkSL::ErrorReporter*\\29\n1028:SkRegion::setEmpty\\28\\29\n1029:SkRasterPipeline::appendLoadDst\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n1030:SkRRect::setRectRadii\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\29\n1031:SkRRect::setOval\\28SkRect\\20const&\\29\n1032:SkPointPriv::DistanceToLineSegmentBetweenSqd\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1033:SkPath::arcTo\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n1034:SkPath::addPath\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath::AddPathMode\\29\n1035:SkPaint::operator=\\28SkPaint&&\\29\n1036:SkOpSpanBase::contains\\28SkOpSegment\\20const*\\29\\20const\n1037:SkMipmap::ComputeLevelCount\\28int\\2c\\20int\\29\n1038:SkMatrix::mapHomogeneousPoints\\28SkPoint3*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n1039:SkImageFilter::countInputs\\28\\29\\20const\n1040:SkIDChangeListener::List::changed\\28\\29\n1041:SkDynamicMemoryWStream::detachAsData\\28\\29\n1042:SkDevice::makeSpecial\\28SkBitmap\\20const&\\29\n1043:SkColorFilter::filterColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkColorSpace*\\2c\\20SkColorSpace*\\29\\20const\n1044:SkCanvas::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n1045:SkBlockMemoryStream::getLength\\28\\29\\20const\n1046:SkAutoPixmapStorage::SkAutoPixmapStorage\\28\\29\n1047:SkAAClipBlitterWrapper::init\\28SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1048:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\\28\\29\n1049:RunBasedAdditiveBlitter::flush\\28\\29\n1050:GrSurface::onRelease\\28\\29\n1051:GrStyledShape::unstyledKeySize\\28\\29\\20const\n1052:GrShape::convex\\28bool\\29\\20const\n1053:GrRecordingContext::threadSafeCache\\28\\29\n1054:GrProxyProvider::caps\\28\\29\\20const\n1055:GrOp::GrOp\\28unsigned\\20int\\29\n1056:GrMakeUncachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29\n1057:GrGLSLShaderBuilder::getMangledFunctionName\\28char\\20const*\\29\n1058:GrGLGpu::bindBuffer\\28GrGpuBufferType\\2c\\20GrBuffer\\20const*\\29\n1059:GrGLAttribArrayState::set\\28GrGLGpu*\\2c\\20int\\2c\\20GrBuffer\\20const*\\2c\\20GrVertexAttribType\\2c\\20SkSLType\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n1060:GrAAConvexTessellator::Ring::computeNormals\\28GrAAConvexTessellator\\20const&\\29\n1061:GrAAConvexTessellator::Ring::computeBisectors\\28GrAAConvexTessellator\\20const&\\29\n1062:FT_Activate_Size\n1063:Cr_z_adler32\n1064:vsnprintf\n1065:void\\20extend_pts<\\28SkPaint::Cap\\292>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n1066:void\\20extend_pts<\\28SkPaint::Cap\\291>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n1067:ures_getStringByKey_73\n1068:ucptrie_getRange_73\n1069:u_terminateChars_73\n1070:u_strchr_73\n1071:top12\n1072:toSkImageInfo\\28SimpleImageInfo\\20const&\\29\n1073:std::__2::pair<std::__2::__unwrap_ref_decay<char\\20const*>::type\\2c\\20std::__2::__unwrap_ref_decay<char*>::type>\\20std::__2::make_pair\\5babi:v160004\\5d<char\\20const*\\2c\\20char*>\\28char\\20const*&&\\2c\\20char*&&\\29\n1074:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator=\\5babi:v160004\\5d\\28std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&&\\29\n1075:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n1076:std::__2::__tree<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::__map_value_compare<unsigned\\20long\\2c\\20std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::less<unsigned\\20long>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>>>::destroy\\28std::__2::__tree_node<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20void*>*\\29\n1077:std::__2::__num_put_base::__identify_padding\\28char*\\2c\\20char*\\2c\\20std::__2::ios_base\\20const&\\29\n1078:std::__2::__num_get_base::__get_base\\28std::__2::ios_base&\\29\n1079:std::__2::__libcpp_asprintf_l\\28char**\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n1080:skif::RoundOut\\28SkRect\\29\n1081:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::removeSlot\\28int\\29\n1082:skia_png_zstream_error\n1083:skia::textlayout::TextLine::iterateThroughVisualRuns\\28bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>\\20const&\\29\\20const\n1084:skia::textlayout::ParagraphImpl::cluster\\28unsigned\\20long\\29\n1085:skia::textlayout::Cluster::runOrNull\\28\\29\\20const\n1086:skgpu::ganesh::SurfaceFillContext::replaceOpsTask\\28\\29\n1087:skcms_TransferFunction_getType\n1088:skcms_GetTagBySignature\n1089:read_curve\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20int\\2c\\20skcms_Curve*\\2c\\20unsigned\\20int*\\29\n1090:pow\n1091:int\\20std::__2::__get_up_to_n_digits\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20int\\29\n1092:int\\20std::__2::__get_up_to_n_digits\\5babi:v160004\\5d<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20int\\29\n1093:icu_73::UnicodeString::unBogus\\28\\29\n1094:icu_73::UnicodeString::doIndexOf\\28char16_t\\2c\\20int\\2c\\20int\\29\\20const\n1095:icu_73::UnicodeSetStringSpan::~UnicodeSetStringSpan\\28\\29\n1096:icu_73::UVector::adoptElement\\28void*\\2c\\20UErrorCode&\\29\n1097:icu_73::SimpleFilteredSentenceBreakIterator::operator==\\28icu_73::BreakIterator\\20const&\\29\\20const\n1098:icu_73::Locale::init\\28char\\20const*\\2c\\20signed\\20char\\29\n1099:hb_serialize_context_t::pop_pack\\28bool\\29\n1100:hb_lazy_loader_t<OT::OS2\\2c\\20hb_table_lazy_loader_t<OT::OS2\\2c\\206u\\2c\\20true>\\2c\\20hb_face_t\\2c\\206u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1101:getenv\n1102:bool\\20std::__2::operator!=\\5babi:v160004\\5d<char*>\\28std::__2::__wrap_iter<char*>\\20const&\\2c\\20std::__2::__wrap_iter<char*>\\20const&\\29\n1103:afm_parser_read_vals\n1104:__extenddftf2\n1105:\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n1106:\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n1107:\\28anonymous\\20namespace\\29::colrv1_transform\\28FT_FaceRec_*\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkCanvas*\\2c\\20SkMatrix*\\29\n1108:WebPRescalerImport\n1109:SkTDStorage::removeShuffle\\28int\\29\n1110:SkString::SkString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1111:SkScan::HairLineRgn\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n1112:SkSL::VariableReference::VariableReference\\28SkSL::Position\\2c\\20SkSL::Variable\\20const*\\2c\\20SkSL::VariableRefKind\\29\n1113:SkSL::SymbolTable::lookup\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n1114:SkSL::ProgramUsage::get\\28SkSL::Variable\\20const&\\29\\20const\n1115:SkSL::Inliner::inlineStatement\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Analysis::ReturnComplexity\\2c\\20SkSL::Statement\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20bool\\29\n1116:SkSL::InlineCandidateAnalyzer::visitExpression\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\29\n1117:SkSL::GLSLCodeGenerator::getTypePrecision\\28SkSL::Type\\20const&\\29\n1118:SkRuntimeEffect::Uniform::sizeInBytes\\28\\29\\20const\n1119:SkReadBuffer::readByteArray\\28void*\\2c\\20unsigned\\20long\\29\n1120:SkRasterPipeline::run\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n1121:SkPictureData::optionalPaint\\28SkReadBuffer*\\29\\20const\n1122:SkPathWriter::isClosed\\28\\29\\20const\n1123:SkPath::isRect\\28SkRect*\\2c\\20bool*\\2c\\20SkPathDirection*\\29\\20const\n1124:SkPaint::setStrokeWidth\\28float\\29\n1125:SkOpSegment::nextChase\\28SkOpSpanBase**\\2c\\20int*\\2c\\20SkOpSpan**\\2c\\20SkOpSpanBase**\\29\\20const\n1126:SkOpSegment::addCurveTo\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\2c\\20SkPathWriter*\\29\\20const\n1127:SkMemoryStream::Make\\28sk_sp<SkData>\\29\n1128:SkMatrix::preScale\\28float\\2c\\20float\\29\n1129:SkMatrix::postScale\\28float\\2c\\20float\\29\n1130:SkMatrix::isSimilarity\\28float\\29\\20const\n1131:SkMask::computeImageSize\\28\\29\\20const\n1132:SkIntersections::removeOne\\28int\\29\n1133:SkImageInfo::Make\\28int\\2c\\20int\\2c\\20SkColorType\\2c\\20SkAlphaType\\29\n1134:SkDLine::ptAtT\\28double\\29\\20const\n1135:SkColorSpace::Equals\\28SkColorSpace\\20const*\\2c\\20SkColorSpace\\20const*\\29\n1136:SkColorFilter::makeComposed\\28sk_sp<SkColorFilter>\\29\\20const\n1137:SkBulkGlyphMetrics::~SkBulkGlyphMetrics\\28\\29\n1138:SkBitmap::peekPixels\\28SkPixmap*\\29\\20const\n1139:SkAAClip::setEmpty\\28\\29\n1140:PS_Conv_Strtol\n1141:OT::Layout::GSUB_impl::SubstLookup*\\20hb_serialize_context_t::push<OT::Layout::GSUB_impl::SubstLookup>\\28\\29\n1142:GrTriangulator::makeConnectingEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeType\\2c\\20GrTriangulator::Comparator\\20const&\\2c\\20int\\29\n1143:GrTextureProxy::~GrTextureProxy\\28\\29\n1144:GrSimpleMeshDrawOpHelper::createProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n1145:GrResourceAllocator::addInterval\\28GrSurfaceProxy*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20GrResourceAllocator::ActualUse\\2c\\20GrResourceAllocator::AllowRecycling\\29\n1146:GrRecordingContextPriv::makeSFCWithFallback\\28GrImageInfo\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1147:GrGpuBuffer::updateData\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n1148:GrGLTextureParameters::NonsamplerState::NonsamplerState\\28\\29\n1149:GrGLSLShaderBuilder::~GrGLSLShaderBuilder\\28\\29\n1150:GrGLSLProgramBuilder::nameVariable\\28char\\2c\\20char\\20const*\\2c\\20bool\\29\n1151:GrGLGpu::prepareToDraw\\28GrPrimitiveType\\29\n1152:GrGLFormatFromGLEnum\\28unsigned\\20int\\29\n1153:GrBackendTexture::getBackendFormat\\28\\29\\20const\n1154:GrBackendFormats::MakeGL\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1155:GrBackendFormatToCompressionType\\28GrBackendFormat\\20const&\\29\n1156:FilterLoop24_C\n1157:FT_Stream_Skip\n1158:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::operator\\5b\\5d\\28unsigned\\20int\\29\\20const\n1159:AAT::Lookup<OT::HBGlyphID16>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1160:write_trc_tag\\28skcms_Curve\\20const&\\29\n1161:utext_close_73\n1162:ures_open_73\n1163:ures_getKey_73\n1164:ulocimp_getLanguage_73\\28char\\20const*\\2c\\20char\\20const**\\2c\\20UErrorCode&\\29\n1165:u_UCharsToChars_73\n1166:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n1167:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n1168:std::__2::enable_if<true\\2c\\20void>::type\\20skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::AddTrianglesWhenChopping\\2c\\20skgpu::tess::DiscardFlatCurves>::writeTriangleStack<void>\\28skgpu::tess::MiddleOutPolygonTriangulator::PoppedTriangleStack&&\\29\n1169:std::__2::ctype<wchar_t>::widen\\5babi:v160004\\5d\\28char\\20const*\\2c\\20char\\20const*\\2c\\20wchar_t*\\29\\20const\n1170:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_long_cap\\5babi:v160004\\5d\\28\\29\\20const\n1171:skif::LayerSpace<SkSize>::ceil\\28\\29\\20const\n1172:skia_private::TArray<float\\2c\\20true>::push_back\\28float\\20const&\\29\n1173:skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>\\20const&\\29\n1174:skia_png_write_finish_row\n1175:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\\28\\29\n1176:scalbn\n1177:res_getStringNoTrace_73\n1178:non-virtual\\20thunk\\20to\\20GrOpFlushState::allocator\\28\\29\n1179:icu_73::UnicodeSet::applyPattern\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\n1180:icu_73::Normalizer2Impl::getFCD16FromNormData\\28int\\29\\20const\n1181:icu_73::Locale::Locale\\28\\29\n1182:hb_lazy_loader_t<OT::MVAR\\2c\\20hb_table_lazy_loader_t<OT::MVAR\\2c\\2022u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2022u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1183:hb_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\2024u>\\2c\\20hb_face_t\\2c\\2024u\\2c\\20OT::GDEF_accelerator_t>::get\\28\\29\\20const\n1184:hb_buffer_get_glyph_infos\n1185:hb_buffer_destroy\n1186:cff2_path_param_t::line_to\\28CFF::point_t\\20const&\\29\n1187:cff1_path_param_t::line_to\\28CFF::point_t\\20const&\\29\n1188:cf2_stack_getReal\n1189:byn$mgfn-shared$GrGLProgramDataManager::set1iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n1190:antifilldot8\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkBlitter*\\2c\\20bool\\29\n1191:afm_stream_skip_spaces\n1192:WebPRescalerInit\n1193:WebPRescalerExportRow\n1194:SkWStream::writeDecAsText\\28int\\29\n1195:SkTextBlobBuilder::allocInternal\\28SkFont\\20const&\\2c\\20SkTextBlob::GlyphPositioning\\2c\\20int\\2c\\20int\\2c\\20SkPoint\\2c\\20SkRect\\20const*\\29\n1196:SkTDStorage::append\\28void\\20const*\\2c\\20int\\29\n1197:SkString::Rec::Make\\28char\\20const*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28\\29\\20const\n1198:SkStrike::digestFor\\28skglyph::ActionType\\2c\\20SkPackedGlyphID\\29\n1199:SkShaders::Color\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20sk_sp<SkColorSpace>\\29\n1200:SkSafeMath::Add\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n1201:SkSL::Parser::assignmentExpression\\28\\29\n1202:SkSL::GLSLCodeGenerator::write\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1203:SkSL::ConstructorSplat::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1204:SkSL::ConstructorScalarCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1205:SkRuntimeEffectBuilder::writableUniformData\\28\\29\n1206:SkRuntimeEffect::findUniform\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1207:SkResourceCache::Find\\28SkResourceCache::Key\\20const&\\2c\\20bool\\20\\28*\\29\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\\2c\\20void*\\29\n1208:SkRegion::SkRegion\\28SkIRect\\20const&\\29\n1209:SkRect::toQuad\\28SkPoint*\\29\\20const\n1210:SkRasterPipeline::appendTransferFunction\\28skcms_TransferFunction\\20const&\\29\n1211:SkRasterPipeline::appendStore\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n1212:SkRasterPipeline::appendConstantColor\\28SkArenaAlloc*\\2c\\20float\\20const*\\29\n1213:SkRasterClip::SkRasterClip\\28\\29\n1214:SkRRect::checkCornerContainment\\28float\\2c\\20float\\29\\20const\n1215:SkPictureData::getImage\\28SkReadBuffer*\\29\\20const\n1216:SkPathMeasure::getLength\\28\\29\n1217:SkPathBuilder::~SkPathBuilder\\28\\29\n1218:SkPathBuilder::detach\\28\\29\n1219:SkPathBuilder::SkPathBuilder\\28\\29\n1220:SkPath::getGenerationID\\28\\29\\20const\n1221:SkPath::addPoly\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\29\n1222:SkParse::FindScalars\\28char\\20const*\\2c\\20float*\\2c\\20int\\29\n1223:SkPaint::refPathEffect\\28\\29\\20const\n1224:SkPaint::operator=\\28SkPaint\\20const&\\29\n1225:SkMipmap::getLevel\\28int\\2c\\20SkMipmap::Level*\\29\\20const\n1226:SkKnownRuntimeEffects::GetKnownRuntimeEffect\\28SkKnownRuntimeEffects::StableKey\\29\n1227:SkJSONWriter::endArray\\28\\29\n1228:SkJSONWriter::appendCString\\28char\\20const*\\2c\\20char\\20const*\\29\n1229:SkIntersections::setCoincident\\28int\\29\n1230:SkImageInfo::computeOffset\\28int\\2c\\20int\\2c\\20unsigned\\20long\\29\\20const\n1231:SkImageFilter_Base::flatten\\28SkWriteBuffer&\\29\\20const\n1232:SkDrawBase::SkDrawBase\\28\\29\n1233:SkDLine::NearPointV\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1234:SkDLine::NearPointH\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1235:SkDLine::ExactPointV\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1236:SkDLine::ExactPointH\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1237:SkColorSpaceXformSteps::apply\\28SkRasterPipeline*\\29\\20const\n1238:SkColorFilter::asAColorMode\\28unsigned\\20int*\\2c\\20SkBlendMode*\\29\\20const\n1239:SkCodec::SkCodec\\28SkEncodedInfo&&\\2c\\20skcms_PixelFormat\\2c\\20std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkEncodedOrigin\\29\n1240:SkCanvas::drawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n1241:SkCanvas::drawColor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n1242:SkBulkGlyphMetrics::SkBulkGlyphMetrics\\28SkStrikeSpec\\20const&\\29\n1243:SkBlockAllocator::releaseBlock\\28SkBlockAllocator::Block*\\29\n1244:SkBitmap::asImage\\28\\29\\20const\n1245:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\\28SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1246:OT::MVAR::get_var\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1247:GrXferProcessor::GrXferProcessor\\28GrProcessor::ClassID\\2c\\20bool\\2c\\20GrProcessorAnalysisCoverage\\29\n1248:GrTextureEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\29\n1249:GrTextureEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\29\n1250:GrSimpleMeshDrawOpHelper::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20bool*\\29\n1251:GrResourceProvider::findResourceByUniqueKey\\28skgpu::UniqueKey\\20const&\\29\n1252:GrRecordingContext::OwnedArenas::get\\28\\29\n1253:GrProxyProvider::createProxy\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\29\n1254:GrProxyProvider::assignUniqueKeyToProxy\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\29\n1255:GrProcessorSet::finalize\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrAppliedClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\29\n1256:GrOpFlushState::allocator\\28\\29\n1257:GrOp::cutChain\\28\\29\n1258:GrMeshDrawTarget::makeVertexWriter\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n1259:GrGpuResource::GrGpuResource\\28GrGpu*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1260:GrGeometryProcessor::TextureSampler::reset\\28GrSamplerState\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n1261:GrGeometryProcessor::AttributeSet::end\\28\\29\\20const\n1262:GrGeometryProcessor::AttributeSet::Iter::operator++\\28\\29\n1263:GrGeometryProcessor::AttributeSet::Iter::operator*\\28\\29\\20const\n1264:GrGLTextureParameters::set\\28GrGLTextureParameters::SamplerOverriddenState\\20const*\\2c\\20GrGLTextureParameters::NonsamplerState\\20const&\\2c\\20unsigned\\20long\\20long\\29\n1265:GrGLSLShaderBuilder::appendTextureLookup\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n1266:GrClip::GetPixelIBounds\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20GrClip::BoundsType\\29\n1267:GrBackendTexture::~GrBackendTexture\\28\\29\n1268:FT_Outline_Get_CBox\n1269:FT_Get_Sfnt_Table\n1270:utf8_prevCharSafeBody_73\n1271:ures_getString_73\n1272:ulocimp_getScript_73\\28char\\20const*\\2c\\20char\\20const**\\2c\\20UErrorCode&\\29\n1273:uhash_open_73\n1274:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__destroy_vector::__destroy_vector\\28std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>&\\29\n1275:std::__2::moneypunct<char\\2c\\20true>::negative_sign\\5babi:v160004\\5d\\28\\29\\20const\n1276:std::__2::moneypunct<char\\2c\\20true>::neg_format\\5babi:v160004\\5d\\28\\29\\20const\n1277:std::__2::moneypunct<char\\2c\\20true>::frac_digits\\5babi:v160004\\5d\\28\\29\\20const\n1278:std::__2::moneypunct<char\\2c\\20false>::do_pos_format\\28\\29\\20const\n1279:std::__2::ctype<char>::widen\\5babi:v160004\\5d\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n1280:std::__2::char_traits<wchar_t>::copy\\28wchar_t*\\2c\\20wchar_t\\20const*\\2c\\20unsigned\\20long\\29\n1281:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::end\\5babi:v160004\\5d\\28\\29\n1282:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::end\\5babi:v160004\\5d\\28\\29\n1283:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1284:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_external\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1285:std::__2::__itoa::__append2\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1286:sktext::gpu::GlyphVector::glyphs\\28\\29\\20const\n1287:sktext::SkStrikePromise::SkStrikePromise\\28sktext::SkStrikePromise&&\\29\n1288:skif::FilterResult::resolve\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20bool\\29\\20const\n1289:skia_png_read_finish_row\n1290:skia_png_handle_unknown\n1291:skia_png_gamma_correct\n1292:skia_png_colorspace_sync\n1293:skia_png_app_warning\n1294:skia::textlayout::TextStyle::operator=\\28skia::textlayout::TextStyle\\20const&\\29\n1295:skia::textlayout::TextLine::offset\\28\\29\\20const\n1296:skia::textlayout::Run::placeholderStyle\\28\\29\\20const\n1297:skia::textlayout::Cluster::Cluster\\28skia::textlayout::ParagraphImpl*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkSpan<char\\20const>\\2c\\20float\\2c\\20float\\29\n1298:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\\28SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1299:skgpu::ganesh::SurfaceDrawContext::Make\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\2c\\20SkISize\\2c\\20SkSurfaceProps\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1300:skgpu::ganesh::SurfaceContext::PixelTransferResult::~PixelTransferResult\\28\\29\n1301:skgpu::ganesh::ClipStack::SaveRecord::state\\28\\29\\20const\n1302:skcms_Matrix3x3_invert\n1303:sk_doubles_nearly_equal_ulps\\28double\\2c\\20double\\2c\\20unsigned\\20char\\29\n1304:ps_parser_to_token\n1305:isspace\n1306:icu_73::UnicodeString::moveIndex32\\28int\\2c\\20int\\29\\20const\n1307:icu_73::UnicodeString::cloneArrayIfNeeded\\28int\\2c\\20int\\2c\\20signed\\20char\\2c\\20int**\\2c\\20signed\\20char\\29\n1308:icu_73::UnicodeSet::span\\28char16_t\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n1309:icu_73::UVector32::UVector32\\28UErrorCode&\\29\n1310:icu_73::RuleCharacterIterator::next\\28int\\2c\\20signed\\20char&\\2c\\20UErrorCode&\\29\n1311:icu_73::ReorderingBuffer::appendBMP\\28char16_t\\2c\\20unsigned\\20char\\2c\\20UErrorCode&\\29\n1312:icu_73::ICUServiceKey::prefix\\28icu_73::UnicodeString&\\29\\20const\n1313:icu_73::Edits::addReplace\\28int\\2c\\20int\\29\n1314:icu_73::BreakIterator::buildInstance\\28icu_73::Locale\\20const&\\2c\\20char\\20const*\\2c\\20UErrorCode&\\29\n1315:hb_face_t::load_upem\\28\\29\\20const\n1316:hb_buffer_t::merge_out_clusters\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1317:hb_buffer_t::enlarge\\28unsigned\\20int\\29\n1318:hb_buffer_reverse\n1319:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&\\29\\2c\\20SkCanvas*\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint*\\29\n1320:cff_index_init\n1321:cf2_glyphpath_curveTo\n1322:atan2f\n1323:WebPCopyPlane\n1324:SkTMaskGamma_build_correcting_lut\\28unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20SkColorSpaceLuminance\\20const&\\2c\\20float\\2c\\20SkColorSpaceLuminance\\20const&\\2c\\20float\\29\n1325:SkSurface_Raster::type\\28\\29\\20const\n1326:SkString::swap\\28SkString&\\29\n1327:SkString::reset\\28\\29\n1328:SkSampler::Fill\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::ZeroInitialized\\29\n1329:SkSL::Type::MakeTextureType\\28char\\20const*\\2c\\20SpvDim_\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkSL::Type::TextureAccess\\29\n1330:SkSL::Type::MakeSpecialType\\28char\\20const*\\2c\\20char\\20const*\\2c\\20SkSL::Type::TypeKind\\29\n1331:SkSL::RP::Builder::push_slots_or_immutable\\28SkSL::RP::SlotRange\\2c\\20SkSL::RP::BuilderOp\\29\n1332:SkSL::RP::Builder::push_clone_from_stack\\28SkSL::RP::SlotRange\\2c\\20int\\2c\\20int\\29\n1333:SkSL::Program::~Program\\28\\29\n1334:SkSL::PipelineStage::PipelineStageCodeGenerator::writeStatement\\28SkSL::Statement\\20const&\\29\n1335:SkSL::Operator::isAssignment\\28\\29\\20const\n1336:SkSL::InlineCandidateAnalyzer::visitStatement\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20bool\\29\n1337:SkSL::GLSLCodeGenerator::writeModifiers\\28SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20bool\\29\n1338:SkSL::ExpressionStatement::Make\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1339:SkSL::ConstructorCompound::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n1340:SkSL::Analysis::GetReturnComplexity\\28SkSL::FunctionDefinition\\20const&\\29\n1341:SkSL::AliasType::resolve\\28\\29\\20const\n1342:SkResourceCache::Add\\28SkResourceCache::Rec*\\2c\\20void*\\29\n1343:SkRegion::writeToMemory\\28void*\\29\\20const\n1344:SkRect\\20skif::Mapping::map<SkRect>\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n1345:SkReadBuffer::readMatrix\\28SkMatrix*\\29\n1346:SkReadBuffer::readBool\\28\\29\n1347:SkRasterClip::setRect\\28SkIRect\\20const&\\29\n1348:SkRasterClip::SkRasterClip\\28SkRasterClip\\20const&\\29\n1349:SkPathMeasure::~SkPathMeasure\\28\\29\n1350:SkPathMeasure::SkPathMeasure\\28SkPath\\20const&\\2c\\20bool\\2c\\20float\\29\n1351:SkPath::swap\\28SkPath&\\29\n1352:SkPaint::setAlphaf\\28float\\29\n1353:SkOpSpan::computeWindSum\\28\\29\n1354:SkOpSegment::existing\\28double\\2c\\20SkOpSegment\\20const*\\29\\20const\n1355:SkOpPtT::find\\28SkOpSegment\\20const*\\29\\20const\n1356:SkOpCoincidence::addEndMovedSpans\\28SkOpSpan\\20const*\\2c\\20SkOpSpanBase\\20const*\\29\n1357:SkNoDrawCanvas::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n1358:SkMakeImageFromRasterBitmap\\28SkBitmap\\20const&\\2c\\20SkCopyPixelsMode\\29\n1359:SkImage_Ganesh::SkImage_Ganesh\\28sk_sp<GrImageContext>\\2c\\20unsigned\\20int\\2c\\20GrSurfaceProxyView\\2c\\20SkColorInfo\\29\n1360:SkImageInfo::makeColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n1361:SkImage::refColorSpace\\28\\29\\20const\n1362:SkGlyph::imageSize\\28\\29\\20const\n1363:SkGetICULib\\28\\29\n1364:SkFont::textToGlyphs\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkTextEncoding\\2c\\20unsigned\\20short*\\2c\\20int\\29\\20const\n1365:SkFont::setSubpixel\\28bool\\29\n1366:SkDraw::SkDraw\\28\\29\n1367:SkDevice::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n1368:SkColorTypeBytesPerPixel\\28SkColorType\\29\n1369:SkChopQuadAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\29\n1370:SkCanvas::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n1371:SkBmpCodec::getDstRow\\28int\\2c\\20int\\29\\20const\n1372:SkAutoDescriptor::SkAutoDescriptor\\28\\29\n1373:OT::DeltaSetIndexMap::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1374:OT::ClassDef::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1375:GrTriangulator::Comparator::sweep_lt\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\\20const\n1376:GrTextureProxy::textureType\\28\\29\\20const\n1377:GrSurfaceProxy::createSurfaceImpl\\28GrResourceProvider*\\2c\\20int\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\29\\20const\n1378:GrStyledShape::writeUnstyledKey\\28unsigned\\20int*\\29\\20const\n1379:GrStyledShape::simplify\\28\\29\n1380:GrSkSLFP::setInput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1381:GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil\\28GrProcessorSet*\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n1382:GrShape::operator=\\28GrShape\\20const&\\29\n1383:GrResourceProvider::createPatternedIndexBuffer\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::UniqueKey\\20const*\\29\n1384:GrRenderTarget::~GrRenderTarget\\28\\29\n1385:GrRecordingContextPriv::makeSC\\28GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n1386:GrOpFlushState::detachAppliedClip\\28\\29\n1387:GrGpuBuffer::map\\28\\29\n1388:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\\28GrGLSLVertexBuilder*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20char\\20const*\\29\n1389:GrGLSLShaderBuilder::declAppend\\28GrShaderVar\\20const&\\29\n1390:GrGLGpu::didDrawTo\\28GrRenderTarget*\\29\n1391:GrFragmentProcessors::Make\\28GrRecordingContext*\\2c\\20SkColorFilter\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1392:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrColorInfo\\20const&\\2c\\20GrColorInfo\\20const&\\29\n1393:GrCaps::validateSurfaceParams\\28SkISize\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrTextureType\\29\\20const\n1394:GrBufferAllocPool::putBack\\28unsigned\\20long\\29\n1395:GrBlurUtils::GaussianBlur\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20SkBackingFit\\29::$_0::operator\\28\\29\\28SkIRect\\2c\\20SkIRect\\29\\20const\n1396:GrAAConvexTessellator::createInsetRing\\28GrAAConvexTessellator::Ring\\20const&\\2c\\20GrAAConvexTessellator::Ring*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n1397:FT_Stream_GetByte\n1398:FT_Set_Transform\n1399:FT_Add_Module\n1400:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1401:AlmostLessOrEqualUlps\\28float\\2c\\20float\\29\n1402:ActiveEdge::intersect\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\\20const\n1403:wrapper_cmp\n1404:void\\20std::__2::reverse\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\29\n1405:void\\20std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::__do_rehash<true>\\28unsigned\\20long\\29\n1406:utrace_data_73\n1407:utf8_nextCharSafeBody_73\n1408:utext_setup_73\n1409:uhash_puti_73\n1410:uhash_nextElement_73\n1411:ubidi_getParaLevelAtIndex_73\n1412:u_charType_73\n1413:tanf\n1414:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1415:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n1416:std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20std::__2::__pad_and_output\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\29\n1417:std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20std::__2::__pad_and_output\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>>\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::ios_base&\\2c\\20char\\29\n1418:std::__2::char_traits<char>::to_int_type\\28char\\29\n1419:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1420:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::~basic_ios\\28\\29\n1421:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::setstate\\5babi:v160004\\5d\\28unsigned\\20int\\29\n1422:std::__2::__compressed_pair_elem<void\\20\\28*\\29\\28void*\\29\\2c\\201\\2c\\20false>::__compressed_pair_elem\\5babi:v160004\\5d<void\\20\\28*\\29\\28void*\\29\\2c\\20void>\\28void\\20\\28*&&\\29\\28void*\\29\\29\n1423:sktext::gpu::GlyphVector::~GlyphVector\\28\\29\n1424:sktext::StrikeMutationMonitor::~StrikeMutationMonitor\\28\\29\n1425:sktext::StrikeMutationMonitor::StrikeMutationMonitor\\28sktext::StrikeForGPU*\\29\n1426:skif::LayerSpace<SkIRect>::contains\\28skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n1427:skif::Backend::~Backend\\28\\29.1\n1428:skia_private::TArray<skif::FilterResult::Builder::SampledFilterResult\\2c\\20false>::push_back\\28skif::FilterResult::Builder::SampledFilterResult&&\\29\n1429:skia_private::TArray<float\\2c\\20true>::operator=\\28skia_private::TArray<float\\2c\\20true>&&\\29\n1430:skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>::~STArray\\28\\29\n1431:skia_png_chunk_unknown_handling\n1432:skia::textlayout::TextStyle::TextStyle\\28\\29\n1433:skia::textlayout::TextLine::iterateThroughSingleRunByStyles\\28skia::textlayout::TextLine::TextAdjustment\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::StyleType\\2c\\20std::__2::function<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\20const&\\29\\20const\n1434:skgpu::ganesh::SurfaceFillContext::internalClear\\28SkIRect\\20const*\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20bool\\29\n1435:skgpu::ganesh::SurfaceDrawContext::fillRectToRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n1436:skgpu::SkSLToBackend\\28SkSL::ShaderCaps\\20const*\\2c\\20bool\\20\\28*\\29\\28SkSL::Program&\\2c\\20SkSL::ShaderCaps\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\29\\2c\\20char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20SkSL::ProgramKind\\2c\\20SkSL::ProgramSettings\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20SkSL::ProgramInterface*\\2c\\20skgpu::ShaderErrorHandler*\\29\n1437:skgpu::GetApproxSize\\28SkISize\\29\n1438:res_getTableItemByKey_73\n1439:powf\n1440:icu_73::UnicodeString::operator=\\28icu_73::UnicodeString&&\\29\n1441:icu_73::UnicodeString::doEquals\\28icu_73::UnicodeString\\20const&\\2c\\20int\\29\\20const\n1442:icu_73::UnicodeSet::ensureCapacity\\28int\\29\n1443:icu_73::UnicodeSet::clear\\28\\29\n1444:icu_73::UVector::addElement\\28void*\\2c\\20UErrorCode&\\29\n1445:icu_73::UVector32::setElementAt\\28int\\2c\\20int\\29\n1446:icu_73::RuleCharacterIterator::setPos\\28icu_73::RuleCharacterIterator::Pos\\20const&\\29\n1447:icu_73::Locale::operator=\\28icu_73::Locale\\20const&\\29\n1448:icu_73::Edits::addUnchanged\\28int\\29\n1449:icu_73::CharString::extract\\28char*\\2c\\20int\\2c\\20UErrorCode&\\29\\20const\n1450:hb_lazy_loader_t<OT::vhea\\2c\\20hb_table_lazy_loader_t<OT::vhea\\2c\\2011u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2011u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1451:hb_lazy_loader_t<OT::maxp\\2c\\20hb_table_lazy_loader_t<OT::maxp\\2c\\202u\\2c\\20true>\\2c\\20hb_face_t\\2c\\202u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1452:hb_lazy_loader_t<OT::hhea\\2c\\20hb_table_lazy_loader_t<OT::hhea\\2c\\204u\\2c\\20true>\\2c\\20hb_face_t\\2c\\204u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1453:hb_font_t::scale_glyph_extents\\28hb_glyph_extents_t*\\29\n1454:hb_font_t::get_glyph_h_origin_with_fallback\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n1455:hb_buffer_append\n1456:emscripten::internal::MethodInvoker<void\\20\\28SkFont::*\\29\\28sk_sp<SkTypeface>\\29\\2c\\20void\\2c\\20SkFont*\\2c\\20sk_sp<SkTypeface>>::invoke\\28void\\20\\28SkFont::*\\20const&\\29\\28sk_sp<SkTypeface>\\29\\2c\\20SkFont*\\2c\\20sk_sp<SkTypeface>*\\29\n1457:emscripten::internal::Invoker<unsigned\\20long>::invoke\\28unsigned\\20long\\20\\28*\\29\\28\\29\\29\n1458:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n1459:cos\n1460:cf2_glyphpath_lineTo\n1461:byn$mgfn-shared$SkTDStorage::calculateSizeOrDie\\28int\\29::$_0::operator\\28\\29\\28\\29\\20const\n1462:alloc_small\n1463:af_latin_hints_compute_segments\n1464:_hb_glyph_info_set_unicode_props\\28hb_glyph_info_t*\\2c\\20hb_buffer_t*\\29\n1465:__lshrti3\n1466:__letf2\n1467:__cxx_global_array_dtor.3\n1468:\\28anonymous\\20namespace\\29::SkBlurImageFilter::~SkBlurImageFilter\\28\\29\n1469:SkUTF::ToUTF16\\28int\\2c\\20unsigned\\20short*\\29\n1470:SkTextBlobBuilder::~SkTextBlobBuilder\\28\\29\n1471:SkTextBlobBuilder::make\\28\\29\n1472:SkSurface::makeImageSnapshot\\28\\29\n1473:SkString::insert\\28unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1474:SkString::insertUnichar\\28unsigned\\20long\\2c\\20int\\29\n1475:SkStrikeSpec::findOrCreateScopedStrike\\28sktext::StrikeForGPUCacheInterface*\\29\\20const\n1476:SkStrikeCache::GlobalStrikeCache\\28\\29\n1477:SkSpecialImages::MakeDeferredFromGpu\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20unsigned\\20int\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1478:SkShader::isAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n1479:SkSL::is_constant_value\\28SkSL::Expression\\20const&\\2c\\20double\\29\n1480:SkSL::compile_and_shrink\\28SkSL::Compiler*\\2c\\20SkSL::ProgramKind\\2c\\20char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::Module\\20const*\\29\n1481:SkSL::\\28anonymous\\20namespace\\29::ReturnsOnAllPathsVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n1482:SkSL::Type::MakeScalarType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type::NumberKind\\2c\\20signed\\20char\\2c\\20signed\\20char\\29\n1483:SkSL::RP::Generator::pushBinaryExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n1484:SkSL::RP::Builder::push_clone\\28int\\2c\\20int\\29\n1485:SkSL::ProgramUsage::remove\\28SkSL::Statement\\20const*\\29\n1486:SkSL::Parser::statement\\28bool\\29\n1487:SkSL::Operator::determineBinaryType\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const**\\2c\\20SkSL::Type\\20const**\\2c\\20SkSL::Type\\20const**\\29\\20const\n1488:SkSL::ModifierFlags::description\\28\\29\\20const\n1489:SkSL::Layout::paddedDescription\\28\\29\\20const\n1490:SkSL::FieldAccess::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20int\\2c\\20SkSL::FieldAccessOwnerKind\\29\n1491:SkSL::ConstructorCompoundCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1492:SkSL::Compiler::~Compiler\\28\\29\n1493:SkSL::Analysis::IsSameExpressionTree\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n1494:SkRectPriv::Subtract\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect*\\29\n1495:SkPictureRecorder::SkPictureRecorder\\28\\29\n1496:SkPictureData::~SkPictureData\\28\\29\n1497:SkPathMeasure::nextContour\\28\\29\n1498:SkPathMeasure::getSegment\\28float\\2c\\20float\\2c\\20SkPath*\\2c\\20bool\\29\n1499:SkPathMeasure::getPosTan\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n1500:SkPathBuilder::lineTo\\28SkPoint\\29\n1501:SkPath::getPoint\\28int\\29\\20const\n1502:SkPath::getLastPt\\28SkPoint*\\29\\20const\n1503:SkPaint::setBlender\\28sk_sp<SkBlender>\\29\n1504:SkOpSegment::addT\\28double\\29\n1505:SkNoPixelsDevice::ClipState&\\20skia_private::TArray<SkNoPixelsDevice::ClipState\\2c\\20true>::emplace_back<SkIRect\\2c\\20bool\\2c\\20bool>\\28SkIRect&&\\2c\\20bool&&\\2c\\20bool&&\\29\n1506:SkNextID::ImageID\\28\\29\n1507:SkMessageBus<SkResourceCache::PurgeSharedIDMessage\\2c\\20unsigned\\20int\\2c\\20true>::Inbox::Inbox\\28unsigned\\20int\\29\n1508:SkJSONWriter::endObject\\28\\29\n1509:SkImage_Lazy::generator\\28\\29\\20const\n1510:SkImage_Base::~SkImage_Base\\28\\29\n1511:SkImage_Base::SkImage_Base\\28SkImageInfo\\20const&\\2c\\20unsigned\\20int\\29\n1512:SkFont::getWidthsBounds\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20float*\\2c\\20SkRect*\\2c\\20SkPaint\\20const*\\29\\20const\n1513:SkFont::getMetrics\\28SkFontMetrics*\\29\\20const\n1514:SkFont::SkFont\\28sk_sp<SkTypeface>\\2c\\20float\\29\n1515:SkFont::SkFont\\28\\29\n1516:SkDrawBase::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkRect\\20const*\\29\\20const\n1517:SkDevice::setGlobalCTM\\28SkM44\\20const&\\29\n1518:SkDescriptor::operator==\\28SkDescriptor\\20const&\\29\\20const\n1519:SkConvertPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n1520:SkConic::chopAt\\28float\\2c\\20SkConic*\\29\\20const\n1521:SkColorSpace::gammaIsLinear\\28\\29\\20const\n1522:SkColorSpace::MakeRGB\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n1523:SkCodec::fillIncompleteImage\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::ZeroInitialized\\2c\\20int\\2c\\20int\\29\n1524:SkCanvas::saveLayer\\28SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n1525:SkCanvas::drawPaint\\28SkPaint\\20const&\\29\n1526:SkCanvas::ImageSetEntry::~ImageSetEntry\\28\\29\n1527:SkBulkGlyphMetrics::glyphs\\28SkSpan<unsigned\\20short\\20const>\\29\n1528:SkBlendMode_AsCoeff\\28SkBlendMode\\2c\\20SkBlendModeCoeff*\\2c\\20SkBlendModeCoeff*\\29\n1529:SkBitmap::getGenerationID\\28\\29\\20const\n1530:SkArenaAllocWithReset::reset\\28\\29\n1531:OT::Layout::GPOS_impl::AnchorFormat3::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1532:OT::GDEF::get_glyph_props\\28unsigned\\20int\\29\\20const\n1533:OT::CmapSubtable::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n1534:Ins_UNKNOWN\n1535:GrTextureEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\2c\\20bool\\29\n1536:GrSurfaceProxyView::mipmapped\\28\\29\\20const\n1537:GrSurfaceProxy::instantiateImpl\\28GrResourceProvider*\\2c\\20int\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::UniqueKey\\20const*\\29\n1538:GrSimpleMeshDrawOpHelperWithStencil::isCompatible\\28GrSimpleMeshDrawOpHelperWithStencil\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\29\\20const\n1539:GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20bool*\\29\n1540:GrShape::simplifyRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n1541:GrQuad::projectedBounds\\28\\29\\20const\n1542:GrProcessorSet::MakeEmptySet\\28\\29\n1543:GrPorterDuffXPFactory::SimpleSrcOverXP\\28\\29\n1544:GrPixmap::Allocate\\28GrImageInfo\\20const&\\29\n1545:GrPathTessellationShader::MakeSimpleTriangleShader\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n1546:GrMakeCachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skgpu::Mipmapped\\29\n1547:GrImageInfo::operator=\\28GrImageInfo&&\\29\n1548:GrImageInfo::makeColorType\\28GrColorType\\29\\20const\n1549:GrGpuResource::setUniqueKey\\28skgpu::UniqueKey\\20const&\\29\n1550:GrGpuResource::release\\28\\29\n1551:GrGpuResource::isPurgeable\\28\\29\\20const\n1552:GrGeometryProcessor::textureSampler\\28int\\29\\20const\n1553:GrGeometryProcessor::AttributeSet::begin\\28\\29\\20const\n1554:GrGLSLShaderBuilder::addFeature\\28unsigned\\20int\\2c\\20char\\20const*\\29\n1555:GrGLGpu::clearErrorsAndCheckForOOM\\28\\29\n1556:GrGLGpu::bindSurfaceFBOForPixelOps\\28GrSurface*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20GrGLGpu::TempFBOTarget\\29\n1557:GrGLCompileAndAttachShader\\28GrGLContext\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20bool\\2c\\20GrThreadSafePipelineBuilder::Stats*\\2c\\20skgpu::ShaderErrorHandler*\\29\n1558:GrFragmentProcessor::MakeColor\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n1559:GrDirectContextPriv::flushSurfaces\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n1560:GrDefaultGeoProcFactory::Make\\28SkArenaAlloc*\\2c\\20GrDefaultGeoProcFactory::Color\\20const&\\2c\\20GrDefaultGeoProcFactory::Coverage\\20const&\\2c\\20GrDefaultGeoProcFactory::LocalCoords\\20const&\\2c\\20SkMatrix\\20const&\\29\n1561:GrConvertPixels\\28GrPixmap\\20const&\\2c\\20GrCPixmap\\20const&\\2c\\20bool\\29\n1562:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\29\n1563:GrColorInfo::GrColorInfo\\28\\29\n1564:GrBlurUtils::convolve_gaussian_1d\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\2c\\20SkIRect\\20const&\\2c\\20SkAlphaType\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\29\n1565:GrBackendTexture::GrBackendTexture\\28\\29\n1566:GrBackendFormat::operator=\\28GrBackendFormat\\20const&\\29\n1567:FT_Stream_Read\n1568:FT_GlyphLoader_Rewind\n1569:FT_Done_Face\n1570:Cr_z_inflate\n1571:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::operator\\5b\\5d\\28unsigned\\20int\\29\\20const\n1572:void\\20std::__2::__stable_sort<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\2c\\20long\\29\n1573:void\\20std::__2::__double_or_nothing\\5babi:v160004\\5d<unsigned\\20int>\\28std::__2::unique_ptr<unsigned\\20int\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int*&\\29\n1574:void\\20icu_73::\\28anonymous\\20namespace\\29::MixedBlocks::extend<unsigned\\20short>\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n1575:void\\20hb_serialize_context_t::add_link<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>>\\28OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>&\\2c\\20unsigned\\20int\\2c\\20hb_serialize_context_t::whence_t\\2c\\20unsigned\\20int\\29\n1576:void\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20bool>::setWire<RuntimeEffectUniform>\\28bool\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform&\\2c\\20bool\\29\n1577:utext_nativeLength_73\n1578:ures_getStringByKeyWithFallback_73\n1579:uprv_strnicmp_73\n1580:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n1581:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n1582:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n1583:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n1584:ulocimp_getKeywordValue_73\n1585:ulocimp_getCountry_73\\28char\\20const*\\2c\\20char\\20const**\\2c\\20UErrorCode&\\29\n1586:uenum_close_73\n1587:udata_getMemory_73\n1588:ucptrie_openFromBinary_73\n1589:u_charsToUChars_73\n1590:toupper\n1591:top12.2\n1592:std::__2::numpunct<wchar_t>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::numpunct<wchar_t>>\\28std::__2::locale\\20const&\\29\n1593:std::__2::numpunct<char>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::numpunct<char>>\\28std::__2::locale\\20const&\\29\n1594:std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot>\\28skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot*\\29\\20const\n1595:std::__2::ctype<char>::narrow\\5babi:v160004\\5d\\28char\\2c\\20char\\29\\20const\n1596:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d<std::nullptr_t>\\28wchar_t\\20const*\\29\n1597:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1598:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::~basic_streambuf\\28\\29\n1599:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setg\\5babi:v160004\\5d\\28char*\\2c\\20char*\\2c\\20char*\\29\n1600:std::__2::__num_get<wchar_t>::__stage2_int_loop\\28wchar_t\\2c\\20int\\2c\\20char*\\2c\\20char*&\\2c\\20unsigned\\20int&\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20wchar_t\\20const*\\29\n1601:std::__2::__num_get<char>::__stage2_int_loop\\28char\\2c\\20int\\2c\\20char*\\2c\\20char*&\\2c\\20unsigned\\20int&\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20char\\20const*\\29\n1602:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<wchar_t>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::allocator<wchar_t>>\\28std::__2::allocator<wchar_t>&\\2c\\20unsigned\\20long\\29\n1603:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<char>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::allocator<char>>\\28std::__2::allocator<char>&\\2c\\20unsigned\\20long\\29\n1604:src_p\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\n1605:skif::FilterResult::analyzeBounds\\28SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20skif::FilterResult::BoundsScope\\29\\20const\n1606:skif::FilterResult::AutoSurface::snap\\28\\29\n1607:skif::FilterResult::AutoSurface::AutoSurface\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::FilterResult::PixelBoundary\\2c\\20bool\\2c\\20SkSurfaceProps\\20const*\\29\n1608:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::operator\\5b\\5d\\28SkSL::Variable\\20const*\\20const&\\29\n1609:skia_private::TArray<float\\2c\\20true>::operator=\\28skia_private::TArray<float\\2c\\20true>\\20const&\\29\n1610:skia_private::TArray<SkPoint\\2c\\20true>::resize_back\\28int\\29\n1611:skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>&&\\29\n1612:skia_png_get_valid\n1613:skia_png_gamma_8bit_correct\n1614:skia_png_free_data\n1615:skia_png_chunk_warning\n1616:skia::textlayout::TextLine::measureTextInsideOneRun\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20skia::textlayout::TextLine::TextAdjustment\\29\\20const\n1617:skia::textlayout::Run::positionX\\28unsigned\\20long\\29\\20const\n1618:skia::textlayout::Run::Run\\28skia::textlayout::ParagraphImpl*\\2c\\20SkShaper::RunHandler::RunInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20bool\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20float\\29\n1619:skia::textlayout::ParagraphCacheKey::operator==\\28skia::textlayout::ParagraphCacheKey\\20const&\\29\\20const\n1620:skia::textlayout::FontCollection::enableFontFallback\\28\\29\n1621:skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Required<\\28skgpu::tess::PatchAttribs\\291>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\294>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::ReplicateLineEndPoints\\2c\\20skgpu::tess::TrackJoinControlPoints>::chopAndWriteCubics\\28skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20int\\29\n1622:skgpu::ganesh::SmallPathAtlasMgr::reset\\28\\29\n1623:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::vertexSize\\28\\29\\20const\n1624:skgpu::ganesh::Device::readSurfaceView\\28\\29\n1625:skgpu::ganesh::ClipStack::clip\\28skgpu::ganesh::ClipStack::RawElement&&\\29\n1626:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::RawElement\\20const&\\29\\20const\n1627:skgpu::ganesh::ClipStack::RawElement::RawElement\\28SkMatrix\\20const&\\2c\\20GrShape\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n1628:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane&\\20skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\\2c\\20false>::emplace_back<sk_sp<SkData>\\2c\\20unsigned\\20long&>\\28sk_sp<SkData>&&\\2c\\20unsigned\\20long&\\29\n1629:skgpu::Swizzle::asString\\28\\29\\20const\n1630:skgpu::ScratchKey::GenerateResourceType\\28\\29\n1631:skgpu::GetBlendFormula\\28bool\\2c\\20bool\\2c\\20SkBlendMode\\29\n1632:select_curve_ops\\28skcms_Curve\\20const*\\2c\\20int\\2c\\20OpAndArg*\\29\n1633:sbrk\n1634:ps_tofixedarray\n1635:processPropertySeq\\28UBiDi*\\2c\\20LevState*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20int\\29\n1636:png_format_buffer\n1637:png_check_keyword\n1638:nextafterf\n1639:jpeg_huff_decode\n1640:init_entry\\28char\\20const*\\2c\\20char\\20const*\\2c\\20UErrorCode*\\29\n1641:icu_73::UnicodeString::countChar32\\28int\\2c\\20int\\29\\20const\n1642:icu_73::UnicodeSet::getRangeStart\\28int\\29\\20const\n1643:icu_73::UnicodeSet::getRangeEnd\\28int\\29\\20const\n1644:icu_73::UnicodeSet::getRangeCount\\28\\29\\20const\n1645:icu_73::UVector::UVector\\28void\\20\\28*\\29\\28void*\\29\\2c\\20signed\\20char\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20int\\2c\\20UErrorCode&\\29\n1646:icu_73::UVector32::addElement\\28int\\2c\\20UErrorCode&\\29\n1647:icu_73::UVector32::UVector32\\28int\\2c\\20UErrorCode&\\29\n1648:icu_73::UCharsTrie::next\\28int\\29\n1649:icu_73::UCharsTrie::branchNext\\28char16_t\\20const*\\2c\\20int\\2c\\20int\\29\n1650:icu_73::ReorderingBuffer::appendSupplementary\\28int\\2c\\20unsigned\\20char\\2c\\20UErrorCode&\\29\n1651:icu_73::Norm2AllModes::createNFCInstance\\28UErrorCode&\\29\n1652:icu_73::LanguageBreakEngine::LanguageBreakEngine\\28\\29\n1653:icu_73::CharacterProperties::getInclusionsForProperty\\28UProperty\\2c\\20UErrorCode&\\29\n1654:icu_73::CharString::ensureCapacity\\28int\\2c\\20int\\2c\\20UErrorCode&\\29\n1655:hb_unicode_funcs_destroy\n1656:hb_serialize_context_t::pop_discard\\28\\29\n1657:hb_buffer_set_flags\n1658:hb_blob_create_sub_blob\n1659:hb_array_t<char\\20const>::hash\\28\\29\\20const\n1660:hairquad\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n1661:haircubic\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n1662:fmt_u\n1663:flush_pending\n1664:emscripten::internal::Invoker<sk_sp<GrDirectContext>>::invoke\\28sk_sp<GrDirectContext>\\20\\28*\\29\\28\\29\\29\n1665:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\29\\2c\\20void\\2c\\20SkPath&>::invoke\\28void\\20\\28**\\29\\28SkPath&\\29\\2c\\20SkPath*\\29\n1666:do_fixed\n1667:destroy_face\n1668:decltype\\28fp\\28\\28SkRecords::NoOp*\\29\\28nullptr\\29\\29\\29\\20SkRecord::Record::mutate<SkRecord::Destroyer&>\\28SkRecord::Destroyer&\\29\n1669:char*\\20const&\\20std::__2::max\\5babi:v160004\\5d<char*>\\28char*\\20const&\\2c\\20char*\\20const&\\29\n1670:cf2_stack_pushInt\n1671:cf2_interpT2CharString\n1672:cf2_glyphpath_moveTo\n1673:byn$mgfn-shared$skif::\\28anonymous\\20namespace\\29::RasterBackend::~RasterBackend\\28\\29\n1674:byn$mgfn-shared$skif::Backend::~Backend\\28\\29.1\n1675:byn$mgfn-shared$SkUnicode_icu::isEmoji\\28int\\29\n1676:byn$mgfn-shared$SkSL::ConstructorArrayCast::clone\\28SkSL::Position\\29\\20const\n1677:byn$mgfn-shared$GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n1678:bool\\20hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::set_with_hash<unsigned\\20int\\20const&\\2c\\20unsigned\\20int\\20const&>\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const&\\2c\\20bool\\29\n1679:bool\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20bool>::getWire<RuntimeEffectUniform>\\28bool\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform\\20const&\\29\n1680:_isVariantSubtag\\28char\\20const*\\2c\\20int\\29\n1681:_hb_ot_metrics_get_position_common\\28hb_font_t*\\2c\\20hb_ot_metrics_tag_t\\2c\\20int*\\29\n1682:_getStringOrCopyKey\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char16_t*\\2c\\20int\\2c\\20UErrorCode*\\29\n1683:__wasi_syscall_ret\n1684:__tandf\n1685:__syscall_ret\n1686:__floatunsitf\n1687:__cxa_allocate_exception\n1688:\\28anonymous\\20namespace\\29::PathGeoBuilder::createMeshAndPutBackReserve\\28\\29\n1689:\\28anonymous\\20namespace\\29::MeshOp::fixedFunctionFlags\\28\\29\\20const\n1690:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::fixedFunctionFlags\\28\\29\\20const\n1691:WebPDemuxGetI\n1692:VP8LDoFillBitWindow\n1693:VP8LClear\n1694:TT_Get_MM_Var\n1695:SkWStream::writeScalar\\28float\\29\n1696:SkUTF::UTF8ToUTF16\\28unsigned\\20short*\\2c\\20int\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1697:SkTypeface::MakeEmpty\\28\\29\n1698:SkTSect::BinarySearch\\28SkTSect*\\2c\\20SkTSect*\\2c\\20SkIntersections*\\29\n1699:SkTConic::operator\\5b\\5d\\28int\\29\\20const\n1700:SkTBlockList<GrShaderVar\\2c\\201>::reset\\28\\29\n1701:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::reset\\28\\29\n1702:SkSurfaces::RenderTarget\\28GrRecordingContext*\\2c\\20skgpu::Budgeted\\2c\\20SkImageInfo\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const*\\2c\\20bool\\2c\\20bool\\29\n1703:SkString::insertU32\\28unsigned\\20long\\2c\\20unsigned\\20int\\29\n1704:SkShaders::MatrixRec::applyForFragmentProcessor\\28SkMatrix\\20const&\\29\\20const\n1705:SkScan::FillRect\\28SkRect\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1706:SkScan::FillIRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n1707:SkSL::optimize_comparison\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20bool\\20\\28*\\29\\28double\\2c\\20double\\29\\29\n1708:SkSL::Type::convertArraySize\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20long\\20long\\29\\20const\n1709:SkSL::RP::Builder::dot_floats\\28int\\29\n1710:SkSL::ProgramUsage::get\\28SkSL::FunctionDeclaration\\20const&\\29\\20const\n1711:SkSL::Parser::type\\28SkSL::Modifiers*\\29\n1712:SkSL::Parser::modifiers\\28\\29\n1713:SkSL::ConstructorDiagonalMatrix::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1714:SkSL::ConstructorArrayCast::~ConstructorArrayCast\\28\\29\n1715:SkSL::ConstantFolder::MakeConstantValueForVariable\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1716:SkSL::Compiler::Compiler\\28\\29\n1717:SkSL::Analysis::IsTrivialExpression\\28SkSL::Expression\\20const&\\29\n1718:SkRuntimeEffectPriv::CanDraw\\28SkCapabilities\\20const*\\2c\\20SkRuntimeEffect\\20const*\\29\n1719:SkRegion::setPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\29\n1720:SkRegion::operator=\\28SkRegion\\20const&\\29\n1721:SkRegion::op\\28SkRegion\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkRegion::Op\\29\n1722:SkRegion::Iterator::next\\28\\29\n1723:SkRasterPipeline::compile\\28\\29\\20const\n1724:SkRasterPipeline::appendClampIfNormalized\\28SkImageInfo\\20const&\\29\n1725:SkRRect::transform\\28SkMatrix\\20const&\\2c\\20SkRRect*\\29\\20const\n1726:SkPictureRecorder::beginRecording\\28SkRect\\20const&\\2c\\20SkBBHFactory*\\29\n1727:SkPathWriter::finishContour\\28\\29\n1728:SkPathStroker::cubicPerpRay\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n1729:SkPath::getSegmentMasks\\28\\29\\20const\n1730:SkPath::addRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\29\n1731:SkPaintPriv::ComputeLuminanceColor\\28SkPaint\\20const&\\29\n1732:SkPaint::nothingToDraw\\28\\29\\20const\n1733:SkPaint::isSrcOver\\28\\29\\20const\n1734:SkOpAngle::linesOnOriginalSide\\28SkOpAngle\\20const*\\29\n1735:SkNotifyBitmapGenIDIsStale\\28unsigned\\20int\\29\n1736:SkNoDrawCanvas::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n1737:SkMipmap::Build\\28SkPixmap\\20const&\\2c\\20SkDiscardableMemory*\\20\\28*\\29\\28unsigned\\20long\\29\\2c\\20bool\\29\n1738:SkMeshSpecification::~SkMeshSpecification\\28\\29\n1739:SkMatrix::setSinCos\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n1740:SkMatrix::setRSXform\\28SkRSXform\\20const&\\29\n1741:SkMatrix::mapHomogeneousPoints\\28SkPoint3*\\2c\\20SkPoint3\\20const*\\2c\\20int\\29\\20const\n1742:SkMaskFilterBase::getFlattenableType\\28\\29\\20const\n1743:SkMaskBuilder::AllocImage\\28unsigned\\20long\\2c\\20SkMaskBuilder::AllocType\\29\n1744:SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_2D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n1745:SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_1D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n1746:SkJSONWriter::appendString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1747:SkIntersections::insertNear\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\2c\\20SkDPoint\\20const&\\29\n1748:SkIntersections::flip\\28\\29\n1749:SkImageInfo::Make\\28SkISize\\2c\\20SkColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n1750:SkImageFilters::Empty\\28\\29\n1751:SkImageFilter_Base::~SkImageFilter_Base\\28\\29\n1752:SkImage::isAlphaOnly\\28\\29\\20const\n1753:SkGlyph::drawable\\28\\29\\20const\n1754:SkFont::unicharToGlyph\\28int\\29\\20const\n1755:SkFont::setTypeface\\28sk_sp<SkTypeface>\\29\n1756:SkFont::setHinting\\28SkFontHinting\\29\n1757:SkFindQuadMaxCurvature\\28SkPoint\\20const*\\29\n1758:SkEvalCubicAt\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n1759:SkDrawTiler::stepAndSetupTileDraw\\28\\29\n1760:SkDrawTiler::SkDrawTiler\\28SkBitmapDevice*\\2c\\20SkRect\\20const*\\29\n1761:SkDevice::accessPixels\\28SkPixmap*\\29\n1762:SkDeque::SkDeque\\28unsigned\\20long\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\29\n1763:SkDCubic::FindExtrema\\28double\\20const*\\2c\\20double*\\29\n1764:SkColorFilters::Blend\\28unsigned\\20int\\2c\\20SkBlendMode\\29\n1765:SkCodec::getPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const*\\29\n1766:SkCanvas::internalRestore\\28\\29\n1767:SkCanvas::init\\28sk_sp<SkDevice>\\29\n1768:SkCanvas::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n1769:SkCanvas::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n1770:SkCanvas::aboutToDraw\\28SkPaint\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkEnumBitMask<SkCanvas::PredrawFlags>\\29\n1771:SkBitmap::operator=\\28SkBitmap&&\\29\n1772:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\\28\\29\n1773:SkAutoPixmapStorage::tryAlloc\\28SkImageInfo\\20const&\\29\n1774:SkAAClip::SkAAClip\\28\\29\n1775:OT::glyf_accelerator_t::glyf_accelerator_t\\28hb_face_t*\\29\n1776:OT::VariationStore::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1777:OT::Layout::GPOS_impl::ValueFormat::sanitize_value_devices\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\29\\20const\n1778:OT::Layout::GPOS_impl::ValueFormat::apply_value\\28OT::hb_ot_apply_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20hb_glyph_position_t&\\29\\20const\n1779:OT::HVARVVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1780:GrTriangulator::VertexList::insert\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\29\n1781:GrTriangulator::Poly::addEdge\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Side\\2c\\20GrTriangulator*\\29\n1782:GrTriangulator::EdgeList::remove\\28GrTriangulator::Edge*\\29\n1783:GrStyledShape::operator=\\28GrStyledShape\\20const&\\29\n1784:GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n1785:GrResourceCache::purgeAsNeeded\\28\\29\n1786:GrRenderTask::addDependency\\28GrDrawingManager*\\2c\\20GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n1787:GrRenderTask::GrRenderTask\\28\\29\n1788:GrRenderTarget::onRelease\\28\\29\n1789:GrProxyProvider::findOrCreateProxyByUniqueKey\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxy::UseAllocator\\29\n1790:GrProcessorSet::operator==\\28GrProcessorSet\\20const&\\29\\20const\n1791:GrPathUtils::generateQuadraticPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint**\\2c\\20unsigned\\20int\\29\n1792:GrMeshDrawOp::QuadHelper::QuadHelper\\28GrMeshDrawTarget*\\2c\\20unsigned\\20long\\2c\\20int\\29\n1793:GrIsStrokeHairlineOrEquivalent\\28GrStyle\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n1794:GrImageContext::abandoned\\28\\29\n1795:GrGpuResource::registerWithCache\\28skgpu::Budgeted\\29\n1796:GrGpuBuffer::isMapped\\28\\29\\20const\n1797:GrGpu::submitToGpu\\28GrSyncCpu\\29\n1798:GrGpu::didWriteToSurface\\28GrSurface*\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1799:GrGeometryProcessor::ProgramImpl::setupUniformColor\\28GrGLSLFPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n1800:GrGLGpu::flushRenderTarget\\28GrGLRenderTarget*\\2c\\20bool\\29\n1801:GrFragmentProcessor::visitTextureEffects\\28std::__2::function<void\\20\\28GrTextureEffect\\20const&\\29>\\20const&\\29\\20const\n1802:GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n1803:GrCpuBuffer::ref\\28\\29\\20const\n1804:GrBufferAllocPool::makeSpace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n1805:GrBackendTextures::GetGLTextureInfo\\28GrBackendTexture\\20const&\\2c\\20GrGLTextureInfo*\\29\n1806:FilterLoop26_C\n1807:FT_Vector_Transform\n1808:FT_Vector_NormLen\n1809:FT_Outline_Transform\n1810:CFF::dict_opset_t::process_op\\28unsigned\\20int\\2c\\20CFF::interp_env_t<CFF::number_t>&\\29\n1811:AlmostBetweenUlps\\28float\\2c\\20float\\2c\\20float\\29\n1812:void\\20std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__emplace_back_slow_path<skia::textlayout::OneLineShaper::RunBlock&>\\28skia::textlayout::OneLineShaper::RunBlock&\\29\n1813:utext_openUChars_73\n1814:utext_char32At_73\n1815:ures_openWithType\\28UResourceBundle*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UResOpenType\\2c\\20UErrorCode*\\29\n1816:ures_openDirect_73\n1817:ures_getSize_73\n1818:uprv_min_73\n1819:uloc_forLanguageTag_73\n1820:uhash_openSize_73\n1821:udata_openChoice_73\n1822:ucptrie_internalSmallU8Index_73\n1823:ucptrie_get_73\n1824:ubidi_getMemory_73\n1825:ubidi_getClass_73\n1826:transform\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\29\n1827:toUpperOrTitle\\28int\\2c\\20int\\20\\28*\\29\\28void*\\2c\\20signed\\20char\\29\\2c\\20void*\\2c\\20char16_t\\20const**\\2c\\20int\\2c\\20signed\\20char\\29\n1828:strtod\n1829:strcspn\n1830:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__append\\28unsigned\\20long\\29\n1831:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::coalesce_pairwise_vectors<float>\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n1832:std::__2::locale::locale\\28std::__2::locale\\20const&\\29\n1833:std::__2::locale::classic\\28\\29\n1834:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_unshift\\28__mbstate_t&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n1835:std::__2::chrono::__libcpp_steady_clock_now\\28\\29\n1836:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__grow_by_and_replace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20char\\20const*\\29\n1837:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__fits_in_sso\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1838:std::__2::__wrap_iter<wchar_t*>::operator++\\5babi:v160004\\5d\\28\\29\n1839:std::__2::__wrap_iter<float*>\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>::insert<float\\20const*\\2c\\200>\\28std::__2::__wrap_iter<float\\20const*>\\2c\\20float\\20const*\\2c\\20float\\20const*\\29\n1840:std::__2::__wrap_iter<char*>::operator++\\5babi:v160004\\5d\\28\\29\n1841:std::__2::__throw_bad_variant_access\\5babi:v160004\\5d\\28\\29\n1842:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_front\\28skia::textlayout::OneLineShaper::RunBlock*&&\\29\n1843:std::__2::__shared_count::__release_shared\\5babi:v160004\\5d\\28\\29\n1844:std::__2::__num_get<wchar_t>::__stage2_int_prep\\28std::__2::ios_base&\\2c\\20wchar_t&\\29\n1845:std::__2::__num_get<wchar_t>::__do_widen\\28std::__2::ios_base&\\2c\\20wchar_t*\\29\\20const\n1846:std::__2::__num_get<char>::__stage2_int_prep\\28std::__2::ios_base&\\2c\\20char&\\29\n1847:std::__2::__itoa::__append1\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1848:sktext::gpu::VertexFiller::vertexStride\\28SkMatrix\\20const&\\29\\20const\n1849:skif::Mapping::adjustLayerSpace\\28SkMatrix\\20const&\\29\n1850:skif::LayerSpace<SkSize>::round\\28\\29\\20const\n1851:skif::FilterResult::Builder::~Builder\\28\\29\n1852:skif::FilterResult::Builder::Builder\\28skif::Context\\20const&\\29\n1853:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair&&\\29\n1854:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::removeIfExists\\28skgpu::UniqueKey\\20const&\\29\n1855:skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\\2c\\20true>::operator=\\28skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\\2c\\20true>&&\\29\n1856:skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::resize_back\\28int\\29\n1857:skia_private::TArray<SkCanvas::Lattice::RectType\\2c\\20true>::push_back_raw\\28int\\29\n1858:skia_png_sig_cmp\n1859:skia_png_set_progressive_read_fn\n1860:skia_png_set_longjmp_fn\n1861:skia_png_set_interlace_handling\n1862:skia_png_reciprocal\n1863:skia_png_read_chunk_header\n1864:skia_png_get_io_ptr\n1865:skia_png_calloc\n1866:skia::textlayout::TextLine::~TextLine\\28\\29\n1867:skia::textlayout::ParagraphStyle::ParagraphStyle\\28skia::textlayout::ParagraphStyle\\20const&\\29\n1868:skia::textlayout::ParagraphCacheKey::~ParagraphCacheKey\\28\\29\n1869:skia::textlayout::FontCollection::findTypefaces\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\2c\\20SkFontStyle\\2c\\20std::__2::optional<skia::textlayout::FontArguments>\\20const&\\29\n1870:skia::textlayout::Cluster::trimmedWidth\\28unsigned\\20long\\29\\20const\n1871:skgpu::ganesh::TextureOp::BatchSizeLimiter::createOp\\28GrTextureSetEntry*\\2c\\20int\\2c\\20GrAAType\\29\n1872:skgpu::ganesh::SurfaceFillContext::fillWithFP\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1873:skgpu::ganesh::SurfaceDrawContext::drawShapeUsingPathRenderer\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape&&\\2c\\20bool\\29\n1874:skgpu::ganesh::SurfaceDrawContext::drawRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const*\\29\n1875:skgpu::ganesh::SurfaceDrawContext::drawRRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20GrStyle\\20const&\\29\n1876:skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29\n1877:skgpu::ganesh::QuadPerEdgeAA::CalcIndexBufferOption\\28GrAAType\\2c\\20int\\29\n1878:skgpu::ganesh::LockTextureProxyView\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20GrImageTexGenPolicy\\2c\\20skgpu::Mipmapped\\29::$_0::operator\\28\\29\\28GrSurfaceProxyView\\20const&\\29\\20const\n1879:skgpu::ganesh::Device::targetProxy\\28\\29\n1880:skgpu::ganesh::ClipStack::getConservativeBounds\\28\\29\\20const\n1881:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::addTransferResult\\28skgpu::ganesh::SurfaceContext::PixelTransferResult\\20const&\\2c\\20SkISize\\2c\\20unsigned\\20long\\2c\\20skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>*\\29\n1882:skgpu::Plot::resetRects\\28\\29\n1883:skcms_TransferFunction_isPQish\n1884:skcms_TransferFunction_invert\n1885:skcms_Matrix3x3_concat\n1886:ps_dimension_add_t1stem\n1887:log2f\n1888:log\n1889:jcopy_sample_rows\n1890:icu_73::initSingletons\\28char\\20const*\\2c\\20UErrorCode&\\29\n1891:icu_73::\\28anonymous\\20namespace\\29::AliasReplacer::replaceLanguage\\28bool\\2c\\20bool\\2c\\20bool\\2c\\20icu_73::UVector&\\2c\\20UErrorCode&\\29\n1892:icu_73::UnicodeString::append\\28int\\29\n1893:icu_73::UnicodeSetStringSpan::UnicodeSetStringSpan\\28icu_73::UnicodeSet\\20const&\\2c\\20icu_73::UVector\\20const&\\2c\\20unsigned\\20int\\29\n1894:icu_73::UnicodeSet::spanUTF8\\28char\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n1895:icu_73::UnicodeSet::spanBack\\28char16_t\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n1896:icu_73::UnicodeSet::spanBackUTF8\\28char\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n1897:icu_73::UnicodeSet::retain\\28int\\20const*\\2c\\20int\\2c\\20signed\\20char\\29\n1898:icu_73::UnicodeSet::removeAllStrings\\28\\29\n1899:icu_73::UnicodeSet::operator=\\28icu_73::UnicodeSet\\20const&\\29\n1900:icu_73::UnicodeSet::complement\\28\\29\n1901:icu_73::UnicodeSet::_add\\28icu_73::UnicodeString\\20const&\\29\n1902:icu_73::UVector::indexOf\\28void*\\2c\\20int\\29\\20const\n1903:icu_73::UVector::UVector\\28void\\20\\28*\\29\\28void*\\29\\2c\\20signed\\20char\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20UErrorCode&\\29\n1904:icu_73::UCharsTrieBuilder::write\\28char16_t\\20const*\\2c\\20int\\29\n1905:icu_73::StringEnumeration::~StringEnumeration\\28\\29\n1906:icu_73::StackUResourceBundle::StackUResourceBundle\\28\\29\n1907:icu_73::RuleCharacterIterator::getPos\\28icu_73::RuleCharacterIterator::Pos&\\29\\20const\n1908:icu_73::RuleBasedBreakIterator::BreakCache::populatePreceding\\28UErrorCode&\\29\n1909:icu_73::ReorderingBuffer::previousCC\\28\\29\n1910:icu_73::Normalizer2Impl::compose\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20signed\\20char\\2c\\20signed\\20char\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n1911:icu_73::Normalizer2Factory::getNFCImpl\\28UErrorCode&\\29\n1912:icu_73::LocaleUtility::initLocaleFromName\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::Locale&\\29\n1913:icu_73::LocaleKeyFactory::~LocaleKeyFactory\\28\\29\n1914:icu_73::Locale::setToBogus\\28\\29\n1915:icu_73::CheckedArrayByteSink::CheckedArrayByteSink\\28char*\\2c\\20int\\29\n1916:icu_73::BreakIterator::createInstance\\28icu_73::Locale\\20const&\\2c\\20int\\2c\\20UErrorCode&\\29\n1917:hb_font_t::has_func\\28unsigned\\20int\\29\n1918:hb_buffer_create_similar\n1919:ft_service_list_lookup\n1920:fseek\n1921:fiprintf\n1922:fflush\n1923:expm1\n1924:emscripten::internal::MethodInvoker<void\\20\\28GrDirectContext::*\\29\\28\\29\\2c\\20void\\2c\\20GrDirectContext*>::invoke\\28void\\20\\28GrDirectContext::*\\20const&\\29\\28\\29\\2c\\20GrDirectContext*\\29\n1925:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n1926:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28SkFont&\\29\\2c\\20emscripten::val\\2c\\20SkFont&>::invoke\\28emscripten::val\\20\\28**\\29\\28SkFont&\\29\\2c\\20SkFont*\\29\n1927:do_putc\n1928:crc32_z\n1929:cf2_hintmap_insertHint\n1930:cf2_hintmap_build\n1931:cf2_glyphpath_pushPrevElem\n1932:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n1933:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n1934:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n1935:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n1936:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n1937:append_multitexture_lookup\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20int\\2c\\20GrGLSLVarying\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n1938:afm_stream_read_one\n1939:af_latin_hints_link_segments\n1940:af_latin_compute_stem_width\n1941:af_glyph_hints_reload\n1942:acosf\n1943:__sin\n1944:__cos\n1945:\\28anonymous\\20namespace\\29::PathSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n1946:VP8LHuffmanTablesDeallocate\n1947:UDataMemory_createNewInstance_73\n1948:SkWriter32::writeSampling\\28SkSamplingOptions\\20const&\\29\n1949:SkVertices::Builder::detach\\28\\29\n1950:SkUTF::NextUTF8WithReplacement\\28char\\20const**\\2c\\20char\\20const*\\29\n1951:SkTypeface_FreeType::~SkTypeface_FreeType\\28\\29\n1952:SkTypeface_FreeType::FaceRec::~FaceRec\\28\\29\n1953:SkTypeface::SkTypeface\\28SkFontStyle\\20const&\\2c\\20bool\\29\n1954:SkTreatAsSprite\\28SkMatrix\\20const&\\2c\\20SkISize\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20bool\\29\n1955:SkTextBlobBuilder::TightRunBounds\\28SkTextBlob::RunRecord\\20const&\\29\n1956:SkTextBlob::RunRecord::textSizePtr\\28\\29\\20const\n1957:SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::remove\\28skgpu::ScratchKey\\20const&\\2c\\20GrGpuResource\\20const*\\29\n1958:SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::insert\\28skgpu::ScratchKey\\20const&\\2c\\20GrGpuResource*\\29\n1959:SkTDStorage::insert\\28int\\2c\\20int\\2c\\20void\\20const*\\29\n1960:SkTDPQueue<\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\2c\\20&\\28anonymous\\20namespace\\29::RunIteratorQueue::CompareEntry\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\\2c\\20\\28int*\\20\\28*\\29\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\\290>::insert\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\29\n1961:SkSwizzler::Make\\28SkEncodedInfo\\20const&\\2c\\20unsigned\\20int\\20const*\\2c\\20SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\2c\\20SkIRect\\20const*\\29\n1962:SkSurface_Base::~SkSurface_Base\\28\\29\n1963:SkSurface::recordingContext\\28\\29\\20const\n1964:SkString::resize\\28unsigned\\20long\\29\n1965:SkStrikeSpec::SkStrikeSpec\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n1966:SkStrikeSpec::MakeMask\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n1967:SkStrikeSpec::MakeCanonicalized\\28SkFont\\20const&\\2c\\20SkPaint\\20const*\\29\n1968:SkStrikeCache::findOrCreateStrike\\28SkStrikeSpec\\20const&\\29\n1969:SkSpecialImages::MakeFromRaster\\28SkIRect\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1970:SkShaders::MatrixRec::apply\\28SkStageRec\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n1971:SkShaders::MatrixRec::MatrixRec\\28SkMatrix\\20const&\\29\n1972:SkShaders::Blend\\28SkBlendMode\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkShader>\\29\n1973:SkScan::FillPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkBlitter*\\29\n1974:SkScalerContext_FreeType::emboldenIfNeeded\\28FT_FaceRec_*\\2c\\20FT_GlyphSlotRec_*\\2c\\20unsigned\\20short\\29\n1975:SkSL::Type::displayName\\28\\29\\20const\n1976:SkSL::Type::checkForOutOfRangeLiteral\\28SkSL::Context\\20const&\\2c\\20double\\2c\\20SkSL::Position\\29\\20const\n1977:SkSL::SymbolTable::find\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1978:SkSL::String::Separator\\28\\29::Output::~Output\\28\\29\n1979:SkSL::RP::SlotManager::addSlotDebugInfoForGroup\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20int*\\2c\\20bool\\29\n1980:SkSL::RP::Generator::foldComparisonOp\\28SkSL::Operator\\2c\\20int\\29\n1981:SkSL::RP::Builder::branch_if_no_lanes_active\\28int\\29\n1982:SkSL::PrefixExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1983:SkSL::PipelineStage::PipelineStageCodeGenerator::typedVariable\\28SkSL::Type\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1984:SkSL::Parser::parseArrayDimensions\\28SkSL::Position\\2c\\20SkSL::Type\\20const**\\29\n1985:SkSL::Parser::arraySize\\28long\\20long*\\29\n1986:SkSL::Operator::operatorName\\28\\29\\20const\n1987:SkSL::ModifierFlags::paddedDescription\\28\\29\\20const\n1988:SkSL::ConstantFolder::GetConstantValue\\28SkSL::Expression\\20const&\\2c\\20double*\\29\n1989:SkSL::ConstantFolder::GetConstantInt\\28SkSL::Expression\\20const&\\2c\\20long\\20long*\\29\n1990:SkSL::Compiler::convertProgram\\28SkSL::ProgramKind\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::ProgramSettings\\20const&\\29\n1991:SkRuntimeEffect::findChild\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1992:SkResourceCache::remove\\28SkResourceCache::Rec*\\29\n1993:SkRegion::op\\28SkRegion\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkRegion::Op\\29\n1994:SkRegion::Iterator::Iterator\\28SkRegion\\20const&\\29\n1995:SkRecords::FillBounds::bounds\\28SkRecords::DrawArc\\20const&\\29\\20const\n1996:SkReadBuffer::setMemory\\28void\\20const*\\2c\\20unsigned\\20long\\29\n1997:SkRasterClip::SkRasterClip\\28SkIRect\\20const&\\29\n1998:SkRRect::writeToMemory\\28void*\\29\\20const\n1999:SkRRect::setRectXY\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n2000:SkPointPriv::DistanceToLineBetweenSqd\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPointPriv::Side*\\29\n2001:SkPoint::setNormalize\\28float\\2c\\20float\\29\n2002:SkPixmapUtils::SwapWidthHeight\\28SkImageInfo\\20const&\\29\n2003:SkPictureRecorder::finishRecordingAsPicture\\28\\29\n2004:SkPathPriv::ComputeFirstDirection\\28SkPath\\20const&\\29\n2005:SkPathEffect::asADash\\28SkPathEffect::DashInfo*\\29\\20const\n2006:SkPathEdgeIter::SkPathEdgeIter\\28SkPath\\20const&\\29\n2007:SkPath::rewind\\28\\29\n2008:SkPath::isLine\\28SkPoint*\\29\\20const\n2009:SkPath::incReserve\\28int\\2c\\20int\\2c\\20int\\29\n2010:SkPath::addOval\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2011:SkPaint::setStrokeCap\\28SkPaint::Cap\\29\n2012:SkPaint::refShader\\28\\29\\20const\n2013:SkOpSpan::setWindSum\\28int\\29\n2014:SkOpSegment::markAndChaseWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int\\2c\\20int\\2c\\20SkOpSpanBase**\\29\n2015:SkOpContourBuilder::addCurve\\28SkPath::Verb\\2c\\20SkPoint\\20const*\\2c\\20float\\29\n2016:SkOpAngle::starter\\28\\29\n2017:SkOpAngle::insert\\28SkOpAngle*\\29\n2018:SkNoDestructor<SkSL::String::Separator\\28\\29::Output>::SkNoDestructor\\28SkSL::String::Separator\\28\\29::Output&&\\29\n2019:SkMatrix::setSinCos\\28float\\2c\\20float\\29\n2020:SkMatrix::decomposeScale\\28SkSize*\\2c\\20SkMatrix*\\29\\20const\n2021:SkMaskFilter::MakeBlur\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n2022:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n2023:SkMD5::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n2024:SkLineClipper::IntersectLine\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkPoint*\\29\n2025:SkImage_GaneshBase::SkImage_GaneshBase\\28sk_sp<GrImageContext>\\2c\\20SkImageInfo\\2c\\20unsigned\\20int\\29\n2026:SkImageGenerator::onRefEncodedData\\28\\29\n2027:SkImage::makeShader\\28SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n2028:SkImage::makeRasterImage\\28GrDirectContext*\\2c\\20SkImage::CachingHint\\29\\20const\n2029:SkIDChangeListener::SkIDChangeListener\\28\\29\n2030:SkIDChangeListener::List::reset\\28\\29\n2031:SkGradientBaseShader::flatten\\28SkWriteBuffer&\\29\\20const\n2032:SkFontMgr::RefEmpty\\28\\29\n2033:SkFont::setEdging\\28SkFont::Edging\\29\n2034:SkEvalQuadAt\\28SkPoint\\20const*\\2c\\20float\\29\n2035:SkEncodedInfo::makeImageInfo\\28\\29\\20const\n2036:SkEdgeClipper::next\\28SkPoint*\\29\n2037:SkDevice::scalerContextFlags\\28\\29\\20const\n2038:SkConic::evalAt\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n2039:SkColorInfo::SkColorInfo\\28SkColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n2040:SkCodec::skipScanlines\\28int\\29\n2041:SkChopCubicAtHalf\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2042:SkCapabilities::RasterBackend\\28\\29\n2043:SkCanvas::topDevice\\28\\29\\20const\n2044:SkCanvas::saveLayer\\28SkCanvas::SaveLayerRec\\20const&\\29\n2045:SkCanvas::restore\\28\\29\n2046:SkCanvas::imageInfo\\28\\29\\20const\n2047:SkCanvas::drawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n2048:SkCanvas::drawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n2049:SkCanvas::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n2050:SkBmpBaseCodec::~SkBmpBaseCodec\\28\\29\n2051:SkBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n2052:SkBlendMode\\20SkReadBuffer::read32LE<SkBlendMode>\\28SkBlendMode\\29\n2053:SkBitmap::operator=\\28SkBitmap\\20const&\\29\n2054:SkBitmap::extractSubset\\28SkBitmap*\\2c\\20SkIRect\\20const&\\29\\20const\n2055:SkBinaryWriteBuffer::writeByteArray\\28void\\20const*\\2c\\20unsigned\\20long\\29\n2056:SkBinaryWriteBuffer::SkBinaryWriteBuffer\\28SkSerialProcs\\20const&\\29\n2057:SkBaseShadowTessellator::handleLine\\28SkPoint\\20const&\\29\n2058:SkAAClip::setRegion\\28SkRegion\\20const&\\29\n2059:R\n2060:OT::hb_ot_apply_context_t::_set_glyph_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n2061:OT::cmap::find_subtable\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n2062:GrXPFactory::FromBlendMode\\28SkBlendMode\\29\n2063:GrTriangulator::setBottom\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2064:GrTriangulator::mergeCollinearEdges\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2065:GrTriangulator::Edge::disconnect\\28\\29\n2066:GrThreadSafeCache::find\\28skgpu::UniqueKey\\20const&\\29\n2067:GrThreadSafeCache::add\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29\n2068:GrThreadSafeCache::Entry::makeEmpty\\28\\29\n2069:GrSurfaceProxyView::operator==\\28GrSurfaceProxyView\\20const&\\29\\20const\n2070:GrSurfaceProxyView::Copy\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Mipmapped\\2c\\20SkIRect\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n2071:GrSurfaceProxyPriv::doLazyInstantiation\\28GrResourceProvider*\\29\n2072:GrSurfaceProxy::isFunctionallyExact\\28\\29\\20const\n2073:GrSurfaceProxy::Copy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20sk_sp<GrRenderTask>*\\29\n2074:GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags\\28\\29\\20const\n2075:GrSimpleMeshDrawOpHelper::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrProcessorAnalysisColor*\\29\n2076:GrSimpleMeshDrawOpHelper::CreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrProcessorSet&&\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\2c\\20GrPipeline::InputFlags\\2c\\20GrUserStencilSettings\\20const*\\29\n2077:GrSimpleMeshDrawOpHelper::CreatePipeline\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20skgpu::Swizzle\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrProcessorSet&&\\2c\\20GrPipeline::InputFlags\\29\n2078:GrResourceProvider::findOrMakeStaticBuffer\\28GrGpuBufferType\\2c\\20unsigned\\20long\\2c\\20void\\20const*\\2c\\20skgpu::UniqueKey\\20const&\\29\n2079:GrResourceProvider::findOrMakeStaticBuffer\\28GrGpuBufferType\\2c\\20unsigned\\20long\\2c\\20skgpu::UniqueKey\\20const&\\2c\\20void\\20\\28*\\29\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\\29\n2080:GrResourceCache::findAndRefScratchResource\\28skgpu::ScratchKey\\20const&\\29\n2081:GrRecordingContextPriv::makeSFC\\28GrImageInfo\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n2082:GrQuadUtils::TessellationHelper::Vertices::moveAlong\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n2083:GrQuad::asRect\\28SkRect*\\29\\20const\n2084:GrProcessorSet::GrProcessorSet\\28GrProcessorSet&&\\29\n2085:GrPathUtils::generateCubicPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint**\\2c\\20unsigned\\20int\\29\n2086:GrGpu::createBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n2087:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20char\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n2088:GrGLTexture::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n2089:GrGLSLShaderBuilder::appendColorGamutXform\\28SkString*\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n2090:GrGLSLColorSpaceXformHelper::emitCode\\28GrGLSLUniformHandler*\\2c\\20GrColorSpaceXform\\20const*\\2c\\20unsigned\\20int\\29\n2091:GrGLRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n2092:GrGLRenderTarget::bindInternal\\28unsigned\\20int\\2c\\20bool\\29\n2093:GrGLGpu::getErrorAndCheckForOOM\\28\\29\n2094:GrGLGpu::bindTexture\\28int\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20GrGLTexture*\\29\n2095:GrFragmentProcessors::Make\\28SkShader\\20const*\\2c\\20GrFPArgs\\20const&\\2c\\20SkMatrix\\20const&\\29\n2096:GrFragmentProcessor::visitWithImpls\\28std::__2::function<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\20const\n2097:GrFragmentProcessor::ColorMatrix\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20float\\20const*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n2098:GrDrawingManager::appendTask\\28sk_sp<GrRenderTask>\\29\n2099:GrColorInfo::GrColorInfo\\28GrColorInfo\\20const&\\29\n2100:GrCaps::isFormatCompressed\\28GrBackendFormat\\20const&\\29\\20const\n2101:GrAAConvexTessellator::lineTo\\28SkPoint\\20const&\\2c\\20GrAAConvexTessellator::CurveState\\29\n2102:FT_Select_Metrics\n2103:FT_Select_Charmap\n2104:FT_Get_Next_Char\n2105:FT_Get_Module_Interface\n2106:FT_Done_Size\n2107:DecodeImageStream\n2108:CFF::opset_t<CFF::number_t>::process_op\\28unsigned\\20int\\2c\\20CFF::interp_env_t<CFF::number_t>&\\29\n2109:CFF::Charset::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n2110:wuffs_gif__decoder__num_decoded_frames\n2111:void\\20std::__2::vector<sk_sp<SkFontMgr>\\2c\\20std::__2::allocator<sk_sp<SkFontMgr>>>::__push_back_slow_path<sk_sp<SkFontMgr>\\20const&>\\28sk_sp<SkFontMgr>\\20const&\\29\n2112:void\\20std::__2::reverse\\5babi:v160004\\5d<wchar_t*>\\28wchar_t*\\2c\\20wchar_t*\\29\n2113:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29.2\n2114:void\\20merge_sort<&sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\29\n2115:void\\20merge_sort<&sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\29\n2116:void\\20icu_73::\\28anonymous\\20namespace\\29::MixedBlocks::extend<unsigned\\20int>\\28unsigned\\20int\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n2117:void\\20emscripten::internal::MemberAccess<StrokeOpts\\2c\\20float>::setWire<StrokeOpts>\\28float\\20StrokeOpts::*\\20const&\\2c\\20StrokeOpts&\\2c\\20float\\29\n2118:validate_offsetToRestore\\28SkReadBuffer*\\2c\\20unsigned\\20long\\29\n2119:utrie2_enum_73\n2120:utext_clone_73\n2121:ustr_hashUCharsN_73\n2122:ures_appendResPath\\28UResourceBundle*\\2c\\20char\\20const*\\2c\\20int\\2c\\20UErrorCode*\\29\n2123:uprv_isInvariantUString_73\n2124:umutablecptrie_set_73\n2125:umutablecptrie_close_73\n2126:uloc_getVariant_73\n2127:uloc_canonicalize_73\n2128:uhash_setValueDeleter_73\n2129:ubidi_setPara_73\n2130:ubidi_getVisualRun_73\n2131:ubidi_getRuns_73\n2132:u_strstr_73\n2133:u_getPropertyValueEnum_73\n2134:u_getIntPropertyValue_73\n2135:tt_set_mm_blend\n2136:tt_face_get_ps_name\n2137:trinkle\n2138:strtox.1\n2139:strtoul\n2140:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::release\\5babi:v160004\\5d\\28\\29\n2141:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20void*>*>\\2c\\20bool>\\20std::__2::__hash_table<std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20std::__2::__unordered_map_hasher<GrTriangulator::Vertex*\\2c\\20std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20std::__2::hash<GrTriangulator::Vertex*>\\2c\\20std::__2::equal_to<GrTriangulator::Vertex*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrTriangulator::Vertex*\\2c\\20std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20std::__2::equal_to<GrTriangulator::Vertex*>\\2c\\20std::__2::hash<GrTriangulator::Vertex*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>>>::__emplace_unique_key_args<GrTriangulator::Vertex*\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrTriangulator::Vertex*\\20const&>\\2c\\20std::__2::tuple<>>\\28GrTriangulator::Vertex*\\20const&\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrTriangulator::Vertex*\\20const&>&&\\2c\\20std::__2::tuple<>&&\\29\n2142:std::__2::pair<char\\20const*\\2c\\20char*>::pair\\5babi:v160004\\5d<char\\20const*\\2c\\20char*\\2c\\20\\28void*\\290>\\28char\\20const*&&\\2c\\20char*&&\\29\n2143:std::__2::moneypunct<wchar_t\\2c\\20false>::do_decimal_point\\28\\29\\20const\n2144:std::__2::moneypunct<char\\2c\\20false>::do_decimal_point\\28\\29\\20const\n2145:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::istreambuf_iterator\\5babi:v160004\\5d\\28std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>&\\29\n2146:std::__2::ios_base::good\\5babi:v160004\\5d\\28\\29\\20const\n2147:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot*\\29\\20const\n2148:std::__2::ctype<char>::toupper\\5babi:v160004\\5d\\28char\\29\\20const\n2149:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n2150:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\20std::__2::__scan_keyword\\5babi:v160004\\5d<std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::ctype<wchar_t>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n2151:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n2152:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__fits_in_sso\\5babi:v160004\\5d\\28unsigned\\20long\\29\n2153:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\20std::__2::__scan_keyword\\5babi:v160004\\5d<std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::ctype<char>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n2154:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<char\\20const*\\2c\\20void>\\28char\\20const*\\2c\\20char\\20const*\\29\n2155:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n2156:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_short_size\\5babi:v160004\\5d\\28\\29\\20const\n2157:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_no_alias<true>\\28char\\20const*\\2c\\20unsigned\\20long\\29\n2158:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::__pbump\\5babi:v160004\\5d\\28long\\29\n2159:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n2160:std::__2::allocator_traits<std::__2::allocator<wchar_t>>::deallocate\\5babi:v160004\\5d\\28std::__2::allocator<wchar_t>&\\2c\\20wchar_t*\\2c\\20unsigned\\20long\\29\n2161:std::__2::allocator_traits<std::__2::allocator<char>>::deallocate\\5babi:v160004\\5d\\28std::__2::allocator<char>&\\2c\\20char*\\2c\\20unsigned\\20long\\29\n2162:std::__2::__num_put_base::__format_int\\28char*\\2c\\20char\\20const*\\2c\\20bool\\2c\\20unsigned\\20int\\29\n2163:std::__2::__num_put_base::__format_float\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n2164:std::__2::__itoa::__append8\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2165:sktext::gpu::VertexFiller::deviceRectAndCheckTransform\\28SkMatrix\\20const&\\29\\20const\n2166:sktext::gpu::TextBlob::Key::operator==\\28sktext::gpu::TextBlob::Key\\20const&\\29\\20const\n2167:sktext::gpu::GlyphVector::packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\n2168:sktext::SkStrikePromise::strike\\28\\29\n2169:skif::RoundIn\\28SkRect\\29\n2170:skif::LayerSpace<SkMatrix>::inverseMapRect\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::LayerSpace<SkIRect>*\\29\\20const\n2171:skif::FilterResult::applyTransform\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkMatrix>\\20const&\\2c\\20SkSamplingOptions\\20const&\\29\\20const\n2172:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2173:skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n2174:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2175:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair&&\\29\n2176:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::resize\\28int\\29\n2177:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n2178:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::move\\28void*\\29\n2179:skia_private::TArray<SkRasterPipeline_MemoryCtxInfo\\2c\\20true>::push_back\\28SkRasterPipeline_MemoryCtxInfo&&\\29\n2180:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20true>::push_back\\28SkRGBA4f<\\28SkAlphaType\\293>&&\\29\n2181:skia_png_set_text_2\n2182:skia_png_set_palette_to_rgb\n2183:skia_png_handle_IHDR\n2184:skia_png_handle_IEND\n2185:skia_png_destroy_write_struct\n2186:skia::textlayout::operator==\\28skia::textlayout::FontArguments\\20const&\\2c\\20skia::textlayout::FontArguments\\20const&\\29\n2187:skia::textlayout::TextWrapper::TextStretch::extend\\28skia::textlayout::Cluster*\\29\n2188:skia::textlayout::FontCollection::getFontManagerOrder\\28\\29\\20const\n2189:skia::textlayout::FontArguments::FontArguments\\28skia::textlayout::FontArguments\\20const&\\29\n2190:skia::textlayout::Decorations::calculateGaps\\28skia::textlayout::TextLine::ClipContext\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n2191:skia::textlayout::Block&\\20skia_private::TArray<skia::textlayout::Block\\2c\\20true>::emplace_back<unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20skia::textlayout::TextStyle\\20const&>\\28unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20skia::textlayout::TextStyle\\20const&\\29\n2192:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::fixedFunctionFlags\\28\\29\\20const\n2193:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\\28SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n2194:skgpu::ganesh::SurfaceFillContext::SurfaceFillContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n2195:skgpu::ganesh::SurfaceDrawContext::drawShape\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape&&\\29\n2196:skgpu::ganesh::SurfaceDrawContext::drawPaint\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\29\n2197:skgpu::ganesh::SurfaceDrawContext::MakeWithFallback\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\2c\\20SkISize\\2c\\20SkSurfaceProps\\20const&\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n2198:skgpu::ganesh::SurfaceContext::rescaleInto\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29\n2199:skgpu::ganesh::SurfaceContext::PixelTransferResult::operator=\\28skgpu::ganesh::SurfaceContext::PixelTransferResult&&\\29\n2200:skgpu::ganesh::SmallPathAtlasMgr::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n2201:skgpu::ganesh::OpsTask::~OpsTask\\28\\29\n2202:skgpu::ganesh::OpsTask::setColorLoadOp\\28GrLoadOp\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n2203:skgpu::ganesh::OpsTask::deleteOps\\28\\29\n2204:skgpu::ganesh::FillRectOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n2205:skgpu::ganesh::Device::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29::$_0::operator\\28\\29\\28int\\29\\20const\n2206:skgpu::ganesh::ClipStack::~ClipStack\\28\\29\n2207:skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::~TClientMappedBufferManager\\28\\29\n2208:skgpu::Swizzle::apply\\28SkRasterPipeline*\\29\\20const\n2209:skgpu::Plot::addSubImage\\28int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n2210:skgpu::GetLCDBlendFormula\\28SkBlendMode\\29\n2211:skcms_TransferFunction_isHLGish\n2212:sk_srgb_linear_singleton\\28\\29\n2213:shr\n2214:shl\n2215:setRegionCheck\\28SkRegion*\\2c\\20SkRegion\\20const&\\29\n2216:res_getTableItemByIndex_73\n2217:res_getArrayItem_73\n2218:res_findResource_73\n2219:read_header\\28SkStream*\\2c\\20SkPngChunkReader*\\2c\\20SkCodec**\\2c\\20png_struct_def**\\2c\\20png_info_def**\\29\n2220:ps_dimension_set_mask_bits\n2221:operator==\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n2222:mbrtowc\n2223:jround_up\n2224:jpeg_make_d_derived_tbl\n2225:init\\28\\29\n2226:ilogbf\n2227:icu_73::locale_set_default_internal\\28char\\20const*\\2c\\20UErrorCode&\\29\n2228:icu_73::compute\\28int\\2c\\20icu_73::ReadArray2D\\20const&\\2c\\20icu_73::ReadArray2D\\20const&\\2c\\20icu_73::ReadArray1D\\20const&\\2c\\20icu_73::ReadArray1D\\20const&\\2c\\20icu_73::Array1D&\\2c\\20icu_73::Array1D&\\2c\\20icu_73::Array1D&\\29\n2229:icu_73::UnicodeString::getChar32Start\\28int\\29\\20const\n2230:icu_73::UnicodeString::extract\\28int\\2c\\20int\\2c\\20char*\\2c\\20int\\2c\\20icu_73::UnicodeString::EInvariant\\29\\20const\n2231:icu_73::UnicodeString::doReplace\\28int\\2c\\20int\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20int\\2c\\20int\\29\n2232:icu_73::UnicodeString::copyFrom\\28icu_73::UnicodeString\\20const&\\2c\\20signed\\20char\\29\n2233:icu_73::UnicodeString::UnicodeString\\28signed\\20char\\2c\\20icu_73::ConstChar16Ptr\\2c\\20int\\29\n2234:icu_73::UnicodeSet::setToBogus\\28\\29\n2235:icu_73::UnicodeSet::freeze\\28\\29\n2236:icu_73::UnicodeSet::copyFrom\\28icu_73::UnicodeSet\\20const&\\2c\\20signed\\20char\\29\n2237:icu_73::UnicodeSet::add\\28int\\20const*\\2c\\20int\\2c\\20signed\\20char\\29\n2238:icu_73::UnicodeSet::_toPattern\\28icu_73::UnicodeString&\\2c\\20signed\\20char\\29\\20const\n2239:icu_73::UnicodeSet::UnicodeSet\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\n2240:icu_73::UVector::removeElementAt\\28int\\29\n2241:icu_73::UDataPathIterator::next\\28UErrorCode*\\29\n2242:icu_73::StringTrieBuilder::writeNode\\28int\\2c\\20int\\2c\\20int\\29\n2243:icu_73::StringEnumeration::StringEnumeration\\28\\29\n2244:icu_73::SimpleFilteredSentenceBreakIterator::breakExceptionAt\\28int\\29\n2245:icu_73::RuleBasedBreakIterator::DictionaryCache::reset\\28\\29\n2246:icu_73::RuleBasedBreakIterator::BreakCache::reset\\28int\\2c\\20int\\29\n2247:icu_73::RuleBasedBreakIterator::BreakCache::populateNear\\28int\\2c\\20UErrorCode&\\29\n2248:icu_73::RuleBasedBreakIterator::BreakCache::populateFollowing\\28\\29\n2249:icu_73::ResourceDataValue::~ResourceDataValue\\28\\29\n2250:icu_73::ReorderingBuffer::init\\28int\\2c\\20UErrorCode&\\29\n2251:icu_73::Normalizer2Impl::makeFCD\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20icu_73::ReorderingBuffer*\\2c\\20UErrorCode&\\29\\20const\n2252:icu_73::Normalizer2Impl::hasCompBoundaryBefore\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\29\\20const\n2253:icu_73::Normalizer2Impl::decomposeShort\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20icu_73::Normalizer2Impl::StopAt\\2c\\20signed\\20char\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n2254:icu_73::Normalizer2Impl::addPropertyStarts\\28USetAdder\\20const*\\2c\\20UErrorCode&\\29\\20const\n2255:icu_73::ICU_Utility::skipWhitespace\\28icu_73::UnicodeString\\20const&\\2c\\20int&\\2c\\20signed\\20char\\29\n2256:hb_ucd_get_unicode_funcs\n2257:hb_syllabic_insert_dotted_circles\\28hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\n2258:hb_shape_full\n2259:hb_serialize_context_t::~hb_serialize_context_t\\28\\29\n2260:hb_serialize_context_t::resolve_links\\28\\29\n2261:hb_serialize_context_t::reset\\28\\29\n2262:hb_lazy_loader_t<OT::cff1_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cff1_accelerator_t\\2c\\2016u>\\2c\\20hb_face_t\\2c\\2016u\\2c\\20OT::cff1_accelerator_t>::get\\28\\29\\20const\n2263:hb_lazy_loader_t<AAT::feat\\2c\\20hb_table_lazy_loader_t<AAT::feat\\2c\\2034u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2034u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2264:hb_language_from_string\n2265:hb_font_t::mults_changed\\28\\29\n2266:hb_font_destroy\n2267:hb_buffer_t::next_glyph\\28\\29\n2268:get_sof\n2269:ftell\n2270:ft_var_readpackedpoints\n2271:ft_mem_strdup\n2272:float\\20emscripten::internal::MemberAccess<StrokeOpts\\2c\\20float>::getWire<StrokeOpts>\\28float\\20StrokeOpts::*\\20const&\\2c\\20StrokeOpts\\20const&\\29\n2273:findLikelySubtags\\28char\\20const*\\2c\\20char*\\2c\\20int\\2c\\20UErrorCode*\\29\n2274:fill_window\n2275:exp\n2276:encodeImage\\28GrDirectContext*\\2c\\20sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\n2277:emscripten::val\\20MakeTypedArray<float>\\28int\\2c\\20float\\20const*\\29\n2278:emscripten::internal::MethodInvoker<float\\20\\28SkContourMeasure::*\\29\\28\\29\\20const\\2c\\20float\\2c\\20SkContourMeasure\\20const*>::invoke\\28float\\20\\28SkContourMeasure::*\\20const&\\29\\28\\29\\20const\\2c\\20SkContourMeasure\\20const*\\29\n2279:emscripten::internal::Invoker<sk_sp<SkAnimatedImage>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkAnimatedImage>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2280:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\\2c\\20bool\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&>::invoke\\28bool\\20\\28**\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\\2c\\20SkPath*\\2c\\20SkPath*\\29\n2281:dquad_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2282:do_clip_op\\28SkReadBuffer*\\2c\\20SkCanvas*\\2c\\20SkRegion::Op\\2c\\20SkClipOp*\\29\n2283:do_anti_hairline\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkIRect\\20const*\\2c\\20SkBlitter*\\29\n2284:doWriteReverse\\28char16_t\\20const*\\2c\\20int\\2c\\20char16_t*\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20UErrorCode*\\29\n2285:doWriteForward\\28char16_t\\20const*\\2c\\20int\\2c\\20char16_t*\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20UErrorCode*\\29\n2286:dline_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2287:dispose_chunk\n2288:direct_blur_y\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n2289:decltype\\28fp\\28\\28SkRecords::NoOp\\29\\28\\29\\29\\29\\20SkRecord::Record::visit<SkRecords::Draw&>\\28SkRecords::Draw&\\29\\20const\n2290:dcubic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2291:dconic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2292:crop_rect_edge\\28SkRect\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n2293:createTagStringWithAlternates\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20icu_73::ByteSink&\\2c\\20UErrorCode*\\29\n2294:createPath\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20icu_73::CharString&\\2c\\20UErrorCode*\\29\n2295:char*\\20std::__2::__rewrap_iter\\5babi:v160004\\5d<char*\\2c\\20char*\\2c\\20std::__2::__unwrap_iter_impl<char*\\2c\\20true>>\\28char*\\2c\\20char*\\29\n2296:cff_slot_load\n2297:cff_parse_real\n2298:cff_index_get_sid_string\n2299:cff_index_access_element\n2300:cf2_doStems\n2301:cf2_doFlex\n2302:byn$mgfn-shared$tt_cmap8_get_info\n2303:byn$mgfn-shared$tt_cmap0_get_info\n2304:byn$mgfn-shared$skia_png_set_strip_16\n2305:byn$mgfn-shared$isBidiControl\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n2306:byn$mgfn-shared$SkSL::Tracer::line\\28int\\29\n2307:byn$mgfn-shared$AlmostBequalUlps\\28float\\2c\\20float\\29\n2308:buffer_verify_error\\28hb_buffer_t*\\2c\\20hb_font_t*\\2c\\20char\\20const*\\2c\\20...\\29\n2309:blur_y_rect\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n2310:blur_column\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28unsigned\\20char*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\\20const\n2311:af_sort_and_quantize_widths\n2312:af_glyph_hints_align_weak_points\n2313:af_glyph_hints_align_strong_points\n2314:af_face_globals_new\n2315:af_cjk_compute_stem_width\n2316:add_huff_table\n2317:addPoint\\28UBiDi*\\2c\\20int\\2c\\20int\\29\n2318:_addExtensionToList\\28ExtensionListEntry**\\2c\\20ExtensionListEntry*\\2c\\20signed\\20char\\29\n2319:__uselocale\n2320:__math_xflow\n2321:__cxxabiv1::__base_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n2322:\\28anonymous\\20namespace\\29::make_vertices_spec\\28bool\\2c\\20bool\\29\n2323:\\28anonymous\\20namespace\\29::gather_lines_and_quads\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<int\\2c\\20true>*\\2c\\20skia_private::TArray<float\\2c\\20true>*\\29::$_1::operator\\28\\29\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20bool\\29\\20const\n2324:\\28anonymous\\20namespace\\29::draw_stencil_rect\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrHardClip\\20const&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\29\n2325:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n2326:\\28anonymous\\20namespace\\29::GaussPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n2327:\\28anonymous\\20namespace\\29::CacheImpl::removeInternal\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*\\29\n2328:WebPRescalerExport\n2329:WebPInitAlphaProcessing\n2330:WebPFreeDecBuffer\n2331:WebPDemuxDelete\n2332:VP8SetError\n2333:VP8LInverseTransform\n2334:VP8LDelete\n2335:VP8LColorCacheClear\n2336:UDataMemory_init_73\n2337:TT_Load_Context\n2338:StringBuffer\\20apply_format_string<1024>\\28char\\20const*\\2c\\20void*\\2c\\20char\\20\\28&\\29\\20\\5b1024\\5d\\2c\\20SkString*\\29\n2339:SkYUVAPixmaps::operator=\\28SkYUVAPixmaps\\20const&\\29\n2340:SkYUVAPixmapInfo::SupportedDataTypes::enableDataType\\28SkYUVAPixmapInfo::DataType\\2c\\20int\\29\n2341:SkWriter32::writeMatrix\\28SkMatrix\\20const&\\29\n2342:SkWriter32::snapshotAsData\\28\\29\\20const\n2343:SkVertices::uniqueID\\28\\29\\20const\n2344:SkVertices::approximateSize\\28\\29\\20const\n2345:SkUnicode::convertUtf8ToUtf16\\28char\\20const*\\2c\\20int\\29\n2346:SkUTF::UTF16ToUTF8\\28char*\\2c\\20int\\2c\\20unsigned\\20short\\20const*\\2c\\20unsigned\\20long\\29\n2347:SkTypefaceCache::NewTypefaceID\\28\\29\n2348:SkTextBlobRunIterator::next\\28\\29\n2349:SkTextBlobRunIterator::SkTextBlobRunIterator\\28SkTextBlob\\20const*\\29\n2350:SkTextBlobBuilder::SkTextBlobBuilder\\28\\29\n2351:SkTextBlobBuilder::ConservativeRunBounds\\28SkTextBlob::RunRecord\\20const&\\29\n2352:SkTSpan::closestBoundedT\\28SkDPoint\\20const&\\29\\20const\n2353:SkTSect::updateBounded\\28SkTSpan*\\2c\\20SkTSpan*\\2c\\20SkTSpan*\\29\n2354:SkTSect::trim\\28SkTSpan*\\2c\\20SkTSect*\\29\n2355:SkTDStorage::erase\\28int\\2c\\20int\\29\n2356:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::percolateUpIfNecessary\\28int\\29\n2357:SkSurfaces::Raster\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20SkSurfaceProps\\20const*\\29\n2358:SkSurfaceProps::SkSurfaceProps\\28unsigned\\20int\\2c\\20SkPixelGeometry\\2c\\20float\\2c\\20float\\29\n2359:SkStrokerPriv::JoinFactory\\28SkPaint::Join\\29\n2360:SkStrokeRec::setStrokeStyle\\28float\\2c\\20bool\\29\n2361:SkStrokeRec::setFillStyle\\28\\29\n2362:SkStrokeRec::applyToPath\\28SkPath*\\2c\\20SkPath\\20const&\\29\\20const\n2363:SkString::set\\28char\\20const*\\29\n2364:SkStrikeSpec::findOrCreateStrike\\28\\29\\20const\n2365:SkStrikeSpec::MakeWithNoDevice\\28SkFont\\20const&\\2c\\20SkPaint\\20const*\\29\n2366:SkStrike::unlock\\28\\29\n2367:SkStrike::lock\\28\\29\n2368:SkSharedMutex::SkSharedMutex\\28\\29\n2369:SkShadowTessellator::MakeSpot\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n2370:SkShaders::Empty\\28\\29\n2371:SkShaders::Color\\28unsigned\\20int\\29\n2372:SkShaderBase::appendRootStages\\28SkStageRec\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n2373:SkScalerContext::~SkScalerContext\\28\\29.1\n2374:SkSL::write_stringstream\\28SkSL::StringStream\\20const&\\2c\\20SkSL::OutputStream&\\29\n2375:SkSL::evaluate_3_way_intrinsic\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n2376:SkSL::VarDeclaration::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::VariableStorage\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2377:SkSL::Type::priority\\28\\29\\20const\n2378:SkSL::Type::checkIfUsableInArray\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\\20const\n2379:SkSL::SymbolTable::takeOwnershipOfString\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n2380:SkSL::SymbolTable::isBuiltinType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n2381:SkSL::StructType::slotCount\\28\\29\\20const\n2382:SkSL::RP::SlotManager::mapVariableToSlots\\28SkSL::Variable\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n2383:SkSL::RP::Program::appendStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkSL::RP::Callbacks*\\2c\\20SkSpan<float\\20const>\\29\\20const\n2384:SkSL::RP::Generator::pushVectorizedExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n2385:SkSL::RP::Builder::ternary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n2386:SkSL::RP::Builder::simplifyPopSlotsUnmasked\\28SkSL::RP::SlotRange*\\29\n2387:SkSL::RP::Builder::pop_slots_unmasked\\28SkSL::RP::SlotRange\\29\n2388:SkSL::RP::Builder::pad_stack\\28int\\29\n2389:SkSL::RP::Builder::exchange_src\\28\\29\n2390:SkSL::ProgramUsage::remove\\28SkSL::ProgramElement\\20const&\\29\n2391:SkSL::ProgramUsage::isDead\\28SkSL::Variable\\20const&\\29\\20const\n2392:SkSL::Pool::~Pool\\28\\29\n2393:SkSL::PipelineStage::PipelineStageCodeGenerator::typeName\\28SkSL::Type\\20const&\\29\n2394:SkSL::LiteralType::priority\\28\\29\\20const\n2395:SkSL::IndexExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2396:SkSL::GLSLCodeGenerator::writeAnyConstructor\\28SkSL::AnyConstructor\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n2397:SkSL::ExpressionArray::clone\\28\\29\\20const\n2398:SkSL::Compiler::errorText\\28bool\\29\n2399:SkSL::Block::Make\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2400:SkSL::Block::MakeBlock\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2401:SkSL::Analysis::DetectVarDeclarationWithoutScope\\28SkSL::Statement\\20const&\\2c\\20SkSL::ErrorReporter*\\29\n2402:SkRuntimeShaderBuilder::~SkRuntimeShaderBuilder\\28\\29\n2403:SkRuntimeShaderBuilder::makeShader\\28SkMatrix\\20const*\\29\\20const\n2404:SkRuntimeShaderBuilder::SkRuntimeShaderBuilder\\28sk_sp<SkRuntimeEffect>\\29\n2405:SkRuntimeEffectPriv::TransformUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkColorSpace\\20const*\\29\n2406:SkRuntimeEffect::getRPProgram\\28SkSL::DebugTracePriv*\\29\\20const\n2407:SkRegion::getBoundaryPath\\28SkPath*\\29\\20const\n2408:SkRegion::Spanerator::next\\28int*\\2c\\20int*\\29\n2409:SkRegion::SkRegion\\28SkRegion\\20const&\\29\n2410:SkReduceOrder::Quad\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2411:SkReadBuffer::skipByteArray\\28unsigned\\20long*\\29\n2412:SkReadBuffer::readSampling\\28\\29\n2413:SkReadBuffer::readRRect\\28SkRRect*\\29\n2414:SkReadBuffer::checkInt\\28int\\2c\\20int\\29\n2415:SkRasterPipeline::appendMatrix\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\29\n2416:SkQuads::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2417:SkQuadraticEdge::updateQuadratic\\28\\29\n2418:SkPngCodec::~SkPngCodec\\28\\29.1\n2419:SkPngCodec::processData\\28\\29\n2420:SkPixmap::readPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\20const\n2421:SkPictureRecord::~SkPictureRecord\\28\\29\n2422:SkPicture::~SkPicture\\28\\29.1\n2423:SkPathStroker::quadStroke\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n2424:SkPathStroker::preJoinTo\\28SkPoint\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20bool\\29\n2425:SkPathStroker::intersectRay\\28SkQuadConstruct*\\2c\\20SkPathStroker::IntersectRayType\\29\\20const\n2426:SkPathStroker::cubicStroke\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n2427:SkPathStroker::conicStroke\\28SkConic\\20const&\\2c\\20SkQuadConstruct*\\29\n2428:SkPathMeasure::isClosed\\28\\29\n2429:SkPathEffectBase::getFlattenableType\\28\\29\\20const\n2430:SkPathBuilder::moveTo\\28SkPoint\\29\n2431:SkPathBuilder::incReserve\\28int\\2c\\20int\\29\n2432:SkPathBuilder::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2433:SkPath::isLastContourClosed\\28\\29\\20const\n2434:SkPath::addRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2435:SkPaintToGrPaintReplaceShader\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n2436:SkPaint::setStrokeMiter\\28float\\29\n2437:SkPaint::setStrokeJoin\\28SkPaint::Join\\29\n2438:SkOpSpanBase::mergeMatches\\28SkOpSpanBase*\\29\n2439:SkOpSpanBase::addOpp\\28SkOpSpanBase*\\29\n2440:SkOpSegment::subDivide\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\2c\\20SkDCurve*\\29\\20const\n2441:SkOpSegment::release\\28SkOpSpan\\20const*\\29\n2442:SkOpSegment::operand\\28\\29\\20const\n2443:SkOpSegment::moveNearby\\28\\29\n2444:SkOpSegment::markDone\\28SkOpSpan*\\29\n2445:SkOpSegment::markAndChaseDone\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkOpSpanBase**\\29\n2446:SkOpSegment::isClose\\28double\\2c\\20SkOpSegment\\20const*\\29\\20const\n2447:SkOpSegment::init\\28SkPoint*\\2c\\20float\\2c\\20SkOpContour*\\2c\\20SkPath::Verb\\29\n2448:SkOpSegment::addT\\28double\\2c\\20SkPoint\\20const&\\29\n2449:SkOpCoincidence::fixUp\\28SkOpPtT*\\2c\\20SkOpPtT\\20const*\\29\n2450:SkOpCoincidence::add\\28SkOpPtT*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT*\\29\n2451:SkOpCoincidence::addMissing\\28bool*\\29\n2452:SkOpCoincidence::addIfMissing\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20double\\2c\\20double\\2c\\20SkOpSegment*\\2c\\20SkOpSegment*\\2c\\20bool*\\29\n2453:SkOpCoincidence::addExpanded\\28\\29\n2454:SkOpAngle::set\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n2455:SkOpAngle::lineOnOneSide\\28SkDPoint\\20const&\\2c\\20SkDVector\\20const&\\2c\\20SkOpAngle\\20const*\\2c\\20bool\\29\\20const\n2456:SkNoPixelsDevice::ClipState::op\\28SkClipOp\\2c\\20SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20bool\\29\n2457:SkMatrix\\20skif::Mapping::map<SkMatrix>\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n2458:SkMatrixPriv::DifferentialAreaScale\\28SkMatrix\\20const&\\2c\\20SkPoint\\20const&\\29\n2459:SkMatrix::writeToMemory\\28void*\\29\\20const\n2460:SkMatrix::preservesRightAngles\\28float\\29\\20const\n2461:SkM44::normalizePerspective\\28\\29\n2462:SkLatticeIter::~SkLatticeIter\\28\\29\n2463:SkLatticeIter::next\\28SkIRect*\\2c\\20SkRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\n2464:SkImages::RasterFromBitmap\\28SkBitmap\\20const&\\29\n2465:SkImage_Lazy::Validator::Validator\\28sk_sp<SharedGenerator>\\2c\\20SkColorType\\20const*\\2c\\20sk_sp<SkColorSpace>\\29\n2466:SkImageShader::MakeSubset\\28sk_sp<SkImage>\\2c\\20SkRect\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\n2467:SkImageFilters::Image\\28sk_sp<SkImage>\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\29\n2468:SkImageFilters::Blend\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n2469:SkImage::readPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n2470:SkHalfToFloat\\28unsigned\\20short\\29\n2471:SkGradientShader::MakeSweep\\28float\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n2472:SkGradientShader::MakeRadial\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n2473:SkGradientBaseShader::commonAsAGradient\\28SkShaderBase::GradientInfo*\\29\\20const\n2474:SkGradientBaseShader::ValidGradient\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\29\n2475:SkGradientBaseShader::SkGradientBaseShader\\28SkGradientBaseShader::Descriptor\\20const&\\2c\\20SkMatrix\\20const&\\29\n2476:SkGradientBaseShader::MakeDegenerateGradient\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkTileMode\\29\n2477:SkGradientBaseShader::Descriptor::~Descriptor\\28\\29\n2478:SkGradientBaseShader::Descriptor::Descriptor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\29\n2479:SkGlyph::setPath\\28SkArenaAlloc*\\2c\\20SkPath\\20const*\\2c\\20bool\\29\n2480:SkFontMgr::matchFamilyStyleCharacter\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\2c\\20char\\20const**\\2c\\20int\\2c\\20int\\29\\20const\n2481:SkFont::setSize\\28float\\29\n2482:SkEvalQuadAt\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n2483:SkEncodedInfo::~SkEncodedInfo\\28\\29\n2484:SkEmptyFontMgr::onMakeFromStreamIndex\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n2485:SkDrawableList::~SkDrawableList\\28\\29\n2486:SkDrawable::draw\\28SkCanvas*\\2c\\20SkMatrix\\20const*\\29\n2487:SkDevice::setDeviceCoordinateSystem\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\2c\\20SkM44\\20const&\\2c\\20int\\2c\\20int\\29\n2488:SkData::PrivateNewWithCopy\\28void\\20const*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28\\29\\20const\n2489:SkDashPathEffect::Make\\28float\\20const*\\2c\\20int\\2c\\20float\\29\n2490:SkDQuad::monotonicInX\\28\\29\\20const\n2491:SkDCubic::dxdyAtT\\28double\\29\\20const\n2492:SkDCubic::RootsValidT\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2493:SkCubicEdge::updateCubic\\28\\29\n2494:SkConicalGradient::~SkConicalGradient\\28\\29\n2495:SkColorSpace::serialize\\28\\29\\20const\n2496:SkColorSpace::MakeSRGBLinear\\28\\29\n2497:SkColorFilterPriv::MakeGaussian\\28\\29\n2498:SkColorConverter::SkColorConverter\\28unsigned\\20int\\20const*\\2c\\20int\\29\n2499:SkCodec::startScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const*\\29\n2500:SkCodec::handleFrameIndex\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20std::__2::function<SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>\\29\n2501:SkCodec::getScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n2502:SkChopQuadAtYExtrema\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2503:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\20const*\\2c\\20int\\29\n2504:SkChopCubicAtYExtrema\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2505:SkCharToGlyphCache::SkCharToGlyphCache\\28\\29\n2506:SkCanvas::peekPixels\\28SkPixmap*\\29\n2507:SkCanvas::getTotalMatrix\\28\\29\\20const\n2508:SkCanvas::getLocalToDevice\\28\\29\\20const\n2509:SkCanvas::getLocalClipBounds\\28\\29\\20const\n2510:SkCanvas::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n2511:SkCanvas::drawAtlas\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n2512:SkCanvas::concat\\28SkM44\\20const&\\29\n2513:SkCanvas::SkCanvas\\28SkBitmap\\20const&\\29\n2514:SkCanvas::ImageSetEntry::ImageSetEntry\\28SkCanvas::ImageSetEntry\\20const&\\29\n2515:SkBmpCodec::ReadHeader\\28SkStream*\\2c\\20bool\\2c\\20std::__2::unique_ptr<SkCodec\\2c\\20std::__2::default_delete<SkCodec>>*\\29\n2516:SkBlitter::blitRectRegion\\28SkIRect\\20const&\\2c\\20SkRegion\\20const&\\29\n2517:SkBlendMode_ShouldPreScaleCoverage\\28SkBlendMode\\2c\\20bool\\29\n2518:SkBlendMode_AppendStages\\28SkBlendMode\\2c\\20SkRasterPipeline*\\29\n2519:SkBitmap::tryAllocPixels\\28SkBitmap::Allocator*\\29\n2520:SkBitmap::readPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\\20const\n2521:SkBitmap::readPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\20const\n2522:SkBitmap::installPixels\\28SkPixmap\\20const&\\29\n2523:SkBitmap::allocPixels\\28SkImageInfo\\20const&\\29\n2524:SkBitmap::SkBitmap\\28SkBitmap&&\\29\n2525:SkBaseShadowTessellator::handleQuad\\28SkPoint\\20const*\\29\n2526:SkAutoDescriptor::~SkAutoDescriptor\\28\\29\n2527:SkAnimatedImage::getFrameCount\\28\\29\\20const\n2528:SkAAClip::~SkAAClip\\28\\29\n2529:SkAAClip::setPath\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n2530:SkAAClip::op\\28SkAAClip\\20const&\\2c\\20SkClipOp\\29\n2531:OT::hb_ot_layout_lookup_accelerator_t*\\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GSUB_impl::SubstLookup>\\28OT::Layout::GSUB_impl::SubstLookup\\20const&\\29\n2532:OT::hb_ot_apply_context_t::replace_glyph\\28unsigned\\20int\\29\n2533:OT::apply_lookup\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20OT::LookupRecord\\20const*\\2c\\20unsigned\\20int\\29\n2534:OT::Layout::GPOS_impl::ValueFormat::get_device\\28OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool*\\2c\\20void\\20const*\\2c\\20hb_sanitize_context_t&\\29\n2535:OT::Layout::GPOS_impl::AnchorFormat3::get_anchor\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20float*\\2c\\20float*\\29\\20const\n2536:OT::Layout::GPOS_impl::AnchorFormat2::get_anchor\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20float*\\2c\\20float*\\29\\20const\n2537:OT::ClassDef::get_class\\28unsigned\\20int\\29\\20const\n2538:JpegDecoderMgr::~JpegDecoderMgr\\28\\29\n2539:GrTriangulator::simplify\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n2540:GrTriangulator::setTop\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2541:GrTriangulator::mergeCoincidentVertices\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2542:GrTriangulator::Vertex*\\20SkArenaAlloc::make<GrTriangulator::Vertex\\2c\\20SkPoint&\\2c\\20int>\\28SkPoint&\\2c\\20int&&\\29\n2543:GrThreadSafeCache::remove\\28skgpu::UniqueKey\\20const&\\29\n2544:GrThreadSafeCache::internalFind\\28skgpu::UniqueKey\\20const&\\29\n2545:GrThreadSafeCache::internalAdd\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29\n2546:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29\n2547:GrTexture::markMipmapsClean\\28\\29\n2548:GrTessellationShader::MakePipeline\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAAType\\2c\\20GrAppliedClip&&\\2c\\20GrProcessorSet&&\\29\n2549:GrSurfaceProxyView::concatSwizzle\\28skgpu::Swizzle\\29\n2550:GrSurfaceProxy::LazyCallbackResult::LazyCallbackResult\\28sk_sp<GrTexture>\\29\n2551:GrSurfaceProxy::Copy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Mipmapped\\2c\\20SkIRect\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20GrSurfaceProxy::RectsMustMatch\\2c\\20sk_sp<GrRenderTask>*\\29\n2552:GrStyledShape::GrStyledShape\\28SkPath\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n2553:GrStyledShape::GrStyledShape\\28GrStyledShape\\20const&\\2c\\20GrStyle::Apply\\2c\\20float\\29\n2554:GrSimpleMeshDrawOpHelper::CreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrPipeline\\20const*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\2c\\20GrUserStencilSettings\\20const*\\29\n2555:GrShape::simplifyLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\29\n2556:GrShape::reset\\28\\29\n2557:GrShape::conservativeContains\\28SkPoint\\20const&\\29\\20const\n2558:GrSWMaskHelper::init\\28SkIRect\\20const&\\29\n2559:GrResourceProvider::createNonAAQuadIndexBuffer\\28\\29\n2560:GrResourceProvider::createBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\2c\\20GrResourceProvider::ZeroInit\\29\n2561:GrResourceCache::refAndMakeResourceMRU\\28GrGpuResource*\\29\n2562:GrResourceCache::findAndRefUniqueResource\\28skgpu::UniqueKey\\20const&\\29\n2563:GrRenderTask::addTarget\\28GrDrawingManager*\\2c\\20sk_sp<GrSurfaceProxy>\\29\n2564:GrRenderTarget::~GrRenderTarget\\28\\29.1\n2565:GrQuadUtils::WillUseHairline\\28GrQuad\\20const&\\2c\\20GrAAType\\2c\\20GrQuadAAFlags\\29\n2566:GrQuadUtils::CropToRect\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20DrawQuad*\\2c\\20bool\\29\n2567:GrProxyProvider::processInvalidUniqueKey\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\2c\\20GrProxyProvider::InvalidateGPUResource\\29\n2568:GrPorterDuffXPFactory::Get\\28SkBlendMode\\29\n2569:GrPixmap::operator=\\28GrPixmap&&\\29\n2570:GrPathUtils::scaleToleranceToSrc\\28float\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\29\n2571:GrPathUtils::quadraticPointCount\\28SkPoint\\20const*\\2c\\20float\\29\n2572:GrPathUtils::cubicPointCount\\28SkPoint\\20const*\\2c\\20float\\29\n2573:GrPaint::setPorterDuffXPFactory\\28SkBlendMode\\29\n2574:GrPaint::GrPaint\\28GrPaint\\20const&\\29\n2575:GrOpsRenderPass::draw\\28int\\2c\\20int\\29\n2576:GrOpsRenderPass::drawInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n2577:GrMeshDrawOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n2578:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29\n2579:GrGradientShader::MakeGradientFP\\28SkGradientBaseShader\\20const&\\2c\\20GrFPArgs\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkMatrix\\20const*\\29\n2580:GrGpuResource::getContext\\28\\29\n2581:GrGpu::writePixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20bool\\29\n2582:GrGLTexture::onSetLabel\\28\\29\n2583:GrGLTexture::onRelease\\28\\29\n2584:GrGLTexture::onAbandon\\28\\29\n2585:GrGLTexture::backendFormat\\28\\29\\20const\n2586:GrGLSLUniformHandler::addInputSampler\\28skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\29\n2587:GrGLSLShaderBuilder::appendFunctionDecl\\28SkSLType\\2c\\20char\\20const*\\2c\\20SkSpan<GrShaderVar\\20const>\\29\n2588:GrGLSLProgramBuilder::fragmentProcessorHasCoordsParam\\28GrFragmentProcessor\\20const*\\29\\20const\n2589:GrGLRenderTarget::onRelease\\28\\29\n2590:GrGLRenderTarget::onAbandon\\28\\29\n2591:GrGLGpu::resolveRenderFBOs\\28GrGLRenderTarget*\\2c\\20SkIRect\\20const&\\2c\\20GrGLRenderTarget::ResolveDirection\\2c\\20bool\\29\n2592:GrGLGpu::flushBlendAndColorWrite\\28skgpu::BlendInfo\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n2593:GrGLGetVersionFromString\\28char\\20const*\\29\n2594:GrGLCheckLinkStatus\\28GrGLGpu\\20const*\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20skgpu::ShaderErrorHandler*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const**\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\29\n2595:GrGLCaps::maxRenderTargetSampleCount\\28GrGLFormat\\29\\20const\n2596:GrFragmentProcessors::Make\\28SkBlenderBase\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrFPArgs\\20const&\\29\n2597:GrFragmentProcessor::isEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n2598:GrFragmentProcessor::asTextureEffect\\28\\29\\20const\n2599:GrFragmentProcessor::Rect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRect\\29\n2600:GrFragmentProcessor::ModulateRGBA\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n2601:GrDrawingManager::~GrDrawingManager\\28\\29\n2602:GrDrawingManager::removeRenderTasks\\28\\29\n2603:GrDrawingManager::getPathRenderer\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\2c\\20bool\\2c\\20skgpu::ganesh::PathRendererChain::DrawType\\2c\\20skgpu::ganesh::PathRenderer::StencilSupport*\\29\n2604:GrDrawOpAtlas::compact\\28skgpu::AtlasToken\\29\n2605:GrContext_Base::~GrContext_Base\\28\\29\n2606:GrContext_Base::defaultBackendFormat\\28SkColorType\\2c\\20skgpu::Renderable\\29\\20const\n2607:GrColorSpaceXform::XformKey\\28GrColorSpaceXform\\20const*\\29\n2608:GrColorSpaceXform::Make\\28SkColorSpace*\\2c\\20SkAlphaType\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\29\n2609:GrColorSpaceXform::Make\\28GrColorInfo\\20const&\\2c\\20GrColorInfo\\20const&\\29\n2610:GrColorInfo::operator=\\28GrColorInfo\\20const&\\29\n2611:GrCaps::supportedReadPixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n2612:GrCaps::getFallbackColorTypeAndFormat\\28GrColorType\\2c\\20int\\29\\20const\n2613:GrCaps::areColorTypeAndFormatCompatible\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\29\\20const\n2614:GrBufferAllocPool::~GrBufferAllocPool\\28\\29\n2615:GrBlurUtils::GaussianBlur\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20SkBackingFit\\29\n2616:GrBlurUtils::DrawShapeWithMaskFilter\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\29\n2617:GrBaseContextPriv::getShaderErrorHandler\\28\\29\\20const\n2618:GrBackendTexture::GrBackendTexture\\28GrBackendTexture\\20const&\\29\n2619:GrBackendRenderTarget::getBackendFormat\\28\\29\\20const\n2620:GrBackendFormat::operator==\\28GrBackendFormat\\20const&\\29\\20const\n2621:GrAAConvexTessellator::createOuterRing\\28GrAAConvexTessellator::Ring\\20const&\\2c\\20float\\2c\\20float\\2c\\20GrAAConvexTessellator::Ring*\\29\n2622:GrAAConvexTessellator::createInsetRings\\28GrAAConvexTessellator::Ring&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20GrAAConvexTessellator::Ring**\\29\n2623:FindSortableTop\\28SkOpContourHead*\\29\n2624:FT_Set_Charmap\n2625:FT_Outline_Decompose\n2626:FT_Open_Face\n2627:FT_New_Size\n2628:FT_Load_Sfnt_Table\n2629:FT_GlyphLoader_Add\n2630:FT_Get_Color_Glyph_Paint\n2631:FT_Get_Color_Glyph_Layer\n2632:FT_Get_Advance\n2633:FT_Done_Library\n2634:FT_CMap_New\n2635:End\n2636:DecodeImageData\\28sk_sp<SkData>\\29\n2637:Current_Ratio\n2638:Cr_z__tr_stored_block\n2639:ClipParams_unpackRegionOp\\28SkReadBuffer*\\2c\\20unsigned\\20int\\29\n2640:CircleOp::Circle&\\20skia_private::TArray<CircleOp::Circle\\2c\\20true>::emplace_back<CircleOp::Circle>\\28CircleOp::Circle&&\\29\n2641:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n2642:AlmostEqualUlps_Pin\\28float\\2c\\20float\\29\n2643:wuffs_lzw__decoder__workbuf_len\n2644:wuffs_gif__decoder__decode_image_config\n2645:wuffs_gif__decoder__decode_frame_config\n2646:winding_mono_quad\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20int*\\29\n2647:winding_mono_conic\\28SkConic\\20const&\\2c\\20float\\2c\\20float\\2c\\20int*\\29\n2648:wcrtomb\n2649:wchar_t\\20const*\\20std::__2::find\\5babi:v160004\\5d<wchar_t\\20const*\\2c\\20wchar_t>\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const&\\29\n2650:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20std::__2::iterator_traits<skia::textlayout::OneLineShaper::RunBlock*>::difference_type\\29\n2651:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20std::__2::iterator_traits<\\28anonymous\\20namespace\\29::Entry*>::difference_type\\29\n2652:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20std::__2::iterator_traits<SkSL::ProgramElement\\20const**>::difference_type\\29\n2653:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20std::__2::iterator_traits<SkSL::FunctionDefinition\\20const**>::difference_type\\29\n2654:void\\20std::__2::__inplace_merge<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\2c\\20long\\29\n2655:void\\20sort_r_simple<void*>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n2656:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29.3\n2657:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29\n2658:void\\20SkTIntroSort<double\\2c\\20void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29::'lambda'\\28double\\20const&\\2c\\20double\\20const&\\29>\\28int\\2c\\20double*\\2c\\20int\\2c\\20void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29::'lambda'\\28double\\20const&\\2c\\20double\\20const&\\29\\20const&\\29\n2659:void\\20SkTIntroSort<SkEdge*\\2c\\20void\\20SkTQSort<SkEdge>\\28SkEdge**\\2c\\20SkEdge**\\29::'lambda'\\28SkEdge\\20const*\\2c\\20SkEdge\\20const*\\29>\\28int\\2c\\20SkEdge*\\2c\\20int\\2c\\20void\\20SkTQSort<SkEdge>\\28SkEdge**\\2c\\20SkEdge**\\29::'lambda'\\28SkEdge\\20const*\\2c\\20SkEdge\\20const*\\29\\20const&\\29\n2660:vfprintf\n2661:valid_args\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long*\\29\n2662:utf8_back1SafeBody_73\n2663:ustrcase_internalToUpper_73\n2664:uscript_getScript_73\n2665:ures_getStringWithAlias\\28UResourceBundle\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int*\\2c\\20UErrorCode*\\29\n2666:uprv_strdup_73\n2667:uprv_sortArray_73\n2668:uprv_mapFile_73\n2669:uprv_compareASCIIPropertyNames_73\n2670:update_offset_to_base\\28char\\20const*\\2c\\20long\\29\n2671:update_box\n2672:unsigned\\20long\\20const&\\20std::__2::min\\5babi:v160004\\5d<unsigned\\20long>\\28unsigned\\20long\\20const&\\2c\\20unsigned\\20long\\20const&\\29\n2673:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n2674:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n2675:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n2676:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n2677:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n2678:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n2679:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n2680:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n2681:umutablecptrie_get_73\n2682:ultag_isUnicodeLocaleAttributes_73\n2683:ultag_isPrivateuseValueSubtags_73\n2684:ulocimp_getKeywords_73\n2685:uloc_openKeywords_73\n2686:uloc_getScript_73\n2687:uloc_getLanguage_73\n2688:uloc_getCountry_73\n2689:uhash_remove_73\n2690:uhash_hashChars_73\n2691:uhash_getiAndFound_73\n2692:uhash_compareChars_73\n2693:uenum_next_73\n2694:udata_getHashTable\\28UErrorCode&\\29\n2695:ucstrTextAccess\\28UText*\\2c\\20long\\20long\\2c\\20signed\\20char\\29\n2696:u_strToUTF8_73\n2697:u_strToUTF8WithSub_73\n2698:u_strCompare_73\n2699:u_memmove_73\n2700:u_getUnicodeProperties_73\n2701:u_getDataDirectory_73\n2702:u_charMirror_73\n2703:tt_size_reset\n2704:tt_sbit_decoder_load_metrics\n2705:tt_face_get_location\n2706:tt_face_find_bdf_prop\n2707:tolower\n2708:toTextStyle\\28SimpleTextStyle\\20const&\\29\n2709:t1_cmap_unicode_done\n2710:subdivide_cubic_to\\28SkPath*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n2711:subdivide\\28SkConic\\20const&\\2c\\20SkPoint*\\2c\\20int\\29\n2712:subQuickSort\\28char*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void\\20const*\\29\\2c\\20void\\20const*\\2c\\20void*\\2c\\20void*\\29\n2713:strtox\n2714:strtoull_l\n2715:strcat\n2716:std::logic_error::~logic_error\\28\\29.1\n2717:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::push_back\\5babi:v160004\\5d\\28float&&\\29\n2718:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::__append\\28unsigned\\20long\\29\n2719:std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n2720:std::__2::vector<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>>::reserve\\28unsigned\\20long\\29\n2721:std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>::push_back\\5babi:v160004\\5d\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n2722:std::__2::unique_ptr<\\28anonymous\\20namespace\\29::SoftwarePathData\\2c\\20std::__2::default_delete<\\28anonymous\\20namespace\\29::SoftwarePathData>>::reset\\5babi:v160004\\5d\\28\\28anonymous\\20namespace\\29::SoftwarePathData*\\29\n2723:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::~time_put\\28\\29.1\n2724:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>::~pair\\28\\29\n2725:std::__2::pair<char\\20const*\\2c\\20char*>\\20std::__2::__copy_trivial::operator\\28\\29\\5babi:v160004\\5d<char\\20const\\2c\\20char\\2c\\200>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n2726:std::__2::locale::operator=\\28std::__2::locale\\20const&\\29\n2727:std::__2::locale::locale\\28\\29\n2728:std::__2::iterator_traits<unsigned\\20int\\20const*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<unsigned\\20int\\20const*>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n2729:std::__2::ios_base::~ios_base\\28\\29\n2730:std::__2::ios_base::init\\28void*\\29\n2731:std::__2::ios_base::clear\\28unsigned\\20int\\29\n2732:std::__2::fpos<__mbstate_t>::fpos\\5babi:v160004\\5d\\28long\\20long\\29\n2733:std::__2::enable_if<is_move_constructible<SkAnimatedImage::Frame>::value\\20&&\\20is_move_assignable<SkAnimatedImage::Frame>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<SkAnimatedImage::Frame>\\28SkAnimatedImage::Frame&\\2c\\20SkAnimatedImage::Frame&\\29\n2734:std::__2::default_delete<SkSL::ProgramUsage>::operator\\28\\29\\5babi:v160004\\5d\\28SkSL::ProgramUsage*\\29\\20const\n2735:std::__2::decay<decltype\\28__to_address_helper<std::__2::__wrap_iter<char\\20const*>>::__call\\28std::declval<std::__2::__wrap_iter<char\\20const*>\\20const&>\\28\\29\\29\\29>::type\\20std::__2::__to_address\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20void>\\28std::__2::__wrap_iter<char\\20const*>\\20const&\\29\n2736:std::__2::chrono::duration<long\\20long\\2c\\20std::__2::ratio<1ll\\2c\\201ll>>::duration\\5babi:v160004\\5d<long\\20long>\\28long\\20long\\20const&\\2c\\20std::__2::enable_if<is_convertible<long\\20long\\20const&\\2c\\20long\\20long>::value\\20&&\\20\\28std::__2::integral_constant<bool\\2c\\20false>::value\\20||\\20!treat_as_floating_point<long\\20long>::value\\29\\2c\\20void>::type*\\29\n2737:std::__2::char_traits<char>::move\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n2738:std::__2::char_traits<char>::assign\\28char*\\2c\\20unsigned\\20long\\2c\\20char\\29\n2739:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.2\n2740:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringbuf\\28\\29\n2741:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::str\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n2742:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::push_back\\28wchar_t\\29\n2743:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n2744:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<char*\\2c\\20void>\\28char*\\2c\\20char*\\2c\\20std::__2::allocator<char>\\20const&\\29\n2745:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__make_iterator\\5babi:v160004\\5d\\28char*\\29\n2746:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__grow_by\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2747:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setp\\5babi:v160004\\5d\\28char*\\2c\\20char*\\29\n2748:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::basic_streambuf\\28\\29\n2749:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29.1\n2750:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.1\n2751:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::sentry::sentry\\28std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20bool\\29\n2752:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.2\n2753:std::__2::__wrap_iter<wchar_t*>::operator+\\5babi:v160004\\5d\\28long\\29\\20const\n2754:std::__2::__wrap_iter<char*>::operator+\\5babi:v160004\\5d\\28long\\29\\20const\n2755:std::__2::__unique_if<SkSL::ConstructorStruct>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorStruct\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n2756:std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArray\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n2757:std::__2::__throw_system_error\\28int\\2c\\20char\\20const*\\29\n2758:std::__2::__throw_out_of_range\\5babi:v160004\\5d\\28char\\20const*\\29\n2759:std::__2::__throw_length_error\\5babi:v160004\\5d\\28char\\20const*\\29\n2760:std::__2::__optional_destruct_base<GrStyledShape\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n2761:std::__2::__num_get<wchar_t>::__stage2_float_prep\\28std::__2::ios_base&\\2c\\20wchar_t*\\2c\\20wchar_t&\\2c\\20wchar_t&\\29\n2762:std::__2::__num_get<wchar_t>::__stage2_float_loop\\28wchar_t\\2c\\20bool&\\2c\\20char&\\2c\\20char*\\2c\\20char*&\\2c\\20wchar_t\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int&\\2c\\20wchar_t*\\29\n2763:std::__2::__num_get<char>::__stage2_float_prep\\28std::__2::ios_base&\\2c\\20char*\\2c\\20char&\\2c\\20char&\\29\n2764:std::__2::__num_get<char>::__stage2_float_loop\\28char\\2c\\20bool&\\2c\\20char&\\2c\\20char*\\2c\\20char*&\\2c\\20char\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int&\\2c\\20char*\\29\n2765:std::__2::__libcpp_wcrtomb_l\\5babi:v160004\\5d\\28char*\\2c\\20wchar_t\\2c\\20__mbstate_t*\\2c\\20__locale_struct*\\29\n2766:std::__2::__less<unsigned\\20int\\2c\\20unsigned\\20long>::operator\\28\\29\\5babi:v160004\\5d\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20long\\20const&\\29\\20const\n2767:std::__2::__itoa::__base_10_u32\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2768:std::__2::__itoa::__append6\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2769:std::__2::__itoa::__append4\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2770:std::__2::__call_once\\28unsigned\\20long\\20volatile&\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\29\\29\n2771:sktext::gpu::VertexFiller::flatten\\28SkWriteBuffer&\\29\\20const\n2772:sktext::gpu::VertexFiller::Make\\28skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\2c\\20SkSpan<SkPoint\\20const>\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::FillerType\\29\n2773:sktext::gpu::SubRunContainer::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20SkRefCnt\\20const*\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n2774:sktext::gpu::SubRunAllocator::SubRunAllocator\\28int\\29\n2775:sktext::gpu::GlyphVector::flatten\\28SkWriteBuffer&\\29\\20const\n2776:sktext::gpu::GlyphVector::Make\\28sktext::SkStrikePromise&&\\2c\\20SkSpan<SkPackedGlyphID\\20const>\\2c\\20sktext::gpu::SubRunAllocator*\\29\n2777:sktext::SkStrikePromise::flatten\\28SkWriteBuffer&\\29\\20const\n2778:sktext::GlyphRunBuilder::makeGlyphRunList\\28sktext::GlyphRun\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPoint\\29\n2779:sktext::GlyphRun::GlyphRun\\28SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>\\2c\\20SkSpan<unsigned\\20short\\20const>\\2c\\20SkSpan<char\\20const>\\2c\\20SkSpan<unsigned\\20int\\20const>\\2c\\20SkSpan<SkPoint\\20const>\\29\n2780:skpaint_to_grpaint_impl\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\2c\\20SkBlender*\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n2781:skip_literal_string\n2782:skif::FilterResult::getAnalyzedShaderView\\28skif::Context\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkEnumBitMask<skif::FilterResult::BoundsAnalysis>\\29\\20const\n2783:skif::FilterResult::draw\\28skif::Context\\20const&\\2c\\20SkDevice*\\2c\\20bool\\2c\\20SkBlender\\20const*\\29\\20const\n2784:skif::FilterResult::Builder::outputBounds\\28std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n2785:skif::FilterResult::Builder::drawShader\\28sk_sp<SkShader>\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\\20const\n2786:skif::FilterResult::Builder::createInputShaders\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\n2787:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2788:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair>::removeSlot\\28int\\29\n2789:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::resize\\28int\\29\n2790:skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2791:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::IRNode\\20const*\\2c\\20skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2792:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::removeIfExists\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n2793:skia_private::THashTable<int\\2c\\20int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n2794:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::find\\28GrProgramDesc\\20const&\\29\\20const\n2795:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::uncheckedSet\\28GrThreadSafeCache::Entry*&&\\29\n2796:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::resize\\28int\\29\n2797:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::removeIfExists\\28skgpu::UniqueKey\\20const&\\29\n2798:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::uncheckedSet\\28GrTextureProxy*&&\\29\n2799:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::resize\\28int\\29\n2800:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::uncheckedSet\\28FT_Opaque_Paint_&&\\29\n2801:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::resize\\28int\\29\n2802:skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::~THashMap\\28\\29\n2803:skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::find\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\\20const\n2804:skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::THashMap\\28std::initializer_list<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>\\29\n2805:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::set\\28SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2806:skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::set\\28SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\29\n2807:skia_private::TArray<unsigned\\20short\\2c\\20true>::resize_back\\28int\\29\n2808:skia_private::TArray<SkPath\\2c\\20true>::push_back_raw\\28int\\29\n2809:skia_private::TArray<GrGLAttribArrayState::AttribArrayState\\2c\\20true>::resize_back\\28int\\29\n2810:skia_png_write_chunk\n2811:skia_png_set_sBIT\n2812:skia_png_set_read_fn\n2813:skia_png_set_packing\n2814:skia_png_set_bKGD\n2815:skia_png_save_uint_32\n2816:skia_png_reciprocal2\n2817:skia_png_realloc_array\n2818:skia_png_read_start_row\n2819:skia_png_read_IDAT_data\n2820:skia_png_handle_zTXt\n2821:skia_png_handle_tRNS\n2822:skia_png_handle_tIME\n2823:skia_png_handle_tEXt\n2824:skia_png_handle_sRGB\n2825:skia_png_handle_sPLT\n2826:skia_png_handle_sCAL\n2827:skia_png_handle_sBIT\n2828:skia_png_handle_pHYs\n2829:skia_png_handle_pCAL\n2830:skia_png_handle_oFFs\n2831:skia_png_handle_iTXt\n2832:skia_png_handle_iCCP\n2833:skia_png_handle_hIST\n2834:skia_png_handle_gAMA\n2835:skia_png_handle_cHRM\n2836:skia_png_handle_bKGD\n2837:skia_png_handle_as_unknown\n2838:skia_png_handle_PLTE\n2839:skia_png_do_strip_channel\n2840:skia_png_destroy_read_struct\n2841:skia_png_destroy_info_struct\n2842:skia_png_compress_IDAT\n2843:skia_png_combine_row\n2844:skia_png_colorspace_set_sRGB\n2845:skia_png_check_fp_string\n2846:skia_png_check_fp_number\n2847:skia::textlayout::TypefaceFontStyleSet::createTypeface\\28int\\29\n2848:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::$_0::operator\\28\\29\\28sk_sp<SkTypeface>\\2c\\20sk_sp<SkFontMgr>\\29\\20const\n2849:skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const\n2850:skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29\n2851:skia::textlayout::Run::isResolved\\28\\29\\20const\n2852:skia::textlayout::Run::copyTo\\28SkTextBlobBuilder&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n2853:skia::textlayout::ParagraphImpl::buildClusterTable\\28\\29\n2854:skia::textlayout::OneLineShaper::~OneLineShaper\\28\\29\n2855:skia::textlayout::FontCollection::setDefaultFontManager\\28sk_sp<SkFontMgr>\\29\n2856:skia::textlayout::FontCollection::FontCollection\\28\\29\n2857:skia::textlayout::Cluster::isSoftBreak\\28\\29\\20const\n2858:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::flush\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::FlushInfo*\\29\\20const\n2859:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::~Impl\\28\\29\n2860:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::programInfo\\28\\29\n2861:skgpu::ganesh::SurfaceFillContext::discard\\28\\29\n2862:skgpu::ganesh::SurfaceDrawContext::internalStencilClear\\28SkIRect\\20const*\\2c\\20bool\\29\n2863:skgpu::ganesh::SurfaceDrawContext::drawPath\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrStyle\\20const&\\29\n2864:skgpu::ganesh::SurfaceDrawContext::attemptQuadOptimization\\28GrClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20DrawQuad*\\2c\\20GrPaint*\\29\n2865:skgpu::ganesh::SurfaceDrawContext::Make\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\29\n2866:skgpu::ganesh::SurfaceContext::rescaleInto\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29::$_0::operator\\28\\29\\28GrSurfaceProxyView\\2c\\20SkIRect\\29\\20const\n2867:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29\n2868:skgpu::ganesh::QuadPerEdgeAA::MinColorType\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n2869:skgpu::ganesh::PathRendererChain::PathRendererChain\\28GrRecordingContext*\\2c\\20skgpu::ganesh::PathRendererChain::Options\\20const&\\29\n2870:skgpu::ganesh::PathRenderer::getStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n2871:skgpu::ganesh::PathCurveTessellator::draw\\28GrOpFlushState*\\29\\20const\n2872:skgpu::ganesh::OpsTask::recordOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const*\\2c\\20GrCaps\\20const&\\29\n2873:skgpu::ganesh::FilterAndMipmapHaveNoEffect\\28GrQuad\\20const&\\2c\\20GrQuad\\20const&\\29\n2874:skgpu::ganesh::FillRectOp::MakeNonAARect\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n2875:skgpu::ganesh::FillRRectOp::Make\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\29\n2876:skgpu::ganesh::Device::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n2877:skgpu::ganesh::Device::drawImageQuadDirect\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n2878:skgpu::ganesh::Device::Make\\28std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\\2c\\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>\\2c\\20SkAlphaType\\2c\\20skgpu::ganesh::Device::InitContents\\29\n2879:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::setup_dashed_rect\\28SkRect\\20const&\\2c\\20skgpu::VertexWriter&\\2c\\20SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashCap\\29\n2880:skgpu::ganesh::ClipStack::SaveRecord::invalidateMasks\\28GrProxyProvider*\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>*\\29\n2881:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::SaveRecord\\20const&\\29\\20const\n2882:skgpu::ganesh::AtlasTextOp::operator\\20new\\28unsigned\\20long\\29\n2883:skgpu::ganesh::AtlasTextOp::Geometry::Make\\28sktext::gpu::AtlasSubRun\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkArenaAlloc*\\29\n2884:skgpu::ganesh::AtlasRenderTask::addAtlasDrawOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrCaps\\20const&\\29\n2885:skcms_Transform::$_2::operator\\28\\29\\28skcms_Curve\\20const*\\2c\\20int\\29\\20const\n2886:skcms_MaxRoundtripError\n2887:sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>::~sk_sp\\28\\29\n2888:sk_free_releaseproc\\28void\\20const*\\2c\\20void*\\29\n2889:siprintf\n2890:sift\n2891:shallowTextClone\\28UText*\\2c\\20UText\\20const*\\2c\\20UErrorCode*\\29\n2892:rotate\\28SkDCubic\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkDCubic&\\29\n2893:res_getResource_73\n2894:read_header\\28SkStream*\\2c\\20SkISize*\\29\n2895:quad_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n2896:qsort\n2897:psh_globals_set_scale\n2898:ps_parser_skip_PS_token\n2899:ps_builder_done\n2900:portable::uniform_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n2901:png_text_compress\n2902:png_inflate_read\n2903:png_inflate_claim\n2904:png_image_size\n2905:png_colorspace_endpoints_match\n2906:png_build_16bit_table\n2907:normalize\n2908:next_marker\n2909:morphpoints\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkPathMeasure&\\2c\\20float\\29\n2910:make_unpremul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n2911:long\\20std::__2::__libcpp_atomic_refcount_decrement\\5babi:v160004\\5d<long>\\28long&\\29\n2912:long\\20const&\\20std::__2::min\\5babi:v160004\\5d<long>\\28long\\20const&\\2c\\20long\\20const&\\29\n2913:log1p\n2914:locale_getKeywordsStart_73\n2915:load_truetype_glyph\n2916:loadParentsExceptRoot\\28UResourceDataEntry*&\\2c\\20char*\\2c\\20int\\2c\\20signed\\20char\\2c\\20char*\\2c\\20UErrorCode*\\29\n2917:line_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n2918:lang_find_or_insert\\28char\\20const*\\29\n2919:jpeg_calc_output_dimensions\n2920:inner_scanline\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkBlitter*\\29\n2921:inflate_table\n2922:increment_simple_rowgroup_ctr\n2923:icu_73::spanOneUTF8\\28icu_73::UnicodeSet\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n2924:icu_73::enumGroupNames\\28icu_73::UCharNames*\\2c\\20unsigned\\20short\\20const*\\2c\\20int\\2c\\20int\\2c\\20signed\\20char\\20\\28*\\29\\28void*\\2c\\20int\\2c\\20UCharNameChoice\\2c\\20char\\20const*\\2c\\20int\\29\\2c\\20void*\\2c\\20UCharNameChoice\\29\n2925:icu_73::\\28anonymous\\20namespace\\29::appendResult\\28char16_t*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20icu_73::Edits*\\29\n2926:icu_73::\\28anonymous\\20namespace\\29::AliasReplacer::replace\\28icu_73::Locale\\20const&\\2c\\20icu_73::CharString&\\2c\\20UErrorCode&\\29::$_0::__invoke\\28UElement\\2c\\20UElement\\29\n2927:icu_73::UnicodeString::fromUTF8\\28icu_73::StringPiece\\29\n2928:icu_73::UnicodeString::doCompare\\28int\\2c\\20int\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20int\\29\\20const\n2929:icu_73::UnicodeString::UnicodeString\\28char\\20const*\\2c\\20int\\2c\\20icu_73::UnicodeString::EInvariant\\29\n2930:icu_73::UnicodeString::UnicodeString\\28char16_t\\20const*\\2c\\20int\\29\n2931:icu_73::UnicodeSet::retainAll\\28icu_73::UnicodeSet\\20const&\\29\n2932:icu_73::UnicodeSet::remove\\28int\\2c\\20int\\29\n2933:icu_73::UnicodeSet::exclusiveOr\\28int\\20const*\\2c\\20int\\2c\\20signed\\20char\\29\n2934:icu_73::UnicodeSet::ensureBufferCapacity\\28int\\29\n2935:icu_73::UnicodeSet::applyIntPropertyValue\\28UProperty\\2c\\20int\\2c\\20UErrorCode&\\29\n2936:icu_73::UnicodeSet::applyFilter\\28signed\\20char\\20\\28*\\29\\28int\\2c\\20void*\\29\\2c\\20void*\\2c\\20icu_73::UnicodeSet\\20const*\\2c\\20UErrorCode&\\29\n2937:icu_73::UnicodeSet::UnicodeSet\\28icu_73::UnicodeSet\\20const&\\29\n2938:icu_73::UVector::sort\\28int\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20UErrorCode&\\29\n2939:icu_73::UVector::removeElement\\28void*\\29\n2940:icu_73::UVector::insertElementAt\\28void*\\2c\\20int\\2c\\20UErrorCode&\\29\n2941:icu_73::UVector::UVector\\28UErrorCode&\\29\n2942:icu_73::UVector32::setSize\\28int\\29\n2943:icu_73::UCharsTrieBuilder::add\\28icu_73::UnicodeString\\20const&\\2c\\20int\\2c\\20UErrorCode&\\29\n2944:icu_73::StringTrieBuilder::~StringTrieBuilder\\28\\29\n2945:icu_73::SimpleFilteredSentenceBreakIterator::internalNext\\28int\\29\n2946:icu_73::RuleCharacterIterator::atEnd\\28\\29\\20const\n2947:icu_73::ResourceDataValue::getString\\28int&\\2c\\20UErrorCode&\\29\\20const\n2948:icu_73::ResourceDataValue::getArray\\28UErrorCode&\\29\\20const\n2949:icu_73::ReorderingBuffer::append\\28char16_t\\20const*\\2c\\20int\\2c\\20signed\\20char\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\2c\\20UErrorCode&\\29\n2950:icu_73::PatternProps::isWhiteSpace\\28int\\29\n2951:icu_73::Normalizer2Impl::~Normalizer2Impl\\28\\29\n2952:icu_73::Normalizer2Impl::decompose\\28int\\2c\\20unsigned\\20short\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n2953:icu_73::Normalizer2Impl::decompose\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20icu_73::ReorderingBuffer*\\2c\\20UErrorCode&\\29\\20const\n2954:icu_73::Normalizer2Impl::decomposeShort\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20signed\\20char\\2c\\20signed\\20char\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n2955:icu_73::LocaleUtility::initNameFromLocale\\28icu_73::Locale\\20const&\\2c\\20icu_73::UnicodeString&\\29\n2956:icu_73::LocaleBuilder::~LocaleBuilder\\28\\29\n2957:icu_73::Locale::getKeywordValue\\28icu_73::StringPiece\\2c\\20icu_73::ByteSink&\\2c\\20UErrorCode&\\29\\20const\n2958:icu_73::Locale::getDefault\\28\\29\n2959:icu_73::ICUServiceKey::~ICUServiceKey\\28\\29\n2960:icu_73::ICUResourceBundleFactory::~ICUResourceBundleFactory\\28\\29\n2961:icu_73::ICULocaleService::~ICULocaleService\\28\\29\n2962:icu_73::EmojiProps::getSingleton\\28UErrorCode&\\29\n2963:icu_73::Edits::reset\\28\\29\n2964:icu_73::DictionaryBreakEngine::~DictionaryBreakEngine\\28\\29\n2965:icu_73::CharString::getAppendBuffer\\28int\\2c\\20int\\2c\\20int&\\2c\\20UErrorCode&\\29\n2966:icu_73::BytesTrie::readValue\\28unsigned\\20char\\20const*\\2c\\20int\\29\n2967:icu_73::ByteSinkUtil::appendChange\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20icu_73::ByteSink&\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\n2968:icu_73::BreakIterator::makeInstance\\28icu_73::Locale\\20const&\\2c\\20int\\2c\\20UErrorCode&\\29\n2969:hb_tag_from_string\n2970:hb_shape_plan_destroy\n2971:hb_script_get_horizontal_direction\n2972:hb_paint_extents_context_t::push_clip\\28hb_extents_t\\29\n2973:hb_ot_color_palette_get_colors\n2974:hb_lazy_loader_t<OT::vmtx_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::vmtx_accelerator_t\\2c\\2012u>\\2c\\20hb_face_t\\2c\\2012u\\2c\\20OT::vmtx_accelerator_t>::get\\28\\29\\20const\n2975:hb_lazy_loader_t<OT::kern\\2c\\20hb_table_lazy_loader_t<OT::kern\\2c\\2023u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2023u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2976:hb_lazy_loader_t<OT::head\\2c\\20hb_table_lazy_loader_t<OT::head\\2c\\201u\\2c\\20true>\\2c\\20hb_face_t\\2c\\201u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2977:hb_lazy_loader_t<OT::fvar\\2c\\20hb_table_lazy_loader_t<OT::fvar\\2c\\2018u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2018u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2978:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::alloc\\28unsigned\\20int\\29\n2979:hb_font_funcs_destroy\n2980:hb_face_get_upem\n2981:hb_face_destroy\n2982:hb_draw_cubic_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n2983:hb_buffer_set_segment_properties\n2984:hb_blob_create\n2985:gray_render_line\n2986:get_vendor\\28char\\20const*\\29\n2987:get_renderer\\28char\\20const*\\2c\\20GrGLExtensions\\20const&\\29\n2988:get_joining_type\\28unsigned\\20int\\2c\\20hb_unicode_general_category_t\\29\n2989:getDefaultScript\\28icu_73::CharString\\20const&\\2c\\20icu_73::CharString\\20const&\\29\n2990:generate_distance_field_from_image\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n2991:ft_var_readpackeddeltas\n2992:ft_var_get_item_delta\n2993:ft_var_done_item_variation_store\n2994:ft_glyphslot_done\n2995:ft_glyphslot_alloc_bitmap\n2996:freelocale\n2997:free_pool\n2998:fquad_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2999:fp_barrierf\n3000:fline_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3001:fixN0c\\28BracketData*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n3002:findFirstExisting\\28char\\20const*\\2c\\20char*\\2c\\20char\\20const*\\2c\\20UResOpenType\\2c\\20signed\\20char*\\2c\\20signed\\20char*\\2c\\20signed\\20char*\\2c\\20UErrorCode*\\29\n3003:fcubic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3004:fconic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3005:fclose\n3006:expm1f\n3007:exp2f\n3008:emscripten::internal::MethodInvoker<void\\20\\28SkFont::*\\29\\28float\\29\\2c\\20void\\2c\\20SkFont*\\2c\\20float>::invoke\\28void\\20\\28SkFont::*\\20const&\\29\\28float\\29\\2c\\20SkFont*\\2c\\20float\\29\n3009:emscripten::internal::MethodInvoker<sk_sp<SkImage>\\20\\28SkAnimatedImage::*\\29\\28\\29\\2c\\20sk_sp<SkImage>\\2c\\20SkAnimatedImage*>::invoke\\28sk_sp<SkImage>\\20\\28SkAnimatedImage::*\\20const&\\29\\28\\29\\2c\\20SkAnimatedImage*\\29\n3010:emscripten::internal::Invoker<std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\\2c\\20SimpleParagraphStyle\\2c\\20sk_sp<SkFontMgr>>::invoke\\28std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\\20\\28*\\29\\28SimpleParagraphStyle\\2c\\20sk_sp<SkFontMgr>\\29\\2c\\20SimpleParagraphStyle*\\2c\\20sk_sp<SkFontMgr>*\\29\n3011:emscripten::internal::FunctionInvoker<int\\20\\28*\\29\\28SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\\2c\\20int\\2c\\20SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int>::invoke\\28int\\20\\28**\\29\\28SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\\2c\\20SkCanvas*\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\n3012:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28SkFontMgr&\\2c\\20int\\29\\2c\\20emscripten::val\\2c\\20SkFontMgr&\\2c\\20int>::invoke\\28emscripten::val\\20\\28**\\29\\28SkFontMgr&\\2c\\20int\\29\\2c\\20SkFontMgr*\\2c\\20int\\29\n3013:do_scanline\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkBlitter*\\29\n3014:doLoadFromIndividualFiles\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20signed\\20char\\20\\28*\\29\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\\2c\\20void*\\2c\\20UErrorCode*\\2c\\20UErrorCode*\\29\n3015:doLoadFromCommonData\\28signed\\20char\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20signed\\20char\\20\\28*\\29\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\\2c\\20void*\\2c\\20UErrorCode*\\2c\\20UErrorCode*\\29\n3016:decompose\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20bool\\2c\\20unsigned\\20int\\29\n3017:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::DashOp::AAMode\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::$_0>\\28skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::DashOp::AAMode\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::$_0&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3018:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrProgramInfo*\\20SkArenaAlloc::make<GrProgramInfo\\2c\\20GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool&\\2c\\20GrPipeline*&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20\\28anonymous\\20namespace\\29::DrawAtlasPathShader*&\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags&\\2c\\20GrLoadOp&>\\28GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool&\\2c\\20GrPipeline*&\\2c\\20GrUserStencilSettings\\20const*&&\\2c\\20\\28anonymous\\20namespace\\29::DrawAtlasPathShader*&\\2c\\20GrPrimitiveType&&\\2c\\20GrXferBarrierFlags&\\2c\\20GrLoadOp&\\29::'lambda'\\28void*\\29>\\28GrProgramInfo&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3019:cubic_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3020:conic_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3021:char\\20const*\\20std::__2::find\\5babi:v160004\\5d<char\\20const*\\2c\\20char>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const&\\29\n3022:char\\20const*\\20std::__2::__rewrap_range\\5babi:v160004\\5d<char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*>\\28char\\20const*\\2c\\20char\\20const*\\29\n3023:cff_index_get_pointers\n3024:cff2_path_param_t::move_to\\28CFF::point_t\\20const&\\29\n3025:cff1_path_param_t::move_to\\28CFF::point_t\\20const&\\29\n3026:cf2_glyphpath_computeOffset\n3027:cached_mask_gamma\\28float\\2c\\20float\\2c\\20float\\29\n3028:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3029:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3030:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3031:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3032:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3033:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3034:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3035:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3036:byn$mgfn-shared$void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n3037:byn$mgfn-shared$ultag_isExtensionSubtags_73\n3038:byn$mgfn-shared$std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArray\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n3039:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n3040:byn$mgfn-shared$skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>\\20const&\\29\n3041:byn$mgfn-shared$skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>&&\\29\n3042:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n3043:byn$mgfn-shared$non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n3044:byn$mgfn-shared$icu_73::LaoBreakEngine::~LaoBreakEngine\\28\\29.1\n3045:byn$mgfn-shared$icu_73::LaoBreakEngine::~LaoBreakEngine\\28\\29\n3046:byn$mgfn-shared$getInPC\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n3047:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n3048:byn$mgfn-shared$SkRuntimeEffect::MakeForColorFilter\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n3049:byn$mgfn-shared$SkImageInfo::MakeN32Premul\\28int\\2c\\20int\\29\n3050:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29.1\n3051:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29\n3052:byn$mgfn-shared$SkBinaryWriteBuffer::writeScalarArray\\28float\\20const*\\2c\\20unsigned\\20int\\29\n3053:byn$mgfn-shared$Round_To_Grid\n3054:byn$mgfn-shared$LineConicIntersections::addLineNearEndPoints\\28\\29\n3055:byn$mgfn-shared$GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const\n3056:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n3057:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n3058:byn$mgfn-shared$DefaultGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n3059:build_tree\n3060:bracketAddOpening\\28BracketData*\\2c\\20char16_t\\2c\\20int\\29\n3061:bool\\20OT::glyf_impl::Glyph::get_points<OT::glyf_accelerator_t>\\28hb_font_t*\\2c\\20OT::glyf_accelerator_t\\20const&\\2c\\20contour_point_vector_t&\\2c\\20contour_point_vector_t*\\2c\\20head_maxp_info_t*\\2c\\20unsigned\\20int*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20hb_array_t<int>\\2c\\20hb_map_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n3062:bool\\20OT::glyf_accelerator_t::get_points<OT::glyf_accelerator_t::points_aggregator_t>\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20OT::glyf_accelerator_t::points_aggregator_t\\29\\20const\n3063:bool\\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GSUB_impl::SubstLookup>\\28hb_sanitize_context_t*\\29\\20const\n3064:bool\\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GPOS_impl::PosLookup>\\28hb_sanitize_context_t*\\29\\20const\n3065:blit_aaa_trapezoid_row\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n3066:auto\\20std::__2::__unwrap_range\\5babi:v160004\\5d<char\\20const*\\2c\\20char\\20const*>\\28char\\20const*\\2c\\20char\\20const*\\29\n3067:atan\n3068:alloc_large\n3069:af_glyph_hints_done\n3070:add_quad\\28SkPoint\\20const*\\2c\\20skia_private::TArray<PathSegment\\2c\\20true>*\\29\n3071:acos\n3072:aaa_fill_path\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n3073:_get_path\\28OT::cff1::accelerator_t\\20const*\\2c\\20hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_draw_session_t&\\2c\\20bool\\2c\\20CFF::point_t*\\29\n3074:_get_bounds\\28OT::cff1::accelerator_t\\20const*\\2c\\20unsigned\\20int\\2c\\20bounds_t&\\2c\\20bool\\29\n3075:_getVariant\\28char\\20const*\\2c\\20char\\2c\\20icu_73::ByteSink&\\2c\\20signed\\20char\\29\n3076:_enumPropertyStartsRange\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n3077:_embind_register_bindings\n3078:_canonicalize\\28char\\20const*\\2c\\20icu_73::ByteSink&\\2c\\20unsigned\\20int\\2c\\20UErrorCode*\\29\n3079:__trunctfdf2\n3080:__towrite\n3081:__toread\n3082:__subtf3\n3083:__strchrnul\n3084:__rem_pio2f\n3085:__rem_pio2\n3086:__math_uflowf\n3087:__math_oflowf\n3088:__fwritex\n3089:__dynamic_cast\n3090:__cxxabiv1::__class_type_info::process_static_type_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n3091:__cxxabiv1::__class_type_info::process_static_type_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n3092:__cxxabiv1::__class_type_info::process_found_base_class\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n3093:__cxxabiv1::__base_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n3094:\\28anonymous\\20namespace\\29::ulayout_ensureData\\28UErrorCode&\\29\n3095:\\28anonymous\\20namespace\\29::shape_contains_rect\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\n3096:\\28anonymous\\20namespace\\29::getRange\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20unsigned\\20int\\29\\2c\\20void\\20const*\\2c\\20unsigned\\20int*\\29\n3097:\\28anonymous\\20namespace\\29::generateFacePathCOLRv1\\28FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20SkPath*\\29\n3098:\\28anonymous\\20namespace\\29::convert_noninflect_cubic_to_quads_with_constraint\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPathFirstDirection\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20int\\29\n3099:\\28anonymous\\20namespace\\29::convert_noninflect_cubic_to_quads\\28SkPoint\\20const*\\2c\\20float\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n3100:\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const\n3101:\\28anonymous\\20namespace\\29::bloat_quad\\28SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20\\28anonymous\\20namespace\\29::BezierVertex*\\29\n3102:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onMakeClone\\28SkFontArguments\\20const&\\29\\20const\n3103:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\\28\\29.1\n3104:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\\28\\29\n3105:\\28anonymous\\20namespace\\29::SkBlurImageFilter::mapSigma\\28skif::Mapping\\20const&\\2c\\20bool\\29\\20const\n3106:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n3107:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::programInfo\\28\\29\n3108:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n3109:\\28anonymous\\20namespace\\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n3110:\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphs\\28\\29\\20const\n3111:WebPRescaleNeededLines\n3112:WebPInitDecBufferInternal\n3113:WebPInitCustomIo\n3114:WebPGetFeaturesInternal\n3115:WebPDemuxGetFrame\n3116:VP8LInitBitReader\n3117:VP8LColorIndexInverseTransformAlpha\n3118:VP8InitIoInternal\n3119:VP8InitBitReader\n3120:UDatamemory_assign_73\n3121:T_CString_toUpperCase_73\n3122:TT_Vary_Apply_Glyph_Deltas\n3123:TT_Set_Var_Design\n3124:SkWuffsCodec::decodeFrame\\28\\29\n3125:SkVertices::MakeCopy\\28SkVertices::VertexMode\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20short\\20const*\\29\n3126:SkVertices::Builder::texCoords\\28\\29\n3127:SkVertices::Builder::positions\\28\\29\n3128:SkVertices::Builder::init\\28SkVertices::Desc\\20const&\\29\n3129:SkVertices::Builder::colors\\28\\29\n3130:SkVertices::Builder::Builder\\28SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n3131:SkUnicode_icu::extractPositions\\28char\\20const*\\2c\\20int\\2c\\20SkUnicode::BreakType\\2c\\20char\\20const*\\2c\\20std::__2::function<void\\20\\28int\\2c\\20int\\29>\\20const&\\29\n3132:SkTypeface_FreeType::MakeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\n3133:SkTypeface::getTableSize\\28unsigned\\20int\\29\\20const\n3134:SkTextBlobRunIterator::positioning\\28\\29\\20const\n3135:SkTSpan::splitAt\\28SkTSpan*\\2c\\20double\\2c\\20SkArenaAlloc*\\29\n3136:SkTSect::computePerpendiculars\\28SkTSect*\\2c\\20SkTSpan*\\2c\\20SkTSpan*\\29\n3137:SkTDStorage::insert\\28int\\29\n3138:SkTDStorage::calculateSizeOrDie\\28int\\29::$_0::operator\\28\\29\\28\\29\\20const\n3139:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::percolateDownIfNecessary\\28int\\29\n3140:SkTConic::hullIntersects\\28SkDConic\\20const&\\2c\\20bool*\\29\\20const\n3141:SkSurface_Base::SkSurface_Base\\28int\\2c\\20int\\2c\\20SkSurfaceProps\\20const*\\29\n3142:SkStrokerPriv::CapFactory\\28SkPaint::Cap\\29\n3143:SkStrokeRec::getInflationRadius\\28\\29\\20const\n3144:SkString::equals\\28char\\20const*\\29\\20const\n3145:SkStrikeSpec::MakeTransformMask\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n3146:SkStrikeSpec::MakePath\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\29\n3147:SkStrike::glyph\\28SkGlyphDigest\\29\n3148:SkSpecialImages::AsView\\28GrRecordingContext*\\2c\\20SkSpecialImage\\20const*\\29\n3149:SkShapers::HB::ShapeDontWrapOrReorder\\28sk_sp<SkUnicode>\\2c\\20sk_sp<SkFontMgr>\\29\n3150:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::endOfCurrentRun\\28\\29\\20const\n3151:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::atEnd\\28\\29\\20const\n3152:SkShaper::MakeFontMgrRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20sk_sp<SkFontMgr>\\29\n3153:SkShadowTessellator::MakeAmbient\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20bool\\29\n3154:SkScan::FillTriangle\\28SkPoint\\20const*\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3155:SkScan::FillPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3156:SkScan::FillIRect\\28SkIRect\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3157:SkScan::AntiHairLine\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3158:SkScan::AntiFillPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkBlitter*\\2c\\20bool\\29\n3159:SkScalerContextFTUtils::drawSVGGlyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n3160:SkScalarInterpFunc\\28float\\2c\\20float\\20const*\\2c\\20float\\20const*\\2c\\20int\\29\n3161:SkSLTypeString\\28SkSLType\\29\n3162:SkSL::simplify_negation\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\29\n3163:SkSL::simplify_matrix_multiplication\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3164:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n3165:SkSL::build_argument_type_list\\28SkSpan<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const>\\29\n3166:SkSL::\\28anonymous\\20namespace\\29::SwitchCaseContainsExit::visitStatement\\28SkSL::Statement\\20const&\\29\n3167:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::returnsInputAlpha\\28SkSL::Expression\\20const&\\29\n3168:SkSL::\\28anonymous\\20namespace\\29::ConstantExpressionVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n3169:SkSL::Variable::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::VariableStorage\\29\n3170:SkSL::Type::checkForOutOfRangeLiteral\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\29\\20const\n3171:SkSL::Type::MakeSamplerType\\28char\\20const*\\2c\\20SkSL::Type\\20const&\\29\n3172:SkSL::SymbolTable::moveSymbolTo\\28SkSL::SymbolTable*\\2c\\20SkSL::Symbol*\\2c\\20SkSL::Context\\20const&\\29\n3173:SkSL::SymbolTable::isType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n3174:SkSL::Symbol::instantiate\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\\20const\n3175:SkSL::SampleUsage::merge\\28SkSL::SampleUsage\\20const&\\29\n3176:SkSL::ReturnStatement::~ReturnStatement\\28\\29.1\n3177:SkSL::ReturnStatement::~ReturnStatement\\28\\29\n3178:SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\\28\\29\n3179:SkSL::RP::Generator::pushTernaryExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n3180:SkSL::RP::Generator::pushStructuredComparison\\28SkSL::RP::LValue*\\2c\\20SkSL::Operator\\2c\\20SkSL::RP::LValue*\\2c\\20SkSL::Type\\20const&\\29\n3181:SkSL::RP::Generator::pushMatrixMultiply\\28SkSL::RP::LValue*\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3182:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\\28\\29\n3183:SkSL::RP::Builder::push_uniform\\28SkSL::RP::SlotRange\\29\n3184:SkSL::RP::Builder::merge_condition_mask\\28\\29\n3185:SkSL::RP::Builder::jump\\28int\\29\n3186:SkSL::RP::Builder::branch_if_no_active_lanes_on_stack_top_equal\\28int\\2c\\20int\\29\n3187:SkSL::ProgramUsage::add\\28SkSL::ProgramElement\\20const&\\29\n3188:SkSL::Pool::detachFromThread\\28\\29\n3189:SkSL::PipelineStage::ConvertProgram\\28SkSL::Program\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20SkSL::PipelineStage::Callbacks*\\29\n3190:SkSL::Parser::unaryExpression\\28\\29\n3191:SkSL::Parser::swizzle\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n3192:SkSL::Parser::block\\28bool\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>*\\29\n3193:SkSL::Operator::getBinaryPrecedence\\28\\29\\20const\n3194:SkSL::ModuleLoader::loadGPUModule\\28SkSL::Compiler*\\29\n3195:SkSL::ModifierFlags::checkPermittedFlags\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\29\\20const\n3196:SkSL::Mangler::uniqueName\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::SymbolTable*\\29\n3197:SkSL::LiteralType::slotType\\28unsigned\\20long\\29\\20const\n3198:SkSL::Layout::operator==\\28SkSL::Layout\\20const&\\29\\20const\n3199:SkSL::Layout::checkPermittedLayout\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkEnumBitMask<SkSL::LayoutFlag>\\29\\20const\n3200:SkSL::Inliner::analyze\\28std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::ProgramUsage*\\29\n3201:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\\28\\29\n3202:SkSL::GLSLCodeGenerator::writeLiteral\\28SkSL::Literal\\20const&\\29\n3203:SkSL::GLSLCodeGenerator::writeFunctionDeclaration\\28SkSL::FunctionDeclaration\\20const&\\29\n3204:SkSL::ForStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::LoopUnrollInfo\\2c\\20std::__2::default_delete<SkSL::LoopUnrollInfo>>\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n3205:SkSL::FieldAccess::description\\28SkSL::OperatorPrecedence\\29\\20const\n3206:SkSL::Expression::isIncomplete\\28SkSL::Context\\20const&\\29\\20const\n3207:SkSL::Expression::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n3208:SkSL::DebugTracePriv::~DebugTracePriv\\28\\29\n3209:SkSL::Context::Context\\28SkSL::BuiltinTypes\\20const&\\2c\\20SkSL::ErrorReporter&\\29\n3210:SkSL::ConstructorArrayCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n3211:SkSL::ConstructorArray::~ConstructorArray\\28\\29\n3212:SkSL::ConstructorArray::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n3213:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n3214:SkSL::Analysis::CallsColorTransformIntrinsics\\28SkSL::Program\\20const&\\29\n3215:SkSL::AliasType::bitWidth\\28\\29\\20const\n3216:SkRuntimeEffectPriv::VarAsUniform\\28SkSL::Variable\\20const&\\2c\\20SkSL::Context\\20const&\\2c\\20unsigned\\20long*\\29\n3217:SkRuntimeEffectPriv::UniformsAsSpan\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20bool\\2c\\20SkColorSpace\\20const*\\2c\\20SkArenaAlloc*\\29\n3218:SkRuntimeEffect::source\\28\\29\\20const\n3219:SkRuntimeEffect::makeShader\\28sk_sp<SkData\\20const>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\2c\\20SkMatrix\\20const*\\29\\20const\n3220:SkRuntimeEffect::MakeForBlender\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n3221:SkResourceCache::checkMessages\\28\\29\n3222:SkResourceCache::NewCachedData\\28unsigned\\20long\\29\n3223:SkRegion::translate\\28int\\2c\\20int\\2c\\20SkRegion*\\29\\20const\n3224:SkReduceOrder::Cubic\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n3225:SkRectPriv::QuadContainsRectMask\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\29\n3226:SkRectPriv::ClosestDisjointEdge\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n3227:SkRecords::PreCachedPath::PreCachedPath\\28SkPath\\20const&\\29\n3228:SkRecords::FillBounds::pushSaveBlock\\28SkPaint\\20const*\\29\n3229:SkRecordDraw\\28SkRecord\\20const&\\2c\\20SkCanvas*\\2c\\20SkPicture\\20const*\\20const*\\2c\\20SkDrawable*\\20const*\\2c\\20int\\2c\\20SkBBoxHierarchy\\20const*\\2c\\20SkPicture::AbortCallback*\\29\n3230:SkReadBuffer::readPoint\\28SkPoint*\\29\n3231:SkReadBuffer::readPath\\28SkPath*\\29\n3232:SkReadBuffer::readByteArrayAsData\\28\\29\n3233:SkReadBuffer::readArray\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3234:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\\28\\29\n3235:SkRasterPipelineBlitter::blitRectWithTrace\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20bool\\29\n3236:SkRasterPipelineBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n3237:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29\n3238:SkRasterPipeline::appendLoad\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n3239:SkRasterClip::op\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n3240:SkRRectPriv::ConservativeIntersect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29\n3241:SkRRect::scaleRadii\\28\\29\n3242:SkRRect::AreRectAndRadiiValid\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\29\n3243:SkRBuffer::skip\\28unsigned\\20long\\29\n3244:SkPngCodec::IsPng\\28void\\20const*\\2c\\20unsigned\\20long\\29\n3245:SkPixmap::setColorSpace\\28sk_sp<SkColorSpace>\\29\n3246:SkPixelRef::~SkPixelRef\\28\\29\n3247:SkPixelRef::notifyPixelsChanged\\28\\29\n3248:SkPictureRecorder::beginRecording\\28SkRect\\20const&\\2c\\20sk_sp<SkBBoxHierarchy>\\29\n3249:SkPictureRecord::addPathToHeap\\28SkPath\\20const&\\29\n3250:SkPictureData::getPath\\28SkReadBuffer*\\29\\20const\n3251:SkPicture::serialize\\28SkWStream*\\2c\\20SkSerialProcs\\20const*\\2c\\20SkRefCntSet*\\2c\\20bool\\29\\20const\n3252:SkPathWriter::update\\28SkOpPtT\\20const*\\29\n3253:SkPathStroker::strokeCloseEnough\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\\20const\n3254:SkPathStroker::finishContour\\28bool\\2c\\20bool\\29\n3255:SkPathRef::reset\\28\\29\n3256:SkPathRef::isRRect\\28SkRRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\\20const\n3257:SkPathRef::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\n3258:SkPathPriv::IsRectContour\\28SkPath\\20const&\\2c\\20bool\\2c\\20int*\\2c\\20SkPoint\\20const**\\2c\\20bool*\\2c\\20SkPathDirection*\\2c\\20SkRect*\\29\n3259:SkPathEffectBase::onAsPoints\\28SkPathEffectBase::PointData*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\29\\20const\n3260:SkPathEffect::filterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\29\\20const\n3261:SkPathBuilder::quadTo\\28SkPoint\\2c\\20SkPoint\\29\n3262:SkPathBuilder::cubicTo\\28SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\29\n3263:SkPath::writeToMemory\\28void*\\29\\20const\n3264:SkPath::reversePathTo\\28SkPath\\20const&\\29\n3265:SkPath::rQuadTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3266:SkPath::contains\\28float\\2c\\20float\\29\\20const\n3267:SkPath::arcTo\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPath::ArcSize\\2c\\20SkPathDirection\\2c\\20float\\2c\\20float\\29\n3268:SkPath::approximateBytesUsed\\28\\29\\20const\n3269:SkPath::addCircle\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPathDirection\\29\n3270:SkPath::Rect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n3271:SkParsePath::ToSVGString\\28SkPath\\20const&\\2c\\20SkParsePath::PathEncoding\\29::$_0::operator\\28\\29\\28char\\2c\\20SkPoint\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3272:SkParse::FindScalar\\28char\\20const*\\2c\\20float*\\29\n3273:SkPairPathEffect::flatten\\28SkWriteBuffer&\\29\\20const\n3274:SkPaintToGrPaintWithBlend\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkBlender*\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n3275:SkPaint::refImageFilter\\28\\29\\20const\n3276:SkPaint::refBlender\\28\\29\\20const\n3277:SkPaint::getBlendMode_or\\28SkBlendMode\\29\\20const\n3278:SkPackARGB_as_RGBA\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3279:SkPackARGB_as_BGRA\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3280:SkOpSpan::setOppSum\\28int\\29\n3281:SkOpSegment::markAndChaseWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int\\2c\\20SkOpSpanBase**\\29\n3282:SkOpSegment::markAllDone\\28\\29\n3283:SkOpSegment::activeWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n3284:SkOpPtT::contains\\28SkOpSegment\\20const*\\29\\20const\n3285:SkOpEdgeBuilder::closeContour\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n3286:SkOpCoincidence::releaseDeleted\\28\\29\n3287:SkOpCoincidence::markCollapsed\\28SkOpPtT*\\29\n3288:SkOpCoincidence::findOverlaps\\28SkOpCoincidence*\\29\\20const\n3289:SkOpCoincidence::expand\\28\\29\n3290:SkOpCoincidence::apply\\28\\29\n3291:SkOpAngle::orderable\\28SkOpAngle*\\29\n3292:SkOpAngle::computeSector\\28\\29\n3293:SkNullBlitter::~SkNullBlitter\\28\\29\n3294:SkNoPixelsDevice::SkNoPixelsDevice\\28SkIRect\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20sk_sp<SkColorSpace>\\29\n3295:SkNoPixelsDevice::SkNoPixelsDevice\\28SkIRect\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n3296:SkNoDestructor<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>>::SkNoDestructor\\28skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>&&\\29\n3297:SkMessageBus<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20GrDirectContext::DirectContextID\\2c\\20false>::Get\\28\\29\n3298:SkMemoryStream::SkMemoryStream\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n3299:SkMemoryStream::SkMemoryStream\\28sk_sp<SkData>\\29\n3300:SkMatrixPriv::InverseMapRect\\28SkMatrix\\20const&\\2c\\20SkRect*\\2c\\20SkRect\\20const&\\29\n3301:SkMatrix::setRotate\\28float\\29\n3302:SkMatrix::setPolyToPoly\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n3303:SkMatrix::postSkew\\28float\\2c\\20float\\29\n3304:SkMatrix::invert\\28SkMatrix*\\29\\20const\n3305:SkMatrix::getMinScale\\28\\29\\20const\n3306:SkMatrix::getMinMaxScales\\28float*\\29\\20const\n3307:SkMaskBuilder::PrepareDestination\\28int\\2c\\20int\\2c\\20SkMask\\20const&\\29\n3308:SkMakeBitmapShaderForPaint\\28SkPaint\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkCopyPixelsMode\\29\n3309:SkLineClipper::ClipLine\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkPoint*\\2c\\20bool\\29\n3310:SkJpegCodec::ReadHeader\\28SkStream*\\2c\\20SkCodec**\\2c\\20JpegDecoderMgr**\\2c\\20std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>\\29\n3311:SkJSONWriter::separator\\28bool\\29\n3312:SkIntersections::intersectRay\\28SkDQuad\\20const&\\2c\\20SkDLine\\20const&\\29\n3313:SkIntersections::intersectRay\\28SkDLine\\20const&\\2c\\20SkDLine\\20const&\\29\n3314:SkIntersections::intersectRay\\28SkDCubic\\20const&\\2c\\20SkDLine\\20const&\\29\n3315:SkIntersections::intersectRay\\28SkDConic\\20const&\\2c\\20SkDLine\\20const&\\29\n3316:SkIntersections::cleanUpParallelLines\\28bool\\29\n3317:SkImage_Raster::SkImage_Raster\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n3318:SkImage_Ganesh::~SkImage_Ganesh\\28\\29\n3319:SkImageShader::Make\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\n3320:SkImageInfo::Make\\28SkISize\\2c\\20SkColorType\\2c\\20SkAlphaType\\29\n3321:SkImageInfo::MakeN32Premul\\28SkISize\\29\n3322:SkImageGenerator::getPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\29\n3323:SkImageGenerator::SkImageGenerator\\28SkImageInfo\\20const&\\2c\\20unsigned\\20int\\29\n3324:SkImageFilters::MatrixTransform\\28SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20sk_sp<SkImageFilter>\\29\n3325:SkImageFilters::Blur\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n3326:SkImageFilter_Base::getInputBounds\\28skif::Mapping\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\29\\20const\n3327:SkImageFilter_Base::affectsTransparentBlack\\28\\29\\20const\n3328:SkImage::width\\28\\29\\20const\n3329:SkImage::readPixels\\28GrDirectContext*\\2c\\20SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n3330:SkImage::hasMipmaps\\28\\29\\20const\n3331:SkIcuBreakIteratorCache::makeBreakIterator\\28SkUnicode::BreakType\\2c\\20char\\20const*\\29\n3332:SkIDChangeListener::List::add\\28sk_sp<SkIDChangeListener>\\29\n3333:SkGradientShader::MakeTwoPointConical\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n3334:SkGradientShader::MakeLinear\\28SkPoint\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n3335:SkGradientBaseShader::AppendInterpolatedToDstStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkColorSpace\\20const*\\2c\\20SkColorSpace\\20const*\\29\n3336:SkGlyph::setPath\\28SkArenaAlloc*\\2c\\20SkScalerContext*\\29\n3337:SkGlyph::mask\\28\\29\\20const\n3338:SkFontScanner_FreeType::GetAxes\\28FT_FaceRec_*\\2c\\20skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>*\\29\n3339:SkFontPriv::ApproximateTransformedTextSize\\28SkFont\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const&\\29\n3340:SkFontMgr::matchFamily\\28char\\20const*\\29\\20const\n3341:SkFindCubicMaxCurvature\\28SkPoint\\20const*\\2c\\20float*\\29\n3342:SkEncodedInfo::ICCProfile::Make\\28sk_sp<SkData>\\29\n3343:SkEmptyFontMgr::onMatchFamilyStyleCharacter\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\2c\\20char\\20const**\\2c\\20int\\2c\\20int\\29\\20const\n3344:SkEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkIRect\\20const*\\2c\\20int\\29\n3345:SkDynamicMemoryWStream::padToAlign4\\28\\29\n3346:SkDrawable::SkDrawable\\28\\29\n3347:SkDrawBase::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n3348:SkDrawBase::drawDevicePoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\2c\\20SkDevice*\\29\\20const\n3349:SkDraw::drawBitmap\\28SkBitmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n3350:SkDevice::simplifyGlyphRunRSXFormAndRedraw\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n3351:SkDevice::drawFilteredImage\\28skif::Mapping\\20const&\\2c\\20SkSpecialImage*\\2c\\20SkColorType\\2c\\20SkImageFilter\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n3352:SkDevice::SkDevice\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n3353:SkDataTable::at\\28int\\2c\\20unsigned\\20long*\\29\\20const\n3354:SkData::MakeZeroInitialized\\28unsigned\\20long\\29\n3355:SkData::MakeFromStream\\28SkStream*\\2c\\20unsigned\\20long\\29\n3356:SkDQuad::dxdyAtT\\28double\\29\\20const\n3357:SkDQuad::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n3358:SkDQuad::FindExtrema\\28double\\20const*\\2c\\20double*\\29\n3359:SkDCubic::subDivide\\28double\\2c\\20double\\29\\20const\n3360:SkDCubic::searchRoots\\28double*\\2c\\20int\\2c\\20double\\2c\\20SkDCubic::SearchAxis\\2c\\20double*\\29\\20const\n3361:SkDCubic::Coefficients\\28double\\20const*\\2c\\20double*\\2c\\20double*\\2c\\20double*\\2c\\20double*\\29\n3362:SkDConic::dxdyAtT\\28double\\29\\20const\n3363:SkDConic::FindExtrema\\28double\\20const*\\2c\\20float\\2c\\20double*\\29\n3364:SkCopyStreamToData\\28SkStream*\\29\n3365:SkContourMeasure_segTo\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20float\\2c\\20SkPath*\\29\n3366:SkContourMeasureIter::next\\28\\29\n3367:SkContourMeasureIter::Impl::compute_quad_segs\\28SkPoint\\20const*\\2c\\20float\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n3368:SkContourMeasureIter::Impl::compute_cubic_segs\\28SkPoint\\20const*\\2c\\20float\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n3369:SkContourMeasureIter::Impl::compute_conic_segs\\28SkConic\\20const&\\2c\\20float\\2c\\20int\\2c\\20SkPoint\\20const&\\2c\\20int\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20int\\29\n3370:SkContourMeasure::getPosTan\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n3371:SkConic::evalAt\\28float\\29\\20const\n3372:SkConic::TransformW\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkMatrix\\20const&\\29\n3373:SkColorToPMColor4f\\28unsigned\\20int\\2c\\20GrColorInfo\\20const&\\29\n3374:SkColorSpaceLuminance::Fetch\\28float\\29\n3375:SkColorSpace::transferFn\\28skcms_TransferFunction*\\29\\20const\n3376:SkColorSpace::toXYZD50\\28skcms_Matrix3x3*\\29\\20const\n3377:SkColorPalette::SkColorPalette\\28unsigned\\20int\\20const*\\2c\\20int\\29\n3378:SkColorFilters::Blend\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBlendMode\\29\n3379:SkColor4fPrepForDst\\28SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20GrColorInfo\\20const&\\29\n3380:SkCodec::startIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const*\\29\n3381:SkChopMonoCubicAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\29\n3382:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\2c\\20float\\29\n3383:SkCanvas::setMatrix\\28SkM44\\20const&\\29\n3384:SkCanvas::scale\\28float\\2c\\20float\\29\n3385:SkCanvas::private_draw_shadow_rec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n3386:SkCanvas::onResetClip\\28\\29\n3387:SkCanvas::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n3388:SkCanvas::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n3389:SkCanvas::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3390:SkCanvas::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3391:SkCanvas::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3392:SkCanvas::internal_private_resetClip\\28\\29\n3393:SkCanvas::internalSaveLayer\\28SkCanvas::SaveLayerRec\\20const&\\2c\\20SkCanvas::SaveLayerStrategy\\2c\\20bool\\29\n3394:SkCanvas::experimental_DrawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n3395:SkCanvas::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3396:SkCanvas::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n3397:SkCanvas::drawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n3398:SkCanvas::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3399:SkCanvas::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3400:SkCanvas::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n3401:SkCanvas::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n3402:SkCanvas::SkCanvas\\28SkIRect\\20const&\\29\n3403:SkCachedData::~SkCachedData\\28\\29\n3404:SkCTMShader::~SkCTMShader\\28\\29.1\n3405:SkBmpRLECodec::setPixel\\28void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\29\n3406:SkBmpCodec::prepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n3407:SkBlurMaskFilterImpl::computeXformedSigma\\28SkMatrix\\20const&\\29\\20const\n3408:SkBlitterClipper::apply\\28SkBlitter*\\2c\\20SkRegion\\20const*\\2c\\20SkIRect\\20const*\\29\n3409:SkBlitter::blitRegion\\28SkRegion\\20const&\\29\n3410:SkBitmapDevice::BDDraw::~BDDraw\\28\\29\n3411:SkBitmapCacheDesc::Make\\28SkImage\\20const*\\29\n3412:SkBitmap::writePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n3413:SkBitmap::setPixels\\28void*\\29\n3414:SkBitmap::pixelRefOrigin\\28\\29\\20const\n3415:SkBitmap::notifyPixelsChanged\\28\\29\\20const\n3416:SkBitmap::isImmutable\\28\\29\\20const\n3417:SkBitmap::allocPixels\\28\\29\n3418:SkBinaryWriteBuffer::writeScalarArray\\28float\\20const*\\2c\\20unsigned\\20int\\29\n3419:SkBaseShadowTessellator::~SkBaseShadowTessellator\\28\\29.1\n3420:SkBaseShadowTessellator::handleCubic\\28SkMatrix\\20const&\\2c\\20SkPoint*\\29\n3421:SkBaseShadowTessellator::handleConic\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20float\\29\n3422:SkAutoPathBoundsUpdate::SkAutoPathBoundsUpdate\\28SkPath*\\2c\\20SkRect\\20const&\\29\n3423:SkAutoDescriptor::SkAutoDescriptor\\28SkAutoDescriptor&&\\29\n3424:SkArenaAllocWithReset::SkArenaAllocWithReset\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3425:SkAnimatedImage::decodeNextFrame\\28\\29\n3426:SkAnimatedImage::Frame::copyTo\\28SkAnimatedImage::Frame*\\29\\20const\n3427:SkAnalyticQuadraticEdge::updateQuadratic\\28\\29\n3428:SkAnalyticCubicEdge::updateCubic\\28bool\\29\n3429:SkAlphaRuns::reset\\28int\\29\n3430:SkAAClip::setRect\\28SkIRect\\20const&\\29\n3431:Simplify\\28SkPath\\20const&\\2c\\20SkPath*\\29\n3432:ReconstructRow\n3433:R.1\n3434:OpAsWinding::nextEdge\\28Contour&\\2c\\20OpAsWinding::Edge\\29\n3435:OT::sbix::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3436:OT::post::accelerator_t::cmp_gids\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void*\\29\n3437:OT::gvar::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n3438:OT::fvar::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3439:OT::cmap::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3440:OT::cmap::accelerator_t::accelerator_t\\28hb_face_t*\\29\n3441:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\\28\\29\n3442:OT::avar::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3443:OT::VarRegionList::evaluate\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20float*\\29\\20const\n3444:OT::Rule<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ContextApplyLookupContext\\20const&\\29\\20const\n3445:OT::OpenTypeFontFile::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3446:OT::MVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3447:OT::Layout::GSUB_impl::SubstLookup::serialize_ligature\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20hb_sorted_array_t<OT::HBGlyphID16\\20const>\\2c\\20hb_array_t<unsigned\\20int\\20const>\\2c\\20hb_array_t<OT::HBGlyphID16\\20const>\\2c\\20hb_array_t<unsigned\\20int\\20const>\\2c\\20hb_array_t<OT::HBGlyphID16\\20const>\\29\n3448:OT::Layout::GPOS_impl::MarkArray::apply\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20OT::Layout::GPOS_impl::AnchorMatrix\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n3449:OT::GDEFVersion1_2<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3450:OT::Device::get_y_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n3451:OT::Device::get_x_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n3452:OT::ClipList::get_extents\\28unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n3453:OT::ChainRule<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n3454:OT::CPAL::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3455:OT::COLR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3456:OT::COLR::paint_glyph\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n3457:MakeRasterCopyPriv\\28SkPixmap\\20const&\\2c\\20unsigned\\20int\\29\n3458:LineQuadraticIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineQuadraticIntersections::PinTPoint\\29\n3459:LineQuadraticIntersections::checkCoincident\\28\\29\n3460:LineQuadraticIntersections::addLineNearEndPoints\\28\\29\n3461:LineCubicIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineCubicIntersections::PinTPoint\\29\n3462:LineCubicIntersections::checkCoincident\\28\\29\n3463:LineCubicIntersections::addLineNearEndPoints\\28\\29\n3464:LineConicIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineConicIntersections::PinTPoint\\29\n3465:LineConicIntersections::checkCoincident\\28\\29\n3466:LineConicIntersections::addLineNearEndPoints\\28\\29\n3467:GrXferProcessor::GrXferProcessor\\28GrProcessor::ClassID\\29\n3468:GrVertexChunkBuilder::~GrVertexChunkBuilder\\28\\29\n3469:GrTriangulator::tessellate\\28GrTriangulator::VertexList\\20const&\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3470:GrTriangulator::splitEdge\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3471:GrTriangulator::pathToPolys\\28float\\2c\\20SkRect\\20const&\\2c\\20bool*\\29\n3472:GrTriangulator::generateCubicPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20GrTriangulator::VertexList*\\2c\\20int\\29\\20const\n3473:GrTriangulator::emitTriangle\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20int\\2c\\20skgpu::VertexWriter\\29\\20const\n3474:GrTriangulator::checkForIntersection\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3475:GrTriangulator::applyFillType\\28int\\29\\20const\n3476:GrTriangulator::EdgeList::insert\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\29\n3477:GrTriangulator::Edge::insertBelow\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3478:GrTriangulator::Edge::insertAbove\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3479:GrToGLStencilFunc\\28GrStencilTest\\29\n3480:GrThreadSafeCache::dropAllRefs\\28\\29\n3481:GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n3482:GrTexture::GrTexture\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20skgpu::Protected\\2c\\20GrTextureType\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3483:GrTexture::ComputeScratchKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20skgpu::ScratchKey*\\29\n3484:GrSurfaceProxyView::asTextureProxyRef\\28\\29\\20const\n3485:GrSurfaceProxy::GrSurfaceProxy\\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3486:GrSurfaceProxy::GrSurfaceProxy\\28sk_sp<GrSurface>\\2c\\20SkBackingFit\\2c\\20GrSurfaceProxy::UseAllocator\\29\n3487:GrSurface::setRelease\\28sk_sp<skgpu::RefCntedCallback>\\29\n3488:GrStyledShape::styledBounds\\28\\29\\20const\n3489:GrStyledShape::asLine\\28SkPoint*\\2c\\20bool*\\29\\20const\n3490:GrStyledShape::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\\20const\n3491:GrSimpleMeshDrawOpHelper::fixedFunctionFlags\\28\\29\\20const\n3492:GrShape::setRect\\28SkRect\\20const&\\29\n3493:GrShape::setRRect\\28SkRRect\\20const&\\29\n3494:GrResourceProvider::assignUniqueKeyToResource\\28skgpu::UniqueKey\\20const&\\2c\\20GrGpuResource*\\29\n3495:GrResourceCache::releaseAll\\28\\29\n3496:GrResourceCache::getNextTimestamp\\28\\29\n3497:GrRenderTask::addDependency\\28GrRenderTask*\\29\n3498:GrRenderTargetProxy::canUseStencil\\28GrCaps\\20const&\\29\\20const\n3499:GrRecordingContextPriv::addOnFlushCallbackObject\\28GrOnFlushCallbackObject*\\29\n3500:GrRecordingContext::~GrRecordingContext\\28\\29\n3501:GrRecordingContext::abandonContext\\28\\29\n3502:GrQuadUtils::TessellationHelper::Vertices::moveTo\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20int>\\20const&\\29\n3503:GrQuadUtils::TessellationHelper::EdgeEquations::reset\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\29\n3504:GrQuadUtils::ResolveAAType\\28GrAAType\\2c\\20GrQuadAAFlags\\2c\\20GrQuad\\20const&\\2c\\20GrAAType*\\2c\\20GrQuadAAFlags*\\29\n3505:GrQuadBuffer<\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA>::append\\28GrQuad\\20const&\\2c\\20\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA&&\\2c\\20GrQuad\\20const*\\29\n3506:GrPixmap::GrPixmap\\28GrImageInfo\\2c\\20void*\\2c\\20unsigned\\20long\\29\n3507:GrPipeline::GrPipeline\\28GrPipeline::InitArgs\\20const&\\2c\\20GrProcessorSet&&\\2c\\20GrAppliedClip&&\\29\n3508:GrPersistentCacheUtils::UnpackCachedShaders\\28SkReadBuffer*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20SkSL::ProgramInterface*\\2c\\20int\\2c\\20GrPersistentCacheUtils::ShaderMetadata*\\29\n3509:GrPathUtils::convertCubicToQuads\\28SkPoint\\20const*\\2c\\20float\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\29\n3510:GrPathTessellationShader::Make\\28GrShaderCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::tess::PatchAttribs\\29\n3511:GrOp::chainConcat\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n3512:GrOp::GenOpClassID\\28\\29\n3513:GrMeshDrawOp::PatternHelper::PatternHelper\\28GrMeshDrawTarget*\\2c\\20GrPrimitiveType\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3514:GrMemoryPool::Make\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n3515:GrMakeKeyFromImageID\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\2c\\20SkIRect\\20const&\\29\n3516:GrImageInfo::GrImageInfo\\28GrColorInfo\\20const&\\2c\\20SkISize\\20const&\\29\n3517:GrGpuResource::removeScratchKey\\28\\29\n3518:GrGpuResource::registerWithCacheWrapped\\28GrWrapCacheable\\29\n3519:GrGpuResource::dumpMemoryStatisticsPriv\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3520:GrGpuBuffer::onGpuMemorySize\\28\\29\\20const\n3521:GrGpu::resolveRenderTarget\\28GrRenderTarget*\\2c\\20SkIRect\\20const&\\29\n3522:GrGpu::executeFlushInfo\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n3523:GrGeometryProcessor::TextureSampler::TextureSampler\\28GrSamplerState\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n3524:GrGeometryProcessor::ProgramImpl::ComputeMatrixKeys\\28GrShaderCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n3525:GrGLUniformHandler::getUniformVariable\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n3526:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n3527:GrGLSemaphore::GrGLSemaphore\\28GrGLGpu*\\2c\\20bool\\29\n3528:GrGLSLVaryingHandler::~GrGLSLVaryingHandler\\28\\29\n3529:GrGLSLShaderBuilder::emitFunction\\28SkSLType\\2c\\20char\\20const*\\2c\\20SkSpan<GrShaderVar\\20const>\\2c\\20char\\20const*\\29\n3530:GrGLSLProgramDataManager::setSkMatrix\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20SkMatrix\\20const&\\29\\20const\n3531:GrGLSLProgramBuilder::writeFPFunction\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n3532:GrGLSLProgramBuilder::invokeFP\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n3533:GrGLSLProgramBuilder::addRTFlipUniform\\28char\\20const*\\29\n3534:GrGLSLFragmentShaderBuilder::dstColor\\28\\29\n3535:GrGLSLBlend::BlendKey\\28SkBlendMode\\29\n3536:GrGLProgramBuilder::~GrGLProgramBuilder\\28\\29\n3537:GrGLProgramBuilder::computeCountsAndStrides\\28unsigned\\20int\\2c\\20GrGeometryProcessor\\20const&\\2c\\20bool\\29\n3538:GrGLGpu::flushScissor\\28GrScissorState\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\29\n3539:GrGLGpu::flushClearColor\\28std::__2::array<float\\2c\\204ul>\\29\n3540:GrGLGpu::deleteFence\\28__GLsync*\\29\n3541:GrGLGpu::createTexture\\28SkISize\\2c\\20GrGLFormat\\2c\\20unsigned\\20int\\2c\\20skgpu::Renderable\\2c\\20GrGLTextureParameters::SamplerOverriddenState*\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3542:GrGLGpu::copySurfaceAsDraw\\28GrSurface*\\2c\\20bool\\2c\\20GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkFilterMode\\29\n3543:GrGLGpu::SamplerObjectCache::~SamplerObjectCache\\28\\29\n3544:GrGLGpu::HWVertexArrayState::bindInternalVertexArray\\28GrGLGpu*\\2c\\20GrBuffer\\20const*\\29\n3545:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3546:GrGLFinishCallbacks::callAll\\28bool\\29\n3547:GrGLBuffer::Make\\28GrGLGpu*\\2c\\20unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n3548:GrGLAttribArrayState::enableVertexArrays\\28GrGLGpu\\20const*\\2c\\20int\\2c\\20GrPrimitiveRestart\\29\n3549:GrFragmentProcessors::make_effect_fp\\28sk_sp<SkRuntimeEffect>\\2c\\20char\\20const*\\2c\\20sk_sp<SkData\\20const>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\2c\\20GrFPArgs\\20const&\\29\n3550:GrFragmentProcessors::MakeChildFP\\28SkRuntimeEffect::ChildPtr\\20const&\\2c\\20GrFPArgs\\20const&\\29\n3551:GrFragmentProcessors::IsSupported\\28SkMaskFilter\\20const*\\29\n3552:GrFragmentProcessor::makeProgramImpl\\28\\29\\20const\n3553:GrFragmentProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n3554:GrFragmentProcessor::MulInputByChildAlpha\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3555:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n3556:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3557:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3558:GrDynamicAtlas::makeNode\\28GrDynamicAtlas::Node*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3559:GrDrawingManager::setLastRenderTask\\28GrSurfaceProxy\\20const*\\2c\\20GrRenderTask*\\29\n3560:GrDrawingManager::flushSurfaces\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n3561:GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29\n3562:GrDirectContext::resetContext\\28unsigned\\20int\\29\n3563:GrDirectContext::getResourceCacheLimit\\28\\29\\20const\n3564:GrDefaultGeoProcFactory::MakeForDeviceSpace\\28SkArenaAlloc*\\2c\\20GrDefaultGeoProcFactory::Color\\20const&\\2c\\20GrDefaultGeoProcFactory::Coverage\\20const&\\2c\\20GrDefaultGeoProcFactory::LocalCoords\\20const&\\2c\\20SkMatrix\\20const&\\29\n3565:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20sk_sp<GrColorSpaceXform>\\29\n3566:GrColorSpaceXform::apply\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n3567:GrColorSpaceXform::Equals\\28GrColorSpaceXform\\20const*\\2c\\20GrColorSpaceXform\\20const*\\29\n3568:GrBufferAllocPool::unmap\\28\\29\n3569:GrBlurUtils::can_filter_mask\\28SkMaskFilterBase\\20const*\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect*\\29\n3570:GrBicubicEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkRect\\20const&\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n3571:GrBackendTextures::MakeGL\\28int\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrGLTextureInfo\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3572:GrBackendFormatStencilBits\\28GrBackendFormat\\20const&\\29\n3573:GrBackendFormat::asMockCompressionType\\28\\29\\20const\n3574:GrAATriangulator::~GrAATriangulator\\28\\29\n3575:GrAATriangulator::makeEvent\\28GrAATriangulator::SSEdge*\\2c\\20GrAATriangulator::EventList*\\29\\20const\n3576:GrAAConvexTessellator::fanRing\\28GrAAConvexTessellator::Ring\\20const&\\29\n3577:GrAAConvexTessellator::computePtAlongBisector\\28int\\2c\\20SkPoint\\20const&\\2c\\20int\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n3578:FT_Stream_ReadAt\n3579:FT_Stream_OpenMemory\n3580:FT_Set_Char_Size\n3581:FT_Request_Metrics\n3582:FT_Hypot\n3583:FT_Get_Var_Design_Coordinates\n3584:FT_Get_Paint\n3585:FT_Get_MM_Var\n3586:DecodeImageData\n3587:Cr_z_inflate_table\n3588:Cr_z_inflateReset\n3589:Cr_z_deflateEnd\n3590:Cr_z_copy_with_crc\n3591:Compute_Point_Displacement\n3592:AAT::trak::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3593:AAT::ltag::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3594:AAT::feat::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3595:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20void>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n3596:AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20false>>::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n3597:AAT::KerxTable<OT::KernOT>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3598:AAT::KerxTable<OT::KernAAT>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3599:AAT::KerxTable<AAT::kerx>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3600:zeroinfnan\n3601:xyz_almost_equal\\28skcms_Matrix3x3\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n3602:wuffs_lzw__decoder__transform_io\n3603:wuffs_gif__decoder__set_quirk_enabled\n3604:wuffs_gif__decoder__restart_frame\n3605:wuffs_gif__decoder__num_animation_loops\n3606:wuffs_gif__decoder__frame_dirty_rect\n3607:wuffs_gif__decoder__decode_up_to_id_part1\n3608:wuffs_gif__decoder__decode_frame\n3609:write_vertex_position\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20char\\20const*\\2c\\20GrShaderVar*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n3610:write_text_tag\\28char\\20const*\\29\n3611:write_passthrough_vertex_position\\28GrGLSLVertexBuilder*\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar*\\29\n3612:write_mAB_or_mBA_tag\\28unsigned\\20int\\2c\\20skcms_Curve\\20const*\\2c\\20skcms_Curve\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20skcms_Curve\\20const*\\2c\\20skcms_Matrix3x4\\20const*\\29\n3613:wctomb\n3614:wchar_t*\\20std::__2::copy\\5babi:v160004\\5d<std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20wchar_t*>\\28std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20wchar_t*\\29\n3615:walk_simple_edges\\28SkEdge*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20int\\29\n3616:vsscanf\n3617:void\\20std::__2::vector<sktext::GlyphRun\\2c\\20std::__2::allocator<sktext::GlyphRun>>::__emplace_back_slow_path<SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>&\\2c\\20SkSpan<unsigned\\20short\\20const>&\\2c\\20SkSpan<char\\20const>&\\2c\\20SkSpan<unsigned\\20int\\20const>&\\2c\\20SkSpan<SkPoint\\20const>&>\\28SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>&\\2c\\20SkSpan<unsigned\\20short\\20const>&\\2c\\20SkSpan<char\\20const>&\\2c\\20SkSpan<unsigned\\20int\\20const>&\\2c\\20SkSpan<SkPoint\\20const>&\\29\n3618:void\\20std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::assign<skia::textlayout::FontFeature*\\2c\\200>\\28skia::textlayout::FontFeature*\\2c\\20skia::textlayout::FontFeature*\\29\n3619:void\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>::__emplace_back_slow_path<sk_sp<SkTypeface>>\\28sk_sp<SkTypeface>&&\\29\n3620:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::assign<SkString*\\2c\\200>\\28SkString*\\2c\\20SkString*\\29\n3621:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\\20const*&>\\28char\\20const*&\\29\n3622:void\\20std::__2::vector<SkSL::FunctionDebugInfo\\2c\\20std::__2::allocator<SkSL::FunctionDebugInfo>>::__push_back_slow_path<SkSL::FunctionDebugInfo>\\28SkSL::FunctionDebugInfo&&\\29\n3623:void\\20std::__2::vector<SkMeshSpecification::Varying\\2c\\20std::__2::allocator<SkMeshSpecification::Varying>>::__push_back_slow_path<SkMeshSpecification::Varying>\\28SkMeshSpecification::Varying&&\\29\n3624:void\\20std::__2::vector<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>>::__push_back_slow_path<SkMeshSpecification::Attribute>\\28SkMeshSpecification::Attribute&&\\29\n3625:void\\20std::__2::vector<SkFontArguments::VariationPosition::Coordinate\\2c\\20std::__2::allocator<SkFontArguments::VariationPosition::Coordinate>>::assign<SkFontArguments::VariationPosition::Coordinate*\\2c\\200>\\28SkFontArguments::VariationPosition::Coordinate*\\2c\\20SkFontArguments::VariationPosition::Coordinate*\\29\n3626:void\\20std::__2::vector<Contour\\2c\\20std::__2::allocator<Contour>>::__emplace_back_slow_path<SkRect&\\2c\\20int&\\2c\\20int&>\\28SkRect&\\2c\\20int&\\2c\\20int&\\29\n3627:void\\20std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::construct\\5babi:v160004\\5d<std::__2::locale::facet*\\2c\\20void\\2c\\20void>\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20std::__2::locale::facet**\\29\n3628:void\\20std::__2::__tree_balance_after_insert\\5babi:v160004\\5d<std::__2::__tree_node_base<void*>*>\\28std::__2::__tree_node_base<void*>*\\2c\\20std::__2::__tree_node_base<void*>*\\29\n3629:void\\20std::__2::__stable_sort_move<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\29\n3630:void\\20std::__2::__sift_up\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20GrGeometryProcessor::ProgramImpl::emitTransformCode\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\29::$_0&\\2c\\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>\\28std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\\2c\\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\\2c\\20GrGeometryProcessor::ProgramImpl::emitTransformCode\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\29::$_0&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>::difference_type\\29\n3631:void\\20std::__2::__optional_storage_base<skia::textlayout::FontArguments\\2c\\20false>::__assign_from\\5babi:v160004\\5d<std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&>\\28std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&\\29\n3632:void\\20std::__2::__double_or_nothing\\5babi:v160004\\5d<char>\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20char*&\\2c\\20char*&\\29\n3633:void\\20sorted_merge<&sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\29\n3634:void\\20sorted_merge<&sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\29\n3635:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29.1\n3636:void\\20skgpu::ganesh::SurfaceFillContext::clear<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n3637:void\\20emscripten::internal::raw_destructor<sk_sp<SkColorSpace>>\\28sk_sp<SkColorSpace>*\\29\n3638:void\\20emscripten::internal::MemberAccess<SkRuntimeEffect::TracedShader\\2c\\20sk_sp<SkShader>>::setWire<SkRuntimeEffect::TracedShader>\\28sk_sp<SkShader>\\20SkRuntimeEffect::TracedShader::*\\20const&\\2c\\20SkRuntimeEffect::TracedShader&\\2c\\20sk_sp<SkShader>*\\29\n3639:void\\20emscripten::internal::MemberAccess<SimpleStrutStyle\\2c\\20SimpleFontStyle>::setWire<SimpleStrutStyle>\\28SimpleFontStyle\\20SimpleStrutStyle::*\\20const&\\2c\\20SimpleStrutStyle&\\2c\\20SimpleFontStyle*\\29\n3640:void\\20\\28anonymous\\20namespace\\29::copyFT2LCD16<false>\\28FT_Bitmap_\\20const&\\2c\\20SkMaskBuilder*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\29\n3641:void\\20SkTIntroSort<int\\2c\\20DistanceLessThan>\\28int\\2c\\20int*\\2c\\20int\\2c\\20DistanceLessThan\\20const&\\29\n3642:void\\20SkTIntroSort<float\\2c\\20void\\20SkTQSort<float>\\28float*\\2c\\20float*\\29::'lambda'\\28float\\20const&\\2c\\20float\\20const&\\29>\\28int\\2c\\20float*\\2c\\20int\\2c\\20void\\20SkTQSort<float>\\28float*\\2c\\20float*\\29::'lambda'\\28float\\20const&\\2c\\20float\\20const&\\29\\20const&\\29\n3643:void\\20SkTIntroSort<SkString\\2c\\20bool\\20\\28SkString\\20const&\\2c\\20SkString\\20const&\\29>\\28int\\2c\\20SkString*\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\\29\n3644:void\\20SkTIntroSort<SkOpRayHit*\\2c\\20bool\\20\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29>\\28int\\2c\\20SkOpRayHit**\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\\29\n3645:void\\20SkTIntroSort<SkOpContour*\\2c\\20void\\20SkTQSort<SkOpContour>\\28SkOpContour**\\2c\\20SkOpContour**\\29::'lambda'\\28SkOpContour\\20const*\\2c\\20SkOpContour\\20const*\\29>\\28int\\2c\\20SkOpContour*\\2c\\20int\\2c\\20void\\20SkTQSort<SkOpContour>\\28SkOpContour**\\2c\\20SkOpContour**\\29::'lambda'\\28SkOpContour\\20const*\\2c\\20SkOpContour\\20const*\\29\\20const&\\29\n3646:void\\20SkTIntroSort<SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::Entry\\2c\\20SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::EntryLessThan>\\28int\\2c\\20SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::Entry*\\2c\\20int\\2c\\20SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::EntryLessThan\\20const&\\29\n3647:void\\20SkTIntroSort<SkClosestRecord\\20const*\\2c\\20void\\20SkTQSort<SkClosestRecord\\20const>\\28SkClosestRecord\\20const**\\2c\\20SkClosestRecord\\20const**\\29::'lambda'\\28SkClosestRecord\\20const*\\2c\\20SkClosestRecord\\20const*\\29>\\28int\\2c\\20SkClosestRecord\\20const*\\2c\\20int\\2c\\20void\\20SkTQSort<SkClosestRecord\\20const>\\28SkClosestRecord\\20const**\\2c\\20SkClosestRecord\\20const**\\29::'lambda'\\28SkClosestRecord\\20const*\\2c\\20SkClosestRecord\\20const*\\29\\20const&\\29\n3648:void\\20SkTIntroSort<SkAnalyticEdge*\\2c\\20void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29>\\28int\\2c\\20SkAnalyticEdge*\\2c\\20int\\2c\\20void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29\\20const&\\29\n3649:void\\20SkTIntroSort<GrGpuResource*\\2c\\20bool\\20\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29>\\28int\\2c\\20GrGpuResource**\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\29\n3650:void\\20SkTIntroSort<GrGpuResource*\\2c\\20bool\\20\\28*\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29>\\28int\\2c\\20GrGpuResource**\\2c\\20int\\2c\\20bool\\20\\28*\\20const&\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\29\n3651:void\\20SkTIntroSort<Edge\\2c\\20EdgeLT>\\28int\\2c\\20Edge*\\2c\\20int\\2c\\20EdgeLT\\20const&\\29\n3652:void\\20GrGeometryProcessor::ProgramImpl::collectTransforms\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderType\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20GrPipeline\\20const&\\29::$_0::operator\\28\\29<$_0>\\28$_0&\\2c\\20GrFragmentProcessor\\20const&\\2c\\20bool\\2c\\20GrFragmentProcessor\\20const*\\2c\\20int\\2c\\20GrGeometryProcessor::ProgramImpl::collectTransforms\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderType\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20GrPipeline\\20const&\\29::BaseCoord\\29\n3653:void\\20AAT::StateTableDriver<AAT::ObsoleteTypes\\2c\\20void>::drive<AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t>\\28AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t*\\2c\\20AAT::hb_aat_apply_context_t*\\29::'lambda0'\\28\\29::operator\\28\\29\\28\\29\\20const\n3654:virtual\\20thunk\\20to\\20GrGLTexture::onSetLabel\\28\\29\n3655:virtual\\20thunk\\20to\\20GrGLTexture::backendFormat\\28\\29\\20const\n3656:vfiprintf\n3657:validate_texel_levels\\28SkISize\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20GrCaps\\20const*\\29\n3658:utf8TextClose\\28UText*\\29\n3659:utf8TextAccess\\28UText*\\2c\\20long\\20long\\2c\\20signed\\20char\\29\n3660:utext_openConstUnicodeString_73\n3661:utext_moveIndex32_73\n3662:utext_getPreviousNativeIndex_73\n3663:utext_extract_73\n3664:uscript_getShortName_73\n3665:ures_resetIterator_73\n3666:ures_initStackObject_73\n3667:ures_getValueWithFallback_73\n3668:ures_getInt_73\n3669:ures_getIntVector_73\n3670:ures_copyResb_73\n3671:uprv_stricmp_73\n3672:uprv_getMaxValues_73\n3673:uprv_compareInvAscii_73\n3674:upropsvec_addPropertyStarts_73\n3675:uprops_getSource_73\n3676:unsigned\\20short\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20short>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3677:unsigned\\20long\\20long\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20long\\20long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3678:unsigned\\20int\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20int>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3679:unsigned\\20int\\20const*\\20std::__2::lower_bound\\5babi:v160004\\5d<unsigned\\20int\\20const*\\2c\\20unsigned\\20long>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20long\\20const&\\29\n3680:unorm_getFCD16_73\n3681:ultag_isUnicodeLocaleKey_73\n3682:ultag_isScriptSubtag_73\n3683:ultag_isLanguageSubtag_73\n3684:ultag_isExtensionSubtags_73\n3685:ultag_getTKeyStart_73\n3686:ulocimp_toBcpType_73\n3687:ulocimp_forLanguageTag_73\n3688:uloc_toUnicodeLocaleType_73\n3689:uloc_toUnicodeLocaleKey_73\n3690:uloc_setKeywordValue_73\n3691:uloc_getTableStringWithFallback_73\n3692:uloc_getName_73\n3693:uloc_getDisplayName_73\n3694:uenum_unext_73\n3695:udata_open_73\n3696:udata_checkCommonData_73\n3697:ucptrie_internalU8PrevIndex_73\n3698:uchar_addPropertyStarts_73\n3699:ucase_toFullUpper_73\n3700:ucase_toFullLower_73\n3701:ucase_toFullFolding_73\n3702:ucase_getTypeOrIgnorable_73\n3703:ucase_addPropertyStarts_73\n3704:ubidi_getPairedBracketType_73\n3705:ubidi_close_73\n3706:u_unescapeAt_73\n3707:u_strFindFirst_73\n3708:u_memrchr_73\n3709:u_memcmp_73\n3710:u_hasBinaryProperty_73\n3711:u_getPropertyEnum_73\n3712:tt_size_run_prep\n3713:tt_size_done_bytecode\n3714:tt_sbit_decoder_load_image\n3715:tt_face_vary_cvt\n3716:tt_face_palette_set\n3717:tt_face_load_cvt\n3718:tt_face_get_metrics\n3719:tt_done_blend\n3720:tt_delta_interpolate\n3721:tt_cmap4_set_range\n3722:tt_cmap4_next\n3723:tt_cmap4_char_map_linear\n3724:tt_cmap4_char_map_binary\n3725:tt_cmap14_get_def_chars\n3726:tt_cmap13_next\n3727:tt_cmap12_next\n3728:tt_cmap12_init\n3729:tt_cmap12_char_map_binary\n3730:tt_apply_mvar\n3731:toParagraphStyle\\28SimpleParagraphStyle\\20const&\\29\n3732:tanhf\n3733:t1_lookup_glyph_by_stdcharcode_ps\n3734:t1_builder_close_contour\n3735:t1_builder_check_points\n3736:strtoull\n3737:strtoll_l\n3738:strtol\n3739:strspn\n3740:store_int\n3741:std::logic_error::~logic_error\\28\\29\n3742:std::logic_error::logic_error\\28char\\20const*\\29\n3743:std::exception::exception\\5babi:v160004\\5d\\28\\29\n3744:std::__2::vector<unsigned\\20char\\2c\\20std::__2::allocator<unsigned\\20char>>::__append\\28unsigned\\20long\\29\n3745:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::max_size\\28\\29\\20const\n3746:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__construct_at_end\\28unsigned\\20long\\29\n3747:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__clear\\5babi:v160004\\5d\\28\\29\n3748:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__base_destruct_at_end\\5babi:v160004\\5d\\28std::__2::locale::facet**\\29\n3749:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__annotate_shrink\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n3750:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__annotate_new\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n3751:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__annotate_delete\\5babi:v160004\\5d\\28\\29\\20const\n3752:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::insert\\28std::__2::__wrap_iter<float\\20const*>\\2c\\20float&&\\29\n3753:std::__2::vector<SkCustomTypefaceBuilder::GlyphRec\\2c\\20std::__2::allocator<SkCustomTypefaceBuilder::GlyphRec>>::__append\\28unsigned\\20long\\29\n3754:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::operator=\\5babi:v160004\\5d\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&&\\29\n3755:std::__2::unique_ptr<SkSL::Program\\2c\\20std::__2::default_delete<SkSL::Program>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3756:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::coalesce_vector<bool>\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n3757:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\\5babi:v160004\\5d\\28std::nullptr_t\\29\n3758:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\\2c\\20int\\2c\\20sktext::gpu::SubRunAllocator>\\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\\28int\\29::'lambda0'\\28\\29::operator\\28\\29\\28\\29\\20const\n3759:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\\2c\\20int\\2c\\20sktext::gpu::SubRunAllocator>\\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\\28int\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n3760:std::__2::to_string\\28unsigned\\20long\\29\n3761:std::__2::to_chars_result\\20std::__2::__to_chars_itoa\\5babi:v160004\\5d<unsigned\\20int>\\28char*\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20std::__2::integral_constant<bool\\2c\\20false>\\29\n3762:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::~time_put\\28\\29\n3763:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_year\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n3764:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_weekdayname\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n3765:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_monthname\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n3766:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_year\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n3767:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_weekdayname\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n3768:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_monthname\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n3769:std::__2::reverse_iterator<std::__2::locale::facet**>::operator++\\5babi:v160004\\5d\\28\\29\n3770:std::__2::reverse_iterator<std::__2::locale::facet**>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n3771:std::__2::priority_queue<GrAATriangulator::Event*\\2c\\20std::__2::vector<GrAATriangulator::Event*\\2c\\20std::__2::allocator<GrAATriangulator::Event*>>\\2c\\20GrAATriangulator::EventComparator>::push\\28GrAATriangulator::Event*\\20const&\\29\n3772:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20void*>*>\\2c\\20bool>\\20std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::__unordered_map_hasher<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>>>::__emplace_unique_key_args<GrFragmentProcessor\\20const*\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrFragmentProcessor\\20const*&&>\\2c\\20std::__2::tuple<>>\\28GrFragmentProcessor\\20const*\\20const&\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrFragmentProcessor\\20const*&&>&&\\2c\\20std::__2::tuple<>&&\\29\n3773:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<int\\2c\\20void*>*>\\2c\\20bool>\\20std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::__emplace_unique_key_args<int\\2c\\20int\\20const&>\\28int\\20const&\\2c\\20int\\20const&\\29\n3774:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>::pair\\28std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>&&\\29\n3775:std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator=\\5babi:v160004\\5d\\28wchar_t\\29\n3776:std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator=\\5babi:v160004\\5d\\28char\\29\n3777:std::__2::optional<SkPath>&\\20std::__2::optional<SkPath>::operator=\\5babi:v160004\\5d<SkPath\\20const&\\2c\\20void>\\28SkPath\\20const&\\29\n3778:std::__2::numpunct<wchar_t>::~numpunct\\28\\29\n3779:std::__2::numpunct<char>::~numpunct\\28\\29\n3780:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20int&\\29\\20const\n3781:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>>\\28std::__2::locale\\20const&\\29\n3782:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20int&\\29\\20const\n3783:std::__2::moneypunct<wchar_t\\2c\\20true>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<wchar_t\\2c\\20true>>\\28std::__2::locale\\20const&\\29\n3784:std::__2::moneypunct<wchar_t\\2c\\20false>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<wchar_t\\2c\\20false>>\\28std::__2::locale\\20const&\\29\n3785:std::__2::moneypunct<wchar_t\\2c\\20false>::do_negative_sign\\28\\29\\20const\n3786:std::__2::moneypunct<char\\2c\\20true>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<char\\2c\\20true>>\\28std::__2::locale\\20const&\\29\n3787:std::__2::moneypunct<char\\2c\\20false>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<char\\2c\\20false>>\\28std::__2::locale\\20const&\\29\n3788:std::__2::moneypunct<char\\2c\\20false>::do_negative_sign\\28\\29\\20const\n3789:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20std::__2::unique_ptr<wchar_t\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20wchar_t*&\\2c\\20wchar_t*\\29\n3790:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool&\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20char*&\\2c\\20char*\\29\n3791:std::__2::locale::__imp::~__imp\\28\\29\n3792:std::__2::iterator_traits<unsigned\\20int\\20const*>::difference_type\\20std::__2::__distance\\5babi:v160004\\5d<unsigned\\20int\\20const*>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20std::__2::random_access_iterator_tag\\29\n3793:std::__2::iterator_traits<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\29\n3794:std::__2::iterator_traits<char*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\29\n3795:std::__2::iterator_traits<char*>::difference_type\\20std::__2::__distance\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\2c\\20std::__2::random_access_iterator_tag\\29\n3796:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator++\\5babi:v160004\\5d\\28int\\29\n3797:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::__test_for_eof\\5babi:v160004\\5d\\28\\29\\20const\n3798:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator++\\5babi:v160004\\5d\\28int\\29\n3799:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::__test_for_eof\\5babi:v160004\\5d\\28\\29\\20const\n3800:std::__2::ios_base::width\\5babi:v160004\\5d\\28long\\29\n3801:std::__2::ios_base::imbue\\28std::__2::locale\\20const&\\29\n3802:std::__2::ios_base::__call_callbacks\\28std::__2::ios_base::event\\29\n3803:std::__2::hash<skia::textlayout::FontArguments>::operator\\28\\29\\28skia::textlayout::FontArguments\\20const&\\29\\20const\n3804:std::__2::enable_if<std::is_base_of_v<SkShader\\2c\\20SkPictureShader>\\2c\\20sk_sp<SkShader>>::type\\20SkLocalMatrixShader::MakeWrapped<SkPictureShader\\2c\\20sk_sp<SkPicture>\\2c\\20SkTileMode&\\2c\\20SkTileMode&\\2c\\20SkFilterMode&\\2c\\20SkRect\\20const*&>\\28SkMatrix\\20const*\\2c\\20sk_sp<SkPicture>&&\\2c\\20SkTileMode&\\2c\\20SkTileMode&\\2c\\20SkFilterMode&\\2c\\20SkRect\\20const*&\\29\n3805:std::__2::enable_if<is_move_constructible<char>::value\\20&&\\20is_move_assignable<char>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<char>\\28char&\\2c\\20char&\\29\n3806:std::__2::enable_if<__is_cpp17_random_access_iterator<char\\20const*>::value\\2c\\20char*>::type\\20std::__2::copy_n\\5babi:v160004\\5d<char\\20const*\\2c\\20unsigned\\20long\\2c\\20char*>\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20char*\\29\n3807:std::__2::enable_if<__is_cpp17_forward_iterator<wchar_t\\20const*>::value\\2c\\20void>::type\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__init<wchar_t\\20const*>\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\n3808:std::__2::enable_if<__is_cpp17_forward_iterator<char*>::value\\2c\\20void>::type\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__init<char*>\\28char*\\2c\\20char*\\29\n3809:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__add_back_capacity\\28\\29\n3810:std::__2::default_delete<sktext::gpu::TextBlobRedrawCoordinator>::operator\\28\\29\\5babi:v160004\\5d\\28sktext::gpu::TextBlobRedrawCoordinator*\\29\\20const\n3811:std::__2::default_delete<sktext::GlyphRunBuilder>::operator\\28\\29\\5babi:v160004\\5d\\28sktext::GlyphRunBuilder*\\29\\20const\n3812:std::__2::ctype<char>::~ctype\\28\\29\n3813:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::~codecvt\\28\\29\n3814:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n3815:std::__2::codecvt<char32_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char32_t\\20const*\\2c\\20char32_t\\20const*\\2c\\20char32_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n3816:std::__2::codecvt<char32_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3817:std::__2::codecvt<char32_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char32_t*\\2c\\20char32_t*\\2c\\20char32_t*&\\29\\20const\n3818:std::__2::codecvt<char16_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20char16_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n3819:std::__2::codecvt<char16_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3820:std::__2::codecvt<char16_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char16_t*\\2c\\20char16_t*\\2c\\20char16_t*&\\29\\20const\n3821:std::__2::char_traits<char>::not_eof\\28int\\29\n3822:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::str\\28\\29\\20const\n3823:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20wchar_t\\29\n3824:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__grow_by_and_replace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20wchar_t\\20const*\\29\n3825:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__grow_by\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3826:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::resize\\28unsigned\\20long\\2c\\20char\\29\n3827:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::insert\\28unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n3828:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20char\\29\n3829:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20void>\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n3830:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__throw_out_of_range\\5babi:v160004\\5d\\28\\29\\20const\n3831:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__null_terminate_at\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20long\\29\n3832:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_no_alias<false>\\28char\\20const*\\2c\\20unsigned\\20long\\29\n3833:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::emplace_back<char\\20const*>\\28char\\20const*&&\\29\n3834:std::__2::basic_streambuf<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::sgetc\\5babi:v160004\\5d\\28\\29\n3835:std::__2::basic_streambuf<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::sbumpc\\5babi:v160004\\5d\\28\\29\n3836:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sputc\\5babi:v160004\\5d\\28char\\29\n3837:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sgetc\\5babi:v160004\\5d\\28\\29\n3838:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sbumpc\\5babi:v160004\\5d\\28\\29\n3839:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29.2\n3840:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::~sentry\\28\\29\n3841:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::sentry\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\29\n3842:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::operator<<\\28float\\29\n3843:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::flush\\28\\29\n3844:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.2\n3845:std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::deallocate\\5babi:v160004\\5d\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20std::__2::locale::facet**\\2c\\20unsigned\\20long\\29\n3846:std::__2::allocator<wchar_t>::deallocate\\5babi:v160004\\5d\\28wchar_t*\\2c\\20unsigned\\20long\\29\n3847:std::__2::allocator<wchar_t>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3848:std::__2::allocator<char>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3849:std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\20std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>::insert<std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\2c\\200>\\28std::__2::__wrap_iter<SkSL::ProgramElement\\20const*\\20const*>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\29\n3850:std::__2::__unique_if<SkSL::ConstructorCompound>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorCompound\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n3851:std::__2::__time_put::__time_put\\5babi:v160004\\5d\\28\\29\n3852:std::__2::__time_put::__do_put\\28char*\\2c\\20char*&\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n3853:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_back\\28skia::textlayout::OneLineShaper::RunBlock*&&\\29\n3854:std::__2::__optional_destruct_base<GrStyledShape\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n3855:std::__2::__num_put<wchar_t>::__widen_and_group_int\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20std::__2::locale\\20const&\\29\n3856:std::__2::__num_put<wchar_t>::__widen_and_group_float\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20std::__2::locale\\20const&\\29\n3857:std::__2::__num_put<char>::__widen_and_group_int\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\2c\\20char*&\\2c\\20std::__2::locale\\20const&\\29\n3858:std::__2::__num_put<char>::__widen_and_group_float\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\2c\\20char*&\\2c\\20std::__2::locale\\20const&\\29\n3859:std::__2::__money_put<wchar_t>::__gather_info\\28bool\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20std::__2::money_base::pattern&\\2c\\20wchar_t&\\2c\\20wchar_t&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\2c\\20int&\\29\n3860:std::__2::__money_put<wchar_t>::__format\\28wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20unsigned\\20int\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20bool\\2c\\20std::__2::money_base::pattern\\20const&\\2c\\20wchar_t\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\2c\\20int\\29\n3861:std::__2::__money_put<char>::__gather_info\\28bool\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20std::__2::money_base::pattern&\\2c\\20char&\\2c\\20char&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20int&\\29\n3862:std::__2::__money_put<char>::__format\\28char*\\2c\\20char*&\\2c\\20char*&\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20bool\\2c\\20std::__2::money_base::pattern\\20const&\\2c\\20char\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20int\\29\n3863:std::__2::__libcpp_sscanf_l\\28char\\20const*\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n3864:std::__2::__libcpp_mbrtowc_l\\5babi:v160004\\5d\\28wchar_t*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20__mbstate_t*\\2c\\20__locale_struct*\\29\n3865:std::__2::__libcpp_mb_cur_max_l\\5babi:v160004\\5d\\28__locale_struct*\\29\n3866:std::__2::__libcpp_deallocate\\5babi:v160004\\5d\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3867:std::__2::__libcpp_allocate\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n3868:std::__2::__is_overaligned_for_new\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3869:std::__2::__function::__value_func<void\\20\\28void*\\2c\\20void\\20const*\\29>::swap\\5babi:v160004\\5d\\28std::__2::__function::__value_func<void\\20\\28void*\\2c\\20void\\20const*\\29>&\\29\n3870:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n3871:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n3872:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::operator\\28\\29\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\n3873:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::destroy\\28\\29\n3874:std::__2::__constexpr_wcslen\\5babi:v160004\\5d\\28wchar_t\\20const*\\29\n3875:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20unsigned\\20long\\29\n3876:start_input_pass\n3877:sktext::gpu::can_use_direct\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n3878:sktext::gpu::build_distance_adjust_table\\28float\\2c\\20float\\29\n3879:sktext::gpu::VertexFiller::opMaskType\\28\\29\\20const\n3880:sktext::gpu::VertexFiller::fillVertexData\\28int\\2c\\20int\\2c\\20SkSpan<sktext::gpu::Glyph\\20const*>\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\2c\\20void*\\29\\20const\n3881:sktext::gpu::TextBlobRedrawCoordinator::internalRemove\\28sktext::gpu::TextBlob*\\29\n3882:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29::$_2::operator\\28\\29\\28SkZip<SkPackedGlyphID\\20const\\2c\\20SkPoint\\20const>\\2c\\20skgpu::MaskFormat\\29\\20const\n3883:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29::$_0::operator\\28\\29\\28SkZip<SkPackedGlyphID\\20const\\2c\\20SkPoint\\20const>\\2c\\20skgpu::MaskFormat\\29\\20const\n3884:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29\n3885:sktext::gpu::SubRunContainer::EstimateAllocSize\\28sktext::GlyphRunList\\20const&\\29\n3886:sktext::gpu::SubRunAllocator::SubRunAllocator\\28char*\\2c\\20int\\2c\\20int\\29\n3887:sktext::gpu::StrikeCache::~StrikeCache\\28\\29\n3888:sktext::gpu::SlugImpl::Make\\28SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\29\n3889:sktext::gpu::BagOfBytes::BagOfBytes\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29::$_1::operator\\28\\29\\28\\29\\20const\n3890:sktext::glyphrun_source_bounds\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkZip<unsigned\\20short\\20const\\2c\\20SkPoint\\20const>\\2c\\20SkSpan<SkPoint\\20const>\\29\n3891:sktext::SkStrikePromise::resetStrike\\28\\29\n3892:sktext::GlyphRunList::makeBlob\\28\\29\\20const\n3893:sktext::GlyphRunBuilder::blobToGlyphRunList\\28SkTextBlob\\20const&\\2c\\20SkPoint\\29\n3894:skstd::to_string\\28float\\29\n3895:skpathutils::FillPathWithPaint\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPath*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\n3896:skjpeg_err_exit\\28jpeg_common_struct*\\29\n3897:skip_string\n3898:skip_procedure\n3899:skif::\\28anonymous\\20namespace\\29::decompose_transform\\28SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkMatrix*\\2c\\20SkMatrix*\\29\n3900:skif::\\28anonymous\\20namespace\\29::are_axes_nearly_integer_aligned\\28skif::LayerSpace<SkMatrix>\\20const&\\2c\\20skif::LayerSpace<SkIPoint>*\\29\n3901:skif::\\28anonymous\\20namespace\\29::GaneshBackend::maxSigma\\28\\29\\20const\n3902:skif::\\28anonymous\\20namespace\\29::GaneshBackend::blur\\28SkSize\\2c\\20sk_sp<SkSpecialImage>\\2c\\20SkIRect\\20const&\\2c\\20SkTileMode\\2c\\20SkIRect\\20const&\\29\\20const\n3903:skif::Mapping::applyOrigin\\28skif::LayerSpace<SkIPoint>\\20const&\\29\n3904:skif::LayerSpace<SkIRect>::relevantSubset\\28skif::LayerSpace<SkIRect>\\2c\\20SkTileMode\\29\\20const\n3905:skif::FilterResult::subset\\28skif::LayerSpace<SkIPoint>\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\\20const\n3906:skif::FilterResult::applyCrop\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20SkTileMode\\29\\20const\n3907:skia_private::THashTable<unsigned\\20long\\20long\\2c\\20unsigned\\20long\\20long\\2c\\20skia_private::THashSet<unsigned\\20long\\20long\\2c\\20SkGoodHash>::Traits>::set\\28unsigned\\20long\\20long\\29\n3908:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair&&\\29\n3909:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n3910:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::removeIfExists\\28unsigned\\20int\\20const&\\29\n3911:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair&&\\29\n3912:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::uncheckedSet\\28skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair&&\\29\n3913:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::uncheckedSet\\28skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair&&\\29\n3914:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::uncheckedSet\\28skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair&&\\29\n3915:skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair&&\\29\n3916:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::find\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n3917:skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair&&\\29\n3918:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair&&\\29\n3919:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n3920:skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair&&\\29\n3921:skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair\\2c\\20SkIcuBreakIteratorCache::Request\\2c\\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot::emplace\\28skia_private::THashMap<SkIcuBreakIteratorCache::Request\\2c\\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\\2c\\20SkIcuBreakIteratorCache::Request::Hash>::Pair&&\\2c\\20unsigned\\20int\\29\n3922:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::uncheckedSet\\28skgpu::ganesh::SmallPathShapeData*&&\\29\n3923:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::resize\\28int\\29\n3924:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::uncheckedSet\\28sk_sp<sktext::gpu::TextStrike>&&\\29\n3925:skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::resize\\28int\\29\n3926:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::uncheckedSet\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*&&\\29\n3927:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::resize\\28int\\29\n3928:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::uncheckedSet\\28SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*&&\\29\n3929:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::resize\\28int\\29\n3930:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::uncheckedSet\\28SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*&&\\29\n3931:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::resize\\28int\\29\n3932:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::uncheckedSet\\28SkResourceCache::Rec*&&\\29\n3933:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::resize\\28int\\29\n3934:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::set\\28SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\29\n3935:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n3936:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::removeIfExists\\28unsigned\\20int\\20const&\\29\n3937:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::resize\\28int\\29\n3938:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::uncheckedSet\\28SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*&&\\29\n3939:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::resize\\28int\\29\n3940:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::uncheckedSet\\28GrGpuResource*&&\\29\n3941:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::resize\\28int\\29\n3942:skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::set\\28unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\29\n3943:skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::remove\\28SkImageFilter\\20const*\\20const&\\29\n3944:skia_private::TArray<unsigned\\20short\\2c\\20true>::push_back_raw\\28int\\29\n3945:skia_private::TArray<unsigned\\20char\\2c\\20true>::resize_back\\28int\\29\n3946:skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::checkRealloc\\28int\\2c\\20double\\29\n3947:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::~TArray\\28\\29\n3948:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::Entry\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3949:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::operator=\\28skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>&&\\29\n3950:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3951:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::operator=\\28skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>&&\\29\n3952:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3953:skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\\2c\\20false>::move\\28void*\\29\n3954:skia_private::TArray<SkString\\2c\\20true>::operator=\\28skia_private::TArray<SkString\\2c\\20true>&&\\29\n3955:skia_private::TArray<SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument\\2c\\20false>::push_back\\28SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument&&\\29\n3956:skia_private::TArray<SkSL::Field\\2c\\20true>::TArray\\28skia_private::TArray<SkSL::Field\\2c\\20true>&&\\29\n3957:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>::swap\\28skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>&\\29\n3958:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::operator=\\28skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>&&\\29\n3959:skia_private::TArray<SkMatrix\\2c\\20true>::push_back_raw\\28int\\29\n3960:skia_private::TArray<SkFontScanner::AxisDefinition\\2c\\20true>::operator=\\28skia_private::TArray<SkFontScanner::AxisDefinition\\2c\\20true>\\20const&\\29\n3961:skia_private::TArray<SkClosestRecord\\2c\\20true>::push_back_raw\\28int\\29\n3962:skia_private::TArray<PathSegment\\2c\\20true>::push_back_raw\\28int\\29\n3963:skia_private::TArray<GrTextureProxy*\\2c\\20true>::move_back_n\\28int\\2c\\20GrTextureProxy**\\29\n3964:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::operator=\\28skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>&&\\29\n3965:skia_private::TArray<EllipticalRRectOp::RRect\\2c\\20true>::push_back_n\\28int\\2c\\20EllipticalRRectOp::RRect\\20const*\\29\n3966:skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\20const&\\29\n3967:skia_png_zfree\n3968:skia_png_write_zTXt\n3969:skia_png_write_tIME\n3970:skia_png_write_tEXt\n3971:skia_png_write_iTXt\n3972:skia_png_set_write_fn\n3973:skia_png_set_strip_16\n3974:skia_png_set_read_user_transform_fn\n3975:skia_png_set_read_user_chunk_fn\n3976:skia_png_set_option\n3977:skia_png_set_mem_fn\n3978:skia_png_set_expand_gray_1_2_4_to_8\n3979:skia_png_set_error_fn\n3980:skia_png_set_compression_level\n3981:skia_png_set_IHDR\n3982:skia_png_read_filter_row\n3983:skia_png_process_IDAT_data\n3984:skia_png_icc_set_sRGB\n3985:skia_png_icc_check_tag_table\n3986:skia_png_icc_check_header\n3987:skia_png_get_uint_31\n3988:skia_png_get_sBIT\n3989:skia_png_get_rowbytes\n3990:skia_png_get_error_ptr\n3991:skia_png_get_IHDR\n3992:skia_png_do_swap\n3993:skia_png_do_read_transformations\n3994:skia_png_do_read_interlace\n3995:skia_png_do_packswap\n3996:skia_png_do_invert\n3997:skia_png_do_gray_to_rgb\n3998:skia_png_do_expand\n3999:skia_png_do_check_palette_indexes\n4000:skia_png_do_bgr\n4001:skia_png_destroy_png_struct\n4002:skia_png_destroy_gamma_table\n4003:skia_png_create_png_struct\n4004:skia_png_create_info_struct\n4005:skia_png_crc_read\n4006:skia_png_colorspace_sync_info\n4007:skia_png_check_IHDR\n4008:skia::textlayout::TypefaceFontStyleSet::matchStyle\\28SkFontStyle\\20const&\\29\n4009:skia::textlayout::TextStyle::matchOneAttribute\\28skia::textlayout::StyleType\\2c\\20skia::textlayout::TextStyle\\20const&\\29\\20const\n4010:skia::textlayout::TextStyle::equals\\28skia::textlayout::TextStyle\\20const&\\29\\20const\n4011:skia::textlayout::TextShadow::operator!=\\28skia::textlayout::TextShadow\\20const&\\29\\20const\n4012:skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29\n4013:skia::textlayout::TextLine::iterateThroughClustersInGlyphsOrder\\28bool\\2c\\20bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>\\20const&\\29\\20const::$_0::operator\\28\\29\\28unsigned\\20long\\20const&\\29\\20const\n4014:skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const::'lambda'\\28SkRect\\29::operator\\28\\29\\28SkRect\\29\\20const\n4015:skia::textlayout::TextLine::getMetrics\\28\\29\\20const\n4016:skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29\n4017:skia::textlayout::TextLine::buildTextBlob\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n4018:skia::textlayout::TextLine::TextLine\\28skia::textlayout::ParagraphImpl*\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20skia::textlayout::InternalLineMetrics\\29\n4019:skia::textlayout::TextLine&\\20skia_private::TArray<skia::textlayout::TextLine\\2c\\20false>::emplace_back<skia::textlayout::ParagraphImpl*\\2c\\20SkPoint&\\2c\\20SkPoint&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20float&\\2c\\20skia::textlayout::InternalLineMetrics&>\\28skia::textlayout::ParagraphImpl*&&\\2c\\20SkPoint&\\2c\\20SkPoint&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20float&\\2c\\20skia::textlayout::InternalLineMetrics&\\29\n4020:skia::textlayout::Run::shift\\28skia::textlayout::Cluster\\20const*\\2c\\20float\\29\n4021:skia::textlayout::Run::newRunBuffer\\28\\29\n4022:skia::textlayout::Run::findLimitingGlyphClusters\\28skia::textlayout::SkRange<unsigned\\20long>\\29\\20const\n4023:skia::textlayout::Run::addSpacesAtTheEnd\\28float\\2c\\20skia::textlayout::Cluster*\\29\n4024:skia::textlayout::ParagraphStyle::effective_align\\28\\29\\20const\n4025:skia::textlayout::ParagraphStyle::ParagraphStyle\\28\\29\n4026:skia::textlayout::ParagraphPainter::DecorationStyle::DecorationStyle\\28unsigned\\20int\\2c\\20float\\2c\\20std::__2::optional<skia::textlayout::ParagraphPainter::DashPathEffect>\\29\n4027:skia::textlayout::ParagraphImpl::~ParagraphImpl\\28\\29\n4028:skia::textlayout::ParagraphImpl::text\\28skia::textlayout::SkRange<unsigned\\20long>\\29\n4029:skia::textlayout::ParagraphImpl::resolveStrut\\28\\29\n4030:skia::textlayout::ParagraphImpl::getGlyphInfoAtUTF16Offset\\28unsigned\\20long\\2c\\20skia::textlayout::Paragraph::GlyphInfo*\\29\n4031:skia::textlayout::ParagraphImpl::getGlyphClusterAt\\28unsigned\\20long\\2c\\20skia::textlayout::Paragraph::GlyphClusterInfo*\\29\n4032:skia::textlayout::ParagraphImpl::findPreviousGraphemeBoundary\\28unsigned\\20long\\29\\20const\n4033:skia::textlayout::ParagraphImpl::computeEmptyMetrics\\28\\29\n4034:skia::textlayout::ParagraphImpl::clusters\\28skia::textlayout::SkRange<unsigned\\20long>\\29\n4035:skia::textlayout::ParagraphImpl::block\\28unsigned\\20long\\29\n4036:skia::textlayout::ParagraphCacheValue::~ParagraphCacheValue\\28\\29\n4037:skia::textlayout::ParagraphCacheKey::ParagraphCacheKey\\28skia::textlayout::ParagraphImpl\\20const*\\29\n4038:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\\28\\29\n4039:skia::textlayout::ParagraphBuilderImpl::make\\28skia::textlayout::ParagraphStyle\\20const&\\2c\\20sk_sp<skia::textlayout::FontCollection>\\29\n4040:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\\28skia::textlayout::PlaceholderStyle\\20const&\\2c\\20bool\\29\n4041:skia::textlayout::ParagraphBuilderImpl::ParagraphBuilderImpl\\28skia::textlayout::ParagraphStyle\\20const&\\2c\\20sk_sp<skia::textlayout::FontCollection>\\2c\\20sk_sp<SkUnicode>\\29\n4042:skia::textlayout::Paragraph::~Paragraph\\28\\29\n4043:skia::textlayout::OneLineShaper::clusteredText\\28skia::textlayout::SkRange<unsigned\\20long>&\\29\n4044:skia::textlayout::FontCollection::~FontCollection\\28\\29\n4045:skia::textlayout::FontCollection::matchTypeface\\28SkString\\20const&\\2c\\20SkFontStyle\\29\n4046:skia::textlayout::FontCollection::defaultFallback\\28int\\2c\\20SkFontStyle\\2c\\20SkString\\20const&\\29\n4047:skia::textlayout::FontCollection::FamilyKey::Hasher::operator\\28\\29\\28skia::textlayout::FontCollection::FamilyKey\\20const&\\29\\20const\n4048:skgpu::tess::\\28anonymous\\20namespace\\29::write_curve_index_buffer_base_index\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\2c\\20unsigned\\20short\\29\n4049:skgpu::tess::StrokeIterator::next\\28\\29\n4050:skgpu::tess::StrokeIterator::finishOpenContour\\28\\29\n4051:skgpu::tess::PreChopPathCurves\\28float\\2c\\20SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\29\n4052:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::~SmallPathOp\\28\\29\n4053:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::SmallPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrUserStencilSettings\\20const*\\29\n4054:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::recordDraw\\28GrMeshDrawTarget*\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20int\\2c\\20unsigned\\20short*\\29\n4055:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::AAFlatteningConvexPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20SkStrokeRec::Style\\2c\\20SkPaint::Join\\2c\\20float\\2c\\20GrUserStencilSettings\\20const*\\29\n4056:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::AAConvexPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4057:skgpu::ganesh::TextureOp::Make\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::TextureOp::Saturate\\2c\\20SkBlendMode\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20SkRect\\20const*\\29\n4058:skgpu::ganesh::TessellationPathRenderer::IsSupported\\28GrCaps\\20const&\\29\n4059:skgpu::ganesh::SurfaceFillContext::fillRectToRectWithFP\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n4060:skgpu::ganesh::SurfaceFillContext::blitTexture\\28GrSurfaceProxyView\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\20const&\\29\n4061:skgpu::ganesh::SurfaceFillContext::addOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n4062:skgpu::ganesh::SurfaceFillContext::addDrawOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n4063:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\\28\\29.1\n4064:skgpu::ganesh::SurfaceDrawContext::drawVertices\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<SkVertices>\\2c\\20GrPrimitiveType*\\2c\\20bool\\29\n4065:skgpu::ganesh::SurfaceDrawContext::drawTexturedQuad\\28GrClip\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkBlendMode\\2c\\20DrawQuad*\\2c\\20SkRect\\20const*\\29\n4066:skgpu::ganesh::SurfaceDrawContext::drawTexture\\28GrClip\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkBlendMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrQuadAAFlags\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\29\n4067:skgpu::ganesh::SurfaceDrawContext::drawStrokedLine\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkStrokeRec\\20const&\\29\n4068:skgpu::ganesh::SurfaceDrawContext::drawRegion\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4069:skgpu::ganesh::SurfaceDrawContext::drawOval\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const&\\29\n4070:skgpu::ganesh::SurfaceDrawContext::SurfaceDrawContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const&\\29\n4071:skgpu::ganesh::SurfaceContext::~SurfaceContext\\28\\29\n4072:skgpu::ganesh::SurfaceContext::writePixels\\28GrDirectContext*\\2c\\20GrCPixmap\\2c\\20SkIPoint\\29\n4073:skgpu::ganesh::SurfaceContext::copy\\28sk_sp<GrSurfaceProxy>\\2c\\20SkIRect\\2c\\20SkIPoint\\29\n4074:skgpu::ganesh::SurfaceContext::copyScaled\\28sk_sp<GrSurfaceProxy>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkFilterMode\\29\n4075:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n4076:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::FinishContext::~FinishContext\\28\\29\n4077:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n4078:skgpu::ganesh::SurfaceContext::SurfaceContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n4079:skgpu::ganesh::StrokeTessellator::draw\\28GrOpFlushState*\\29\\20const\n4080:skgpu::ganesh::StrokeTessellateOp::prePrepareTessellator\\28GrTessellationShader::ProgramArgs&&\\2c\\20GrAppliedClip&&\\29\n4081:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::NonAAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20GrAAType\\29\n4082:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::AAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::RectInfo\\20const&\\2c\\20bool\\29\n4083:skgpu::ganesh::StencilMaskHelper::drawShape\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion::Op\\2c\\20GrAA\\29\n4084:skgpu::ganesh::SoftwarePathRenderer::DrawAroundInvPath\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n4085:skgpu::ganesh::SmallPathAtlasMgr::findOrCreate\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n4086:skgpu::ganesh::SmallPathAtlasMgr::deleteCacheEntry\\28skgpu::ganesh::SmallPathShapeData*\\29\n4087:skgpu::ganesh::ShadowRRectOp::Make\\28GrRecordingContext*\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20float\\2c\\20float\\29\n4088:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::RegionOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion\\20const&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\29\n4089:skgpu::ganesh::RasterAsView\\28GrRecordingContext*\\2c\\20SkImage_Raster\\20const*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n4090:skgpu::ganesh::QuadPerEdgeAA::Tessellator::append\\28GrQuad*\\2c\\20GrQuad*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrQuadAAFlags\\29\n4091:skgpu::ganesh::QuadPerEdgeAA::Tessellator::Tessellator\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20char*\\29\n4092:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::initializeAttrs\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29\n4093:skgpu::ganesh::QuadPerEdgeAA::IssueDraw\\28GrCaps\\20const&\\2c\\20GrOpsRenderPass*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4094:skgpu::ganesh::QuadPerEdgeAA::GetIndexBuffer\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::IndexBufferOption\\29\n4095:skgpu::ganesh::PathTessellateOp::usesMSAA\\28\\29\\20const\n4096:skgpu::ganesh::PathTessellateOp::prepareTessellator\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n4097:skgpu::ganesh::PathTessellateOp::PathTessellateOp\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrPaint&&\\2c\\20SkRect\\20const&\\29\n4098:skgpu::ganesh::PathStencilCoverOp::prePreparePrograms\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n4099:skgpu::ganesh::PathInnerTriangulateOp::prePreparePrograms\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n4100:skgpu::ganesh::PathCurveTessellator::~PathCurveTessellator\\28\\29\n4101:skgpu::ganesh::PathCurveTessellator::prepareWithTriangles\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20GrTriangulator::BreadcrumbTriangleList*\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n4102:skgpu::ganesh::OpsTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n4103:skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29\n4104:skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n4105:skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n4106:skgpu::ganesh::OpsTask::OpsTask\\28GrDrawingManager*\\2c\\20GrSurfaceProxyView\\2c\\20GrAuditTrail*\\2c\\20sk_sp<GrArenas>\\29\n4107:skgpu::ganesh::OpsTask::OpChain::tryConcat\\28skgpu::ganesh::OpsTask::OpChain::List*\\2c\\20GrProcessorSet::Analysis\\2c\\20GrDstProxyView\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20GrAuditTrail*\\29\n4108:skgpu::ganesh::MakeFragmentProcessorFromView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\n4109:skgpu::ganesh::LockTextureProxyView\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20GrImageTexGenPolicy\\2c\\20skgpu::Mipmapped\\29\n4110:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::~NonAALatticeOp\\28\\29\n4111:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::NonAALatticeOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20std::__2::unique_ptr<SkLatticeIter\\2c\\20std::__2::default_delete<SkLatticeIter>>\\2c\\20SkRect\\20const&\\29\n4112:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Make\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::LocalCoords\\20const&\\2c\\20GrAA\\29\n4113:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::FillRRectOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::LocalCoords\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29\n4114:skgpu::ganesh::DrawAtlasPathOp::prepareProgram\\28GrCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n4115:skgpu::ganesh::Device::replaceBackingProxy\\28SkSurface::ContentChangeMode\\2c\\20sk_sp<GrRenderTargetProxy>\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\29\n4116:skgpu::ganesh::Device::makeSpecial\\28SkBitmap\\20const&\\29\n4117:skgpu::ganesh::Device::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n4118:skgpu::ganesh::Device::drawEdgeAAImage\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20SkTileMode\\29\n4119:skgpu::ganesh::Device::discard\\28\\29\n4120:skgpu::ganesh::Device::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n4121:skgpu::ganesh::DefaultPathRenderer::internalDrawPath\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20bool\\29\n4122:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n4123:skgpu::ganesh::CopyView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4124:skgpu::ganesh::ClipStack::clipPath\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n4125:skgpu::ganesh::ClipStack::SaveRecord::replaceWithElement\\28skgpu::ganesh::ClipStack::RawElement&&\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>*\\29\n4126:skgpu::ganesh::ClipStack::SaveRecord::addElement\\28skgpu::ganesh::ClipStack::RawElement&&\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>*\\29\n4127:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::Draw\\20const&\\29\\20const\n4128:skgpu::ganesh::AtlasTextOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n4129:skgpu::ganesh::AtlasTextOp::AtlasTextOp\\28skgpu::ganesh::AtlasTextOp::MaskType\\2c\\20bool\\2c\\20int\\2c\\20SkRect\\2c\\20skgpu::ganesh::AtlasTextOp::Geometry*\\2c\\20GrColorInfo\\20const&\\2c\\20GrPaint&&\\29\n4130:skgpu::ganesh::AtlasRenderTask::stencilAtlasRect\\28GrRecordingContext*\\2c\\20SkRect\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4131:skgpu::ganesh::AtlasRenderTask::addPath\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkIPoint\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20SkIPoint16*\\29\n4132:skgpu::ganesh::AtlasPathRenderer::preFlush\\28GrOnFlushResourceProvider*\\29\n4133:skgpu::ganesh::AtlasPathRenderer::addPathToAtlas\\28GrRecordingContext*\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkIRect*\\2c\\20SkIPoint16*\\2c\\20bool*\\2c\\20std::__2::function<bool\\20\\28GrSurfaceProxy\\20const*\\29>\\20const&\\29\n4134:skgpu::ganesh::AsFragmentProcessor\\28GrRecordingContext*\\2c\\20SkImage\\20const*\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\n4135:skgpu::TiledTextureUtils::OptimizeSampleArea\\28SkISize\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkRect*\\2c\\20SkRect*\\2c\\20SkMatrix*\\29\n4136:skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::process\\28\\29\n4137:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\\28\\29\n4138:skgpu::RectanizerSkyline::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n4139:skgpu::Plot::Plot\\28int\\2c\\20int\\2c\\20skgpu::AtlasGenerationCounter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkColorType\\2c\\20unsigned\\20long\\29\n4140:skgpu::GetReducedBlendModeInfo\\28SkBlendMode\\29\n4141:skgpu::BlendFuncName\\28SkBlendMode\\29\n4142:skcms_private::baseline::exec_stages\\28skcms_private::Op\\20const*\\2c\\20void\\20const**\\2c\\20char\\20const*\\2c\\20char*\\2c\\20int\\29\n4143:skcms_private::baseline::clut\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20float\\20vector\\5b4\\5d*\\2c\\20float\\20vector\\5b4\\5d*\\2c\\20float\\20vector\\5b4\\5d*\\2c\\20float\\20vector\\5b4\\5d*\\29\n4144:skcms_ApproximatelyEqualProfiles\n4145:sk_sp<SkSurface_Raster>\\20sk_make_sp<SkSurface_Raster\\2c\\20SkImageInfo\\20const&\\2c\\20sk_sp<SkPixelRef>\\2c\\20SkSurfaceProps\\20const*&>\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkPixelRef>&&\\2c\\20SkSurfaceProps\\20const*&\\29\n4146:sk_sp<SkShader>*\\20emscripten::internal::MemberAccess<SkRuntimeEffect::TracedShader\\2c\\20sk_sp<SkShader>>::getWire<SkRuntimeEffect::TracedShader>\\28sk_sp<SkShader>\\20SkRuntimeEffect::TracedShader::*\\20const&\\2c\\20SkRuntimeEffect::TracedShader\\20const&\\29\n4147:sk_fopen\\28char\\20const*\\2c\\20SkFILE_Flags\\29\n4148:sk_fgetsize\\28_IO_FILE*\\29\n4149:sk_fclose\\28_IO_FILE*\\29\n4150:sk_error_fn\\28png_struct_def*\\2c\\20char\\20const*\\29\n4151:setup_masks_arabic_plan\\28arabic_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_script_t\\29\n4152:set_khr_debug_label\\28GrGLGpu*\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4153:setThrew\n4154:setCommonICUData\\28UDataMemory*\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n4155:serialize_image\\28SkImage\\20const*\\2c\\20SkSerialProcs\\29\n4156:send_tree\n4157:sect_with_vertical\\28SkPoint\\20const*\\2c\\20float\\29\n4158:sect_with_horizontal\\28SkPoint\\20const*\\2c\\20float\\29\n4159:scanexp\n4160:scalbnl\n4161:rewind_if_necessary\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4162:resolveImplicitLevels\\28UBiDi*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n4163:reset_and_decode_image_config\\28wuffs_gif__decoder__struct*\\2c\\20wuffs_base__image_config__struct*\\2c\\20wuffs_base__io_buffer__struct*\\2c\\20SkStream*\\29\n4164:res_unload_73\n4165:res_countArrayItems_73\n4166:renderbuffer_storage_msaa\\28GrGLGpu*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\n4167:recursive_edge_intersect\\28GrTriangulator::Line\\20const&\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20GrTriangulator::Line\\20const&\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20SkPoint*\\2c\\20double*\\2c\\20double*\\29\n4168:reclassify_vertex\\28TriangulationVertex*\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20ReflexHash*\\2c\\20SkTInternalLList<TriangulationVertex>*\\29\n4169:read_metadata\\28std::__2::vector<SkJpegMetadataDecoder::Segment\\2c\\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n4170:quad_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4171:quad_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4172:quad_in_line\\28SkPoint\\20const*\\29\n4173:psh_hint_table_init\n4174:psh_hint_table_find_strong_points\n4175:psh_hint_table_activate_mask\n4176:psh_hint_align\n4177:psh_glyph_interpolate_strong_points\n4178:psh_glyph_interpolate_other_points\n4179:psh_glyph_interpolate_normal_points\n4180:psh_blues_set_zones\n4181:ps_parser_load_field\n4182:ps_dimension_end\n4183:ps_dimension_done\n4184:ps_builder_start_point\n4185:printf_core\n4186:premultiply_argb_as_rgba\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4187:premultiply_argb_as_bgra\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4188:position_cluster\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\29\n4189:portable::uniform_color_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4190:portable::set_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4191:portable::scale_1_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4192:portable::memset64\\28unsigned\\20long\\20long*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n4193:portable::lerp_1_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4194:portable::copy_from_indirect_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4195:portable::copy_2_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4196:portable::check_decal_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4197:pop_arg\n4198:pntz\n4199:png_inflate\n4200:png_deflate_claim\n4201:png_decompress_chunk\n4202:png_cache_unknown_chunk\n4203:optimize_layer_filter\\28SkImageFilter\\20const*\\2c\\20SkPaint*\\29\n4204:operator==\\28SkPaint\\20const&\\2c\\20SkPaint\\20const&\\29\n4205:open_face\n4206:openCommonData\\28char\\20const*\\2c\\20int\\2c\\20UErrorCode*\\29\n4207:offsetTOCEntryCount\\28UDataMemory\\20const*\\29\n4208:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n4209:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4210:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4211:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n4212:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphs\\28\\29\\20const\n4213:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphCount\\28\\29\\20const\n4214:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29.1\n4215:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29\n4216:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\\28\\29\\20const\n4217:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\\28GrDirectContext*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n4218:nearly_equal\\28double\\2c\\20double\\29\n4219:mbsrtowcs\n4220:map_quad_general\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\29\n4221:make_tiled_gradient\\28GrFPArgs\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20bool\\2c\\20bool\\29\n4222:make_premul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n4223:make_dual_interval_colorizer\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20float\\29\n4224:make_clamped_gradient\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool\\29\n4225:make_bmp_proxy\\28GrProxyProvider*\\2c\\20SkBitmap\\20const&\\2c\\20GrColorType\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29\n4226:longest_match\n4227:long\\20std::__2::__num_get_signed_integral\\5babi:v160004\\5d<long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n4228:long\\20long\\20std::__2::__num_get_signed_integral\\5babi:v160004\\5d<long\\20long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n4229:long\\20double\\20std::__2::__num_get_float\\5babi:v160004\\5d<long\\20double>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n4230:load_post_names\n4231:line_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4232:line_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4233:legalfunc$_embind_register_bigint\n4234:jpeg_open_backing_store\n4235:jpeg_destroy\n4236:jpeg_alloc_huff_table\n4237:jinit_upsampler\n4238:isSpecialTypeCodepoints\\28char\\20const*\\29\n4239:internal_memalign\n4240:int\\20icu_73::\\28anonymous\\20namespace\\29::MixedBlocks::findBlock<unsigned\\20short\\2c\\20unsigned\\20short>\\28unsigned\\20short\\20const*\\2c\\20unsigned\\20short\\20const*\\2c\\20int\\29\\20const\n4241:int\\20icu_73::\\28anonymous\\20namespace\\29::MixedBlocks::findBlock<unsigned\\20short\\2c\\20unsigned\\20int>\\28unsigned\\20short\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\\20const\n4242:insertRootBundle\\28UResourceDataEntry*&\\2c\\20UErrorCode*\\29\n4243:initial_reordering_consonant_syllable\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_face_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4244:init_error_limit\n4245:init_block\n4246:image_filter_color_type\\28SkImageInfo\\29\n4247:icu_73::set32x64Bits\\28unsigned\\20int*\\2c\\20int\\2c\\20int\\29\n4248:icu_73::getExtName\\28unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20short\\29\n4249:icu_73::compareUnicodeString\\28UElement\\2c\\20UElement\\29\n4250:icu_73::cloneUnicodeString\\28UElement*\\2c\\20UElement*\\29\n4251:icu_73::\\28anonymous\\20namespace\\29::mungeCharName\\28char*\\2c\\20char\\20const*\\2c\\20int\\29\n4252:icu_73::\\28anonymous\\20namespace\\29::MutableCodePointTrie::getDataBlock\\28int\\29\n4253:icu_73::UnicodeString::setCharAt\\28int\\2c\\20char16_t\\29\n4254:icu_73::UnicodeString::indexOf\\28char16_t\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n4255:icu_73::UnicodeString::doReverse\\28int\\2c\\20int\\29\n4256:icu_73::UnicodeSetStringSpan::span\\28char16_t\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n4257:icu_73::UnicodeSetStringSpan::spanUTF8\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n4258:icu_73::UnicodeSetStringSpan::spanBack\\28char16_t\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n4259:icu_73::UnicodeSetStringSpan::spanBackUTF8\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20USetSpanCondition\\29\\20const\n4260:icu_73::UnicodeSet::set\\28int\\2c\\20int\\29\n4261:icu_73::UnicodeSet::setPattern\\28char16_t\\20const*\\2c\\20int\\29\n4262:icu_73::UnicodeSet::remove\\28int\\29\n4263:icu_73::UnicodeSet::removeAll\\28icu_73::UnicodeSet\\20const&\\29\n4264:icu_73::UnicodeSet::matches\\28icu_73::Replaceable\\20const&\\2c\\20int&\\2c\\20int\\2c\\20signed\\20char\\29\n4265:icu_73::UnicodeSet::matchesIndexValue\\28unsigned\\20char\\29\\20const\n4266:icu_73::UnicodeSet::clone\\28\\29\\20const\n4267:icu_73::UnicodeSet::cloneAsThawed\\28\\29\\20const\n4268:icu_73::UnicodeSet::applyPattern\\28icu_73::RuleCharacterIterator&\\2c\\20icu_73::SymbolTable\\20const*\\2c\\20icu_73::UnicodeString&\\2c\\20unsigned\\20int\\2c\\20icu_73::UnicodeSet&\\20\\28icu_73::UnicodeSet::*\\29\\28int\\29\\2c\\20int\\2c\\20UErrorCode&\\29\n4269:icu_73::UnicodeSet::applyPatternIgnoreSpace\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::ParsePosition&\\2c\\20icu_73::SymbolTable\\20const*\\2c\\20UErrorCode&\\29\n4270:icu_73::UnicodeSet::add\\28icu_73::UnicodeString\\20const&\\29\n4271:icu_73::UnicodeSet::addAll\\28icu_73::UnicodeSet\\20const&\\29\n4272:icu_73::UnicodeSet::_generatePattern\\28icu_73::UnicodeString&\\2c\\20signed\\20char\\29\\20const\n4273:icu_73::UnicodeSet::UnicodeSet\\28int\\2c\\20int\\29\n4274:icu_73::UVector::sortedInsert\\28void*\\2c\\20int\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20UErrorCode&\\29\n4275:icu_73::UVector::setElementAt\\28void*\\2c\\20int\\29\n4276:icu_73::UVector::assign\\28icu_73::UVector\\20const&\\2c\\20void\\20\\28*\\29\\28UElement*\\2c\\20UElement*\\29\\2c\\20UErrorCode&\\29\n4277:icu_73::UStringSet::~UStringSet\\28\\29.1\n4278:icu_73::UStringSet::~UStringSet\\28\\29\n4279:icu_73::UStack::UStack\\28void\\20\\28*\\29\\28void*\\29\\2c\\20signed\\20char\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20UErrorCode&\\29\n4280:icu_73::UDataPathIterator::UDataPathIterator\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n4281:icu_73::UCharsTrieBuilder::build\\28UStringTrieBuildOption\\2c\\20UErrorCode&\\29\n4282:icu_73::UCharsTrieBuilder::UCharsTrieBuilder\\28UErrorCode&\\29\n4283:icu_73::UCharsTrie::nextForCodePoint\\28int\\29\n4284:icu_73::UCharsTrie::Iterator::next\\28UErrorCode&\\29\n4285:icu_73::UCharsTrie::Iterator::branchNext\\28char16_t\\20const*\\2c\\20int\\2c\\20UErrorCode&\\29\n4286:icu_73::UCharCharacterIterator::setText\\28icu_73::ConstChar16Ptr\\2c\\20int\\29\n4287:icu_73::StringTrieBuilder::writeBranchSubNode\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4288:icu_73::StringTrieBuilder::LinearMatchNode::operator==\\28icu_73::StringTrieBuilder::Node\\20const&\\29\\20const\n4289:icu_73::StringTrieBuilder::LinearMatchNode::markRightEdgesFirst\\28int\\29\n4290:icu_73::RuleCharacterIterator::skipIgnored\\28int\\29\n4291:icu_73::RuleBasedBreakIterator::~RuleBasedBreakIterator\\28\\29\n4292:icu_73::RuleBasedBreakIterator::handleSafePrevious\\28int\\29\n4293:icu_73::RuleBasedBreakIterator::RuleBasedBreakIterator\\28UErrorCode*\\29\n4294:icu_73::RuleBasedBreakIterator::DictionaryCache::~DictionaryCache\\28\\29\n4295:icu_73::RuleBasedBreakIterator::DictionaryCache::populateDictionary\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4296:icu_73::RuleBasedBreakIterator::BreakCache::seek\\28int\\29\n4297:icu_73::RuleBasedBreakIterator::BreakCache::current\\28\\29\n4298:icu_73::ResourceArray::getValue\\28int\\2c\\20icu_73::ResourceValue&\\29\\20const\n4299:icu_73::ReorderingBuffer::equals\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\29\\20const\n4300:icu_73::RBBIDataWrapper::removeReference\\28\\29\n4301:icu_73::PropNameData::getPropertyOrValueEnum\\28int\\2c\\20char\\20const*\\29\n4302:icu_73::Normalizer2WithImpl::normalizeSecondAndAppend\\28icu_73::UnicodeString&\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n4303:icu_73::Normalizer2WithImpl::isNormalized\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n4304:icu_73::Normalizer2Impl::recompose\\28icu_73::ReorderingBuffer&\\2c\\20int\\2c\\20signed\\20char\\29\\20const\n4305:icu_73::Normalizer2Impl::init\\28int\\20const*\\2c\\20UCPTrie\\20const*\\2c\\20unsigned\\20short\\20const*\\2c\\20unsigned\\20char\\20const*\\29\n4306:icu_73::Normalizer2Impl::findNextFCDBoundary\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\29\\20const\n4307:icu_73::Normalizer2Impl::decomposeUTF8\\28unsigned\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20icu_73::ByteSink*\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\\20const\n4308:icu_73::Normalizer2Impl::composeUTF8\\28unsigned\\20int\\2c\\20signed\\20char\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20icu_73::ByteSink*\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\\20const\n4309:icu_73::Normalizer2Impl::composeQuickCheck\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20signed\\20char\\2c\\20UNormalizationCheckResult*\\29\\20const\n4310:icu_73::Normalizer2Factory::getNFKC_CFImpl\\28UErrorCode&\\29\n4311:icu_73::Normalizer2Factory::getInstance\\28UNormalizationMode\\2c\\20UErrorCode&\\29\n4312:icu_73::Normalizer2::getNFCInstance\\28UErrorCode&\\29\n4313:icu_73::Norm2AllModes::~Norm2AllModes\\28\\29\n4314:icu_73::Norm2AllModes::createInstance\\28icu_73::Normalizer2Impl*\\2c\\20UErrorCode&\\29\n4315:icu_73::NoopNormalizer2::normalizeSecondAndAppend\\28icu_73::UnicodeString&\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n4316:icu_73::NoopNormalizer2::isNormalized\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n4317:icu_73::MlBreakEngine::~MlBreakEngine\\28\\29\n4318:icu_73::LocaleUtility::canonicalLocaleString\\28icu_73::UnicodeString\\20const*\\2c\\20icu_73::UnicodeString&\\29\n4319:icu_73::LocaleKeyFactory::LocaleKeyFactory\\28int\\29\n4320:icu_73::LocaleKey::LocaleKey\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20icu_73::UnicodeString\\20const*\\2c\\20int\\29\n4321:icu_73::LocaleBuilder::build\\28UErrorCode&\\29\n4322:icu_73::LocaleBuilder::LocaleBuilder\\28\\29\n4323:icu_73::LocaleBased::setLocaleIDs\\28char\\20const*\\2c\\20char\\20const*\\29\n4324:icu_73::Locale::setKeywordValue\\28char\\20const*\\2c\\20char\\20const*\\2c\\20UErrorCode&\\29\n4325:icu_73::Locale::operator=\\28icu_73::Locale&&\\29\n4326:icu_73::Locale::operator==\\28icu_73::Locale\\20const&\\29\\20const\n4327:icu_73::Locale::createKeywords\\28UErrorCode&\\29\\20const\n4328:icu_73::LoadedNormalizer2Impl::load\\28char\\20const*\\2c\\20char\\20const*\\2c\\20UErrorCode&\\29\n4329:icu_73::LaoBreakEngine::divideUpDictionaryRange\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n4330:icu_73::InitCanonIterData::doInit\\28icu_73::Normalizer2Impl*\\2c\\20UErrorCode&\\29\n4331:icu_73::ICU_Utility::shouldAlwaysBeEscaped\\28int\\29\n4332:icu_73::ICU_Utility::isUnprintable\\28int\\29\n4333:icu_73::ICU_Utility::escape\\28icu_73::UnicodeString&\\2c\\20int\\29\n4334:icu_73::ICUServiceKey::parseSuffix\\28icu_73::UnicodeString&\\29\n4335:icu_73::ICUService::~ICUService\\28\\29\n4336:icu_73::ICUService::getVisibleIDs\\28icu_73::UVector&\\2c\\20UErrorCode&\\29\\20const\n4337:icu_73::ICUService::clearServiceCache\\28\\29\n4338:icu_73::ICUNotifier::~ICUNotifier\\28\\29\n4339:icu_73::Hashtable::put\\28icu_73::UnicodeString\\20const&\\2c\\20void*\\2c\\20UErrorCode&\\29\n4340:icu_73::DecomposeNormalizer2::hasBoundaryBefore\\28int\\29\\20const\n4341:icu_73::DecomposeNormalizer2::hasBoundaryAfter\\28int\\29\\20const\n4342:icu_73::CjkBreakEngine::~CjkBreakEngine\\28\\29\n4343:icu_73::CjkBreakEngine::CjkBreakEngine\\28icu_73::DictionaryMatcher*\\2c\\20icu_73::LanguageType\\2c\\20UErrorCode&\\29\n4344:icu_73::CharString::truncate\\28int\\29\n4345:icu_73::CharString*\\20icu_73::MemoryPool<icu_73::CharString\\2c\\208>::create<char\\20const*&\\2c\\20UErrorCode&>\\28char\\20const*&\\2c\\20UErrorCode&\\29\n4346:icu_73::CharString*\\20icu_73::MemoryPool<icu_73::CharString\\2c\\208>::create<>\\28\\29\n4347:icu_73::CanonIterData::addToStartSet\\28int\\2c\\20int\\2c\\20UErrorCode&\\29\n4348:icu_73::BytesTrie::next\\28int\\29\n4349:icu_73::BytesTrie::branchNext\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n4350:icu_73::ByteSinkUtil::appendCodePoint\\28int\\2c\\20int\\2c\\20icu_73::ByteSink&\\2c\\20icu_73::Edits*\\29\n4351:icu_73::BreakIterator::getLocale\\28ULocDataLocaleType\\2c\\20UErrorCode&\\29\\20const\n4352:icu_73::BreakIterator::createCharacterInstance\\28icu_73::Locale\\20const&\\2c\\20UErrorCode&\\29\n4353:hb_vector_t<hb_vector_t<hb_aat_map_t::range_flags_t\\2c\\20true>\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n4354:hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n4355:hb_utf8_t::next\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\29\n4356:hb_unicode_script\n4357:hb_unicode_mirroring_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n4358:hb_unicode_funcs_t::is_default_ignorable\\28unsigned\\20int\\29\n4359:hb_shape_plan_key_t::init\\28bool\\2c\\20hb_face_t*\\2c\\20hb_segment_properties_t\\20const*\\2c\\20hb_feature_t\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\20const*\\29\n4360:hb_shape_plan_create2\n4361:hb_serialize_context_t::fini\\28\\29\n4362:hb_sanitize_context_t::return_t\\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n4363:hb_sanitize_context_t::return_t\\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n4364:hb_paint_extents_paint_linear_gradient\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n4365:hb_paint_extents_get_funcs\\28\\29\n4366:hb_paint_extents_context_t::hb_paint_extents_context_t\\28\\29\n4367:hb_ot_map_t::fini\\28\\29\n4368:hb_ot_layout_table_select_script\n4369:hb_ot_layout_table_get_lookup_count\n4370:hb_ot_layout_table_find_feature_variations\n4371:hb_ot_layout_table_find_feature\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n4372:hb_ot_layout_script_select_language\n4373:hb_ot_layout_language_get_required_feature\n4374:hb_ot_layout_language_find_feature\n4375:hb_ot_layout_has_substitution\n4376:hb_ot_layout_feature_with_variations_get_lookups\n4377:hb_ot_layout_collect_features_map\n4378:hb_ot_font_set_funcs\n4379:hb_lazy_loader_t<OT::sbix_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::sbix_accelerator_t\\2c\\2038u>\\2c\\20hb_face_t\\2c\\2038u\\2c\\20OT::sbix_accelerator_t>::create\\28hb_face_t*\\29\n4380:hb_lazy_loader_t<OT::post_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::post_accelerator_t\\2c\\207u>\\2c\\20hb_face_t\\2c\\207u\\2c\\20OT::post_accelerator_t>::get\\28\\29\\20const\n4381:hb_lazy_loader_t<OT::avar\\2c\\20hb_table_lazy_loader_t<OT::avar\\2c\\2019u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2019u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4382:hb_lazy_loader_t<OT::COLR\\2c\\20hb_table_lazy_loader_t<OT::COLR\\2c\\2035u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2035u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4383:hb_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\2037u>\\2c\\20hb_face_t\\2c\\2037u\\2c\\20OT::CBDT_accelerator_t>::get\\28\\29\\20const\n4384:hb_lazy_loader_t<AAT::trak\\2c\\20hb_table_lazy_loader_t<AAT::trak\\2c\\2032u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2032u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4385:hb_lazy_loader_t<AAT::morx\\2c\\20hb_table_lazy_loader_t<AAT::morx\\2c\\2028u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2028u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4386:hb_lazy_loader_t<AAT::mort\\2c\\20hb_table_lazy_loader_t<AAT::mort\\2c\\2029u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2029u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4387:hb_language_matches\n4388:hb_indic_get_categories\\28unsigned\\20int\\29\n4389:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::fetch_item\\28hb_serialize_context_t::object_t\\20const*\\20const&\\2c\\20unsigned\\20int\\29\\20const\n4390:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::alloc\\28unsigned\\20int\\29\n4391:hb_font_t::get_glyph_v_origin_with_fallback\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n4392:hb_font_set_variations\n4393:hb_font_set_funcs\n4394:hb_font_get_variation_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n4395:hb_font_get_glyph_h_advance\n4396:hb_font_get_glyph_extents\n4397:hb_font_get_font_h_extents_nil\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n4398:hb_font_funcs_set_variation_glyph_func\n4399:hb_font_funcs_set_nominal_glyphs_func\n4400:hb_font_funcs_set_nominal_glyph_func\n4401:hb_font_funcs_set_glyph_h_advances_func\n4402:hb_font_funcs_set_glyph_extents_func\n4403:hb_font_funcs_create\n4404:hb_draw_move_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n4405:hb_draw_funcs_set_quadratic_to_func\n4406:hb_draw_funcs_set_move_to_func\n4407:hb_draw_funcs_set_line_to_func\n4408:hb_draw_funcs_set_cubic_to_func\n4409:hb_draw_funcs_destroy\n4410:hb_draw_funcs_create\n4411:hb_draw_extents_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n4412:hb_buffer_t::sort\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\20\\28*\\29\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\\29\n4413:hb_buffer_t::safe_to_insert_tatweel\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n4414:hb_buffer_t::output_info\\28hb_glyph_info_t\\20const&\\29\n4415:hb_buffer_t::message_impl\\28hb_font_t*\\2c\\20char\\20const*\\2c\\20void*\\29\n4416:hb_buffer_t::leave\\28\\29\n4417:hb_buffer_t::delete_glyphs_inplace\\28bool\\20\\28*\\29\\28hb_glyph_info_t\\20const*\\29\\29\n4418:hb_buffer_t::clear_positions\\28\\29\n4419:hb_buffer_set_length\n4420:hb_buffer_get_glyph_positions\n4421:hb_buffer_diff\n4422:hb_buffer_create\n4423:hb_buffer_clear_contents\n4424:hb_buffer_add_utf8\n4425:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::kern>\\28hb_blob_t*\\29\n4426:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>\\28hb_blob_t*\\29\n4427:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::morx>\\28hb_blob_t*\\29\n4428:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::mort>\\28hb_blob_t*\\29\n4429:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::ltag>\\28hb_blob_t*\\29\n4430:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::kerx>\\28hb_blob_t*\\29\n4431:hb_aat_layout_remove_deleted_glyphs\\28hb_buffer_t*\\29\n4432:hair_cubic\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n4433:getint\n4434:get_win_string\n4435:get_layer_mapping_and_bounds\\28SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkMatrix\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\2c\\20bool\\2c\\20float\\29\n4436:get_dst_swizzle_and_store\\28GrColorType\\2c\\20SkRasterPipelineOp*\\2c\\20LumMode*\\2c\\20bool*\\2c\\20bool*\\29\n4437:get_driver_and_version\\28GrGLStandard\\2c\\20GrGLVendor\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n4438:get_cicp_trfn\\28skcms_TransferFunction\\20const&\\29\n4439:get_cicp_primaries\\28skcms_Matrix3x3\\20const&\\29\n4440:getFallbackData\\28UResourceBundle\\20const*\\2c\\20char\\20const**\\2c\\20unsigned\\20int*\\2c\\20UErrorCode*\\29\n4441:gen_key\\28skgpu::KeyBuilder*\\2c\\20GrProgramInfo\\20const&\\2c\\20GrCaps\\20const&\\29\n4442:gen_fp_key\\28GrFragmentProcessor\\20const&\\2c\\20GrCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\n4443:gather_uniforms_and_check_for_main\\28SkSL::Program\\20const&\\2c\\20std::__2::vector<SkRuntimeEffect::Uniform\\2c\\20std::__2::allocator<SkRuntimeEffect::Uniform>>*\\2c\\20std::__2::vector<SkRuntimeEffect::Child\\2c\\20std::__2::allocator<SkRuntimeEffect::Child>>*\\2c\\20SkRuntimeEffect::Uniform::Flags\\2c\\20unsigned\\20long*\\29\n4444:fwrite\n4445:ft_var_to_normalized\n4446:ft_var_load_item_variation_store\n4447:ft_var_load_hvvar\n4448:ft_var_load_avar\n4449:ft_var_get_value_pointer\n4450:ft_var_apply_tuple\n4451:ft_validator_init\n4452:ft_mem_strcpyn\n4453:ft_hash_num_lookup\n4454:ft_glyphslot_set_bitmap\n4455:ft_glyphslot_preset_bitmap\n4456:ft_corner_orientation\n4457:ft_corner_is_flat\n4458:frexp\n4459:free_entry\\28UResourceDataEntry*\\29\n4460:fread\n4461:fp_force_eval\n4462:fp_barrier.1\n4463:fopen\n4464:fold_opacity_layer_color_to_paint\\28SkPaint\\20const*\\2c\\20bool\\2c\\20SkPaint*\\29\n4465:fmodl\n4466:float\\20std::__2::__num_get_float\\5babi:v160004\\5d<float>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n4467:fill_shadow_rec\\28SkPath\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkDrawShadowRec*\\29\n4468:fill_inverse_cmap\n4469:fileno\n4470:examine_app0\n4471:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20SkCanvas*\\2c\\20SkPath*\\2c\\20SkClipOp\\2c\\20bool\\29\n4472:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20sk_sp<SkColorFilter>*\\2c\\20sk_sp<SkImageFilter>*\\29\n4473:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20SkBlendMode\\2c\\20sk_sp<SkImageFilter>*\\2c\\20sk_sp<SkImageFilter>*\\29\n4474:emscripten::internal::Invoker<sk_sp<SkFontMgr>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28sk_sp<SkFontMgr>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\29\n4475:emscripten::internal::Invoker<sk_sp<SkBlender>\\2c\\20SkBlendMode>::invoke\\28sk_sp<SkBlender>\\20\\28*\\29\\28SkBlendMode\\29\\2c\\20SkBlendMode\\29\n4476:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4477:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\29\n4478:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20void\\2c\\20SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28void\\20\\28**\\29\\28SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20SkPaint*\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n4479:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\\2c\\20SkCanvas*\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n4480:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n4481:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n4482:emscripten::internal::FunctionInvoker<sk_sp<SkSurface>\\20\\28*\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\29\\2c\\20sk_sp<SkSurface>\\2c\\20SkCanvas&\\2c\\20SimpleImageInfo>::invoke\\28sk_sp<SkSurface>\\20\\28**\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\29\\2c\\20SkCanvas*\\2c\\20SimpleImageInfo*\\29\n4483:emscripten::internal::FunctionInvoker<sk_sp<SkColorSpace>\\20\\28*\\29\\28sk_sp<SkImage>\\29\\2c\\20sk_sp<SkColorSpace>\\2c\\20sk_sp<SkImage>>::invoke\\28sk_sp<SkColorSpace>\\20\\28**\\29\\28sk_sp<SkImage>\\29\\2c\\20sk_sp<SkImage>*\\29\n4484:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20SkPathOp\\29\n4485:embind_init_builtin\\28\\29\n4486:embind_init_Skia\\28\\29\n4487:embind_init_Paragraph\\28\\29::$_0::__invoke\\28SimpleParagraphStyle\\2c\\20sk_sp<SkFontMgr>\\29\n4488:embind_init_Paragraph\\28\\29\n4489:embind_init_ParagraphGen\\28\\29\n4490:edge_line_needs_recursion\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n4491:draw_nine\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\20const&\\2c\\20bool\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n4492:dquad_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n4493:dquad_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n4494:double\\20std::__2::__num_get_float\\5babi:v160004\\5d<double>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n4495:doOpenChoice\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20signed\\20char\\20\\28*\\29\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\\2c\\20void*\\2c\\20UErrorCode*\\29\n4496:dline_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n4497:dline_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n4498:deserialize_image\\28sk_sp<SkData>\\2c\\20SkDeserialProcs\\2c\\20std::__2::optional<SkAlphaType>\\29\n4499:deflate_stored\n4500:decompose_current_character\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20bool\\29\n4501:decltype\\28std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\\20const*>\\2c\\20true>::__unwrap\\28std::declval<std::__2::__wrap_iter<char\\20const*>>\\28\\29\\29\\29\\20std::__2::__unwrap_iter\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\\20const*>\\2c\\20true>\\2c\\200>\\28std::__2::__wrap_iter<char\\20const*>\\29\n4502:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4503:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator*\\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator\\2c\\20bool&\\2c\\20skgpu::tess::PatchAttribs&>\\28bool&\\2c\\20skgpu::tess::PatchAttribs&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::PathCurveTessellator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4504:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::Make\\28SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::Make\\28SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4505:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::MeshGP::Make\\28SkArenaAlloc*\\2c\\20sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::MeshGP::Make\\28SkArenaAlloc*\\2c\\20sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4506:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker\\2c\\20int&>\\28int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4507:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTransformShader*\\20SkArenaAlloc::make<SkTransformShader\\2c\\20SkShaderBase\\20const&\\2c\\20bool\\20const&>\\28SkShaderBase\\20const&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTransformShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4508:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkA8_Blitter*\\20SkArenaAlloc::make<SkA8_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29::'lambda'\\28void*\\29>\\28SkA8_Blitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4509:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrThreadSafeCache::Entry*\\20SkArenaAlloc::make<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&>\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29::'lambda'\\28void*\\29>\\28GrThreadSafeCache::Entry&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4510:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrResourceAllocator::Register*\\20SkArenaAlloc::make<GrResourceAllocator::Register\\2c\\20GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceProvider*&>\\28GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey&&\\2c\\20GrResourceProvider*&\\29::'lambda'\\28void*\\29>\\28GrResourceAllocator::Register&&\\29\n4511:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrQuadEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28GrQuadEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4512:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrPipeline*\\20SkArenaAlloc::make<GrPipeline\\2c\\20GrPipeline::InitArgs&\\2c\\20GrProcessorSet\\2c\\20GrAppliedClip>\\28GrPipeline::InitArgs&\\2c\\20GrProcessorSet&&\\2c\\20GrAppliedClip&&\\29::'lambda'\\28void*\\29>\\28GrPipeline&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4513:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrDistanceFieldA8TextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28GrDistanceFieldA8TextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4514:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29\n4515:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4516:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29\n4517:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4518:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n4519:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>>&\\2c\\20std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&&>\\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&&\\29\n4520:dcubic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n4521:dcubic_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n4522:dconic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n4523:dconic_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n4524:data_destroy_arabic\\28void*\\29\n4525:data_create_arabic\\28hb_ot_shape_plan_t\\20const*\\29\n4526:cycle\n4527:cubic_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4528:cubic_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4529:create_colorindex\n4530:copysignl\n4531:copy_bitmap_subset\\28SkBitmap\\20const&\\2c\\20SkIRect\\20const&\\29\n4532:conic_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4533:conic_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4534:compute_pos_tan\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n4535:compute_intersection\\28OffsetSegment\\20const&\\2c\\20OffsetSegment\\20const&\\2c\\20SkPoint*\\2c\\20float*\\2c\\20float*\\29\n4536:compress_block\n4537:compose_khmer\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n4538:clipHandlesSprite\\28SkRasterClip\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPixmap\\20const&\\29\n4539:clamp\\28SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4540:checkint\n4541:check_inverse_on_empty_return\\28SkRegion*\\2c\\20SkPath\\20const&\\2c\\20SkRegion\\20const&\\29\n4542:charIterTextAccess\\28UText*\\2c\\20long\\20long\\2c\\20signed\\20char\\29\n4543:char*\\20std::__2::copy\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20char*>\\28std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>\\2c\\20char*\\29\n4544:char*\\20std::__2::copy\\5babi:v160004\\5d<char\\20const*\\2c\\20char*>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\n4545:cff_vstore_done\n4546:cff_subfont_load\n4547:cff_subfont_done\n4548:cff_size_select\n4549:cff_parser_run\n4550:cff_make_private_dict\n4551:cff_load_private_dict\n4552:cff_index_get_name\n4553:cff_get_kerning\n4554:cff_blend_build_vector\n4555:cf2_getSeacComponent\n4556:cf2_computeDarkening\n4557:cf2_arrstack_push\n4558:cbrt\n4559:byn$mgfn-shared$void\\20extend_pts<\\28SkPaint::Cap\\292>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n4560:byn$mgfn-shared$void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n4561:byn$mgfn-shared$virtual\\20thunk\\20to\\20GrRenderTarget::onRelease\\28\\29\n4562:byn$mgfn-shared$uloc_getName_73\n4563:byn$mgfn-shared$uhash_put_73\n4564:byn$mgfn-shared$ubidi_getClass_73\n4565:byn$mgfn-shared$t1_hints_open\n4566:byn$mgfn-shared$std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\29\\20const\n4567:byn$mgfn-shared$std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20long\\29\\20const\n4568:byn$mgfn-shared$std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\29\\20const\n4569:byn$mgfn-shared$std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20long\\29\\20const\n4570:byn$mgfn-shared$std::__2::ctype<wchar_t>::do_toupper\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n4571:byn$mgfn-shared$std::__2::ctype<char>::do_toupper\\28char*\\2c\\20char\\20const*\\29\\20const\n4572:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n4573:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n4574:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n4575:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n4576:byn$mgfn-shared$skia_private::TArray<SkPath\\2c\\20true>::push_back_raw\\28int\\29\n4577:byn$mgfn-shared$skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::push_back_raw\\28int\\29\n4578:byn$mgfn-shared$skia_private::TArray<SkClosestRecord\\2c\\20true>::push_back_raw\\28int\\29\n4579:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::~Impl\\28\\29\n4580:byn$mgfn-shared$skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n4581:byn$mgfn-shared$skgpu::ScratchKey::GenerateResourceType\\28\\29\n4582:byn$mgfn-shared$skcms_TransferFunction_isPQish\n4583:byn$mgfn-shared$setup_masks_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n4584:byn$mgfn-shared$portable::store_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4585:byn$mgfn-shared$portable::load_8888_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4586:byn$mgfn-shared$portable::load_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4587:byn$mgfn-shared$portable::gather_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4588:byn$mgfn-shared$non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4589:byn$mgfn-shared$non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4590:byn$mgfn-shared$make_unpremul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n4591:byn$mgfn-shared$icu_73::isAcceptable\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\n4592:byn$mgfn-shared$icu_73::ResourceDataValue::getIntVector\\28int&\\2c\\20UErrorCode&\\29\\20const\n4593:byn$mgfn-shared$hb_outline_recording_pen_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n4594:byn$mgfn-shared$hb_lazy_loader_t<OT::hhea\\2c\\20hb_table_lazy_loader_t<OT::hhea\\2c\\204u\\2c\\20true>\\2c\\20hb_face_t\\2c\\204u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4595:byn$mgfn-shared$embind_init_Skia\\28\\29::$_75::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\n4596:byn$mgfn-shared$embind_init_Skia\\28\\29::$_72::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n4597:byn$mgfn-shared$embind_init_Skia\\28\\29::$_11::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n4598:byn$mgfn-shared$decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20skgpu::AtlasToken>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\2c\\20skgpu::AtlasToken&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4599:byn$mgfn-shared$decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n4600:byn$mgfn-shared$cf2_stack_pushInt\n4601:byn$mgfn-shared$__cxx_global_array_dtor.1\n4602:byn$mgfn-shared$\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n4603:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DrawAtlasPathShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n4604:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4605:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4606:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphCount\\28\\29\\20const\n4607:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n4608:byn$mgfn-shared$SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n4609:byn$mgfn-shared$SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\\28\\29\n4610:byn$mgfn-shared$SkSL::RP::LValue::~LValue\\28\\29.1\n4611:byn$mgfn-shared$SkSL::ProgramUsage::add\\28SkSL::ProgramElement\\20const&\\29\n4612:byn$mgfn-shared$SkSL::ProgramUsage::add\\28SkSL::Expression\\20const*\\29\n4613:byn$mgfn-shared$SkSL::FunctionReference::clone\\28SkSL::Position\\29\\20const\n4614:byn$mgfn-shared$SkSL::EmptyExpression::clone\\28SkSL::Position\\29\\20const\n4615:byn$mgfn-shared$SkSL::ChildCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n4616:byn$mgfn-shared$SkSL::ChildCall::clone\\28SkSL::Position\\29\\20const\n4617:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\\28\\29.1\n4618:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\\28\\29\n4619:byn$mgfn-shared$SkRecorder::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n4620:byn$mgfn-shared$SkRecorder::onDrawPaint\\28SkPaint\\20const&\\29\n4621:byn$mgfn-shared$SkRecorder::didScale\\28float\\2c\\20float\\29\n4622:byn$mgfn-shared$SkRecorder::didConcat44\\28SkM44\\20const&\\29\n4623:byn$mgfn-shared$SkRasterPipelineBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4624:byn$mgfn-shared$SkPictureRecord::onDrawPaint\\28SkPaint\\20const&\\29\n4625:byn$mgfn-shared$SkPictureRecord::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n4626:byn$mgfn-shared$SkPictureRecord::didConcat44\\28SkM44\\20const&\\29\n4627:byn$mgfn-shared$SkPairPathEffect::~SkPairPathEffect\\28\\29.1\n4628:byn$mgfn-shared$SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_1D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n4629:byn$mgfn-shared$SkJSONWriter::endArray\\28\\29\n4630:byn$mgfn-shared$SkComposePathEffect::~SkComposePathEffect\\28\\29\n4631:byn$mgfn-shared$SkColorSpace::MakeSRGB\\28\\29\n4632:byn$mgfn-shared$SkChopMonoCubicAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\29\n4633:byn$mgfn-shared$OT::PaintLinearGradient<OT::NoVariable>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n4634:byn$mgfn-shared$GrRRectShadowGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n4635:byn$mgfn-shared$GrPathTessellationShader::Impl::~Impl\\28\\29\n4636:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29.1\n4637:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29\n4638:byn$mgfn-shared$GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::clone\\28\\29\\20const\n4639:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29.1\n4640:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29\n4641:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29.1\n4642:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29\n4643:byn$mgfn-shared$GrBicubicEffect::onMakeProgramImpl\\28\\29\\20const\n4644:byn$mgfn-shared$Cr_z_inflate_table\n4645:byn$mgfn-shared$BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n4646:byn$mgfn-shared$AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n4647:build_ycc_rgb_table\n4648:bracketProcessChar\\28BracketData*\\2c\\20int\\29\n4649:bracketInit\\28UBiDi*\\2c\\20BracketData*\\29\n4650:bool\\20std::__2::operator==\\5babi:v160004\\5d<char\\2c\\20void\\20\\28*\\29\\28void*\\29>\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>\\20const&\\2c\\20std::nullptr_t\\29\n4651:bool\\20std::__2::operator!=\\5babi:v160004\\5d<SkPaint\\2c\\20int>\\28std::__2::variant<SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n4652:bool\\20std::__2::__insertion_sort_incomplete<skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n4653:bool\\20std::__2::__insertion_sort_incomplete<\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n4654:bool\\20std::__2::__insertion_sort_incomplete<SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n4655:bool\\20std::__2::__insertion_sort_incomplete<SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n4656:bool\\20is_parallel<SkTCurve>\\28SkDLine\\20const&\\2c\\20SkTCurve\\20const&\\29\n4657:bool\\20hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::set_with_hash<hb_serialize_context_t::object_t*&\\2c\\20unsigned\\20int&>\\28hb_serialize_context_t::object_t*&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n4658:bool\\20apply_string<GSUBProxy>\\28OT::hb_ot_apply_context_t*\\2c\\20GSUBProxy::Lookup\\20const&\\2c\\20OT::hb_ot_layout_lookup_accelerator_t\\20const&\\29\n4659:bool\\20OT::hb_accelerate_subtables_context_t::cache_func_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\2c\\20bool\\29\n4660:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat2_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4661:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4662:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::ReverseChainSingleSubstFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4663:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4664:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::LigatureSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4665:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::AlternateSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4666:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat2>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4667:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4668:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4669:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4670:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4671:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4672:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4673:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::CursivePosFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4674:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat3>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4675:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat1_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4676:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat3>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4677:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat1_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4678:bool\\20OT::OffsetTo<OT::Layout::Common::Coverage\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::serialize_serialize<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>&>\\28hb_serialize_context_t*\\2c\\20hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>&\\29\n4679:bool\\20GrTTopoSort_Visit<GrRenderTask\\2c\\20GrRenderTask::TopoSortTraits>\\28GrRenderTask*\\2c\\20unsigned\\20int*\\29\n4680:blur_column\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n4681:blit_saved_trapezoid\\28SkAnalyticEdge*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20AdditiveBlitter*\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20int\\2c\\20int\\29\n4682:blend_line\\28SkColorType\\2c\\20void*\\2c\\20SkColorType\\2c\\20void\\20const*\\2c\\20SkAlphaType\\2c\\20bool\\2c\\20int\\29\n4683:bits_to_runs\\28SkBlitter*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\2c\\20long\\2c\\20unsigned\\20char\\29\n4684:barycentric_coords\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\29\n4685:auto\\20std::__2::__unwrap_range\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>>\\28std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>\\29\n4686:atanf\n4687:apply_forward\\28OT::hb_ot_apply_context_t*\\2c\\20OT::hb_ot_layout_lookup_accelerator_t\\20const&\\2c\\20unsigned\\20int\\29\n4688:append_color_output\\28PorterDuffXferProcessor\\20const&\\2c\\20GrGLSLXPFragmentBuilder*\\2c\\20skgpu::BlendFormula::OutputType\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n4689:af_loader_compute_darkening\n4690:af_latin_metrics_scale_dim\n4691:af_latin_hints_detect_features\n4692:af_latin_hint_edges\n4693:af_hint_normal_stem\n4694:af_cjk_metrics_scale_dim\n4695:af_cjk_metrics_scale\n4696:af_cjk_metrics_init_widths\n4697:af_cjk_metrics_check_digits\n4698:af_cjk_hints_init\n4699:af_cjk_hints_detect_features\n4700:af_cjk_hints_compute_blue_edges\n4701:af_cjk_hints_apply\n4702:af_cjk_hint_edges\n4703:af_cjk_get_standard_widths\n4704:af_axis_hints_new_edge\n4705:adler32\n4706:a_ctz_32\n4707:_uhash_remove\\28UHashtable*\\2c\\20UElement\\29\n4708:_uhash_rehash\\28UHashtable*\\2c\\20UErrorCode*\\29\n4709:_uhash_put\\28UHashtable*\\2c\\20UElement\\2c\\20UElement\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n4710:_uhash_create\\28int\\20\\28*\\29\\28UElement\\29\\2c\\20signed\\20char\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20signed\\20char\\20\\28*\\29\\28UElement\\2c\\20UElement\\29\\2c\\20int\\2c\\20UErrorCode*\\29\n4711:_iup_worker_interpolate\n4712:_isUnicodeExtensionSubtag\\28int&\\2c\\20char\\20const*\\2c\\20int\\29\n4713:_isTransformedExtensionSubtag\\28int&\\2c\\20char\\20const*\\2c\\20int\\29\n4714:_hb_preprocess_text_vowel_constraints\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n4715:_hb_ot_shape\n4716:_hb_options_init\\28\\29\n4717:_hb_grapheme_group_func\\28hb_glyph_info_t\\20const&\\2c\\20hb_glyph_info_t\\20const&\\29\n4718:_hb_font_create\\28hb_face_t*\\29\n4719:_hb_fallback_shape\n4720:_glyf_get_advance_with_var_unscaled\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\n4721:__vfprintf_internal\n4722:__trunctfsf2\n4723:__tan\n4724:__rem_pio2_large\n4725:__overflow\n4726:__newlocale\n4727:__munmap\n4728:__mmap\n4729:__math_xflowf\n4730:__math_invalidf\n4731:__loc_is_allocated\n4732:__isxdigit_l\n4733:__getf2\n4734:__get_locale\n4735:__ftello_unlocked\n4736:__fstatat\n4737:__fseeko_unlocked\n4738:__floatscan\n4739:__expo2\n4740:__divtf3\n4741:__cxxabiv1::__base_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n4742:\\28anonymous\\20namespace\\29::set_uv_quad\\28SkPoint\\20const*\\2c\\20\\28anonymous\\20namespace\\29::BezierVertex*\\29\n4743:\\28anonymous\\20namespace\\29::safe_to_ignore_subset_rect\\28GrAAType\\2c\\20SkFilterMode\\2c\\20DrawQuad\\20const&\\2c\\20SkRect\\20const&\\29\n4744:\\28anonymous\\20namespace\\29::prepare_for_direct_mask_drawing\\28SkStrike*\\2c\\20SkMatrix\\20const&\\2c\\20SkZip<unsigned\\20short\\20const\\2c\\20SkPoint\\20const>\\2c\\20SkZip<SkGlyph\\20const*\\2c\\20SkPoint>\\2c\\20SkZip<unsigned\\20short\\2c\\20SkPoint>\\29\n4745:\\28anonymous\\20namespace\\29::morphology_pass\\28skif::Context\\20const&\\2c\\20skif::FilterResult\\20const&\\2c\\20\\28anonymous\\20namespace\\29::MorphType\\2c\\20\\28anonymous\\20namespace\\29::MorphDirection\\2c\\20int\\29\n4746:\\28anonymous\\20namespace\\29::make_non_convex_fill_op\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20skgpu::ganesh::FillPathFlags\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrPaint&&\\29\n4747:\\28anonymous\\20namespace\\29::is_newer_better\\28SkData*\\2c\\20SkData*\\29\n4748:\\28anonymous\\20namespace\\29::get_glyph_run_intercepts\\28sktext::GlyphRun\\20const&\\2c\\20SkPaint\\20const&\\2c\\20float\\20const*\\2c\\20float*\\2c\\20int*\\29\n4749:\\28anonymous\\20namespace\\29::getStringArray\\28ResourceData\\20const*\\2c\\20icu_73::ResourceArray\\20const&\\2c\\20icu_73::UnicodeString*\\2c\\20int\\2c\\20UErrorCode&\\29\n4750:\\28anonymous\\20namespace\\29::getInclusionsForSource\\28UPropertySource\\2c\\20UErrorCode&\\29\n4751:\\28anonymous\\20namespace\\29::draw_to_sw_mask\\28GrSWMaskHelper*\\2c\\20skgpu::ganesh::ClipStack::Element\\20const&\\2c\\20bool\\29\n4752:\\28anonymous\\20namespace\\29::determine_clipped_src_rect\\28SkIRect\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkISize\\20const&\\2c\\20SkRect\\20const*\\29\n4753:\\28anonymous\\20namespace\\29::create_hb_face\\28SkTypeface\\20const&\\29::$_0::__invoke\\28void*\\29\n4754:\\28anonymous\\20namespace\\29::cpu_blur\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkSize>\\2c\\20sk_sp<SkSpecialImage>\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20skif::LayerSpace<SkIRect>\\29::$_0::operator\\28\\29\\28double\\29\\20const\n4755:\\28anonymous\\20namespace\\29::copyFTBitmap\\28FT_Bitmap_\\20const&\\2c\\20SkMaskBuilder*\\29\n4756:\\28anonymous\\20namespace\\29::colrv1_start_glyph\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20FT_Color_Root_Transform_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n4757:\\28anonymous\\20namespace\\29::colrv1_draw_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_COLR_Paint_\\20const&\\29\n4758:\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29\n4759:\\28anonymous\\20namespace\\29::YUVPlanesRec::~YUVPlanesRec\\28\\29\n4760:\\28anonymous\\20namespace\\29::TriangulatingPathOp::~TriangulatingPathOp\\28\\29\n4761:\\28anonymous\\20namespace\\29::TriangulatingPathOp::TriangulatingPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\29\n4762:\\28anonymous\\20namespace\\29::TriangulatingPathOp::Triangulate\\28GrEagerVertexAllocator*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool*\\29\n4763:\\28anonymous\\20namespace\\29::TriangulatingPathOp::CreateKey\\28skgpu::UniqueKey*\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\29\n4764:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n4765:\\28anonymous\\20namespace\\29::TextureOpImpl::propagateCoverageAAThroughoutChain\\28\\29\n4766:\\28anonymous\\20namespace\\29::TextureOpImpl::characterize\\28\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\29\\20const\n4767:\\28anonymous\\20namespace\\29::TextureOpImpl::appendQuad\\28DrawQuad*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\29\n4768:\\28anonymous\\20namespace\\29::TextureOpImpl::Make\\28GrRecordingContext*\\2c\\20GrTextureSetEntry*\\2c\\20int\\2c\\20int\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20skgpu::ganesh::TextureOp::Saturate\\2c\\20GrAAType\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\29\n4769:\\28anonymous\\20namespace\\29::TextureOpImpl::FillInVertices\\28GrCaps\\20const&\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl*\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\2c\\20char*\\29\n4770:\\28anonymous\\20namespace\\29::SpotVerticesFactory::makeVertices\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint*\\29\\20const\n4771:\\28anonymous\\20namespace\\29::SkImageImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n4772:\\28anonymous\\20namespace\\29::SDFTSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n4773:\\28anonymous\\20namespace\\29::RunIteratorQueue::advanceRuns\\28\\29\n4774:\\28anonymous\\20namespace\\29::Pass::blur\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n4775:\\28anonymous\\20namespace\\29::MipLevelHelper::allocAndInit\\28SkArenaAlloc*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\29\n4776:\\28anonymous\\20namespace\\29::MeshOp::~MeshOp\\28\\29\n4777:\\28anonymous\\20namespace\\29::MeshOp::MeshOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20sk_sp<SkVertices>\\2c\\20GrPrimitiveType\\20const*\\2c\\20GrAAType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\29\n4778:\\28anonymous\\20namespace\\29::MeshOp::MeshOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMesh\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20true>\\2c\\20GrAAType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\29\n4779:\\28anonymous\\20namespace\\29::MeshOp::Mesh::Mesh\\28SkMesh\\20const&\\29\n4780:\\28anonymous\\20namespace\\29::MeshGP::~MeshGP\\28\\29\n4781:\\28anonymous\\20namespace\\29::MeshGP::Impl::~Impl\\28\\29\n4782:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::defineStruct\\28char\\20const*\\29\n4783:\\28anonymous\\20namespace\\29::FillRectOpImpl::tessellate\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20char*\\29\\20const\n4784:\\28anonymous\\20namespace\\29::FillRectOpImpl::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n4785:\\28anonymous\\20namespace\\29::FillRectOpImpl::FillRectOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n4786:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRRect\\20const&\\29\n4787:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::DrawAtlasOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAAType\\2c\\20int\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n4788:\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4789:\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4790:\\28anonymous\\20namespace\\29::DirectMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n4791:\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphCount\\28\\29\\20const\n4792:\\28anonymous\\20namespace\\29::DefaultPathOp::programInfo\\28\\29\n4793:\\28anonymous\\20namespace\\29::DefaultPathOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4794:\\28anonymous\\20namespace\\29::DefaultPathOp::DefaultPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4795:\\28anonymous\\20namespace\\29::ClipGeometry\\20\\28anonymous\\20namespace\\29::get_clip_geometry<skgpu::ganesh::ClipStack::SaveRecord\\2c\\20skgpu::ganesh::ClipStack::Draw>\\28skgpu::ganesh::ClipStack::SaveRecord\\20const&\\2c\\20skgpu::ganesh::ClipStack::Draw\\20const&\\29\n4796:\\28anonymous\\20namespace\\29::CircularRRectEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n4797:\\28anonymous\\20namespace\\29::CachedTessellations::~CachedTessellations\\28\\29\n4798:\\28anonymous\\20namespace\\29::CachedTessellations::CachedTessellations\\28\\29\n4799:\\28anonymous\\20namespace\\29::CacheImpl::~CacheImpl\\28\\29\n4800:\\28anonymous\\20namespace\\29::AAHairlineOp::AAHairlineOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkIRect\\2c\\20float\\2c\\20GrUserStencilSettings\\20const*\\29\n4801:WebPResetDecParams\n4802:WebPRescalerGetScaledDimensions\n4803:WebPMultRows\n4804:WebPMultARGBRows\n4805:WebPIoInitFromOptions\n4806:WebPInitUpsamplers\n4807:WebPFlipBuffer\n4808:WebPDemuxGetChunk\n4809:WebPCopyDecBufferPixels\n4810:WebPAllocateDecBuffer\n4811:VP8RemapBitReader\n4812:VP8LHuffmanTablesAllocate\n4813:VP8LDspInit\n4814:VP8LConvertFromBGRA\n4815:VP8LColorCacheInit\n4816:VP8LColorCacheCopy\n4817:VP8LBuildHuffmanTable\n4818:VP8LBitReaderSetBuffer\n4819:VP8InitScanline\n4820:VP8GetInfo\n4821:VP8BitReaderSetBuffer\n4822:Update_Max\n4823:TransformOne_C\n4824:TT_Set_Named_Instance\n4825:TT_Hint_Glyph\n4826:StoreFrame\n4827:SortContourList\\28SkOpContourHead**\\2c\\20bool\\2c\\20bool\\29\n4828:SkYUVAPixmapInfo::isSupported\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\29\\20const\n4829:SkWuffsCodec::seekFrame\\28int\\29\n4830:SkWuffsCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n4831:SkWuffsCodec::onIncrementalDecodeTwoPass\\28\\29\n4832:SkWuffsCodec::decodeFrameConfig\\28\\29\n4833:SkWriter32::writeString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n4834:SkWriteICCProfile\\28skcms_ICCProfile\\20const*\\2c\\20char\\20const*\\29\n4835:SkWebpDecoder::IsWebp\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4836:SkWebpCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29\n4837:SkWbmpDecoder::IsWbmp\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4838:SkWbmpCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29\n4839:SkWStream::SizeOfPackedUInt\\28unsigned\\20long\\29\n4840:SkWBuffer::padToAlign4\\28\\29\n4841:SkVertices::Builder::indices\\28\\29\n4842:SkUnicodes::ICU::Make\\28\\29\n4843:SkUnicode_icu::extractWords\\28unsigned\\20short*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29\n4844:SkUnicode::convertUtf16ToUtf8\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n4845:SkUTF::NextUTF16\\28unsigned\\20short\\20const**\\2c\\20unsigned\\20short\\20const*\\29\n4846:SkTypeface_FreeType::FaceRec::Make\\28SkTypeface_FreeType\\20const*\\29\n4847:SkTypeface_Custom::onGetFamilyName\\28SkString*\\29\\20const\n4848:SkTypeface::textToGlyphs\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkTextEncoding\\2c\\20unsigned\\20short*\\2c\\20int\\29\\20const\n4849:SkTypeface::serialize\\28SkWStream*\\2c\\20SkTypeface::SerializeBehavior\\29\\20const\n4850:SkTypeface::openStream\\28int*\\29\\20const\n4851:SkTypeface::getFamilyName\\28SkString*\\29\\20const\n4852:SkTransformShader::update\\28SkMatrix\\20const&\\29\n4853:SkTransformShader::SkTransformShader\\28SkShaderBase\\20const&\\2c\\20bool\\29\n4854:SkTiffImageFileDirectory::getEntryTag\\28unsigned\\20short\\29\\20const\n4855:SkTiffImageFileDirectory::getEntryRawData\\28unsigned\\20short\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20char\\20const**\\2c\\20unsigned\\20long*\\29\\20const\n4856:SkTiffImageFileDirectory::MakeFromOffset\\28sk_sp<SkData>\\2c\\20bool\\2c\\20unsigned\\20int\\29\n4857:SkTextBlobBuilder::allocRunPos\\28SkFont\\20const&\\2c\\20int\\2c\\20SkRect\\20const*\\29\n4858:SkTextBlob::getIntercepts\\28float\\20const*\\2c\\20float*\\2c\\20SkPaint\\20const*\\29\\20const\n4859:SkTextBlob::RunRecord::StorageSize\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SkTextBlob::GlyphPositioning\\2c\\20SkSafeMath*\\29\n4860:SkTextBlob::MakeFromText\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20SkTextEncoding\\29\n4861:SkTextBlob::MakeFromRSXform\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkRSXform\\20const*\\2c\\20SkFont\\20const&\\2c\\20SkTextEncoding\\29\n4862:SkTextBlob::Iter::experimentalNext\\28SkTextBlob::Iter::ExperimentalRun*\\29\n4863:SkTextBlob::Iter::Iter\\28SkTextBlob\\20const&\\29\n4864:SkTaskGroup::wait\\28\\29\n4865:SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29\n4866:SkTSpan::onlyEndPointsInCommon\\28SkTSpan\\20const*\\2c\\20bool*\\2c\\20bool*\\2c\\20bool*\\29\n4867:SkTSpan::linearIntersects\\28SkTCurve\\20const&\\29\\20const\n4868:SkTSect::removeAllBut\\28SkTSpan\\20const*\\2c\\20SkTSpan*\\2c\\20SkTSect*\\29\n4869:SkTSect::intersects\\28SkTSpan*\\2c\\20SkTSect*\\2c\\20SkTSpan*\\2c\\20int*\\29\n4870:SkTSect::deleteEmptySpans\\28\\29\n4871:SkTSect::addSplitAt\\28SkTSpan*\\2c\\20double\\29\n4872:SkTSect::addForPerp\\28SkTSpan*\\2c\\20double\\29\n4873:SkTSect::EndsEqual\\28SkTSect\\20const*\\2c\\20SkTSect\\20const*\\2c\\20SkIntersections*\\29\n4874:SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::~SkTMultiMap\\28\\29\n4875:SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::find\\28SkImageFilterCacheKey\\20const&\\29\\20const\n4876:SkTDStorage::calculateSizeOrDie\\28int\\29::$_1::operator\\28\\29\\28\\29\\20const\n4877:SkTDStorage::SkTDStorage\\28SkTDStorage&&\\29\n4878:SkTCubic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n4879:SkTConic::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n4880:SkTConic::hullIntersects\\28SkDCubic\\20const&\\2c\\20bool*\\29\\20const\n4881:SkTConic::controlsInside\\28\\29\\20const\n4882:SkTConic::collapsed\\28\\29\\20const\n4883:SkTBlockList<skgpu::ganesh::PathTessellator::PathDrawList\\2c\\2016>::reset\\28\\29\n4884:SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::reset\\28\\29\n4885:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::push_back\\28GrGLProgramDataManager::GLUniformInfo\\20const&\\29\n4886:SkSwizzler::MakeSimple\\28int\\2c\\20SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n4887:SkSurfaces::WrapPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkSurfaceProps\\20const*\\29\n4888:SkSurface_Base::outstandingImageSnapshot\\28\\29\\20const\n4889:SkSurface_Base::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n4890:SkSurface_Base::onCapabilities\\28\\29\n4891:SkStrokeRec::setHairlineStyle\\28\\29\n4892:SkStrokeRec::SkStrokeRec\\28SkPaint\\20const&\\2c\\20SkPaint::Style\\2c\\20float\\29\n4893:SkStrokeRec::GetInflationRadius\\28SkPaint::Join\\2c\\20float\\2c\\20SkPaint::Cap\\2c\\20float\\29\n4894:SkString::insertHex\\28unsigned\\20long\\2c\\20unsigned\\20int\\2c\\20int\\29\n4895:SkString::appendVAList\\28char\\20const*\\2c\\20void*\\29\n4896:SkString::SkString\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4897:SkStrikeSpec::SkStrikeSpec\\28SkStrikeSpec\\20const&\\29\n4898:SkStrikeSpec::ShouldDrawAsPath\\28SkPaint\\20const&\\2c\\20SkFont\\20const&\\2c\\20SkMatrix\\20const&\\29\n4899:SkStrSplit\\28char\\20const*\\2c\\20char\\20const*\\2c\\20SkStrSplitMode\\2c\\20skia_private::TArray<SkString\\2c\\20true>*\\29\n4900:SkStrAppendS32\\28char*\\2c\\20int\\29\n4901:SkSpriteBlitter_Memcpy::~SkSpriteBlitter_Memcpy\\28\\29\n4902:SkSpecialImages::MakeFromRaster\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\2c\\20SkSurfaceProps\\20const&\\29\n4903:SkSpecialImages::AsBitmap\\28SkSpecialImage\\20const*\\2c\\20SkBitmap*\\29\n4904:SkSharedMutex::releaseShared\\28\\29\n4905:SkShapers::unicode::BidiRunIterator\\28sk_sp<SkUnicode>\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\n4906:SkShapers::HB::ScriptRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\29\n4907:SkShaper::MakeStdLanguageRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\29\n4908:SkShaders::MatrixRec::concat\\28SkMatrix\\20const&\\29\\20const\n4909:SkShaders::Blend\\28sk_sp<SkBlender>\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkShader>\\29\n4910:SkShaderUtils::VisitLineByLine\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::function<void\\20\\28int\\2c\\20char\\20const*\\29>\\20const&\\29\n4911:SkShaderUtils::PrettyPrint\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n4912:SkShaderUtils::GLSLPrettyPrint::parseUntil\\28char\\20const*\\29\n4913:SkShaderBase::getFlattenableType\\28\\29\\20const\n4914:SkShader::makeWithLocalMatrix\\28SkMatrix\\20const&\\29\\20const\n4915:SkShader::makeWithColorFilter\\28sk_sp<SkColorFilter>\\29\\20const\n4916:SkScan::PathRequiresTiling\\28SkIRect\\20const&\\29\n4917:SkScan::HairLine\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n4918:SkScan::AntiFrameRect\\28SkRect\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n4919:SkScan::AntiFillXRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n4920:SkScan::AntiFillRect\\28SkRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n4921:SkScan::AAAFillPath\\28SkPath\\20const&\\2c\\20SkBlitter*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n4922:SkScalerContext_FreeType::updateGlyphBoundsIfSubpixel\\28SkGlyph\\20const&\\2c\\20SkRect*\\2c\\20bool\\29\n4923:SkScalerContext_FreeType::shouldSubpixelBitmap\\28SkGlyph\\20const&\\2c\\20SkMatrix\\20const&\\29\n4924:SkScalerContextRec::getSingleMatrix\\28SkMatrix*\\29\\20const\n4925:SkScalerContextFTUtils::drawCOLRv1Glyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n4926:SkScalerContextFTUtils::drawCOLRv0Glyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n4927:SkScalerContext::internalMakeGlyph\\28SkPackedGlyphID\\2c\\20SkMask::Format\\2c\\20SkArenaAlloc*\\29\n4928:SkScalerContext::internalGetPath\\28SkGlyph&\\2c\\20SkArenaAlloc*\\29\n4929:SkScalerContext::getFontMetrics\\28SkFontMetrics*\\29\n4930:SkScalerContext::SkScalerContext\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\n4931:SkScalerContext::PreprocessRec\\28SkTypeface\\20const&\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const&\\29\n4932:SkScalerContext::MakeRecAndEffects\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkScalerContextRec*\\2c\\20SkScalerContextEffects*\\29\n4933:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\n4934:SkScalerContext::GetMaskPreBlend\\28SkScalerContextRec\\20const&\\29\n4935:SkScalerContext::AutoDescriptorGivenRecAndEffects\\28SkScalerContextRec\\20const&\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkAutoDescriptor*\\29\n4936:SkSampledCodec::sampledDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const&\\29\n4937:SkSampledCodec::accountForNativeScaling\\28int*\\2c\\20int*\\29\\20const\n4938:SkSampledCodec::SkSampledCodec\\28SkCodec*\\29\n4939:SkSL::zero_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\29\n4940:SkSL::type_to_sksltype\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSLType*\\29\n4941:SkSL::stoi\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20long\\20long*\\29\n4942:SkSL::splat_scalar\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n4943:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_2::operator\\28\\29\\28int\\29\\20const\n4944:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_1::operator\\28\\29\\28int\\29\\20const\n4945:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n4946:SkSL::negate_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n4947:SkSL::make_reciprocal_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n4948:SkSL::index_out_of_range\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20long\\20long\\2c\\20SkSL::Expression\\20const&\\29\n4949:SkSL::get_struct_definitions_from_module\\28SkSL::Program&\\2c\\20SkSL::Module\\20const&\\2c\\20std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>*\\29\n4950:SkSL::find_existing_declaration\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::IntrinsicKind\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration**\\29::$_0::operator\\28\\29\\28\\29\\20const\n4951:SkSL::extract_matrix\\28SkSL::Expression\\20const*\\2c\\20float*\\29\n4952:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n4953:SkSL::check_main_signature\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\29::$_4::operator\\28\\29\\28int\\29\\20const\n4954:SkSL::\\28anonymous\\20namespace\\29::check_valid_uniform_type\\28SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Context\\20const&\\2c\\20bool\\29::$_0::operator\\28\\29\\28\\29\\20const\n4955:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n4956:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n4957:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n4958:SkSL::VariableReference::setRefKind\\28SkSL::VariableRefKind\\29\n4959:SkSL::Variable::setVarDeclaration\\28SkSL::VarDeclaration*\\29\n4960:SkSL::Variable::setGlobalVarDeclaration\\28SkSL::GlobalVarDeclaration*\\29\n4961:SkSL::Variable::globalVarDeclaration\\28\\29\\20const\n4962:SkSL::Variable::Make\\28SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20bool\\2c\\20SkSL::VariableStorage\\29\n4963:SkSL::Variable::MakeScratchVariable\\28SkSL::Context\\20const&\\2c\\20SkSL::Mangler&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4964:SkSL::VarDeclaration::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Variable*\\2c\\20SkSL::Type\\20const*\\2c\\20int\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4965:SkSL::VarDeclaration::ErrorCheck\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::VariableStorage\\29\n4966:SkSL::TypeReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n4967:SkSL::TypeReference::VerifyType\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Position\\29\n4968:SkSL::TypeReference::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\29\n4969:SkSL::Type::MakeStructType\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Field\\2c\\20true>\\2c\\20bool\\29\n4970:SkSL::Type::MakeLiteralType\\28char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20signed\\20char\\29\n4971:SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::addDeclaringElement\\28SkSL::ProgramElement\\20const*\\29\n4972:SkSL::ToGLSL\\28SkSL::Program&\\2c\\20SkSL::ShaderCaps\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\29\n4973:SkSL::TernaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4974:SkSL::SymbolTable::insertNewParent\\28\\29\n4975:SkSL::SymbolTable::addWithoutOwnership\\28SkSL::Symbol*\\29\n4976:SkSL::Swizzle::MaskString\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\20const&\\29\n4977:SkSL::SwitchStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4978:SkSL::SwitchCase::Make\\28SkSL::Position\\2c\\20long\\20long\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4979:SkSL::SwitchCase::MakeDefault\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4980:SkSL::StructType::StructType\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Field\\2c\\20true>\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n4981:SkSL::String::vappendf\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20char\\20const*\\2c\\20void*\\29\n4982:SkSL::SingleArgumentConstructor::argumentSpan\\28\\29\n4983:SkSL::RP::stack_usage\\28SkSL::RP::Instruction\\20const&\\29\n4984:SkSL::RP::UnownedLValueSlice::isWritable\\28\\29\\20const\n4985:SkSL::RP::UnownedLValueSlice::dynamicSlotRange\\28\\29\n4986:SkSL::RP::ScratchLValue::~ScratchLValue\\28\\29\n4987:SkSL::RP::Program::~Program\\28\\29\n4988:SkSL::RP::LValue::swizzle\\28\\29\n4989:SkSL::RP::Generator::writeVarDeclaration\\28SkSL::VarDeclaration\\20const&\\29\n4990:SkSL::RP::Generator::writeFunction\\28SkSL::IRNode\\20const&\\2c\\20SkSL::FunctionDefinition\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const>\\29\n4991:SkSL::RP::Generator::storeImmutableValueToSlots\\28skia_private::TArray<int\\2c\\20true>\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n4992:SkSL::RP::Generator::pushVariableReferencePartial\\28SkSL::VariableReference\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n4993:SkSL::RP::Generator::pushPrefixExpression\\28SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n4994:SkSL::RP::Generator::pushIntrinsic\\28SkSL::IntrinsicKind\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n4995:SkSL::RP::Generator::pushImmutableData\\28SkSL::Expression\\20const&\\29\n4996:SkSL::RP::Generator::pushAbsFloatIntrinsic\\28int\\29\n4997:SkSL::RP::Generator::getImmutableValueForExpression\\28SkSL::Expression\\20const&\\2c\\20skia_private::TArray<int\\2c\\20true>*\\29\n4998:SkSL::RP::Generator::foldWithMultiOp\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n4999:SkSL::RP::Generator::findPreexistingImmutableData\\28skia_private::TArray<int\\2c\\20true>\\20const&\\29\n5000:SkSL::RP::Builder::push_slots_or_immutable_indirect\\28SkSL::RP::SlotRange\\2c\\20int\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::BuilderOp\\29\n5001:SkSL::RP::Builder::push_condition_mask\\28\\29\n5002:SkSL::RP::Builder::copy_stack_to_slots\\28SkSL::RP::SlotRange\\2c\\20int\\29\n5003:SkSL::RP::Builder::branch_if_any_lanes_active\\28int\\29\n5004:SkSL::ProgramVisitor::visit\\28SkSL::Program\\20const&\\29\n5005:SkSL::ProgramUsage::remove\\28SkSL::Expression\\20const*\\29\n5006:SkSL::ProgramUsage::add\\28SkSL::Statement\\20const*\\29\n5007:SkSL::ProgramUsage::add\\28SkSL::Expression\\20const*\\29\n5008:SkSL::Pool::attachToThread\\28\\29\n5009:SkSL::PipelineStage::PipelineStageCodeGenerator::functionName\\28SkSL::FunctionDeclaration\\20const&\\29\n5010:SkSL::PipelineStage::PipelineStageCodeGenerator::functionDeclaration\\28SkSL::FunctionDeclaration\\20const&\\29\n5011:SkSL::Parser::~Parser\\28\\29\n5012:SkSL::Parser::varDeclarations\\28\\29\n5013:SkSL::Parser::varDeclarationsOrExpressionStatement\\28\\29\n5014:SkSL::Parser::switchCaseBody\\28SkSL::ExpressionArray*\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n5015:SkSL::Parser::statementOrNop\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n5016:SkSL::Parser::shiftExpression\\28\\29\n5017:SkSL::Parser::relationalExpression\\28\\29\n5018:SkSL::Parser::parameter\\28std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>*\\29\n5019:SkSL::Parser::multiplicativeExpression\\28\\29\n5020:SkSL::Parser::logicalXorExpression\\28\\29\n5021:SkSL::Parser::logicalAndExpression\\28\\29\n5022:SkSL::Parser::localVarDeclarationEnd\\28SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Token\\29\n5023:SkSL::Parser::intLiteral\\28long\\20long*\\29\n5024:SkSL::Parser::globalVarDeclarationEnd\\28SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Token\\29\n5025:SkSL::Parser::equalityExpression\\28\\29\n5026:SkSL::Parser::directive\\28bool\\29\n5027:SkSL::Parser::declarations\\28\\29\n5028:SkSL::Parser::checkNext\\28SkSL::Token::Kind\\2c\\20SkSL::Token*\\29\n5029:SkSL::Parser::bitwiseXorExpression\\28\\29\n5030:SkSL::Parser::bitwiseOrExpression\\28\\29\n5031:SkSL::Parser::bitwiseAndExpression\\28\\29\n5032:SkSL::Parser::additiveExpression\\28\\29\n5033:SkSL::Parser::Parser\\28SkSL::Compiler*\\2c\\20SkSL::ProgramSettings\\20const&\\2c\\20SkSL::ProgramKind\\2c\\20std::__2::unique_ptr<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::default_delete<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>>\\29\n5034:SkSL::MultiArgumentConstructor::argumentSpan\\28\\29\n5035:SkSL::ModuleLoader::~ModuleLoader\\28\\29\n5036:SkSL::ModuleLoader::loadVertexModule\\28SkSL::Compiler*\\29\n5037:SkSL::ModuleLoader::loadSharedModule\\28SkSL::Compiler*\\29\n5038:SkSL::ModuleLoader::loadPublicModule\\28SkSL::Compiler*\\29\n5039:SkSL::ModuleLoader::loadGraphiteVertexModule\\28SkSL::Compiler*\\29\n5040:SkSL::ModuleLoader::loadGraphiteFragmentModule\\28SkSL::Compiler*\\29\n5041:SkSL::ModuleLoader::loadFragmentModule\\28SkSL::Compiler*\\29\n5042:SkSL::ModuleLoader::Get\\28\\29\n5043:SkSL::MethodReference::~MethodReference\\28\\29.1\n5044:SkSL::MethodReference::~MethodReference\\28\\29\n5045:SkSL::MatrixType::bitWidth\\28\\29\\20const\n5046:SkSL::MakeRasterPipelineProgram\\28SkSL::Program\\20const&\\2c\\20SkSL::FunctionDefinition\\20const&\\2c\\20SkSL::DebugTracePriv*\\2c\\20bool\\29\n5047:SkSL::Layout::description\\28\\29\\20const\n5048:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_matrixCompMult\\28double\\2c\\20double\\2c\\20double\\29\n5049:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_length\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n5050:SkSL::InterfaceBlock::~InterfaceBlock\\28\\29\n5051:SkSL::Inliner::candidateCanBeInlined\\28SkSL::InlineCandidate\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20bool\\2c\\20SkGoodHash>*\\29\n5052:SkSL::IfStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n5053:SkSL::GLSLCodeGenerator::writeVarDeclaration\\28SkSL::VarDeclaration\\20const&\\2c\\20bool\\29\n5054:SkSL::GLSLCodeGenerator::writeProgramElement\\28SkSL::ProgramElement\\20const&\\29\n5055:SkSL::GLSLCodeGenerator::writeMinAbsHack\\28SkSL::Expression&\\2c\\20SkSL::Expression&\\29\n5056:SkSL::GLSLCodeGenerator::generateCode\\28\\29\n5057:SkSL::FunctionDefinition::~FunctionDefinition\\28\\29.1\n5058:SkSL::FunctionDefinition::~FunctionDefinition\\28\\29\n5059:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n5060:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::addLocalVariable\\28SkSL::Variable\\20const*\\2c\\20SkSL::Position\\29\n5061:SkSL::FunctionDeclaration::~FunctionDeclaration\\28\\29.1\n5062:SkSL::FunctionDeclaration::~FunctionDeclaration\\28\\29\n5063:SkSL::FunctionDeclaration::mangledName\\28\\29\\20const\n5064:SkSL::FunctionDeclaration::determineFinalTypes\\28SkSL::ExpressionArray\\20const&\\2c\\20skia_private::STArray<8\\2c\\20SkSL::Type\\20const*\\2c\\20true>*\\2c\\20SkSL::Type\\20const**\\29\\20const\n5065:SkSL::FunctionDeclaration::FunctionDeclaration\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Variable*\\2c\\20true>\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::IntrinsicKind\\29\n5066:SkSL::FunctionCall::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::ExpressionArray\\29\n5067:SkSL::FunctionCall::FindBestFunctionForCall\\28SkSL::Context\\20const&\\2c\\20SkSL::FunctionDeclaration\\20const*\\2c\\20SkSL::ExpressionArray\\20const&\\29\n5068:SkSL::FunctionCall::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::ExpressionArray\\29\n5069:SkSL::ForStatement::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n5070:SkSL::FindIntrinsicKind\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5071:SkSL::FieldAccess::~FieldAccess\\28\\29.1\n5072:SkSL::FieldAccess::~FieldAccess\\28\\29\n5073:SkSL::ExpressionStatement::Convert\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n5074:SkSL::DoStatement::~DoStatement\\28\\29.1\n5075:SkSL::DoStatement::~DoStatement\\28\\29\n5076:SkSL::DebugTracePriv::setSource\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n5077:SkSL::ConstructorScalarCast::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n5078:SkSL::ConstructorMatrixResize::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n5079:SkSL::Constructor::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n5080:SkSL::ConstantFolder::Simplify\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n5081:SkSL::Compiler::writeErrorCount\\28\\29\n5082:SkSL::Compiler::initializeContext\\28SkSL::Module\\20const*\\2c\\20SkSL::ProgramKind\\2c\\20SkSL::ProgramSettings\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\29\n5083:SkSL::Compiler::cleanupContext\\28\\29\n5084:SkSL::ChildCall::~ChildCall\\28\\29.1\n5085:SkSL::ChildCall::~ChildCall\\28\\29\n5086:SkSL::ChildCall::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Variable\\20const&\\2c\\20SkSL::ExpressionArray\\29\n5087:SkSL::BinaryExpression::isAssignmentIntoVariable\\28\\29\n5088:SkSL::BinaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Type\\20const*\\29\n5089:SkSL::Analysis::\\28anonymous\\20namespace\\29::LoopControlFlowVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n5090:SkSL::Analysis::IsDynamicallyUniformExpression\\28SkSL::Expression\\20const&\\29\n5091:SkSL::Analysis::IsConstantExpression\\28SkSL::Expression\\20const&\\29\n5092:SkSL::Analysis::IsAssignable\\28SkSL::Expression&\\2c\\20SkSL::Analysis::AssignmentInfo*\\2c\\20SkSL::ErrorReporter*\\29\n5093:SkSL::Analysis::GetLoopUnrollInfo\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\20const&\\2c\\20SkSL::Statement\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Statement\\20const*\\2c\\20SkSL::ErrorReporter*\\29\n5094:SkSL::Analysis::GetLoopControlFlowInfo\\28SkSL::Statement\\20const&\\29\n5095:SkSL::AliasType::numberKind\\28\\29\\20const\n5096:SkSL::AliasType::isAllowedInES2\\28\\29\\20const\n5097:SkRuntimeShader::~SkRuntimeShader\\28\\29\n5098:SkRuntimeEffectPriv::WriteChildEffects\\28SkWriteBuffer&\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\29\n5099:SkRuntimeEffectPriv::TransformUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkColorSpaceXformSteps\\20const&\\29\n5100:SkRuntimeEffect::~SkRuntimeEffect\\28\\29\n5101:SkRuntimeEffect::makeShader\\28sk_sp<SkData\\20const>\\2c\\20sk_sp<SkShader>*\\2c\\20unsigned\\20long\\2c\\20SkMatrix\\20const*\\29\\20const\n5102:SkRuntimeEffect::makeColorFilter\\28sk_sp<SkData\\20const>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\29\\20const\n5103:SkRuntimeEffect::TracedShader*\\20emscripten::internal::raw_constructor<SkRuntimeEffect::TracedShader>\\28\\29\n5104:SkRuntimeEffect::MakeInternal\\28std::__2::unique_ptr<SkSL::Program\\2c\\20std::__2::default_delete<SkSL::Program>>\\2c\\20SkRuntimeEffect::Options\\20const&\\2c\\20SkSL::ProgramKind\\29\n5105:SkRuntimeEffect::ChildPtr&\\20skia_private::TArray<SkRuntimeEffect::ChildPtr\\2c\\20true>::emplace_back<sk_sp<SkShader>&>\\28sk_sp<SkShader>&\\29\n5106:SkRuntimeBlender::flatten\\28SkWriteBuffer&\\29\\20const\n5107:SkRgnBuilder::~SkRgnBuilder\\28\\29\n5108:SkResourceCache::PostPurgeSharedID\\28unsigned\\20long\\20long\\29\n5109:SkResourceCache::GetDiscardableFactory\\28\\29\n5110:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::rowBytes\\28int\\29\\20const\n5111:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n5112:SkRegion::Spanerator::Spanerator\\28SkRegion\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5113:SkRegion::Oper\\28SkRegion\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkRegion::Op\\2c\\20SkRegion*\\29\n5114:SkRefCntSet::~SkRefCntSet\\28\\29\n5115:SkRefCntBase::internal_dispose\\28\\29\\20const\n5116:SkReduceOrder::reduce\\28SkDQuad\\20const&\\29\n5117:SkReduceOrder::Conic\\28SkConic\\20const&\\2c\\20SkPoint*\\29\n5118:SkRectClipBlitter::requestRowsPreserved\\28\\29\\20const\n5119:SkRectClipBlitter::allocBlitMemory\\28unsigned\\20long\\29\n5120:SkRect::intersect\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n5121:SkRecords::TypedMatrix::TypedMatrix\\28SkMatrix\\20const&\\29\n5122:SkRecords::FillBounds::popSaveBlock\\28\\29\n5123:SkRecordOptimize\\28SkRecord*\\29\n5124:SkRecordFillBounds\\28SkRect\\20const&\\2c\\20SkRecord\\20const&\\2c\\20SkRect*\\2c\\20SkBBoxHierarchy::Metadata*\\29\n5125:SkRecord::bytesUsed\\28\\29\\20const\n5126:SkReadPixelsRec::trim\\28int\\2c\\20int\\29\n5127:SkReadBuffer::readString\\28unsigned\\20long*\\29\n5128:SkReadBuffer::readRegion\\28SkRegion*\\29\n5129:SkReadBuffer::readRect\\28\\29\n5130:SkReadBuffer::readPoint3\\28SkPoint3*\\29\n5131:SkReadBuffer::readPad32\\28void*\\2c\\20unsigned\\20long\\29\n5132:SkRasterPipeline_<256ul>::SkRasterPipeline_\\28\\29\n5133:SkRasterPipeline::appendSetRGB\\28SkArenaAlloc*\\2c\\20float\\20const*\\29\n5134:SkRasterClipStack::SkRasterClipStack\\28int\\2c\\20int\\29\n5135:SkRTreeFactory::operator\\28\\29\\28\\29\\20const\n5136:SkRTree::search\\28SkRTree::Node*\\2c\\20SkRect\\20const&\\2c\\20std::__2::vector<int\\2c\\20std::__2::allocator<int>>*\\29\\20const\n5137:SkRTree::bulkLoad\\28std::__2::vector<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>>*\\2c\\20int\\29\n5138:SkRTree::allocateNodeAtLevel\\28unsigned\\20short\\29\n5139:SkRSXform::toQuad\\28float\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n5140:SkRRect::isValid\\28\\29\\20const\n5141:SkRRect::computeType\\28\\29\n5142:SkRGBA4f<\\28SkAlphaType\\292>\\20skgpu::Swizzle::applyTo<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\\20const\n5143:SkRBuffer::skipToAlign4\\28\\29\n5144:SkQuads::EvalAt\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\29\n5145:SkQuadraticEdge::setQuadraticWithoutUpdate\\28SkPoint\\20const*\\2c\\20int\\29\n5146:SkPtrSet::reset\\28\\29\n5147:SkPtrSet::copyToArray\\28void**\\29\\20const\n5148:SkPtrSet::add\\28void*\\29\n5149:SkPoint::Normalize\\28SkPoint*\\29\n5150:SkPngEncoder::Make\\28SkWStream*\\2c\\20SkPixmap\\20const&\\2c\\20SkPngEncoder::Options\\20const&\\29\n5151:SkPngEncoder::Encode\\28GrDirectContext*\\2c\\20SkImage\\20const*\\2c\\20SkPngEncoder::Options\\20const&\\29\n5152:SkPngCodec::initializeXforms\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n5153:SkPngCodec::initializeSwizzler\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\2c\\20bool\\29\n5154:SkPngCodec::allocateStorage\\28SkImageInfo\\20const&\\29\n5155:SkPixmapUtils::Orient\\28SkPixmap\\20const&\\2c\\20SkPixmap\\20const&\\2c\\20SkEncodedOrigin\\29\n5156:SkPixmap::erase\\28unsigned\\20int\\2c\\20SkIRect\\20const&\\29\\20const\n5157:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const\n5158:SkPixelRef::getGenerationID\\28\\29\\20const\n5159:SkPixelRef::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\n5160:SkPixelRef::SkPixelRef\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n5161:SkPictureShader::CachedImageInfo::makeImage\\28sk_sp<SkSurface>\\2c\\20SkPicture\\20const*\\29\\20const\n5162:SkPictureShader::CachedImageInfo::Make\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkColorType\\2c\\20SkColorSpace*\\2c\\20int\\2c\\20SkSurfaceProps\\20const&\\29\n5163:SkPictureRecord::endRecording\\28\\29\n5164:SkPictureRecord::beginRecording\\28\\29\n5165:SkPicturePriv::Flatten\\28sk_sp<SkPicture\\20const>\\2c\\20SkWriteBuffer&\\29\n5166:SkPicturePlayback::draw\\28SkCanvas*\\2c\\20SkPicture::AbortCallback*\\2c\\20SkReadBuffer*\\29\n5167:SkPictureData::parseBufferTag\\28SkReadBuffer&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5168:SkPictureData::getPicture\\28SkReadBuffer*\\29\\20const\n5169:SkPictureData::getDrawable\\28SkReadBuffer*\\29\\20const\n5170:SkPictureData::flatten\\28SkWriteBuffer&\\29\\20const\n5171:SkPictureData::flattenToBuffer\\28SkWriteBuffer&\\2c\\20bool\\29\\20const\n5172:SkPictureData::SkPictureData\\28SkPictureRecord\\20const&\\2c\\20SkPictInfo\\20const&\\29\n5173:SkPicture::backport\\28\\29\\20const\n5174:SkPicture::SkPicture\\28\\29\n5175:SkPicture::MakeFromStreamPriv\\28SkStream*\\2c\\20SkDeserialProcs\\20const*\\2c\\20SkTypefacePlayback*\\2c\\20int\\29\n5176:SkPerlinNoiseShader::getPaintingData\\28\\29\\20const\n5177:SkPathWriter::assemble\\28\\29\n5178:SkPathWriter::SkPathWriter\\28SkPath&\\29\n5179:SkPathRef::resetToSize\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5180:SkPathPriv::IsNestedFillRects\\28SkPath\\20const&\\2c\\20SkRect*\\2c\\20SkPathDirection*\\29\n5181:SkPathPriv::CreateDrawArcPath\\28SkPath*\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n5182:SkPathEffectBase::PointData::~PointData\\28\\29\n5183:SkPathEffect::filterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n5184:SkPathBuilder::addOval\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n5185:SkPath::writeToMemoryAsRRect\\28void*\\29\\20const\n5186:SkPath::setLastPt\\28float\\2c\\20float\\29\n5187:SkPath::reverseAddPath\\28SkPath\\20const&\\29\n5188:SkPath::readFromMemory\\28void\\20const*\\2c\\20unsigned\\20long\\29\n5189:SkPath::offset\\28float\\2c\\20float\\2c\\20SkPath*\\29\\20const\n5190:SkPath::isZeroLengthSincePoint\\28int\\29\\20const\n5191:SkPath::isRRect\\28SkRRect*\\29\\20const\n5192:SkPath::isOval\\28SkRect*\\29\\20const\n5193:SkPath::conservativelyContainsRect\\28SkRect\\20const&\\29\\20const\n5194:SkPath::computeConvexity\\28\\29\\20const\n5195:SkPath::addPath\\28SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath::AddPathMode\\29\n5196:SkPath::Polygon\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\2c\\20SkPathFillType\\2c\\20bool\\29\n5197:SkPath2DPathEffect::Make\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29\n5198:SkPath1DPathEffect::Make\\28SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style\\29\n5199:SkParseEncodedOrigin\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkEncodedOrigin*\\29\n5200:SkPaintPriv::ShouldDither\\28SkPaint\\20const&\\2c\\20SkColorType\\29\n5201:SkPaintPriv::Overwrites\\28SkPaint\\20const*\\2c\\20SkPaintPriv::ShaderOverrideOpacity\\29\n5202:SkPaint::setStroke\\28bool\\29\n5203:SkPaint::reset\\28\\29\n5204:SkPaint::refColorFilter\\28\\29\\20const\n5205:SkOpSpanBase::merge\\28SkOpSpan*\\29\n5206:SkOpSpanBase::globalState\\28\\29\\20const\n5207:SkOpSpan::sortableTop\\28SkOpContour*\\29\n5208:SkOpSpan::release\\28SkOpPtT\\20const*\\29\n5209:SkOpSpan::insertCoincidence\\28SkOpSegment\\20const*\\2c\\20bool\\2c\\20bool\\29\n5210:SkOpSpan::init\\28SkOpSegment*\\2c\\20SkOpSpan*\\2c\\20double\\2c\\20SkPoint\\20const&\\29\n5211:SkOpSegment::updateWindingReverse\\28SkOpAngle\\20const*\\29\n5212:SkOpSegment::oppXor\\28\\29\\20const\n5213:SkOpSegment::moveMultiples\\28\\29\n5214:SkOpSegment::isXor\\28\\29\\20const\n5215:SkOpSegment::findNextWinding\\28SkTDArray<SkOpSpanBase*>*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\29\n5216:SkOpSegment::findNextOp\\28SkTDArray<SkOpSpanBase*>*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\2c\\20bool*\\2c\\20SkPathOp\\2c\\20int\\2c\\20int\\29\n5217:SkOpSegment::computeSum\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkOpAngle::IncludeType\\29\n5218:SkOpSegment::collapsed\\28double\\2c\\20double\\29\\20const\n5219:SkOpSegment::addExpanded\\28double\\2c\\20SkOpSpanBase\\20const*\\2c\\20bool*\\29\n5220:SkOpSegment::activeAngle\\28SkOpSpanBase*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\29\n5221:SkOpSegment::UseInnerWinding\\28int\\2c\\20int\\29\n5222:SkOpPtT::ptAlreadySeen\\28SkOpPtT\\20const*\\29\\20const\n5223:SkOpPtT::contains\\28SkOpSegment\\20const*\\2c\\20double\\29\\20const\n5224:SkOpGlobalState::SkOpGlobalState\\28SkOpContourHead*\\2c\\20SkArenaAlloc*\\29\n5225:SkOpEdgeBuilder::preFetch\\28\\29\n5226:SkOpEdgeBuilder::init\\28\\29\n5227:SkOpEdgeBuilder::finish\\28\\29\n5228:SkOpContourBuilder::addConic\\28SkPoint*\\2c\\20float\\29\n5229:SkOpContour::addQuad\\28SkPoint*\\29\n5230:SkOpContour::addCubic\\28SkPoint*\\29\n5231:SkOpContour::addConic\\28SkPoint*\\2c\\20float\\29\n5232:SkOpCoincidence::release\\28SkOpSegment\\20const*\\29\n5233:SkOpCoincidence::mark\\28\\29\n5234:SkOpCoincidence::markCollapsed\\28SkCoincidentSpans*\\2c\\20SkOpPtT*\\29\n5235:SkOpCoincidence::fixUp\\28SkCoincidentSpans*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT\\20const*\\29\n5236:SkOpCoincidence::contains\\28SkCoincidentSpans\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\29\\20const\n5237:SkOpCoincidence::checkOverlap\\28SkCoincidentSpans*\\2c\\20SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20SkTDArray<SkCoincidentSpans*>*\\29\\20const\n5238:SkOpCoincidence::addOrOverlap\\28SkOpSegment*\\2c\\20SkOpSegment*\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool*\\29\n5239:SkOpAngle::tangentsDiverge\\28SkOpAngle\\20const*\\2c\\20double\\29\n5240:SkOpAngle::setSpans\\28\\29\n5241:SkOpAngle::setSector\\28\\29\n5242:SkOpAngle::previous\\28\\29\\20const\n5243:SkOpAngle::midToSide\\28SkOpAngle\\20const*\\2c\\20bool*\\29\\20const\n5244:SkOpAngle::loopCount\\28\\29\\20const\n5245:SkOpAngle::loopContains\\28SkOpAngle\\20const*\\29\\20const\n5246:SkOpAngle::lastMarked\\28\\29\\20const\n5247:SkOpAngle::endToSide\\28SkOpAngle\\20const*\\2c\\20bool*\\29\\20const\n5248:SkOpAngle::alignmentSameSide\\28SkOpAngle\\20const*\\2c\\20int*\\29\\20const\n5249:SkOpAngle::after\\28SkOpAngle*\\29\n5250:SkOffsetSimplePolygon\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20SkTDArray<SkPoint>*\\2c\\20SkTDArray<int>*\\29\n5251:SkNoDrawCanvas::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n5252:SkNoDrawCanvas::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n5253:SkMipmapBuilder::countLevels\\28\\29\\20const\n5254:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29.1\n5255:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29\n5256:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\\28\\29\\20const\n5257:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::peek\\28\\29\\20const\n5258:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\\28GrDirectContext*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n5259:SkMatrix::setRotate\\28float\\2c\\20float\\2c\\20float\\29\n5260:SkMatrix::mapRectScaleTranslate\\28SkRect*\\2c\\20SkRect\\20const&\\29\\20const\n5261:SkMatrix::isFinite\\28\\29\\20const\n5262:SkMatrix::Translate\\28float\\2c\\20float\\29\n5263:SkMatrix::Translate\\28SkIPoint\\29\n5264:SkMatrix::RotTrans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n5265:SkMaskSwizzler::swizzle\\28void*\\2c\\20unsigned\\20char\\20const*\\29\n5266:SkMaskFilterBase::NinePatch::~NinePatch\\28\\29\n5267:SkMask::computeTotalImageSize\\28\\29\\20const\n5268:SkMakeResourceCacheSharedIDForBitmap\\28unsigned\\20int\\29\n5269:SkMD5::finish\\28\\29\n5270:SkMD5::SkMD5\\28\\29\n5271:SkMD5::Digest::toHexString\\28\\29\\20const\n5272:SkM44::preTranslate\\28float\\2c\\20float\\2c\\20float\\29\n5273:SkM44::postTranslate\\28float\\2c\\20float\\2c\\20float\\29\n5274:SkLocalMatrixShader::type\\28\\29\\20const\n5275:SkLinearColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n5276:SkLineParameters::cubicEndPoints\\28SkDCubic\\20const&\\29\n5277:SkLatticeIter::SkLatticeIter\\28SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\29\n5278:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::~SkLRUCache\\28\\29\n5279:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::reset\\28\\29\n5280:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::insert\\28GrProgramDesc\\20const&\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\29\n5281:SkJpegDecoder::IsJpeg\\28void\\20const*\\2c\\20unsigned\\20long\\29\n5282:SkJpegCodec::readRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkCodec::Options\\20const&\\29\n5283:SkJpegCodec::initializeSwizzler\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\2c\\20bool\\29\n5284:SkIsSimplePolygon\\28SkPoint\\20const*\\2c\\20int\\29\n5285:SkIsConvexPolygon\\28SkPoint\\20const*\\2c\\20int\\29\n5286:SkInvert4x4Matrix\\28float\\20const*\\2c\\20float*\\29\n5287:SkInvert3x3Matrix\\28float\\20const*\\2c\\20float*\\29\n5288:SkInvert2x2Matrix\\28float\\20const*\\2c\\20float*\\29\n5289:SkIntersections::vertical\\28SkDQuad\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5290:SkIntersections::vertical\\28SkDLine\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5291:SkIntersections::vertical\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5292:SkIntersections::vertical\\28SkDConic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5293:SkIntersections::mostOutside\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\\20const\n5294:SkIntersections::intersect\\28SkDQuad\\20const&\\2c\\20SkDLine\\20const&\\29\n5295:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDQuad\\20const&\\29\n5296:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDLine\\20const&\\29\n5297:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDConic\\20const&\\29\n5298:SkIntersections::intersect\\28SkDConic\\20const&\\2c\\20SkDQuad\\20const&\\29\n5299:SkIntersections::intersect\\28SkDConic\\20const&\\2c\\20SkDLine\\20const&\\29\n5300:SkIntersections::insertCoincident\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\n5301:SkIntersections::horizontal\\28SkDQuad\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5302:SkIntersections::horizontal\\28SkDLine\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5303:SkIntersections::horizontal\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5304:SkIntersections::horizontal\\28SkDConic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5305:SkImages::RasterFromPixmap\\28SkPixmap\\20const&\\2c\\20void\\20\\28*\\29\\28void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n5306:SkImages::RasterFromData\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\29\n5307:SkImages::DeferredFromGenerator\\28std::__2::unique_ptr<SkImageGenerator\\2c\\20std::__2::default_delete<SkImageGenerator>>\\29\n5308:SkImage_Raster::onPeekMips\\28\\29\\20const\n5309:SkImage_Raster::onPeekBitmap\\28\\29\\20const\n5310:SkImage_Lazy::~SkImage_Lazy\\28\\29.1\n5311:SkImage_GaneshBase::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n5312:SkImage_Base::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n5313:SkImage_Base::onAsLegacyBitmap\\28GrDirectContext*\\2c\\20SkBitmap*\\29\\20const\n5314:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_1::operator\\28\\29\\28\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n5315:SkImageInfo::validRowBytes\\28unsigned\\20long\\29\\20const\n5316:SkImageInfo::MakeN32Premul\\28int\\2c\\20int\\29\n5317:SkImageGenerator::~SkImageGenerator\\28\\29.1\n5318:SkImageFilters::ColorFilter\\28sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n5319:SkImageFilter_Base::getCTMCapability\\28\\29\\20const\n5320:SkImageFilter_Base::filterImage\\28skif::Context\\20const&\\29\\20const\n5321:SkImageFilterCache::Get\\28\\29\n5322:SkImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n5323:SkImage::withMipmaps\\28sk_sp<SkMipmap>\\29\\20const\n5324:SkImage::peekPixels\\28SkPixmap*\\29\\20const\n5325:SkImage::height\\28\\29\\20const\n5326:SkIcuBreakIteratorCache::purgeIfNeeded\\28\\29\n5327:SkIcoDecoder::IsIco\\28void\\20const*\\2c\\20unsigned\\20long\\29\n5328:SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29\n5329:SkGradientBaseShader::~SkGradientBaseShader\\28\\29\n5330:SkGradientBaseShader::AppendGradientFillStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const*\\2c\\20float\\20const*\\2c\\20int\\29\n5331:SkGlyphRunListPainterCPU::SkGlyphRunListPainterCPU\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\2c\\20SkColorSpace*\\29\n5332:SkGlyph::setImage\\28SkArenaAlloc*\\2c\\20SkScalerContext*\\29\n5333:SkGlyph::setDrawable\\28SkArenaAlloc*\\2c\\20SkScalerContext*\\29\n5334:SkGlyph::pathIsHairline\\28\\29\\20const\n5335:SkGlyph::mask\\28SkPoint\\29\\20const\n5336:SkGlyph::SkGlyph\\28SkGlyph&&\\29\n5337:SkGifDecoder::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::SelectionPolicy\\2c\\20SkCodec::Result*\\29\n5338:SkGifDecoder::IsGif\\28void\\20const*\\2c\\20unsigned\\20long\\29\n5339:SkGenerateDistanceFieldFromA8Image\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\29\n5340:SkGaussFilter::SkGaussFilter\\28double\\29\n5341:SkFrameHolder::setAlphaAndRequiredFrame\\28SkFrame*\\29\n5342:SkFrame::fillIn\\28SkCodec::FrameInfo*\\2c\\20bool\\29\\20const\n5343:SkFontStyleSet_Custom::appendTypeface\\28sk_sp<SkTypeface>\\29\n5344:SkFontStyleSet_Custom::SkFontStyleSet_Custom\\28SkString\\29\n5345:SkFontScanner_FreeType::scanInstance\\28SkStreamAsset*\\2c\\20int\\2c\\20int\\2c\\20SkString*\\2c\\20SkFontStyle*\\2c\\20bool*\\2c\\20skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>*\\29\\20const\n5346:SkFontScanner_FreeType::SkFontScanner_FreeType\\28\\29\n5347:SkFontPriv::GetFontBounds\\28SkFont\\20const&\\29\n5348:SkFontMgr::makeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n5349:SkFontMgr::makeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\\20const\n5350:SkFontMgr::legacyMakeTypeface\\28char\\20const*\\2c\\20SkFontStyle\\29\\20const\n5351:SkFontDescriptor::SkFontDescriptor\\28\\29\n5352:SkFont::setupForAsPaths\\28SkPaint*\\29\n5353:SkFont::setSkewX\\28float\\29\n5354:SkFont::setLinearMetrics\\28bool\\29\n5355:SkFont::setEmbolden\\28bool\\29\n5356:SkFont::operator==\\28SkFont\\20const&\\29\\20const\n5357:SkFont::getPaths\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\\2c\\20void*\\29\\20const\n5358:SkFlattenable::RegisterFlattenablesIfNeeded\\28\\29\n5359:SkFlattenable::PrivateInitializer::InitEffects\\28\\29\n5360:SkFlattenable::NameToFactory\\28char\\20const*\\29\n5361:SkFlattenable::FactoryToName\\28sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\29\n5362:SkFindQuadExtrema\\28float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n5363:SkFindCubicExtrema\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n5364:SkFactorySet::~SkFactorySet\\28\\29\n5365:SkExifMetadata::parseIfd\\28unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n5366:SkEncoder::encodeRows\\28int\\29\n5367:SkEmptyPicture::approximateBytesUsed\\28\\29\\20const\n5368:SkEdgeClipper::clipQuad\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\29\n5369:SkEdgeClipper::ClipPath\\28SkPath\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20void\\20\\28*\\29\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\\2c\\20void*\\29\n5370:SkEdgeBuilder::buildEdges\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\29\n5371:SkDynamicMemoryWStream::bytesWritten\\28\\29\\20const\n5372:SkDrawableList::newDrawableSnapshot\\28\\29\n5373:SkDrawTreatAAStrokeAsHairline\\28float\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n5374:SkDrawShadowMetrics::GetSpotShadowTransform\\28SkPoint3\\20const&\\2c\\20float\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20SkMatrix*\\2c\\20float*\\29\n5375:SkDrawShadowMetrics::GetLocalBounds\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect*\\29\n5376:SkDrawBase::drawPaint\\28SkPaint\\20const&\\29\\20const\n5377:SkDrawBase::DrawToMask\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMaskFilter\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkMaskBuilder*\\2c\\20SkMaskBuilder::CreateMode\\2c\\20SkStrokeRec::InitStyle\\29\n5378:SkDraw::drawSprite\\28SkBitmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\\20const\n5379:SkDiscretePathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n5380:SkDiscretePathEffect::Make\\28float\\2c\\20float\\2c\\20unsigned\\20int\\29\n5381:SkDevice::getRelativeTransform\\28SkDevice\\20const&\\29\\20const\n5382:SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n5383:SkDevice::drawDrawable\\28SkCanvas*\\2c\\20SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n5384:SkDevice::drawDevice\\28SkDevice*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n5385:SkDevice::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n5386:SkDescriptor::addEntry\\28unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20void\\20const*\\29\n5387:SkDeque::Iter::next\\28\\29\n5388:SkDeque::Iter::Iter\\28SkDeque\\20const&\\2c\\20SkDeque::Iter::IterStart\\29\n5389:SkData::MakeSubset\\28SkData\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n5390:SkDashPath::InternalFilter\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20SkDashPath::StrokeRecApplication\\29\n5391:SkDashPath::CalcDashParameters\\28float\\2c\\20float\\20const*\\2c\\20int\\2c\\20float*\\2c\\20int*\\2c\\20float*\\2c\\20float*\\29\n5392:SkDRect::setBounds\\28SkDQuad\\20const&\\2c\\20SkDQuad\\20const&\\2c\\20double\\2c\\20double\\29\n5393:SkDRect::setBounds\\28SkDCubic\\20const&\\2c\\20SkDCubic\\20const&\\2c\\20double\\2c\\20double\\29\n5394:SkDRect::setBounds\\28SkDConic\\20const&\\2c\\20SkDConic\\20const&\\2c\\20double\\2c\\20double\\29\n5395:SkDQuad::subDivide\\28double\\2c\\20double\\29\\20const\n5396:SkDQuad::monotonicInY\\28\\29\\20const\n5397:SkDQuad::isLinear\\28int\\2c\\20int\\29\\20const\n5398:SkDQuad::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n5399:SkDPoint::approximatelyDEqual\\28SkDPoint\\20const&\\29\\20const\n5400:SkDCurveSweep::setCurveHullSweep\\28SkPath::Verb\\29\n5401:SkDCurve::nearPoint\\28SkPath::Verb\\2c\\20SkDPoint\\20const&\\2c\\20SkDPoint\\20const&\\29\\20const\n5402:SkDCubic::monotonicInX\\28\\29\\20const\n5403:SkDCubic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n5404:SkDCubic::hullIntersects\\28SkDPoint\\20const*\\2c\\20int\\2c\\20bool*\\29\\20const\n5405:SkDConic::subDivide\\28double\\2c\\20double\\29\\20const\n5406:SkCubics::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n5407:SkCubicEdge::setCubicWithoutUpdate\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\29\n5408:SkCubicClipper::ChopMonoAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20float*\\29\n5409:SkCreateRasterPipelineBlitter\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\29\n5410:SkCreateRasterPipelineBlitter\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n5411:SkContourMeasureIter::~SkContourMeasureIter\\28\\29\n5412:SkContourMeasureIter::SkContourMeasureIter\\28SkPath\\20const&\\2c\\20bool\\2c\\20float\\29\n5413:SkContourMeasure::length\\28\\29\\20const\n5414:SkContourMeasure::getSegment\\28float\\2c\\20float\\2c\\20SkPath*\\2c\\20bool\\29\\20const\n5415:SkConic::BuildUnitArc\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRotationDirection\\2c\\20SkMatrix\\20const*\\2c\\20SkConic*\\29\n5416:SkComputeRadialSteps\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float*\\2c\\20float*\\2c\\20int*\\29\n5417:SkCompressedDataSize\\28SkTextureCompressionType\\2c\\20SkISize\\2c\\20skia_private::TArray<unsigned\\20long\\2c\\20true>*\\2c\\20bool\\29\n5418:SkColorTypeValidateAlphaType\\28SkColorType\\2c\\20SkAlphaType\\2c\\20SkAlphaType*\\29\n5419:SkColorSpaceSingletonFactory::Make\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n5420:SkColorSpace::toProfile\\28skcms_ICCProfile*\\29\\20const\n5421:SkColorSpace::makeLinearGamma\\28\\29\\20const\n5422:SkColorSpace::isSRGB\\28\\29\\20const\n5423:SkColorMatrix_RGB2YUV\\28SkYUVColorSpace\\2c\\20float*\\29\n5424:SkColorFilterShader::SkColorFilterShader\\28sk_sp<SkShader>\\2c\\20float\\2c\\20sk_sp<SkColorFilter>\\29\n5425:SkColor4fXformer::SkColor4fXformer\\28SkGradientBaseShader\\20const*\\2c\\20SkColorSpace*\\2c\\20bool\\29\n5426:SkCoincidentSpans::extend\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\29\n5427:SkCodecs::get_decoders_for_editing\\28\\29\n5428:SkCodec::outputScanline\\28int\\29\\20const\n5429:SkCodec::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n5430:SkCodec::initializeColorXform\\28SkImageInfo\\20const&\\2c\\20SkEncodedInfo::Alpha\\2c\\20bool\\29\n5431:SkChopQuadAtMaxCurvature\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n5432:SkChopQuadAtHalf\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n5433:SkChopMonoCubicAtX\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\29\n5434:SkChopCubicAtInflections\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n5435:SkCharToGlyphCache::findGlyphIndex\\28int\\29\\20const\n5436:SkCanvasPriv::WriteLattice\\28void*\\2c\\20SkCanvas::Lattice\\20const&\\29\n5437:SkCanvasPriv::ReadLattice\\28SkReadBuffer&\\2c\\20SkCanvas::Lattice*\\29\n5438:SkCanvasPriv::ImageToColorFilter\\28SkPaint*\\29\n5439:SkCanvasPriv::GetDstClipAndMatrixCounts\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20int*\\2c\\20int*\\29\n5440:SkCanvas::~SkCanvas\\28\\29\n5441:SkCanvas::skew\\28float\\2c\\20float\\29\n5442:SkCanvas::only_axis_aligned_saveBehind\\28SkRect\\20const*\\29\n5443:SkCanvas::internalDrawDeviceWithFilter\\28SkDevice*\\2c\\20SkDevice*\\2c\\20SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::DeviceCompatibleWithFilter\\2c\\20float\\2c\\20bool\\29\n5444:SkCanvas::getDeviceClipBounds\\28\\29\\20const\n5445:SkCanvas::experimental_DrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n5446:SkCanvas::drawVertices\\28sk_sp<SkVertices>\\20const&\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n5447:SkCanvas::drawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n5448:SkCanvas::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n5449:SkCanvas::drawLine\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n5450:SkCanvas::drawImageNine\\28SkImage\\20const*\\2c\\20SkIRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n5451:SkCanvas::drawClippedToSaveBehind\\28SkPaint\\20const&\\29\n5452:SkCanvas::drawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n5453:SkCanvas::didTranslate\\28float\\2c\\20float\\29\n5454:SkCanvas::clipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n5455:SkCanvas::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n5456:SkCanvas::SkCanvas\\28sk_sp<SkDevice>\\29\n5457:SkCanvas::ImageSetEntry::ImageSetEntry\\28\\29\n5458:SkCachedData::SkCachedData\\28void*\\2c\\20unsigned\\20long\\29\n5459:SkCachedData::SkCachedData\\28unsigned\\20long\\2c\\20SkDiscardableMemory*\\29\n5460:SkCTMShader::isOpaque\\28\\29\\20const\n5461:SkBulkGlyphMetricsAndPaths::glyphs\\28SkSpan<unsigned\\20short\\20const>\\29\n5462:SkBmpStandardCodec::decodeIcoMask\\28SkStream*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\29\n5463:SkBmpMaskCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n5464:SkBmpDecoder::IsBmp\\28void\\20const*\\2c\\20unsigned\\20long\\29\n5465:SkBmpCodec::SkBmpCodec\\28SkEncodedInfo&&\\2c\\20std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20unsigned\\20short\\2c\\20SkCodec::SkScanlineOrder\\29\n5466:SkBmpBaseCodec::SkBmpBaseCodec\\28SkEncodedInfo&&\\2c\\20std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20unsigned\\20short\\2c\\20SkCodec::SkScanlineOrder\\29\n5467:SkBlurMask::ConvertRadiusToSigma\\28float\\29\n5468:SkBlurMask::ComputeBlurredScanline\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\29\n5469:SkBlurMask::BlurRect\\28float\\2c\\20SkMaskBuilder*\\2c\\20SkRect\\20const&\\2c\\20SkBlurStyle\\2c\\20SkIPoint*\\2c\\20SkMaskBuilder::CreateMode\\29\n5470:SkBlockMemoryStream::getPosition\\28\\29\\20const\n5471:SkBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n5472:SkBlitter::Choose\\28SkPixmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n5473:SkBlitter::ChooseSprite\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\29\n5474:SkBlendShader::~SkBlendShader\\28\\29.1\n5475:SkBlendShader::~SkBlendShader\\28\\29\n5476:SkBitmapImageGetPixelRef\\28SkImage\\20const*\\29\n5477:SkBitmapDevice::SkBitmapDevice\\28SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20void*\\29\n5478:SkBitmapDevice::Create\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkRasterHandleAllocator*\\29\n5479:SkBitmapCache::Rec::install\\28SkBitmap*\\29\n5480:SkBitmapCache::Rec::diagnostic_only_getDiscardable\\28\\29\\20const\n5481:SkBitmapCache::Find\\28SkBitmapCacheDesc\\20const&\\2c\\20SkBitmap*\\29\n5482:SkBitmapCache::Alloc\\28SkBitmapCacheDesc\\20const&\\2c\\20SkImageInfo\\20const&\\2c\\20SkPixmap*\\29\n5483:SkBitmapCache::Add\\28std::__2::unique_ptr<SkBitmapCache::Rec\\2c\\20SkBitmapCache::RecDeleter>\\2c\\20SkBitmap*\\29\n5484:SkBitmap::setPixelRef\\28sk_sp<SkPixelRef>\\2c\\20int\\2c\\20int\\29\n5485:SkBitmap::setAlphaType\\28SkAlphaType\\29\n5486:SkBitmap::reset\\28\\29\n5487:SkBitmap::makeShader\\28SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n5488:SkBitmap::getAddr\\28int\\2c\\20int\\29\\20const\n5489:SkBitmap::allocPixels\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28\\29\\20const\n5490:SkBitmap::HeapAllocator::allocPixelRef\\28SkBitmap*\\29\n5491:SkBinaryWriteBuffer::writeFlattenable\\28SkFlattenable\\20const*\\29\n5492:SkBinaryWriteBuffer::writeColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n5493:SkBigPicture::SkBigPicture\\28SkRect\\20const&\\2c\\20sk_sp<SkRecord>\\2c\\20std::__2::unique_ptr<SkBigPicture::SnapshotArray\\2c\\20std::__2::default_delete<SkBigPicture::SnapshotArray>>\\2c\\20sk_sp<SkBBoxHierarchy>\\2c\\20unsigned\\20long\\29\n5494:SkBezierQuad::IntersectWithHorizontalLine\\28SkSpan<SkPoint\\20const>\\2c\\20float\\2c\\20float*\\29\n5495:SkBezierCubic::IntersectWithHorizontalLine\\28SkSpan<SkPoint\\20const>\\2c\\20float\\2c\\20float*\\29\n5496:SkBasicEdgeBuilder::~SkBasicEdgeBuilder\\28\\29\n5497:SkBaseShadowTessellator::finishPathPolygon\\28\\29\n5498:SkBaseShadowTessellator::computeConvexShadow\\28float\\2c\\20float\\2c\\20bool\\29\n5499:SkBaseShadowTessellator::computeConcaveShadow\\28float\\2c\\20float\\29\n5500:SkBaseShadowTessellator::clipUmbraPoint\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint*\\29\n5501:SkBaseShadowTessellator::addInnerPoint\\28SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20SkTDArray<SkPoint>\\20const&\\2c\\20int*\\29\n5502:SkBaseShadowTessellator::addEdge\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20SkTDArray<SkPoint>\\20const&\\2c\\20bool\\2c\\20bool\\29\n5503:SkBaseShadowTessellator::addArc\\28SkPoint\\20const&\\2c\\20float\\2c\\20bool\\29\n5504:SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint\\28\\29\n5505:SkAutoCanvasMatrixPaint::SkAutoCanvasMatrixPaint\\28SkCanvas*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\2c\\20SkRect\\20const&\\29\n5506:SkAndroidCodecAdapter::~SkAndroidCodecAdapter\\28\\29\n5507:SkAndroidCodecAdapter::SkAndroidCodecAdapter\\28SkCodec*\\29\n5508:SkAndroidCodec::~SkAndroidCodec\\28\\29\n5509:SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29\n5510:SkAndroidCodec::SkAndroidCodec\\28SkCodec*\\29\n5511:SkAnalyticEdge::update\\28int\\2c\\20bool\\29\n5512:SkAnalyticEdge::updateLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5513:SkAnalyticEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n5514:SkAAClip::operator=\\28SkAAClip\\20const&\\29\n5515:SkAAClip::op\\28SkIRect\\20const&\\2c\\20SkClipOp\\29\n5516:SkAAClip::Builder::flushRow\\28bool\\29\n5517:SkAAClip::Builder::finish\\28SkAAClip*\\29\n5518:SkAAClip::Builder::Blitter::~Blitter\\28\\29\n5519:SkAAClip::Builder::Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n5520:Sk2DPathEffect::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n5521:SimpleImageInfo*\\20emscripten::internal::raw_constructor<SimpleImageInfo>\\28\\29\n5522:SimpleFontStyle*\\20emscripten::internal::MemberAccess<SimpleStrutStyle\\2c\\20SimpleFontStyle>::getWire<SimpleStrutStyle>\\28SimpleFontStyle\\20SimpleStrutStyle::*\\20const&\\2c\\20SimpleStrutStyle\\20const&\\29\n5523:SharedGenerator::isTextureGenerator\\28\\29\n5524:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\\28\\29.1\n5525:RgnOper::addSpan\\28int\\2c\\20int\\20const*\\2c\\20int\\20const*\\29\n5526:PorterDuffXferProcessor::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n5527:PathSegment::init\\28\\29\n5528:PathAddVerbsPointsWeights\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n5529:ParseSingleImage\n5530:ParseHeadersInternal\n5531:PS_Conv_ASCIIHexDecode\n5532:Op\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\2c\\20SkPath*\\29\n5533:OpAsWinding::markReverse\\28Contour*\\2c\\20Contour*\\29\n5534:OpAsWinding::getDirection\\28Contour&\\29\n5535:OpAsWinding::checkContainerChildren\\28Contour*\\2c\\20Contour*\\29\n5536:OffsetEdge::computeCrossingDistance\\28OffsetEdge\\20const*\\29\n5537:OT::sbix::accelerator_t::get_png_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20bool\\29\\20const\n5538:OT::sbix::accelerator_t::choose_strike\\28hb_font_t*\\29\\20const\n5539:OT::hmtxvmtx<OT::vmtx\\2c\\20OT::vhea\\2c\\20OT::VVAR>::accelerator_t::accelerator_t\\28hb_face_t*\\29\n5540:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::get_advance_with_var_unscaled\\28unsigned\\20int\\2c\\20hb_font_t*\\2c\\20float*\\29\\20const\n5541:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::accelerator_t\\28hb_face_t*\\29\n5542:OT::hb_ot_layout_lookup_accelerator_t*\\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GPOS_impl::PosLookup>\\28OT::Layout::GPOS_impl::PosLookup\\20const&\\29\n5543:OT::hb_kern_machine_t<hb_ot_shape_fallback_kern_driver_t>::kern\\28hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n5544:OT::hb_accelerate_subtables_context_t::return_t\\20OT::Context::dispatch<OT::hb_accelerate_subtables_context_t>\\28OT::hb_accelerate_subtables_context_t*\\29\\20const\n5545:OT::hb_accelerate_subtables_context_t::return_t\\20OT::ChainContext::dispatch<OT::hb_accelerate_subtables_context_t>\\28OT::hb_accelerate_subtables_context_t*\\29\\20const\n5546:OT::glyf_accelerator_t::get_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\29\\20const\n5547:OT::glyf_accelerator_t::get_advance_with_var_unscaled\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n5548:OT::cmap::accelerator_t::get_variation_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_cache_t<21u\\2c\\2016u\\2c\\208u\\2c\\20true>*\\29\\20const\n5549:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::accelerator_templ_t\\28hb_face_t*\\29\n5550:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::_fini\\28\\29\n5551:OT::cff1::lookup_expert_subset_charset_for_sid\\28unsigned\\20int\\29\n5552:OT::cff1::lookup_expert_charset_for_sid\\28unsigned\\20int\\29\n5553:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\\28\\29\n5554:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::_fini\\28\\29\n5555:OT::TupleVariationData::unpack_points\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*&\\2c\\20hb_vector_t<unsigned\\20int\\2c\\20false>&\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\29\n5556:OT::SBIXStrike::get_glyph_blob\\28unsigned\\20int\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n5557:OT::RuleSet<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5558:OT::RuleSet<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ContextApplyLookupContext\\20const&\\29\\20const\n5559:OT::RecordListOf<OT::Script>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5560:OT::RecordListOf<OT::Feature>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5561:OT::PaintTranslate::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5562:OT::PaintSolid::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5563:OT::PaintSkewAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5564:OT::PaintSkew::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5565:OT::PaintScaleUniformAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5566:OT::PaintScaleUniform::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5567:OT::PaintScaleAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5568:OT::PaintScale::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5569:OT::PaintRotateAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5570:OT::PaintLinearGradient<OT::Variable>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5571:OT::PaintLinearGradient<OT::NoVariable>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5572:OT::Lookup::serialize\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5573:OT::Layout::propagate_attachment_offsets\\28hb_glyph_position_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20unsigned\\20int\\29\n5574:OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5575:OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\29\\20const\n5576:OT::Layout::GPOS_impl::reverse_cursive_minor_offset\\28hb_glyph_position_t*\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20unsigned\\20int\\29\n5577:OT::Layout::GPOS_impl::MarkRecord::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5578:OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5579:OT::Layout::GPOS_impl::AnchorMatrix::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5580:OT::IndexSubtableRecord::get_image_data\\28unsigned\\20int\\2c\\20void\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n5581:OT::FeatureVariationRecord::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5582:OT::FeatureParams::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5583:OT::ContextFormat3::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5584:OT::ContextFormat2_5<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5585:OT::ContextFormat2_5<OT::Layout::SmallTypes>::_apply\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\\20const\n5586:OT::ContextFormat1_4<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5587:OT::ColorStop::get_color_stop\\28OT::hb_paint_context_t*\\2c\\20hb_color_stop_t*\\2c\\20unsigned\\20int\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n5588:OT::ColorLine<OT::NoVariable>::static_get_extend\\28hb_color_line_t*\\2c\\20void*\\2c\\20void*\\29\n5589:OT::ChainRuleSet<OT::Layout::SmallTypes>::would_apply\\28OT::hb_would_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n5590:OT::ChainRuleSet<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5591:OT::ChainRuleSet<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n5592:OT::ChainContextFormat3::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5593:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5594:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::_apply\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\\20const\n5595:OT::ChainContextFormat1_4<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5596:OT::CBDT::accelerator_t::get_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20bool\\29\\20const\n5597:OT::Affine2x3::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5598:MakeOnScreenGLSurface\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\n5599:Load_SBit_Png\n5600:LineCubicIntersections::intersectRay\\28double*\\29\n5601:LineCubicIntersections::VerticalIntersect\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double*\\29\n5602:LineCubicIntersections::HorizontalIntersect\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double*\\29\n5603:Launch\n5604:JpegDecoderMgr::returnFalse\\28char\\20const*\\29\n5605:JpegDecoderMgr::getEncodedColor\\28SkEncodedInfo::Color*\\29\n5606:JSObjectFromLineMetrics\\28skia::textlayout::LineMetrics&\\29\n5607:JSObjectFromGlyphInfo\\28skia::textlayout::Paragraph::GlyphInfo&\\29\n5608:Ins_DELTAP\n5609:HandleCoincidence\\28SkOpContourHead*\\2c\\20SkOpCoincidence*\\29\n5610:GrWritePixelsTask::~GrWritePixelsTask\\28\\29\n5611:GrWaitRenderTask::~GrWaitRenderTask\\28\\29\n5612:GrVertexBufferAllocPool::makeSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n5613:GrVertexBufferAllocPool::makeSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n5614:GrTriangulator::polysToTriangles\\28GrTriangulator::Poly*\\2c\\20SkPathFillType\\2c\\20skgpu::VertexWriter\\29\\20const\n5615:GrTriangulator::polysToTriangles\\28GrTriangulator::Poly*\\2c\\20GrEagerVertexAllocator*\\29\\20const\n5616:GrTriangulator::mergeEdgesBelow\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5617:GrTriangulator::mergeEdgesAbove\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5618:GrTriangulator::makeSortedVertex\\28SkPoint\\20const&\\2c\\20unsigned\\20char\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5619:GrTriangulator::makeEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeType\\2c\\20GrTriangulator::Comparator\\20const&\\29\n5620:GrTriangulator::computeBisector\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\29\\20const\n5621:GrTriangulator::appendQuadraticToContour\\28SkPoint\\20const*\\2c\\20float\\2c\\20GrTriangulator::VertexList*\\29\\20const\n5622:GrTriangulator::SortMesh\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n5623:GrTriangulator::FindEnclosingEdges\\28GrTriangulator::Vertex\\20const&\\2c\\20GrTriangulator::EdgeList\\20const&\\2c\\20GrTriangulator::Edge**\\2c\\20GrTriangulator::Edge**\\29\n5624:GrTriangulator::Edge::intersect\\28GrTriangulator::Edge\\20const&\\2c\\20SkPoint*\\2c\\20unsigned\\20char*\\29\\20const\n5625:GrTransferFromRenderTask::~GrTransferFromRenderTask\\28\\29\n5626:GrThreadSafeCache::~GrThreadSafeCache\\28\\29\n5627:GrThreadSafeCache::findVertsWithData\\28skgpu::UniqueKey\\20const&\\29\n5628:GrThreadSafeCache::addVertsWithData\\28skgpu::UniqueKey\\20const&\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\2c\\20bool\\20\\28*\\29\\28SkData*\\2c\\20SkData*\\29\\29\n5629:GrThreadSafeCache::Entry::set\\28skgpu::UniqueKey\\20const&\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\29\n5630:GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29\n5631:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\\28\\29\n5632:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\\28sk_sp<GrSurface>\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\29\n5633:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\\28GrCaps\\20const&\\2c\\20std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrMipmapStatus\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5634:GrTextureProxyPriv::setDeferredUploader\\28std::__2::unique_ptr<GrDeferredProxyUploader\\2c\\20std::__2::default_delete<GrDeferredProxyUploader>>\\29\n5635:GrTextureProxy::setUniqueKey\\28GrProxyProvider*\\2c\\20skgpu::UniqueKey\\20const&\\29\n5636:GrTextureProxy::clearUniqueKey\\28\\29\n5637:GrTextureProxy::ProxiesAreCompatibleAsDynamicState\\28GrSurfaceProxy\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29\n5638:GrTextureProxy::GrTextureProxy\\28sk_sp<GrSurface>\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\29.1\n5639:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::$_1::operator\\28\\29\\28int\\2c\\20GrSamplerState::WrapMode\\2c\\20GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::Span\\2c\\20GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::Span\\2c\\20float\\29\\20const\n5640:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::$_2::operator\\28\\29\\28GrTextureEffect::ShaderMode\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n5641:GrTexture::markMipmapsDirty\\28\\29\n5642:GrTexture::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n5643:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::~GrTDeferredProxyUploader\\28\\29\n5644:GrSurfaceProxyPriv::exactify\\28\\29\n5645:GrSurfaceProxy::GrSurfaceProxy\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5646:GrStyledShape::~GrStyledShape\\28\\29\n5647:GrStyledShape::setInheritedKey\\28GrStyledShape\\20const&\\2c\\20GrStyle::Apply\\2c\\20float\\29\n5648:GrStyledShape::asRRect\\28SkRRect*\\2c\\20SkPathDirection*\\2c\\20unsigned\\20int*\\2c\\20bool*\\29\\20const\n5649:GrStyledShape::GrStyledShape\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n5650:GrStyle::~GrStyle\\28\\29\n5651:GrStyle::applyToPath\\28SkPath*\\2c\\20SkStrokeRec::InitStyle*\\2c\\20SkPath\\20const&\\2c\\20float\\29\\20const\n5652:GrStyle::applyPathEffect\\28SkPath*\\2c\\20SkStrokeRec*\\2c\\20SkPath\\20const&\\29\\20const\n5653:GrStencilSettings::SetClipBitSettings\\28bool\\29\n5654:GrStagingBufferManager::detachBuffers\\28\\29\n5655:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::defineStruct\\28char\\20const*\\29\n5656:GrShape::simplify\\28unsigned\\20int\\29\n5657:GrShape::segmentMask\\28\\29\\20const\n5658:GrShape::conservativeContains\\28SkRect\\20const&\\29\\20const\n5659:GrShape::closed\\28\\29\\20const\n5660:GrSWMaskHelper::toTextureView\\28GrRecordingContext*\\2c\\20SkBackingFit\\29\n5661:GrSWMaskHelper::drawShape\\28GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAA\\2c\\20unsigned\\20char\\29\n5662:GrSWMaskHelper::drawShape\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAA\\2c\\20unsigned\\20char\\29\n5663:GrResourceProvider::writePixels\\28sk_sp<GrTexture>\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrMipLevel\\20const*\\2c\\20int\\29\\20const\n5664:GrResourceProvider::wrapBackendSemaphore\\28GrBackendSemaphore\\20const&\\2c\\20GrSemaphoreWrapType\\2c\\20GrWrapOwnership\\29\n5665:GrResourceProvider::prepareLevels\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20skia_private::AutoSTArray<14\\2c\\20GrMipLevel>*\\2c\\20skia_private::AutoSTArray<14\\2c\\20std::__2::unique_ptr<char\\20\\5b\\5d\\2c\\20std::__2::default_delete<char\\20\\5b\\5d>>>*\\29\\20const\n5666:GrResourceProvider::getExactScratch\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5667:GrResourceProvider::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5668:GrResourceProvider::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20GrColorType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMipLevel\\20const*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5669:GrResourceProvider::createApproxTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5670:GrResourceCache::~GrResourceCache\\28\\29\n5671:GrResourceCache::removeResource\\28GrGpuResource*\\29\n5672:GrResourceCache::processFreedGpuResources\\28\\29\n5673:GrResourceCache::insertResource\\28GrGpuResource*\\29\n5674:GrResourceCache::didChangeBudgetStatus\\28GrGpuResource*\\29\n5675:GrResourceAllocator::~GrResourceAllocator\\28\\29\n5676:GrResourceAllocator::planAssignment\\28\\29\n5677:GrResourceAllocator::expire\\28unsigned\\20int\\29\n5678:GrRenderTask::makeSkippable\\28\\29\n5679:GrRenderTask::isInstantiated\\28\\29\\20const\n5680:GrRenderTarget::GrRenderTarget\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20sk_sp<GrAttachment>\\29\n5681:GrRecordingContextPriv::createDevice\\28skgpu::Budgeted\\2c\\20SkImageInfo\\20const&\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\2c\\20skgpu::ganesh::Device::InitContents\\29\n5682:GrRecordingContext::init\\28\\29\n5683:GrRRectEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRRect\\20const&\\2c\\20GrShaderCaps\\20const&\\29\n5684:GrQuadUtils::TessellationHelper::reset\\28GrQuad\\20const&\\2c\\20GrQuad\\20const*\\29\n5685:GrQuadUtils::TessellationHelper::outset\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuad*\\2c\\20GrQuad*\\29\n5686:GrQuadUtils::TessellationHelper::adjustDegenerateVertices\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuadUtils::TessellationHelper::Vertices*\\29\n5687:GrQuadUtils::TessellationHelper::OutsetRequest::reset\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\2c\\20GrQuad::Type\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n5688:GrQuadUtils::TessellationHelper::EdgeVectors::reset\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuad::Type\\29\n5689:GrQuadUtils::ClipToW0\\28DrawQuad*\\2c\\20DrawQuad*\\29\n5690:GrQuad::bounds\\28\\29\\20const\n5691:GrProxyProvider::~GrProxyProvider\\28\\29\n5692:GrProxyProvider::wrapBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\2c\\20sk_sp<skgpu::RefCntedCallback>\\29\n5693:GrProxyProvider::removeUniqueKeyFromProxy\\28GrTextureProxy*\\29\n5694:GrProxyProvider::processInvalidUniqueKeyImpl\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\2c\\20GrProxyProvider::InvalidateGPUResource\\2c\\20GrProxyProvider::RemoveTableEntry\\29\n5695:GrProxyProvider::createLazyProxy\\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Mipmapped\\2c\\20GrMipmapStatus\\2c\\20GrInternalSurfaceFlags\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5696:GrProxyProvider::contextID\\28\\29\\20const\n5697:GrProxyProvider::adoptUniqueKeyFromSurface\\28GrTextureProxy*\\2c\\20GrSurface\\20const*\\29\n5698:GrPixmapBase<void\\2c\\20GrPixmap>::clip\\28SkISize\\2c\\20SkIPoint*\\29\n5699:GrPixmap::GrPixmap\\28GrImageInfo\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\29\n5700:GrPipeline::GrPipeline\\28GrPipeline::InitArgs\\20const&\\2c\\20sk_sp<GrXferProcessor\\20const>\\2c\\20GrAppliedHardClip\\20const&\\29\n5701:GrPersistentCacheUtils::GetType\\28SkReadBuffer*\\29\n5702:GrPathUtils::QuadUVMatrix::set\\28SkPoint\\20const*\\29\n5703:GrPathTessellationShader::MakeStencilOnlyPipeline\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAAType\\2c\\20GrAppliedHardClip\\20const&\\2c\\20GrPipeline::InputFlags\\29\n5704:GrPaint::setCoverageSetOpXPFactory\\28SkRegion::Op\\2c\\20bool\\29\n5705:GrOvalOpFactory::MakeOvalOp\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrShaderCaps\\20const*\\29\n5706:GrOpsRenderPass::drawIndexed\\28int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20int\\29\n5707:GrOpsRenderPass::drawIndexedInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5708:GrOpsRenderPass::drawIndexPattern\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5709:GrOpFlushState::reset\\28\\29\n5710:GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp\\28GrOp\\20const*\\2c\\20SkRect\\20const&\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\29\n5711:GrOpFlushState::addASAPUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29\n5712:GrOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n5713:GrOp::combineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n5714:GrOnFlushResourceProvider::instantiateProxy\\28GrSurfaceProxy*\\29\n5715:GrMeshDrawTarget::allocMesh\\28\\29\n5716:GrMeshDrawOp::PatternHelper::init\\28GrMeshDrawTarget*\\2c\\20GrPrimitiveType\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5717:GrMeshDrawOp::CombinedQuadCountWillOverflow\\28GrAAType\\2c\\20bool\\2c\\20int\\29\n5718:GrMemoryPool::allocate\\28unsigned\\20long\\29\n5719:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::changed\\28\\29\n5720:GrIndexBufferAllocPool::makeSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n5721:GrIndexBufferAllocPool::makeSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n5722:GrImageInfo::refColorSpace\\28\\29\\20const\n5723:GrImageInfo::minRowBytes\\28\\29\\20const\n5724:GrImageInfo::makeDimensions\\28SkISize\\29\\20const\n5725:GrImageInfo::bpp\\28\\29\\20const\n5726:GrImageInfo::GrImageInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\n5727:GrImageContext::abandonContext\\28\\29\n5728:GrGpuResource::makeBudgeted\\28\\29\n5729:GrGpuResource::getResourceName\\28\\29\\20const\n5730:GrGpuResource::abandon\\28\\29\n5731:GrGpuResource::CreateUniqueID\\28\\29\n5732:GrGpu::~GrGpu\\28\\29\n5733:GrGpu::regenerateMipMapLevels\\28GrTexture*\\29\n5734:GrGpu::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5735:GrGpu::createTextureCommon\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5736:GrGeometryProcessor::AttributeSet::addToKey\\28skgpu::KeyBuilder*\\29\\20const\n5737:GrGLVertexArray::invalidateCachedState\\28\\29\n5738:GrGLTextureParameters::invalidate\\28\\29\n5739:GrGLTexture::MakeWrapped\\28GrGLGpu*\\2c\\20GrMipmapStatus\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5740:GrGLTexture::GrGLTexture\\28GrGLGpu*\\2c\\20skgpu::Budgeted\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5741:GrGLTexture::GrGLTexture\\28GrGLGpu*\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5742:GrGLSLVaryingHandler::getFragDecls\\28SkString*\\2c\\20SkString*\\29\\20const\n5743:GrGLSLVaryingHandler::addAttribute\\28GrShaderVar\\20const&\\29\n5744:GrGLSLUniformHandler::liftUniformToVertexShader\\28GrProcessor\\20const&\\2c\\20SkString\\29\n5745:GrGLSLShaderBuilder::finalize\\28unsigned\\20int\\29\n5746:GrGLSLShaderBuilder::emitFunction\\28char\\20const*\\2c\\20char\\20const*\\29\n5747:GrGLSLShaderBuilder::emitFunctionPrototype\\28char\\20const*\\29\n5748:GrGLSLShaderBuilder::appendTextureLookupAndBlend\\28char\\20const*\\2c\\20SkBlendMode\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n5749:GrGLSLShaderBuilder::appendColorGamutXform\\28SkString*\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29::$_0::operator\\28\\29\\28char\\20const*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20skcms_TFType\\29\\20const\n5750:GrGLSLShaderBuilder::addLayoutQualifier\\28char\\20const*\\2c\\20GrGLSLShaderBuilder::InterfaceQualifier\\29\n5751:GrGLSLShaderBuilder::GrGLSLShaderBuilder\\28GrGLSLProgramBuilder*\\29\n5752:GrGLSLProgramDataManager::setRuntimeEffectUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20SkSpan<GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\20const>\\2c\\20SkSpan<GrGLSLProgramDataManager::Specialized\\20const>\\2c\\20void\\20const*\\29\\20const\n5753:GrGLSLProgramBuilder::~GrGLSLProgramBuilder\\28\\29\n5754:GrGLSLBlend::SetBlendModeUniformData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20SkBlendMode\\29\n5755:GrGLSLBlend::BlendExpression\\28GrProcessor\\20const*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20SkBlendMode\\29\n5756:GrGLRenderTarget::GrGLRenderTarget\\28GrGLGpu*\\2c\\20SkISize\\20const&\\2c\\20GrGLFormat\\2c\\20int\\2c\\20GrGLRenderTarget::IDs\\20const&\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5757:GrGLProgramDataManager::set4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n5758:GrGLProgramDataManager::set2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n5759:GrGLProgramBuilder::uniformHandler\\28\\29\n5760:GrGLProgramBuilder::PrecompileProgram\\28GrDirectContext*\\2c\\20GrGLPrecompiledProgram*\\2c\\20SkData\\20const&\\29::$_0::operator\\28\\29\\28SkSL::ProgramKind\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int\\29\\20const\n5761:GrGLProgramBuilder::CreateProgram\\28GrDirectContext*\\2c\\20GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\2c\\20GrGLPrecompiledProgram\\20const*\\29\n5762:GrGLProgram::~GrGLProgram\\28\\29\n5763:GrGLMakeAssembledWebGLInterface\\28void*\\2c\\20void\\20\\28*\\20\\28*\\29\\28void*\\2c\\20char\\20const*\\29\\29\\28\\29\\29\n5764:GrGLGpu::~GrGLGpu\\28\\29\n5765:GrGLGpu::uploadTexData\\28SkISize\\2c\\20unsigned\\20int\\2c\\20SkIRect\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20GrMipLevel\\20const*\\2c\\20int\\29\n5766:GrGLGpu::uploadCompressedTexData\\28SkTextureCompressionType\\2c\\20GrGLFormat\\2c\\20SkISize\\2c\\20skgpu::Mipmapped\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n5767:GrGLGpu::uploadColorToTex\\28GrGLFormat\\2c\\20SkISize\\2c\\20unsigned\\20int\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20unsigned\\20int\\29\n5768:GrGLGpu::readOrTransferPixelsFrom\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20void*\\2c\\20int\\29\n5769:GrGLGpu::getCompatibleStencilIndex\\28GrGLFormat\\29\n5770:GrGLGpu::deleteSync\\28__GLsync*\\29\n5771:GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29\n5772:GrGLGpu::createCompressedTexture2D\\28SkISize\\2c\\20SkTextureCompressionType\\2c\\20GrGLFormat\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrGLTextureParameters::SamplerOverriddenState*\\29\n5773:GrGLGpu::bindFramebuffer\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n5774:GrGLGpu::ProgramCache::reset\\28\\29\n5775:GrGLGpu::ProgramCache::findOrCreateProgramImpl\\28GrDirectContext*\\2c\\20GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\2c\\20GrThreadSafePipelineBuilder::Stats::ProgramCacheResult*\\29\n5776:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n5777:GrGLFunction<void\\20\\28int\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\29\n5778:GrGLFormatIsCompressed\\28GrGLFormat\\29\n5779:GrGLFinishCallbacks::check\\28\\29\n5780:GrGLContext::~GrGLContext\\28\\29.1\n5781:GrGLContext::~GrGLContext\\28\\29\n5782:GrGLCaps::~GrGLCaps\\28\\29\n5783:GrGLCaps::getTexSubImageExternalFormatAndType\\28GrGLFormat\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n5784:GrGLCaps::getTexSubImageDefaultFormatTypeAndColorType\\28GrGLFormat\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20GrColorType*\\29\\20const\n5785:GrGLCaps::getRenderTargetSampleCount\\28int\\2c\\20GrGLFormat\\29\\20const\n5786:GrGLCaps::formatSupportsTexStorage\\28GrGLFormat\\29\\20const\n5787:GrGLCaps::canCopyAsDraw\\28GrGLFormat\\2c\\20bool\\2c\\20bool\\29\\20const\n5788:GrGLCaps::canCopyAsBlit\\28GrGLFormat\\2c\\20int\\2c\\20GrTextureType\\20const*\\2c\\20GrGLFormat\\2c\\20int\\2c\\20GrTextureType\\20const*\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\\20const\n5789:GrFragmentProcessor::~GrFragmentProcessor\\28\\29\n5790:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29\n5791:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29\n5792:GrFragmentProcessor::ProgramImpl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n5793:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5794:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5795:GrFragmentProcessor::ClampOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5796:GrFixedClip::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n5797:GrFixedClip::getConservativeBounds\\28\\29\\20const\n5798:GrFixedClip::apply\\28GrAppliedHardClip*\\2c\\20SkIRect*\\29\\20const\n5799:GrEagerDynamicVertexAllocator::unlock\\28int\\29\n5800:GrDynamicAtlas::readView\\28GrCaps\\20const&\\29\\20const\n5801:GrDynamicAtlas::instantiate\\28GrOnFlushResourceProvider*\\2c\\20sk_sp<GrTexture>\\29\n5802:GrDriverBugWorkarounds::GrDriverBugWorkarounds\\28\\29\n5803:GrDrawingManager::getLastRenderTask\\28GrSurfaceProxy\\20const*\\29\\20const\n5804:GrDrawingManager::flush\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n5805:GrDrawOpAtlasConfig::atlasDimensions\\28skgpu::MaskFormat\\29\\20const\n5806:GrDrawOpAtlasConfig::GrDrawOpAtlasConfig\\28int\\2c\\20unsigned\\20long\\29\n5807:GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n5808:GrDrawOpAtlas::Make\\28GrProxyProvider*\\2c\\20GrBackendFormat\\20const&\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::AtlasGenerationCounter*\\2c\\20GrDrawOpAtlas::AllowMultitexturing\\2c\\20skgpu::PlotEvictionCallback*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5809:GrDistanceFieldA8TextGeoProc::onTextureSampler\\28int\\29\\20const\n5810:GrDistanceFieldA8TextGeoProc::addNewViews\\28GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\29\n5811:GrDisableColorXPFactory::MakeXferProcessor\\28\\29\n5812:GrDirectContextPriv::validPMUPMConversionExists\\28\\29\n5813:GrDirectContext::~GrDirectContext\\28\\29\n5814:GrDirectContext::onGetSmallPathAtlasMgr\\28\\29\n5815:GrDirectContext::getResourceCacheLimits\\28int*\\2c\\20unsigned\\20long*\\29\\20const\n5816:GrCopyRenderTask::~GrCopyRenderTask\\28\\29\n5817:GrCopyRenderTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n5818:GrCopyBaseMipMapToView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Budgeted\\29\n5819:GrContext_Base::threadSafeProxy\\28\\29\n5820:GrContext_Base::maxSurfaceSampleCountForColorType\\28SkColorType\\29\\20const\n5821:GrContext_Base::backend\\28\\29\\20const\n5822:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\\28\\29\n5823:GrColorInfo::makeColorType\\28GrColorType\\29\\20const\n5824:GrColorInfo::isLinearlyBlended\\28\\29\\20const\n5825:GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis\\28GrProcessorAnalysisColor\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\20const*\\2c\\20int\\29\n5826:GrClip::IsPixelAligned\\28SkRect\\20const&\\29\n5827:GrCaps::surfaceSupportsWritePixels\\28GrSurface\\20const*\\29\\20const\n5828:GrCaps::getDstSampleFlagsForProxy\\28GrRenderTargetProxy\\20const*\\2c\\20bool\\29\\20const\n5829:GrCPixmap::GrCPixmap\\28GrPixmap\\20const&\\29\n5830:GrBufferAllocPool::makeSpaceAtLeast\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\2c\\20unsigned\\20long*\\29\n5831:GrBufferAllocPool::createBlock\\28unsigned\\20long\\29\n5832:GrBufferAllocPool::CpuBufferCache::makeBuffer\\28unsigned\\20long\\2c\\20bool\\29\n5833:GrBlurUtils::draw_shape_with_mask_filter\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkMaskFilterBase\\20const*\\2c\\20GrStyledShape\\20const&\\29\n5834:GrBlurUtils::draw_mask\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrPaint&&\\2c\\20GrSurfaceProxyView\\29\n5835:GrBlurUtils::create_integral_table\\28float\\2c\\20SkBitmap*\\29\n5836:GrBlurUtils::convolve_gaussian\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\29\n5837:GrBlurUtils::\\28anonymous\\20namespace\\29::make_texture_effect\\28GrCaps\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20GrSamplerState\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\20const&\\29\n5838:GrBitmapTextGeoProc::addNewViews\\28GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\29\n5839:GrBicubicEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n5840:GrBicubicEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n5841:GrBackendTextures::MakeGL\\28int\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrGLTextureInfo\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5842:GrBackendTexture::operator=\\28GrBackendTexture\\20const&\\29\n5843:GrBackendRenderTargets::MakeGL\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20GrGLFramebufferInfo\\20const&\\29\n5844:GrBackendRenderTargets::GetGLFramebufferInfo\\28GrBackendRenderTarget\\20const&\\2c\\20GrGLFramebufferInfo*\\29\n5845:GrBackendRenderTarget::~GrBackendRenderTarget\\28\\29\n5846:GrBackendRenderTarget::isProtected\\28\\29\\20const\n5847:GrBackendFormatBytesPerBlock\\28GrBackendFormat\\20const&\\29\n5848:GrBackendFormat::makeTexture2D\\28\\29\\20const\n5849:GrBackendFormat::isMockStencilFormat\\28\\29\\20const\n5850:GrBackendFormat::MakeMock\\28GrColorType\\2c\\20SkTextureCompressionType\\2c\\20bool\\29\n5851:GrAuditTrail::opsCombined\\28GrOp\\20const*\\2c\\20GrOp\\20const*\\29\n5852:GrAttachment::ComputeSharedAttachmentUniqueKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20GrAttachment::UsageFlags\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\2c\\20skgpu::UniqueKey*\\29\n5853:GrAtlasManager::~GrAtlasManager\\28\\29\n5854:GrAtlasManager::getViews\\28skgpu::MaskFormat\\2c\\20unsigned\\20int*\\29\n5855:GrAtlasManager::freeAll\\28\\29\n5856:GrAATriangulator::makeEvent\\28GrAATriangulator::SSEdge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrAATriangulator::SSEdge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrAATriangulator::EventList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5857:GrAATriangulator::collapseOverlapRegions\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\2c\\20GrAATriangulator::EventComparator\\29\n5858:GrAAConvexTessellator::quadTo\\28SkPoint\\20const*\\29\n5859:GetVariationDesignPosition\\28AutoFTAccess&\\2c\\20SkFontArguments::VariationPosition::Coordinate*\\2c\\20int\\29\n5860:GetShapedLines\\28skia::textlayout::Paragraph&\\29\n5861:GetLargeValue\n5862:FontMgrRunIterator::endOfCurrentRun\\28\\29\\20const\n5863:FontMgrRunIterator::atEnd\\28\\29\\20const\n5864:FinishRow\n5865:FindUndone\\28SkOpContourHead*\\29\n5866:FT_Stream_Close\n5867:FT_Sfnt_Table_Info\n5868:FT_Render_Glyph_Internal\n5869:FT_Remove_Module\n5870:FT_Outline_Get_Orientation\n5871:FT_Outline_EmboldenXY\n5872:FT_New_Library\n5873:FT_New_GlyphSlot\n5874:FT_List_Iterate\n5875:FT_List_Find\n5876:FT_List_Finalize\n5877:FT_GlyphLoader_CheckSubGlyphs\n5878:FT_Get_Postscript_Name\n5879:FT_Get_Paint_Layers\n5880:FT_Get_PS_Font_Info\n5881:FT_Get_Kerning\n5882:FT_Get_Glyph_Name\n5883:FT_Get_FSType_Flags\n5884:FT_Get_Colorline_Stops\n5885:FT_Get_Color_Glyph_ClipBox\n5886:FT_Bitmap_Convert\n5887:FT_Add_Default_Modules\n5888:EllipticalRRectOp::~EllipticalRRectOp\\28\\29.1\n5889:EllipticalRRectOp::~EllipticalRRectOp\\28\\29\n5890:EllipticalRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n5891:EllipticalRRectOp::RRect&\\20skia_private::TArray<EllipticalRRectOp::RRect\\2c\\20true>::emplace_back<EllipticalRRectOp::RRect>\\28EllipticalRRectOp::RRect&&\\29\n5892:EllipticalRRectOp::EllipticalRRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint\\2c\\20bool\\29\n5893:EllipseOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n5894:EllipseOp::EllipseOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20EllipseOp::DeviceSpaceParams\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n5895:EllipseGeometryProcessor::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n5896:DIEllipseOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n5897:DIEllipseOp::DIEllipseOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20DIEllipseOp::DeviceSpaceParams\\20const&\\2c\\20SkMatrix\\20const&\\29\n5898:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrXferProcessor\\20const&\\29\n5899:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::emitBlendCodeForDstRead\\28GrGLSLXPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrXferProcessor\\20const&\\29\n5900:Cr_z_deflateReset\n5901:Cr_z_deflate\n5902:Cr_z_crc32_z\n5903:CoverageSetOpXP::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n5904:CircularRRectOp::~CircularRRectOp\\28\\29.1\n5905:CircularRRectOp::~CircularRRectOp\\28\\29\n5906:CircularRRectOp::CircularRRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n5907:CircleOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20GrStyle\\20const&\\2c\\20CircleOp::ArcParams\\20const*\\29\n5908:CircleOp::CircleOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20GrStyle\\20const&\\2c\\20CircleOp::ArcParams\\20const*\\29\n5909:CircleGeometryProcessor::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n5910:CheckDecBuffer\n5911:CFF::path_procs_t<cff1_path_procs_extents_t\\2c\\20CFF::cff1_cs_interp_env_t\\2c\\20cff1_extents_param_t>::rlineto\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\29\n5912:CFF::dict_interpreter_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20CFF::interp_env_t<CFF::number_t>>::interpret\\28CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>&\\29\n5913:CFF::cff2_cs_opset_t<cff2_cs_opset_extents_t\\2c\\20cff2_extents_param_t\\2c\\20CFF::number_t\\2c\\20cff2_path_procs_extents_t>::process_blend\\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\29\n5914:CFF::FDSelect3_4<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5915:CFF::Charset::get_sid\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20CFF::code_pair_t*\\29\\20const\n5916:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::get_size\\28\\29\\20const\n5917:CFF::CFF2FDSelect::get_fd\\28unsigned\\20int\\29\\20const\n5918:ButtCapDashedCircleOp::ButtCapDashedCircleOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5919:BuildHuffmanTable\n5920:AsWinding\\28SkPath\\20const&\\2c\\20SkPath*\\29\n5921:AngleWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int*\\2c\\20bool*\\29\n5922:AddIntersectTs\\28SkOpContour*\\2c\\20SkOpContour*\\2c\\20SkOpCoincidence*\\29\n5923:ActiveEdgeList::replace\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n5924:ActiveEdgeList::remove\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n5925:ActiveEdgeList::insert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n5926:AAT::hb_aat_apply_context_t::return_t\\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<AAT::hb_aat_apply_context_t>\\28AAT::hb_aat_apply_context_t*\\29\\20const\n5927:AAT::hb_aat_apply_context_t::return_t\\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<AAT::hb_aat_apply_context_t>\\28AAT::hb_aat_apply_context_t*\\29\\20const\n5928:AAT::TrackData::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5929:AAT::TrackData::get_tracking\\28void\\20const*\\2c\\20float\\29\\20const\n5930:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n5931:AAT::StateTable<AAT::ExtendedTypes\\2c\\20AAT::LigatureEntry<true>::EntryData>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n5932:AAT::StateTable<AAT::ExtendedTypes\\2c\\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n5933:AAT::RearrangementSubtable<AAT::ExtendedTypes>::driver_context_t::transition\\28AAT::StateTableDriver<AAT::ExtendedTypes\\2c\\20void>*\\2c\\20AAT::Entry<void>\\20const&\\29\n5934:AAT::NoncontextualSubtable<AAT::ExtendedTypes>::apply\\28AAT::hb_aat_apply_context_t*\\29\\20const\n5935:AAT::Lookup<OT::IntType<unsigned\\20int\\2c\\204u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5936:AAT::Lookup<OT::IntType<unsigned\\20int\\2c\\204u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n5937:AAT::InsertionSubtable<AAT::ExtendedTypes>::driver_context_t::transition\\28AAT::StateTableDriver<AAT::ExtendedTypes\\2c\\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>*\\2c\\20AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>\\20const&\\29\n5938:ycck_cmyk_convert\n5939:ycc_rgb_convert\n5940:ycc_rgb565_convert\n5941:ycc_rgb565D_convert\n5942:xyzd50_to_lab\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n5943:xyzd50_to_hcl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n5944:wuffs_gif__decoder__tell_me_more\n5945:wuffs_gif__decoder__set_report_metadata\n5946:wuffs_gif__decoder__num_decoded_frame_configs\n5947:wuffs_base__pixel_swizzler__xxxxxxxx__index_binary_alpha__src_over\n5948:wuffs_base__pixel_swizzler__xxxxxxxx__index__src\n5949:wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over\n5950:wuffs_base__pixel_swizzler__xxxx__index__src\n5951:wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over\n5952:wuffs_base__pixel_swizzler__xxx__index__src\n5953:wuffs_base__pixel_swizzler__transparent_black_src_over\n5954:wuffs_base__pixel_swizzler__transparent_black_src\n5955:wuffs_base__pixel_swizzler__copy_1_1\n5956:wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over\n5957:wuffs_base__pixel_swizzler__bgr_565__index__src\n5958:webgl_get_gl_proc\\28void*\\2c\\20char\\20const*\\29\n5959:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\\20const*&\\2c\\20int>\\28char\\20const*&\\2c\\20int&&\\29\n5960:void\\20std::__2::vector<SkJpegMetadataDecoder::Segment\\2c\\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>::__emplace_back_slow_path<unsigned\\20char\\20const&\\2c\\20sk_sp<SkData>\\20const&>\\28unsigned\\20char\\20const&\\2c\\20sk_sp<SkData>\\20const&\\29\n5961:void\\20std::__2::__call_once_proxy\\5babi:v160004\\5d<std::__2::tuple<void\\20\\28&\\29\\28\\29>>\\28void*\\29\n5962:void\\20std::__2::__call_once_proxy\\5babi:v160004\\5d<std::__2::tuple<std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&>>\\28void*\\29\n5963:void\\20mergeT<unsigned\\20short>\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20void*\\29\n5964:void\\20mergeT<unsigned\\20char>\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20void*\\29\n5965:void\\20emscripten::internal::raw_destructor<sk_sp<SkTextBlob>>\\28sk_sp<SkTextBlob>*\\29\n5966:void\\20emscripten::internal::raw_destructor<SkVertices::Builder>\\28SkVertices::Builder*\\29\n5967:void\\20emscripten::internal::raw_destructor<SkRuntimeEffect::TracedShader>\\28SkRuntimeEffect::TracedShader*\\29\n5968:void\\20emscripten::internal::raw_destructor<SkPictureRecorder>\\28SkPictureRecorder*\\29\n5969:void\\20emscripten::internal::raw_destructor<SkPath>\\28SkPath*\\29\n5970:void\\20emscripten::internal::raw_destructor<SkPaint>\\28SkPaint*\\29\n5971:void\\20emscripten::internal::raw_destructor<SkContourMeasureIter>\\28SkContourMeasureIter*\\29\n5972:void\\20emscripten::internal::raw_destructor<SimpleImageInfo>\\28SimpleImageInfo*\\29\n5973:void\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleTextStyle>::setWire<SimpleParagraphStyle>\\28SimpleTextStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle&\\2c\\20SimpleTextStyle*\\29\n5974:void\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleStrutStyle>::setWire<SimpleParagraphStyle>\\28SimpleStrutStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle&\\2c\\20SimpleStrutStyle*\\29\n5975:void\\20emscripten::internal::MemberAccess<SimpleImageInfo\\2c\\20sk_sp<SkColorSpace>>::setWire<SimpleImageInfo>\\28sk_sp<SkColorSpace>\\20SimpleImageInfo::*\\20const&\\2c\\20SimpleImageInfo&\\2c\\20sk_sp<SkColorSpace>*\\29\n5976:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::TypefaceFontProvider>\\28skia::textlayout::TypefaceFontProvider*\\29\n5977:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::ParagraphBuilderImpl>\\28skia::textlayout::ParagraphBuilderImpl*\\29\n5978:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::Paragraph>\\28skia::textlayout::Paragraph*\\29\n5979:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::FontCollection>\\28skia::textlayout::FontCollection*\\29\n5980:void\\20const*\\20emscripten::internal::getActualType<SkVertices>\\28SkVertices*\\29\n5981:void\\20const*\\20emscripten::internal::getActualType<SkVertices::Builder>\\28SkVertices::Builder*\\29\n5982:void\\20const*\\20emscripten::internal::getActualType<SkTypeface>\\28SkTypeface*\\29\n5983:void\\20const*\\20emscripten::internal::getActualType<SkTextBlob>\\28SkTextBlob*\\29\n5984:void\\20const*\\20emscripten::internal::getActualType<SkSurface>\\28SkSurface*\\29\n5985:void\\20const*\\20emscripten::internal::getActualType<SkShader>\\28SkShader*\\29\n5986:void\\20const*\\20emscripten::internal::getActualType<SkSL::DebugTrace>\\28SkSL::DebugTrace*\\29\n5987:void\\20const*\\20emscripten::internal::getActualType<SkRuntimeEffect>\\28SkRuntimeEffect*\\29\n5988:void\\20const*\\20emscripten::internal::getActualType<SkPictureRecorder>\\28SkPictureRecorder*\\29\n5989:void\\20const*\\20emscripten::internal::getActualType<SkPicture>\\28SkPicture*\\29\n5990:void\\20const*\\20emscripten::internal::getActualType<SkPathEffect>\\28SkPathEffect*\\29\n5991:void\\20const*\\20emscripten::internal::getActualType<SkPath>\\28SkPath*\\29\n5992:void\\20const*\\20emscripten::internal::getActualType<SkPaint>\\28SkPaint*\\29\n5993:void\\20const*\\20emscripten::internal::getActualType<SkMaskFilter>\\28SkMaskFilter*\\29\n5994:void\\20const*\\20emscripten::internal::getActualType<SkImageFilter>\\28SkImageFilter*\\29\n5995:void\\20const*\\20emscripten::internal::getActualType<SkImage>\\28SkImage*\\29\n5996:void\\20const*\\20emscripten::internal::getActualType<SkFontMgr>\\28SkFontMgr*\\29\n5997:void\\20const*\\20emscripten::internal::getActualType<SkFont>\\28SkFont*\\29\n5998:void\\20const*\\20emscripten::internal::getActualType<SkContourMeasureIter>\\28SkContourMeasureIter*\\29\n5999:void\\20const*\\20emscripten::internal::getActualType<SkContourMeasure>\\28SkContourMeasure*\\29\n6000:void\\20const*\\20emscripten::internal::getActualType<SkColorSpace>\\28SkColorSpace*\\29\n6001:void\\20const*\\20emscripten::internal::getActualType<SkColorFilter>\\28SkColorFilter*\\29\n6002:void\\20const*\\20emscripten::internal::getActualType<SkCanvas>\\28SkCanvas*\\29\n6003:void\\20const*\\20emscripten::internal::getActualType<SkBlender>\\28SkBlender*\\29\n6004:void\\20const*\\20emscripten::internal::getActualType<SkAnimatedImage>\\28SkAnimatedImage*\\29\n6005:void\\20const*\\20emscripten::internal::getActualType<GrDirectContext>\\28GrDirectContext*\\29\n6006:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6007:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6008:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6009:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6010:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6011:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6012:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6013:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6014:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6015:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6016:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6017:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6018:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6019:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6020:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6021:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6022:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6023:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6024:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6025:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6026:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6027:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6028:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6029:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6030:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6031:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6032:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6033:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6034:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6035:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6036:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6037:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6038:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6039:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6040:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6041:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6042:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6043:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6044:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6045:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6046:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6047:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6048:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6049:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6050:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6051:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6052:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6053:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6054:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6055:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6056:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6057:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6058:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6059:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6060:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6061:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6062:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6063:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6064:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6065:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6066:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6067:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6068:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6069:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6070:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6071:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6072:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6073:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6074:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6075:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6076:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6077:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6078:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6079:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6080:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6081:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6082:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6083:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6084:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6085:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6086:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6087:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6088:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6089:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6090:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6091:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6092:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6093:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6094:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6095:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6096:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6097:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6098:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6099:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6100:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6101:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6102:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6103:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6104:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6105:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6106:void\\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6107:void\\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6108:void\\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6109:void\\20SkSwizzler::SkipLeading8888ZerosThen<&sample4\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6110:void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6111:void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6112:void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6113:void\\20SkSwizzler::SkipLeading8888ZerosThen<&copy\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6114:virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n6115:virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n6116:virtual\\20thunk\\20to\\20std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29.1\n6117:virtual\\20thunk\\20to\\20std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29\n6118:virtual\\20thunk\\20to\\20std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.1\n6119:virtual\\20thunk\\20to\\20std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29\n6120:virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n6121:virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n6122:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n6123:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n6124:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n6125:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n6126:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n6127:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n6128:virtual\\20thunk\\20to\\20GrTextureProxy::~GrTextureProxy\\28\\29.1\n6129:virtual\\20thunk\\20to\\20GrTextureProxy::~GrTextureProxy\\28\\29\n6130:virtual\\20thunk\\20to\\20GrTextureProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n6131:virtual\\20thunk\\20to\\20GrTextureProxy::instantiate\\28GrResourceProvider*\\29\n6132:virtual\\20thunk\\20to\\20GrTextureProxy::getUniqueKey\\28\\29\\20const\n6133:virtual\\20thunk\\20to\\20GrTextureProxy::createSurface\\28GrResourceProvider*\\29\\20const\n6134:virtual\\20thunk\\20to\\20GrTextureProxy::callbackDesc\\28\\29\\20const\n6135:virtual\\20thunk\\20to\\20GrTextureProxy::asTextureProxy\\28\\29\\20const\n6136:virtual\\20thunk\\20to\\20GrTextureProxy::asTextureProxy\\28\\29\n6137:virtual\\20thunk\\20to\\20GrTexture::onGpuMemorySize\\28\\29\\20const\n6138:virtual\\20thunk\\20to\\20GrTexture::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n6139:virtual\\20thunk\\20to\\20GrTexture::asTexture\\28\\29\\20const\n6140:virtual\\20thunk\\20to\\20GrTexture::asTexture\\28\\29\n6141:virtual\\20thunk\\20to\\20GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.1\n6142:virtual\\20thunk\\20to\\20GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29\n6143:virtual\\20thunk\\20to\\20GrRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n6144:virtual\\20thunk\\20to\\20GrRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n6145:virtual\\20thunk\\20to\\20GrRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n6146:virtual\\20thunk\\20to\\20GrRenderTargetProxy::callbackDesc\\28\\29\\20const\n6147:virtual\\20thunk\\20to\\20GrRenderTargetProxy::asRenderTargetProxy\\28\\29\\20const\n6148:virtual\\20thunk\\20to\\20GrRenderTargetProxy::asRenderTargetProxy\\28\\29\n6149:virtual\\20thunk\\20to\\20GrRenderTarget::onRelease\\28\\29\n6150:virtual\\20thunk\\20to\\20GrRenderTarget::onAbandon\\28\\29\n6151:virtual\\20thunk\\20to\\20GrRenderTarget::asRenderTarget\\28\\29\\20const\n6152:virtual\\20thunk\\20to\\20GrRenderTarget::asRenderTarget\\28\\29\n6153:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n6154:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n6155:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onRelease\\28\\29\n6156:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n6157:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onAbandon\\28\\29\n6158:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n6159:virtual\\20thunk\\20to\\20GrGLTexture::~GrGLTexture\\28\\29.1\n6160:virtual\\20thunk\\20to\\20GrGLTexture::~GrGLTexture\\28\\29\n6161:virtual\\20thunk\\20to\\20GrGLTexture::onRelease\\28\\29\n6162:virtual\\20thunk\\20to\\20GrGLTexture::onAbandon\\28\\29\n6163:virtual\\20thunk\\20to\\20GrGLTexture::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n6164:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n6165:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n6166:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::onFinalize\\28\\29\n6167:virtual\\20thunk\\20to\\20GrGLRenderTarget::~GrGLRenderTarget\\28\\29.1\n6168:virtual\\20thunk\\20to\\20GrGLRenderTarget::~GrGLRenderTarget\\28\\29\n6169:virtual\\20thunk\\20to\\20GrGLRenderTarget::onRelease\\28\\29\n6170:virtual\\20thunk\\20to\\20GrGLRenderTarget::onGpuMemorySize\\28\\29\\20const\n6171:virtual\\20thunk\\20to\\20GrGLRenderTarget::onAbandon\\28\\29\n6172:virtual\\20thunk\\20to\\20GrGLRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n6173:virtual\\20thunk\\20to\\20GrGLRenderTarget::backendFormat\\28\\29\\20const\n6174:utf8TextMapOffsetToNative\\28UText\\20const*\\29\n6175:utf8TextMapIndexToUTF16\\28UText\\20const*\\2c\\20long\\20long\\29\n6176:utf8TextLength\\28UText*\\29\n6177:utf8TextExtract\\28UText*\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20char16_t*\\2c\\20int\\2c\\20UErrorCode*\\29\n6178:utf8TextClone\\28UText*\\2c\\20UText\\20const*\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n6179:utext_openUTF8_73\n6180:ures_loc_resetLocales\\28UEnumeration*\\2c\\20UErrorCode*\\29\n6181:ures_loc_nextLocale\\28UEnumeration*\\2c\\20int*\\2c\\20UErrorCode*\\29\n6182:ures_loc_countLocales\\28UEnumeration*\\2c\\20UErrorCode*\\29\n6183:ures_loc_closeLocales\\28UEnumeration*\\29\n6184:ures_cleanup\\28\\29\n6185:unistrTextReplace\\28UText*\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20UErrorCode*\\29\n6186:unistrTextLength\\28UText*\\29\n6187:unistrTextExtract\\28UText*\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20char16_t*\\2c\\20int\\2c\\20UErrorCode*\\29\n6188:unistrTextCopy\\28UText*\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n6189:unistrTextClose\\28UText*\\29\n6190:unistrTextClone\\28UText*\\2c\\20UText\\20const*\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n6191:unistrTextAccess\\28UText*\\2c\\20long\\20long\\2c\\20signed\\20char\\29\n6192:uloc_kw_resetKeywords\\28UEnumeration*\\2c\\20UErrorCode*\\29\n6193:uloc_kw_nextKeyword\\28UEnumeration*\\2c\\20int*\\2c\\20UErrorCode*\\29\n6194:uloc_kw_countKeywords\\28UEnumeration*\\2c\\20UErrorCode*\\29\n6195:uloc_kw_closeKeywords\\28UEnumeration*\\29\n6196:uloc_key_type_cleanup\\28\\29\n6197:uloc_getDefault_73\n6198:uhash_hashUnicodeString_73\n6199:uhash_hashUChars_73\n6200:uhash_hashIChars_73\n6201:uhash_deleteHashtable_73\n6202:uhash_compareUnicodeString_73\n6203:uhash_compareUChars_73\n6204:uhash_compareLong_73\n6205:uhash_compareIChars_73\n6206:uenum_unextDefault_73\n6207:udata_cleanup\\28\\29\n6208:ucstrTextLength\\28UText*\\29\n6209:ucstrTextExtract\\28UText*\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20char16_t*\\2c\\20int\\2c\\20UErrorCode*\\29\n6210:ucstrTextClone\\28UText*\\2c\\20UText\\20const*\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n6211:ubrk_setUText_73\n6212:ubrk_setText_73\n6213:ubrk_preceding_73\n6214:ubrk_open_73\n6215:ubrk_next_73\n6216:ubrk_getRuleStatus_73\n6217:ubrk_following_73\n6218:ubrk_first_73\n6219:ubrk_current_73\n6220:ubidi_reorderVisual_73\n6221:ubidi_openSized_73\n6222:ubidi_getLevelAt_73\n6223:ubidi_getLength_73\n6224:ubidi_getDirection_73\n6225:u_strToUpper_73\n6226:u_isspace_73\n6227:u_iscntrl_73\n6228:u_isWhitespace_73\n6229:u_errorName_73\n6230:tt_vadvance_adjust\n6231:tt_slot_init\n6232:tt_size_select\n6233:tt_size_reset_iterator\n6234:tt_size_request\n6235:tt_size_init\n6236:tt_size_done\n6237:tt_sbit_decoder_load_png\n6238:tt_sbit_decoder_load_compound\n6239:tt_sbit_decoder_load_byte_aligned\n6240:tt_sbit_decoder_load_bit_aligned\n6241:tt_property_set\n6242:tt_property_get\n6243:tt_name_ascii_from_utf16\n6244:tt_name_ascii_from_other\n6245:tt_hadvance_adjust\n6246:tt_glyph_load\n6247:tt_get_var_blend\n6248:tt_get_interface\n6249:tt_get_glyph_name\n6250:tt_get_cmap_info\n6251:tt_get_advances\n6252:tt_face_set_sbit_strike\n6253:tt_face_load_strike_metrics\n6254:tt_face_load_sbit_image\n6255:tt_face_load_sbit\n6256:tt_face_load_post\n6257:tt_face_load_pclt\n6258:tt_face_load_os2\n6259:tt_face_load_name\n6260:tt_face_load_maxp\n6261:tt_face_load_kern\n6262:tt_face_load_hmtx\n6263:tt_face_load_hhea\n6264:tt_face_load_head\n6265:tt_face_load_gasp\n6266:tt_face_load_font_dir\n6267:tt_face_load_cpal\n6268:tt_face_load_colr\n6269:tt_face_load_cmap\n6270:tt_face_load_bhed\n6271:tt_face_load_any\n6272:tt_face_init\n6273:tt_face_goto_table\n6274:tt_face_get_paint_layers\n6275:tt_face_get_paint\n6276:tt_face_get_kerning\n6277:tt_face_get_colr_layer\n6278:tt_face_get_colr_glyph_paint\n6279:tt_face_get_colorline_stops\n6280:tt_face_get_color_glyph_clipbox\n6281:tt_face_free_sbit\n6282:tt_face_free_ps_names\n6283:tt_face_free_name\n6284:tt_face_free_cpal\n6285:tt_face_free_colr\n6286:tt_face_done\n6287:tt_face_colr_blend_layer\n6288:tt_driver_init\n6289:tt_cvt_ready_iterator\n6290:tt_cmap_unicode_init\n6291:tt_cmap_unicode_char_next\n6292:tt_cmap_unicode_char_index\n6293:tt_cmap_init\n6294:tt_cmap8_validate\n6295:tt_cmap8_get_info\n6296:tt_cmap8_char_next\n6297:tt_cmap8_char_index\n6298:tt_cmap6_validate\n6299:tt_cmap6_get_info\n6300:tt_cmap6_char_next\n6301:tt_cmap6_char_index\n6302:tt_cmap4_validate\n6303:tt_cmap4_init\n6304:tt_cmap4_get_info\n6305:tt_cmap4_char_next\n6306:tt_cmap4_char_index\n6307:tt_cmap2_validate\n6308:tt_cmap2_get_info\n6309:tt_cmap2_char_next\n6310:tt_cmap2_char_index\n6311:tt_cmap14_variants\n6312:tt_cmap14_variant_chars\n6313:tt_cmap14_validate\n6314:tt_cmap14_init\n6315:tt_cmap14_get_info\n6316:tt_cmap14_done\n6317:tt_cmap14_char_variants\n6318:tt_cmap14_char_var_isdefault\n6319:tt_cmap14_char_var_index\n6320:tt_cmap14_char_next\n6321:tt_cmap13_validate\n6322:tt_cmap13_get_info\n6323:tt_cmap13_char_next\n6324:tt_cmap13_char_index\n6325:tt_cmap12_validate\n6326:tt_cmap12_get_info\n6327:tt_cmap12_char_next\n6328:tt_cmap12_char_index\n6329:tt_cmap10_validate\n6330:tt_cmap10_get_info\n6331:tt_cmap10_char_next\n6332:tt_cmap10_char_index\n6333:tt_cmap0_validate\n6334:tt_cmap0_get_info\n6335:tt_cmap0_char_next\n6336:tt_cmap0_char_index\n6337:transform_scanline_rgbA\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6338:transform_scanline_memcpy\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6339:transform_scanline_bgra_1010102_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6340:transform_scanline_bgra_1010102\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6341:transform_scanline_bgr_101010x_xr\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6342:transform_scanline_bgr_101010x\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6343:transform_scanline_bgrA\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6344:transform_scanline_RGBX\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6345:transform_scanline_F32_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6346:transform_scanline_F32\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6347:transform_scanline_F16_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6348:transform_scanline_F16\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6349:transform_scanline_BGRX\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6350:transform_scanline_BGRA\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6351:transform_scanline_A8_to_GrayAlpha\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6352:transform_scanline_565\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6353:transform_scanline_444\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6354:transform_scanline_4444\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6355:transform_scanline_101010x\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6356:transform_scanline_1010102_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6357:transform_scanline_1010102\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n6358:t2_hints_stems\n6359:t2_hints_open\n6360:t1_make_subfont\n6361:t1_hints_stem\n6362:t1_hints_open\n6363:t1_decrypt\n6364:t1_decoder_parse_metrics\n6365:t1_decoder_init\n6366:t1_decoder_done\n6367:t1_cmap_unicode_init\n6368:t1_cmap_unicode_char_next\n6369:t1_cmap_unicode_char_index\n6370:t1_cmap_std_done\n6371:t1_cmap_std_char_next\n6372:t1_cmap_std_char_index\n6373:t1_cmap_standard_init\n6374:t1_cmap_expert_init\n6375:t1_cmap_custom_init\n6376:t1_cmap_custom_done\n6377:t1_cmap_custom_char_next\n6378:t1_cmap_custom_char_index\n6379:t1_builder_start_point\n6380:t1_builder_init\n6381:t1_builder_add_point1\n6382:t1_builder_add_point\n6383:t1_builder_add_contour\n6384:swizzle_small_index_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6385:swizzle_small_index_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6386:swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6387:swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6388:swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6389:swizzle_rgba16_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6390:swizzle_rgba16_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6391:swizzle_rgba16_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6392:swizzle_rgba16_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6393:swizzle_rgb_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6394:swizzle_rgb_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6395:swizzle_rgb_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6396:swizzle_rgb16_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6397:swizzle_rgb16_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6398:swizzle_rgb16_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6399:swizzle_mask32_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6400:swizzle_mask32_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6401:swizzle_mask32_to_rgba_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6402:swizzle_mask32_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6403:swizzle_mask32_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6404:swizzle_mask32_to_bgra_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6405:swizzle_mask32_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6406:swizzle_mask24_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6407:swizzle_mask24_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6408:swizzle_mask24_to_rgba_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6409:swizzle_mask24_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6410:swizzle_mask24_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6411:swizzle_mask24_to_bgra_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6412:swizzle_mask24_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6413:swizzle_mask16_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6414:swizzle_mask16_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6415:swizzle_mask16_to_rgba_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6416:swizzle_mask16_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6417:swizzle_mask16_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6418:swizzle_mask16_to_bgra_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6419:swizzle_mask16_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6420:swizzle_index_to_n32_skipZ\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6421:swizzle_index_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6422:swizzle_index_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6423:swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6424:swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6425:swizzle_grayalpha_to_a8\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6426:swizzle_gray_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6427:swizzle_gray_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6428:swizzle_cmyk_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6429:swizzle_cmyk_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6430:swizzle_cmyk_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6431:swizzle_bit_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6432:swizzle_bit_to_grayscale\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6433:swizzle_bit_to_f16\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6434:swizzle_bit_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6435:swizzle_bgr_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6436:string_read\n6437:std::exception::what\\28\\29\\20const\n6438:std::bad_variant_access::what\\28\\29\\20const\n6439:std::bad_optional_access::what\\28\\29\\20const\n6440:std::bad_array_new_length::what\\28\\29\\20const\n6441:std::bad_alloc::what\\28\\29\\20const\n6442:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n6443:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\\5babi:v160004\\5d\\28std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>&&\\29\n6444:std::__2::time_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n6445:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n6446:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_year\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6447:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_weekday\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6448:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_time\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6449:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_monthname\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6450:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_date\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6451:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\2c\\20char\\29\\20const\n6452:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_year\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6453:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_weekday\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6454:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_time\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6455:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_monthname\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6456:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_date\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n6457:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\2c\\20char\\29\\20const\n6458:std::__2::numpunct<wchar_t>::~numpunct\\28\\29.1\n6459:std::__2::numpunct<wchar_t>::do_truename\\28\\29\\20const\n6460:std::__2::numpunct<wchar_t>::do_grouping\\28\\29\\20const\n6461:std::__2::numpunct<wchar_t>::do_falsename\\28\\29\\20const\n6462:std::__2::numpunct<char>::~numpunct\\28\\29.1\n6463:std::__2::numpunct<char>::do_truename\\28\\29\\20const\n6464:std::__2::numpunct<char>::do_thousands_sep\\28\\29\\20const\n6465:std::__2::numpunct<char>::do_grouping\\28\\29\\20const\n6466:std::__2::numpunct<char>::do_falsename\\28\\29\\20const\n6467:std::__2::numpunct<char>::do_decimal_point\\28\\29\\20const\n6468:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20void\\20const*\\29\\20const\n6469:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20unsigned\\20long\\29\\20const\n6470:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20unsigned\\20long\\20long\\29\\20const\n6471:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\29\\20const\n6472:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20long\\29\\20const\n6473:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20double\\29\\20const\n6474:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20double\\29\\20const\n6475:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20bool\\29\\20const\n6476:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20void\\20const*\\29\\20const\n6477:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20unsigned\\20long\\29\\20const\n6478:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20unsigned\\20long\\20long\\29\\20const\n6479:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\29\\20const\n6480:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20long\\29\\20const\n6481:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20double\\29\\20const\n6482:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20double\\29\\20const\n6483:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20bool\\29\\20const\n6484:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20void*&\\29\\20const\n6485:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20short&\\29\\20const\n6486:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20long\\20long&\\29\\20const\n6487:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20long&\\29\\20const\n6488:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n6489:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long&\\29\\20const\n6490:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20float&\\29\\20const\n6491:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20double&\\29\\20const\n6492:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20bool&\\29\\20const\n6493:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20void*&\\29\\20const\n6494:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20short&\\29\\20const\n6495:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20long\\20long&\\29\\20const\n6496:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20long&\\29\\20const\n6497:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n6498:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long&\\29\\20const\n6499:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20float&\\29\\20const\n6500:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20double&\\29\\20const\n6501:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20bool&\\29\\20const\n6502:std::__2::money_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\29\\20const\n6503:std::__2::money_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20double\\29\\20const\n6504:std::__2::money_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\\20const\n6505:std::__2::money_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20double\\29\\20const\n6506:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\29\\20const\n6507:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n6508:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\29\\20const\n6509:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n6510:std::__2::messages<wchar_t>::do_get\\28long\\2c\\20int\\2c\\20int\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\29\\20const\n6511:std::__2::messages<char>::do_get\\28long\\2c\\20int\\2c\\20int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\\20const\n6512:std::__2::locale::id::__init\\28\\29\n6513:std::__2::locale::__imp::~__imp\\28\\29.1\n6514:std::__2::ios_base::~ios_base\\28\\29.1\n6515:std::__2::ctype<wchar_t>::do_widen\\28char\\20const*\\2c\\20char\\20const*\\2c\\20wchar_t*\\29\\20const\n6516:std::__2::ctype<wchar_t>::do_toupper\\28wchar_t\\29\\20const\n6517:std::__2::ctype<wchar_t>::do_toupper\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n6518:std::__2::ctype<wchar_t>::do_tolower\\28wchar_t\\29\\20const\n6519:std::__2::ctype<wchar_t>::do_tolower\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n6520:std::__2::ctype<wchar_t>::do_scan_not\\28unsigned\\20long\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n6521:std::__2::ctype<wchar_t>::do_scan_is\\28unsigned\\20long\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n6522:std::__2::ctype<wchar_t>::do_narrow\\28wchar_t\\2c\\20char\\29\\20const\n6523:std::__2::ctype<wchar_t>::do_narrow\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20char\\2c\\20char*\\29\\20const\n6524:std::__2::ctype<wchar_t>::do_is\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20unsigned\\20long*\\29\\20const\n6525:std::__2::ctype<wchar_t>::do_is\\28unsigned\\20long\\2c\\20wchar_t\\29\\20const\n6526:std::__2::ctype<char>::~ctype\\28\\29.1\n6527:std::__2::ctype<char>::do_widen\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n6528:std::__2::ctype<char>::do_toupper\\28char\\29\\20const\n6529:std::__2::ctype<char>::do_toupper\\28char*\\2c\\20char\\20const*\\29\\20const\n6530:std::__2::ctype<char>::do_tolower\\28char\\29\\20const\n6531:std::__2::ctype<char>::do_tolower\\28char*\\2c\\20char\\20const*\\29\\20const\n6532:std::__2::ctype<char>::do_narrow\\28char\\2c\\20char\\29\\20const\n6533:std::__2::ctype<char>::do_narrow\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\2c\\20char*\\29\\20const\n6534:std::__2::collate<wchar_t>::do_transform\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n6535:std::__2::collate<wchar_t>::do_hash\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n6536:std::__2::collate<wchar_t>::do_compare\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n6537:std::__2::collate<char>::do_transform\\28char\\20const*\\2c\\20char\\20const*\\29\\20const\n6538:std::__2::collate<char>::do_hash\\28char\\20const*\\2c\\20char\\20const*\\29\\20const\n6539:std::__2::collate<char>::do_compare\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n6540:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::~codecvt\\28\\29.1\n6541:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_unshift\\28__mbstate_t&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n6542:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n6543:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_max_length\\28\\29\\20const\n6544:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n6545:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20wchar_t*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\29\\20const\n6546:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_encoding\\28\\29\\20const\n6547:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n6548:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringbuf\\28\\29.1\n6549:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::underflow\\28\\29\n6550:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::seekpos\\28std::__2::fpos<__mbstate_t>\\2c\\20unsigned\\20int\\29\n6551:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::seekoff\\28long\\20long\\2c\\20std::__2::ios_base::seekdir\\2c\\20unsigned\\20int\\29\n6552:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::pbackfail\\28int\\29\n6553:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::overflow\\28int\\29\n6554:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::~basic_streambuf\\28\\29.1\n6555:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::xsputn\\28char\\20const*\\2c\\20long\\29\n6556:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::xsgetn\\28char*\\2c\\20long\\29\n6557:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::uflow\\28\\29\n6558:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setbuf\\28char*\\2c\\20long\\29\n6559:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::seekpos\\28std::__2::fpos<__mbstate_t>\\2c\\20unsigned\\20int\\29\n6560:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::seekoff\\28long\\20long\\2c\\20std::__2::ios_base::seekdir\\2c\\20unsigned\\20int\\29\n6561:std::__2::bad_function_call::what\\28\\29\\20const\n6562:std::__2::__time_get_c_storage<wchar_t>::__x\\28\\29\\20const\n6563:std::__2::__time_get_c_storage<wchar_t>::__weeks\\28\\29\\20const\n6564:std::__2::__time_get_c_storage<wchar_t>::__r\\28\\29\\20const\n6565:std::__2::__time_get_c_storage<wchar_t>::__months\\28\\29\\20const\n6566:std::__2::__time_get_c_storage<wchar_t>::__c\\28\\29\\20const\n6567:std::__2::__time_get_c_storage<wchar_t>::__am_pm\\28\\29\\20const\n6568:std::__2::__time_get_c_storage<wchar_t>::__X\\28\\29\\20const\n6569:std::__2::__time_get_c_storage<char>::__x\\28\\29\\20const\n6570:std::__2::__time_get_c_storage<char>::__weeks\\28\\29\\20const\n6571:std::__2::__time_get_c_storage<char>::__r\\28\\29\\20const\n6572:std::__2::__time_get_c_storage<char>::__months\\28\\29\\20const\n6573:std::__2::__time_get_c_storage<char>::__c\\28\\29\\20const\n6574:std::__2::__time_get_c_storage<char>::__am_pm\\28\\29\\20const\n6575:std::__2::__time_get_c_storage<char>::__X\\28\\29\\20const\n6576:std::__2::__shared_ptr_pointer<_IO_FILE*\\2c\\20void\\20\\28*\\29\\28_IO_FILE*\\29\\2c\\20std::__2::allocator<_IO_FILE>>::__on_zero_shared\\28\\29\n6577:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\\28\\29.1\n6578:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\\28\\29\n6579:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::__on_zero_shared\\28\\29\n6580:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\\28\\29.1\n6581:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\\28\\29\n6582:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::__on_zero_shared\\28\\29\n6583:std::__2::__shared_ptr_emplace<SkSL::Context\\2c\\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\\28\\29.1\n6584:std::__2::__shared_ptr_emplace<SkSL::Context\\2c\\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\\28\\29\n6585:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6586:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6587:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6588:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6589:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6590:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6591:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6592:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6593:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6594:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6595:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6596:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6597:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6598:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6599:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6600:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6601:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6602:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6603:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::Cluster\\20const*&&\\2c\\20unsigned\\20long&&\\2c\\20bool&&\\29\n6604:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n6605:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6606:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::Cluster\\20const*&&\\2c\\20unsigned\\20long&&\\2c\\20bool&&\\29\n6607:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n6608:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6609:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6610:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6611:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6612:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6613:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6614:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6615:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6616:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6617:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6618:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6619:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6620:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6621:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6622:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6623:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6624:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6625:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6626:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6627:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6628:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6629:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6630:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6631:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6632:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6633:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6634:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6635:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6636:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6637:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6638:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6639:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6640:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6641:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6642:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6643:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6644:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6645:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6646:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6647:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6648:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20SkPoint&&\\2c\\20SkPoint&&\\2c\\20skia::textlayout::InternalLineMetrics&&\\2c\\20bool&&\\29\n6649:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>*\\29\\20const\n6650:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6651:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::operator\\28\\29\\28skia::textlayout::Cluster*&&\\29\n6652:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::Cluster*\\29>*\\29\\20const\n6653:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::__clone\\28\\29\\20const\n6654:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>*\\29\\20const\n6655:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6656:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20SkSpan<skia::textlayout::Block>&&\\2c\\20float&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20char&&\\29\n6657:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28std::__2::__function::__base<float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>*\\29\\20const\n6658:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28\\29\\20const\n6659:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::operator\\28\\29\\28skia::textlayout::Block&&\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>&&\\29\n6660:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>*\\29\\20const\n6661:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::__clone\\28\\29\\20const\n6662:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::operator\\28\\29\\28sk_sp<SkTypeface>&&\\29\n6663:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::__clone\\28std::__2::__function::__base<skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>*\\29\\20const\n6664:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::__clone\\28\\29\\20const\n6665:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\29\n6666:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>*\\29\\20const\n6667:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::__clone\\28\\29\\20const\n6668:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\n6669:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28std::__2::__function::__base<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>*\\29\\20const\n6670:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28\\29\\20const\n6671:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::~__func\\28\\29.1\n6672:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::~__func\\28\\29\n6673:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::operator\\28\\29\\28void*&&\\2c\\20void\\20const*&&\\29\n6674:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::destroy_deallocate\\28\\29\n6675:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::destroy\\28\\29\n6676:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28void*\\2c\\20void\\20const*\\29>*\\29\\20const\n6677:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::__clone\\28\\29\\20const\n6678:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6679:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6680:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6681:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6682:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6683:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6684:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n6685:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6686:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6687:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n6688:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6689:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6690:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n6691:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6692:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6693:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\n6694:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28std::__2::__function::__base<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>*\\29\\20const\n6695:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28\\29\\20const\n6696:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::operator\\28\\29\\28sktext::gpu::GlyphVector*&&\\2c\\20int&&\\2c\\20int&&\\2c\\20skgpu::MaskFormat&&\\2c\\20int&&\\29\n6697:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>*\\29\\20const\n6698:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::__clone\\28\\29\\20const\n6699:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::operator\\28\\29\\28GrSurfaceProxy\\20const*&&\\29\n6700:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28GrSurfaceProxy\\20const*\\29>*\\29\\20const\n6701:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::__clone\\28\\29\\20const\n6702:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20char\\20const*&&\\29\n6703:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20char\\20const*\\29>*\\29\\20const\n6704:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28\\29\\20const\n6705:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6706:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6707:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6708:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6709:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6710:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6711:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6712:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6713:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6714:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6715:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6716:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6717:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6718:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6719:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6720:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6721:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6722:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6723:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6724:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6725:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6726:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6727:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6728:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6729:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6730:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6731:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6732:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6733:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6734:std::__2::__function::__func<SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29::'lambda'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29::'lambda'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::operator\\28\\29\\28int&&\\2c\\20int&&\\29\n6735:std::__2::__function::__func<SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29::'lambda'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29::'lambda'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20int\\29>*\\29\\20const\n6736:std::__2::__function::__func<SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29::'lambda'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29::'lambda'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::__clone\\28\\29\\20const\n6737:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda0'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda0'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::operator\\28\\29\\28int&&\\2c\\20int&&\\29\n6738:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda0'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda0'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20int\\29>*\\29\\20const\n6739:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda0'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda0'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::__clone\\28\\29\\20const\n6740:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::operator\\28\\29\\28int&&\\2c\\20int&&\\29\n6741:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20int\\29>*\\29\\20const\n6742:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda'\\28int\\2c\\20int\\29\\2c\\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29::'lambda'\\28int\\2c\\20int\\29>\\2c\\20void\\20\\28int\\2c\\20int\\29>::__clone\\28\\29\\20const\n6743:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::~__func\\28\\29.1\n6744:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::~__func\\28\\29\n6745:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6746:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::destroy_deallocate\\28\\29\n6747:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::destroy\\28\\29\n6748:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6749:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6750:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20char\\20const*&&\\29\n6751:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20char\\20const*\\29>*\\29\\20const\n6752:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28\\29\\20const\n6753:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\29\n6754:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n6755:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n6756:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_0>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n6757:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_0>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n6758:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::operator\\28\\29\\28SkVertices\\20const*&&\\2c\\20SkBlendMode&&\\2c\\20SkPaint\\20const&\\2c\\20float&&\\2c\\20float&&\\2c\\20bool&&\\29\n6759:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>*\\29\\20const\n6760:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6761:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::operator\\28\\29\\28SkIRect\\20const&\\29\n6762:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28SkIRect\\20const&\\29>*\\29\\20const\n6763:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28\\29\\20const\n6764:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0>\\2c\\20SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>::operator\\28\\29\\28SkImageInfo\\20const&\\2c\\20void*&&\\2c\\20unsigned\\20long&&\\2c\\20SkCodec::Options\\20const&\\2c\\20int&&\\29\n6765:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0>\\2c\\20SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>*\\29\\20const\n6766:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0>\\2c\\20SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>::__clone\\28\\29\\20const\n6767:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n6768:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n6769:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6770:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n6771:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n6772:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6773:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6774:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n6775:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n6776:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6777:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n6778:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n6779:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6780:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6781:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n6782:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n6783:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6784:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n6785:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n6786:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6787:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6788:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28GrTextureProxy*&&\\2c\\20SkIRect&&\\2c\\20GrColorType&&\\2c\\20void\\20const*&&\\2c\\20unsigned\\20long&&\\29\n6789:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>*\\29\\20const\n6790:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n6791:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::operator\\28\\29\\28GrBackendTexture&&\\29\n6792:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrBackendTexture\\29>*\\29\\20const\n6793:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::__clone\\28\\29\\20const\n6794:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6795:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6796:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6797:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6798:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6799:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6800:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6801:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6802:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6803:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6804:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6805:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6806:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6807:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6808:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6809:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6810:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6811:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6812:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29.1\n6813:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29\n6814:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n6815:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n6816:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29.1\n6817:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29\n6818:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n6819:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n6820:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::operator\\28\\29\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\n6821:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n6822:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n6823:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*&&\\29\n6824:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>*\\29\\20const\n6825:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28\\29\\20const\n6826:start_pass_upsample\n6827:start_pass_phuff_decoder\n6828:start_pass_merged_upsample\n6829:start_pass_main\n6830:start_pass_huff_decoder\n6831:start_pass_dpost\n6832:start_pass_2_quant\n6833:start_pass_1_quant\n6834:start_pass\n6835:start_output_pass\n6836:start_input_pass.1\n6837:stackSave\n6838:stackRestore\n6839:srgb_to_hwb\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n6840:srgb_to_hsl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n6841:srcover_p\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\n6842:sn_write\n6843:sktext::gpu::post_purge_blob_message\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n6844:sktext::gpu::VertexFiller::isLCD\\28\\29\\20const\n6845:sktext::gpu::TextBlob::~TextBlob\\28\\29.1\n6846:sktext::gpu::TextBlob::~TextBlob\\28\\29\n6847:sktext::gpu::SubRun::~SubRun\\28\\29\n6848:sktext::gpu::SlugImpl::~SlugImpl\\28\\29.1\n6849:sktext::gpu::SlugImpl::~SlugImpl\\28\\29\n6850:sktext::gpu::SlugImpl::sourceBounds\\28\\29\\20const\n6851:sktext::gpu::SlugImpl::sourceBoundsWithOrigin\\28\\29\\20const\n6852:sktext::gpu::SlugImpl::doFlatten\\28SkWriteBuffer&\\29\\20const\n6853:sktext::gpu::SDFMaskFilterImpl::getTypeName\\28\\29\\20const\n6854:sktext::gpu::SDFMaskFilterImpl::filterMask\\28SkMaskBuilder*\\2c\\20SkMask\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\29\\20const\n6855:sktext::gpu::SDFMaskFilterImpl::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n6856:skip_variable\n6857:skif::\\28anonymous\\20namespace\\29::RasterBackend::~RasterBackend\\28\\29\n6858:skif::\\28anonymous\\20namespace\\29::RasterBackend::makeImage\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\29\\20const\n6859:skif::\\28anonymous\\20namespace\\29::RasterBackend::makeDevice\\28SkISize\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const*\\29\\20const\n6860:skif::\\28anonymous\\20namespace\\29::RasterBackend::getCachedBitmap\\28SkBitmap\\20const&\\29\\20const\n6861:skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.1\n6862:skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29\n6863:skif::\\28anonymous\\20namespace\\29::GaneshBackend::makeImage\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\29\\20const\n6864:skif::\\28anonymous\\20namespace\\29::GaneshBackend::makeDevice\\28SkISize\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const*\\29\\20const\n6865:skif::\\28anonymous\\20namespace\\29::GaneshBackend::getCachedBitmap\\28SkBitmap\\20const&\\29\\20const\n6866:skif::\\28anonymous\\20namespace\\29::GaneshBackend::getBlurEngine\\28\\29\\20const\n6867:skif::\\28anonymous\\20namespace\\29::GaneshBackend::findAlgorithm\\28SkSize\\2c\\20SkColorType\\29\\20const\n6868:skia_png_zalloc\n6869:skia_png_write_rows\n6870:skia_png_write_info\n6871:skia_png_write_end\n6872:skia_png_user_version_check\n6873:skia_png_set_text\n6874:skia_png_set_sRGB\n6875:skia_png_set_keep_unknown_chunks\n6876:skia_png_set_iCCP\n6877:skia_png_set_gray_to_rgb\n6878:skia_png_set_filter\n6879:skia_png_set_filler\n6880:skia_png_read_update_info\n6881:skia_png_read_info\n6882:skia_png_read_image\n6883:skia_png_read_end\n6884:skia_png_push_fill_buffer\n6885:skia_png_process_data\n6886:skia_png_default_write_data\n6887:skia_png_default_read_data\n6888:skia_png_default_flush\n6889:skia_png_create_read_struct\n6890:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\\28\\29.1\n6891:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\\28\\29\n6892:skia::textlayout::TypefaceFontStyleSet::getStyle\\28int\\2c\\20SkFontStyle*\\2c\\20SkString*\\29\n6893:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\\28\\29.1\n6894:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\\28\\29\n6895:skia::textlayout::TypefaceFontProvider::onMatchFamily\\28char\\20const*\\29\\20const\n6896:skia::textlayout::TypefaceFontProvider::onMatchFamilyStyle\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\29\\20const\n6897:skia::textlayout::TypefaceFontProvider::onGetFamilyName\\28int\\2c\\20SkString*\\29\\20const\n6898:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::~ShapeHandler\\28\\29.1\n6899:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::~ShapeHandler\\28\\29\n6900:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::runBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6901:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6902:skia::textlayout::PositionWithAffinity*\\20emscripten::internal::raw_constructor<skia::textlayout::PositionWithAffinity>\\28\\29\n6903:skia::textlayout::ParagraphImpl::~ParagraphImpl\\28\\29.1\n6904:skia::textlayout::ParagraphImpl::visit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>\\20const&\\29\n6905:skia::textlayout::ParagraphImpl::updateTextAlign\\28skia::textlayout::TextAlign\\29\n6906:skia::textlayout::ParagraphImpl::updateForegroundPaint\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\29\n6907:skia::textlayout::ParagraphImpl::updateFontSize\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\29\n6908:skia::textlayout::ParagraphImpl::updateBackgroundPaint\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\29\n6909:skia::textlayout::ParagraphImpl::unresolvedGlyphs\\28\\29\n6910:skia::textlayout::ParagraphImpl::unresolvedCodepoints\\28\\29\n6911:skia::textlayout::ParagraphImpl::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29\n6912:skia::textlayout::ParagraphImpl::paint\\28SkCanvas*\\2c\\20float\\2c\\20float\\29\n6913:skia::textlayout::ParagraphImpl::markDirty\\28\\29\n6914:skia::textlayout::ParagraphImpl::lineNumber\\28\\29\n6915:skia::textlayout::ParagraphImpl::layout\\28float\\29\n6916:skia::textlayout::ParagraphImpl::getWordBoundary\\28unsigned\\20int\\29\n6917:skia::textlayout::ParagraphImpl::getRectsForRange\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n6918:skia::textlayout::ParagraphImpl::getRectsForPlaceholders\\28\\29\n6919:skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const::'lambda'\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29::__invoke\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\n6920:skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29\n6921:skia::textlayout::ParagraphImpl::getLineNumberAt\\28unsigned\\20long\\29\\20const\n6922:skia::textlayout::ParagraphImpl::getLineNumberAtUTF16Offset\\28unsigned\\20long\\29\n6923:skia::textlayout::ParagraphImpl::getLineMetrics\\28std::__2::vector<skia::textlayout::LineMetrics\\2c\\20std::__2::allocator<skia::textlayout::LineMetrics>>&\\29\n6924:skia::textlayout::ParagraphImpl::getLineMetricsAt\\28int\\2c\\20skia::textlayout::LineMetrics*\\29\\20const\n6925:skia::textlayout::ParagraphImpl::getGlyphPositionAtCoordinate\\28float\\2c\\20float\\29\n6926:skia::textlayout::ParagraphImpl::getFonts\\28\\29\\20const\n6927:skia::textlayout::ParagraphImpl::getFontAt\\28unsigned\\20long\\29\\20const\n6928:skia::textlayout::ParagraphImpl::getFontAtUTF16Offset\\28unsigned\\20long\\29\n6929:skia::textlayout::ParagraphImpl::getClosestUTF16GlyphInfoAt\\28float\\2c\\20float\\2c\\20skia::textlayout::Paragraph::GlyphInfo*\\29\n6930:skia::textlayout::ParagraphImpl::getClosestGlyphClusterAt\\28float\\2c\\20float\\2c\\20skia::textlayout::Paragraph::GlyphClusterInfo*\\29\n6931:skia::textlayout::ParagraphImpl::getActualTextRange\\28int\\2c\\20bool\\29\\20const\n6932:skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29\n6933:skia::textlayout::ParagraphImpl::containsEmoji\\28SkTextBlob*\\29\n6934:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\\28SkTextBlob*\\29::$_0::__invoke\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\n6935:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\\28SkTextBlob*\\29\n6936:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\\28\\29.1\n6937:skia::textlayout::ParagraphBuilderImpl::pushStyle\\28skia::textlayout::TextStyle\\20const&\\29\n6938:skia::textlayout::ParagraphBuilderImpl::pop\\28\\29\n6939:skia::textlayout::ParagraphBuilderImpl::peekStyle\\28\\29\n6940:skia::textlayout::ParagraphBuilderImpl::getText\\28\\29\n6941:skia::textlayout::ParagraphBuilderImpl::getParagraphStyle\\28\\29\\20const\n6942:skia::textlayout::ParagraphBuilderImpl::addText\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n6943:skia::textlayout::ParagraphBuilderImpl::addText\\28char\\20const*\\2c\\20unsigned\\20long\\29\n6944:skia::textlayout::ParagraphBuilderImpl::addText\\28char\\20const*\\29\n6945:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\\28skia::textlayout::PlaceholderStyle\\20const&\\29\n6946:skia::textlayout::ParagraphBuilderImpl::SetUnicode\\28sk_sp<SkUnicode>\\29\n6947:skia::textlayout::ParagraphBuilderImpl::Reset\\28\\29\n6948:skia::textlayout::ParagraphBuilderImpl::RequiresClientICU\\28\\29\n6949:skia::textlayout::ParagraphBuilderImpl::Build\\28\\29\n6950:skia::textlayout::Paragraph::getMinIntrinsicWidth\\28\\29\n6951:skia::textlayout::Paragraph::getMaxWidth\\28\\29\n6952:skia::textlayout::Paragraph::getMaxIntrinsicWidth\\28\\29\n6953:skia::textlayout::Paragraph::getLongestLine\\28\\29\n6954:skia::textlayout::Paragraph::getIdeographicBaseline\\28\\29\n6955:skia::textlayout::Paragraph::getHeight\\28\\29\n6956:skia::textlayout::Paragraph::getAlphabeticBaseline\\28\\29\n6957:skia::textlayout::Paragraph::didExceedMaxLines\\28\\29\n6958:skia::textlayout::Paragraph::FontInfo::~FontInfo\\28\\29.1\n6959:skia::textlayout::Paragraph::FontInfo::~FontInfo\\28\\29\n6960:skia::textlayout::OneLineShaper::~OneLineShaper\\28\\29.1\n6961:skia::textlayout::OneLineShaper::runBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6962:skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6963:skia::textlayout::LangIterator::~LangIterator\\28\\29.1\n6964:skia::textlayout::LangIterator::~LangIterator\\28\\29\n6965:skia::textlayout::LangIterator::endOfCurrentRun\\28\\29\\20const\n6966:skia::textlayout::LangIterator::currentLanguage\\28\\29\\20const\n6967:skia::textlayout::LangIterator::consume\\28\\29\n6968:skia::textlayout::LangIterator::atEnd\\28\\29\\20const\n6969:skia::textlayout::FontCollection::~FontCollection\\28\\29.1\n6970:skia::textlayout::CanvasParagraphPainter::translate\\28float\\2c\\20float\\29\n6971:skia::textlayout::CanvasParagraphPainter::save\\28\\29\n6972:skia::textlayout::CanvasParagraphPainter::restore\\28\\29\n6973:skia::textlayout::CanvasParagraphPainter::drawTextShadow\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20float\\29\n6974:skia::textlayout::CanvasParagraphPainter::drawTextBlob\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n6975:skia::textlayout::CanvasParagraphPainter::drawRect\\28SkRect\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n6976:skia::textlayout::CanvasParagraphPainter::drawPath\\28SkPath\\20const&\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n6977:skia::textlayout::CanvasParagraphPainter::drawLine\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n6978:skia::textlayout::CanvasParagraphPainter::drawFilledRect\\28SkRect\\20const&\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n6979:skia::textlayout::CanvasParagraphPainter::clipRect\\28SkRect\\20const&\\29\n6980:skgpu::tess::FixedCountWedges::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6981:skgpu::tess::FixedCountWedges::WriteIndexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6982:skgpu::tess::FixedCountStrokes::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6983:skgpu::tess::FixedCountCurves::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6984:skgpu::tess::FixedCountCurves::WriteIndexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6985:skgpu::ganesh::texture_proxy_view_from_planes\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20skgpu::Budgeted\\29::$_0::__invoke\\28void*\\2c\\20void*\\29\n6986:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::~SmallPathOp\\28\\29.1\n6987:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6988:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6989:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6990:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6991:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::name\\28\\29\\20const\n6992:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::fixedFunctionFlags\\28\\29\\20const\n6993:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6994:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::name\\28\\29\\20const\n6995:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n6996:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6997:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6998:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n6999:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::~HullShader\\28\\29.1\n7000:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::~HullShader\\28\\29\n7001:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::name\\28\\29\\20const\n7002:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n7003:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n7004:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\\28\\29.1\n7005:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\\28\\29\n7006:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7007:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7008:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7009:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7010:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7011:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::name\\28\\29\\20const\n7012:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::fixedFunctionFlags\\28\\29\\20const\n7013:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7014:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::~AAConvexPathOp\\28\\29.1\n7015:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::~AAConvexPathOp\\28\\29\n7016:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7017:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7018:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7019:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7020:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7021:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::name\\28\\29\\20const\n7022:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7023:skgpu::ganesh::TriangulatingPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7024:skgpu::ganesh::TriangulatingPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7025:skgpu::ganesh::TriangulatingPathRenderer::name\\28\\29\\20const\n7026:skgpu::ganesh::TessellationPathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n7027:skgpu::ganesh::TessellationPathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n7028:skgpu::ganesh::TessellationPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7029:skgpu::ganesh::TessellationPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7030:skgpu::ganesh::TessellationPathRenderer::name\\28\\29\\20const\n7031:skgpu::ganesh::SurfaceDrawContext::willReplaceOpsTask\\28skgpu::ganesh::OpsTask*\\2c\\20skgpu::ganesh::OpsTask*\\29\n7032:skgpu::ganesh::SurfaceDrawContext::canDiscardPreviousOpsOnFullClear\\28\\29\\20const\n7033:skgpu::ganesh::SurfaceContext::~SurfaceContext\\28\\29.1\n7034:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n7035:skgpu::ganesh::SurfaceContext::asyncReadPixels\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\2c\\20SkColorType\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n7036:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\\28\\29.1\n7037:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\\28\\29\n7038:skgpu::ganesh::StrokeTessellateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7039:skgpu::ganesh::StrokeTessellateOp::usesStencil\\28\\29\\20const\n7040:skgpu::ganesh::StrokeTessellateOp::onPrepare\\28GrOpFlushState*\\29\n7041:skgpu::ganesh::StrokeTessellateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7042:skgpu::ganesh::StrokeTessellateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7043:skgpu::ganesh::StrokeTessellateOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7044:skgpu::ganesh::StrokeTessellateOp::name\\28\\29\\20const\n7045:skgpu::ganesh::StrokeTessellateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7046:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\\28\\29.1\n7047:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\\28\\29\n7048:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7049:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::programInfo\\28\\29\n7050:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7051:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7052:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7053:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::name\\28\\29\\20const\n7054:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7055:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::~AAStrokeRectOp\\28\\29.1\n7056:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::~AAStrokeRectOp\\28\\29\n7057:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7058:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::programInfo\\28\\29\n7059:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7060:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7061:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7062:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7063:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::name\\28\\29\\20const\n7064:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7065:skgpu::ganesh::StencilClip::~StencilClip\\28\\29.1\n7066:skgpu::ganesh::StencilClip::~StencilClip\\28\\29\n7067:skgpu::ganesh::StencilClip::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n7068:skgpu::ganesh::StencilClip::getConservativeBounds\\28\\29\\20const\n7069:skgpu::ganesh::StencilClip::apply\\28GrAppliedHardClip*\\2c\\20SkIRect*\\29\\20const\n7070:skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7071:skgpu::ganesh::SoftwarePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7072:skgpu::ganesh::SoftwarePathRenderer::name\\28\\29\\20const\n7073:skgpu::ganesh::SmallPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7074:skgpu::ganesh::SmallPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7075:skgpu::ganesh::SmallPathRenderer::name\\28\\29\\20const\n7076:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29.1\n7077:skgpu::ganesh::SmallPathAtlasMgr::preFlush\\28GrOnFlushResourceProvider*\\29\n7078:skgpu::ganesh::SmallPathAtlasMgr::postFlush\\28skgpu::AtlasToken\\29\n7079:skgpu::ganesh::SmallPathAtlasMgr::evict\\28skgpu::PlotLocator\\29\n7080:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::~RegionOpImpl\\28\\29.1\n7081:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::~RegionOpImpl\\28\\29\n7082:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7083:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::programInfo\\28\\29\n7084:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7085:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7086:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7087:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7088:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::name\\28\\29\\20const\n7089:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7090:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_quad_generic\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7091:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7092:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7093:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_cov_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7094:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_cov_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7095:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7096:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7097:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n7098:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\\28\\29.1\n7099:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\\28\\29\n7100:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::onTextureSampler\\28int\\29\\20const\n7101:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::name\\28\\29\\20const\n7102:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n7103:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n7104:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n7105:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n7106:skgpu::ganesh::PathWedgeTessellator::prepare\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n7107:skgpu::ganesh::PathTessellator::~PathTessellator\\28\\29\n7108:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\\28\\29.1\n7109:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\\28\\29\n7110:skgpu::ganesh::PathTessellateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7111:skgpu::ganesh::PathTessellateOp::usesStencil\\28\\29\\20const\n7112:skgpu::ganesh::PathTessellateOp::onPrepare\\28GrOpFlushState*\\29\n7113:skgpu::ganesh::PathTessellateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7114:skgpu::ganesh::PathTessellateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7115:skgpu::ganesh::PathTessellateOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7116:skgpu::ganesh::PathTessellateOp::name\\28\\29\\20const\n7117:skgpu::ganesh::PathTessellateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7118:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\\28\\29.1\n7119:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\\28\\29\n7120:skgpu::ganesh::PathStencilCoverOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7121:skgpu::ganesh::PathStencilCoverOp::onPrepare\\28GrOpFlushState*\\29\n7122:skgpu::ganesh::PathStencilCoverOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7123:skgpu::ganesh::PathStencilCoverOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7124:skgpu::ganesh::PathStencilCoverOp::name\\28\\29\\20const\n7125:skgpu::ganesh::PathStencilCoverOp::fixedFunctionFlags\\28\\29\\20const\n7126:skgpu::ganesh::PathStencilCoverOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7127:skgpu::ganesh::PathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n7128:skgpu::ganesh::PathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n7129:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\\28\\29.1\n7130:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\\28\\29\n7131:skgpu::ganesh::PathInnerTriangulateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7132:skgpu::ganesh::PathInnerTriangulateOp::onPrepare\\28GrOpFlushState*\\29\n7133:skgpu::ganesh::PathInnerTriangulateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7134:skgpu::ganesh::PathInnerTriangulateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7135:skgpu::ganesh::PathInnerTriangulateOp::name\\28\\29\\20const\n7136:skgpu::ganesh::PathInnerTriangulateOp::fixedFunctionFlags\\28\\29\\20const\n7137:skgpu::ganesh::PathInnerTriangulateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7138:skgpu::ganesh::PathCurveTessellator::prepare\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n7139:skgpu::ganesh::OpsTask::~OpsTask\\28\\29.1\n7140:skgpu::ganesh::OpsTask::onPrepare\\28GrOpFlushState*\\29\n7141:skgpu::ganesh::OpsTask::onPrePrepare\\28GrRecordingContext*\\29\n7142:skgpu::ganesh::OpsTask::onMakeSkippable\\28\\29\n7143:skgpu::ganesh::OpsTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n7144:skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n7145:skgpu::ganesh::OpsTask::endFlush\\28GrDrawingManager*\\29\n7146:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::~NonAALatticeOp\\28\\29.1\n7147:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7148:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7149:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7150:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7151:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7152:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::name\\28\\29\\20const\n7153:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7154:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::~LatticeGP\\28\\29.1\n7155:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::~LatticeGP\\28\\29\n7156:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::onTextureSampler\\28int\\29\\20const\n7157:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::name\\28\\29\\20const\n7158:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n7159:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n7160:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n7161:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n7162:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::~FillRRectOpImpl\\28\\29.1\n7163:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::~FillRRectOpImpl\\28\\29\n7164:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7165:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::programInfo\\28\\29\n7166:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7167:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7168:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7169:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7170:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::name\\28\\29\\20const\n7171:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7172:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::clipToShape\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20SkClipOp\\2c\\20SkMatrix\\20const&\\2c\\20GrShape\\20const&\\2c\\20GrAA\\29\n7173:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::~Processor\\28\\29.1\n7174:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::~Processor\\28\\29\n7175:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::name\\28\\29\\20const\n7176:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n7177:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n7178:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n7179:skgpu::ganesh::DrawableOp::~DrawableOp\\28\\29.1\n7180:skgpu::ganesh::DrawableOp::~DrawableOp\\28\\29\n7181:skgpu::ganesh::DrawableOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7182:skgpu::ganesh::DrawableOp::name\\28\\29\\20const\n7183:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\\28\\29.1\n7184:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\\28\\29\n7185:skgpu::ganesh::DrawAtlasPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7186:skgpu::ganesh::DrawAtlasPathOp::onPrepare\\28GrOpFlushState*\\29\n7187:skgpu::ganesh::DrawAtlasPathOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7188:skgpu::ganesh::DrawAtlasPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7189:skgpu::ganesh::DrawAtlasPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7190:skgpu::ganesh::DrawAtlasPathOp::name\\28\\29\\20const\n7191:skgpu::ganesh::DrawAtlasPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7192:skgpu::ganesh::Device::~Device\\28\\29.1\n7193:skgpu::ganesh::Device::~Device\\28\\29\n7194:skgpu::ganesh::Device::strikeDeviceInfo\\28\\29\\20const\n7195:skgpu::ganesh::Device::snapSpecial\\28SkIRect\\20const&\\2c\\20bool\\29\n7196:skgpu::ganesh::Device::snapSpecialScaled\\28SkIRect\\20const&\\2c\\20SkISize\\20const&\\29\n7197:skgpu::ganesh::Device::replaceClip\\28SkIRect\\20const&\\29\n7198:skgpu::ganesh::Device::recordingContext\\28\\29\\20const\n7199:skgpu::ganesh::Device::pushClipStack\\28\\29\n7200:skgpu::ganesh::Device::popClipStack\\28\\29\n7201:skgpu::ganesh::Device::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n7202:skgpu::ganesh::Device::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n7203:skgpu::ganesh::Device::onDrawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n7204:skgpu::ganesh::Device::onClipShader\\28sk_sp<SkShader>\\29\n7205:skgpu::ganesh::Device::makeSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n7206:skgpu::ganesh::Device::makeSpecial\\28SkImage\\20const*\\29\n7207:skgpu::ganesh::Device::isClipWideOpen\\28\\29\\20const\n7208:skgpu::ganesh::Device::isClipRect\\28\\29\\20const\n7209:skgpu::ganesh::Device::isClipEmpty\\28\\29\\20const\n7210:skgpu::ganesh::Device::isClipAntiAliased\\28\\29\\20const\n7211:skgpu::ganesh::Device::drawVertices\\28SkVertices\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n7212:skgpu::ganesh::Device::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n7213:skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n7214:skgpu::ganesh::Device::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n7215:skgpu::ganesh::Device::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n7216:skgpu::ganesh::Device::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n7217:skgpu::ganesh::Device::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n7218:skgpu::ganesh::Device::drawPaint\\28SkPaint\\20const&\\29\n7219:skgpu::ganesh::Device::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n7220:skgpu::ganesh::Device::drawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n7221:skgpu::ganesh::Device::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n7222:skgpu::ganesh::Device::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const&\\29\n7223:skgpu::ganesh::Device::drawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n7224:skgpu::ganesh::Device::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n7225:skgpu::ganesh::Device::drawDrawable\\28SkCanvas*\\2c\\20SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n7226:skgpu::ganesh::Device::drawDevice\\28SkDevice*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n7227:skgpu::ganesh::Device::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n7228:skgpu::ganesh::Device::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n7229:skgpu::ganesh::Device::drawAsTiledImageRect\\28SkCanvas*\\2c\\20SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n7230:skgpu::ganesh::Device::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n7231:skgpu::ganesh::Device::devClipBounds\\28\\29\\20const\n7232:skgpu::ganesh::Device::createImageFilteringBackend\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\29\\20const\n7233:skgpu::ganesh::Device::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n7234:skgpu::ganesh::Device::convertGlyphRunListToSlug\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n7235:skgpu::ganesh::Device::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n7236:skgpu::ganesh::Device::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n7237:skgpu::ganesh::Device::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n7238:skgpu::ganesh::Device::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n7239:skgpu::ganesh::Device::android_utils_clipWithStencil\\28\\29\n7240:skgpu::ganesh::DefaultPathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n7241:skgpu::ganesh::DefaultPathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n7242:skgpu::ganesh::DefaultPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7243:skgpu::ganesh::DefaultPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7244:skgpu::ganesh::DefaultPathRenderer::name\\28\\29\\20const\n7245:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::name\\28\\29\\20const\n7246:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n7247:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n7248:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n7249:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::name\\28\\29\\20const\n7250:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n7251:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n7252:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n7253:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::~DashOpImpl\\28\\29.1\n7254:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::~DashOpImpl\\28\\29\n7255:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7256:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::programInfo\\28\\29\n7257:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7258:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7259:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7260:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7261:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::name\\28\\29\\20const\n7262:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::fixedFunctionFlags\\28\\29\\20const\n7263:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7264:skgpu::ganesh::DashLinePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7265:skgpu::ganesh::DashLinePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7266:skgpu::ganesh::DashLinePathRenderer::name\\28\\29\\20const\n7267:skgpu::ganesh::ClipStack::~ClipStack\\28\\29.1\n7268:skgpu::ganesh::ClipStack::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n7269:skgpu::ganesh::ClipStack::apply\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrDrawOp*\\2c\\20GrAAType\\2c\\20GrAppliedClip*\\2c\\20SkRect*\\29\\20const\n7270:skgpu::ganesh::ClearOp::~ClearOp\\28\\29\n7271:skgpu::ganesh::ClearOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7272:skgpu::ganesh::ClearOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7273:skgpu::ganesh::ClearOp::name\\28\\29\\20const\n7274:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\\28\\29.1\n7275:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\\28\\29\n7276:skgpu::ganesh::AtlasTextOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7277:skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n7278:skgpu::ganesh::AtlasTextOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n7279:skgpu::ganesh::AtlasTextOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7280:skgpu::ganesh::AtlasTextOp::name\\28\\29\\20const\n7281:skgpu::ganesh::AtlasTextOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n7282:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\\28\\29.1\n7283:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\\28\\29\n7284:skgpu::ganesh::AtlasRenderTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n7285:skgpu::ganesh::AtlasRenderTask::onExecute\\28GrOpFlushState*\\29\n7286:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29.1\n7287:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29\n7288:skgpu::ganesh::AtlasPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7289:skgpu::ganesh::AtlasPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7290:skgpu::ganesh::AtlasPathRenderer::name\\28\\29\\20const\n7291:skgpu::ganesh::AALinearizingConvexPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7292:skgpu::ganesh::AALinearizingConvexPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7293:skgpu::ganesh::AALinearizingConvexPathRenderer::name\\28\\29\\20const\n7294:skgpu::ganesh::AAHairLinePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7295:skgpu::ganesh::AAHairLinePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7296:skgpu::ganesh::AAHairLinePathRenderer::name\\28\\29\\20const\n7297:skgpu::ganesh::AAConvexPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n7298:skgpu::ganesh::AAConvexPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n7299:skgpu::ganesh::AAConvexPathRenderer::name\\28\\29\\20const\n7300:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\\28\\29.1\n7301:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::rowBytes\\28int\\29\\20const\n7302:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::data\\28int\\29\\20const\n7303:skgpu::StringKeyBuilder::~StringKeyBuilder\\28\\29.1\n7304:skgpu::StringKeyBuilder::~StringKeyBuilder\\28\\29\n7305:skgpu::StringKeyBuilder::appendComment\\28char\\20const*\\29\n7306:skgpu::StringKeyBuilder::addBits\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7307:skgpu::ShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n7308:skgpu::RectanizerSkyline::~RectanizerSkyline\\28\\29.1\n7309:skgpu::RectanizerSkyline::~RectanizerSkyline\\28\\29\n7310:skgpu::RectanizerSkyline::reset\\28\\29\n7311:skgpu::RectanizerSkyline::percentFull\\28\\29\\20const\n7312:skgpu::RectanizerPow2::reset\\28\\29\n7313:skgpu::RectanizerPow2::percentFull\\28\\29\\20const\n7314:skgpu::RectanizerPow2::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n7315:skgpu::Plot::~Plot\\28\\29.1\n7316:skgpu::Plot::~Plot\\28\\29\n7317:skgpu::KeyBuilder::~KeyBuilder\\28\\29\n7318:skgpu::KeyBuilder::addBits\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7319:skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29\n7320:sk_write_fn\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n7321:sk_sp<SkColorSpace>*\\20emscripten::internal::MemberAccess<SimpleImageInfo\\2c\\20sk_sp<SkColorSpace>>::getWire<SimpleImageInfo>\\28sk_sp<SkColorSpace>\\20SimpleImageInfo::*\\20const&\\2c\\20SimpleImageInfo\\20const&\\29\n7322:sk_read_user_chunk\\28png_struct_def*\\2c\\20png_unknown_chunk_t*\\29\n7323:sk_mmap_releaseproc\\28void\\20const*\\2c\\20void*\\29\n7324:sk_ft_stream_io\\28FT_StreamRec_*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n7325:sk_ft_realloc\\28FT_MemoryRec_*\\2c\\20long\\2c\\20long\\2c\\20void*\\29\n7326:sk_ft_free\\28FT_MemoryRec_*\\2c\\20void*\\29\n7327:sk_ft_alloc\\28FT_MemoryRec_*\\2c\\20long\\29\n7328:sk_dataref_releaseproc\\28void\\20const*\\2c\\20void*\\29\n7329:sfnt_table_info\n7330:sfnt_stream_close\n7331:sfnt_load_face\n7332:sfnt_is_postscript\n7333:sfnt_is_alphanumeric\n7334:sfnt_init_face\n7335:sfnt_get_ps_name\n7336:sfnt_get_name_index\n7337:sfnt_get_name_id\n7338:sfnt_get_interface\n7339:sfnt_get_glyph_name\n7340:sfnt_get_charset_id\n7341:sfnt_done_face\n7342:setup_syllables_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7343:setup_syllables_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7344:setup_syllables_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7345:setup_syllables_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7346:setup_masks_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7347:setup_masks_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7348:setup_masks_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7349:setup_masks_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7350:setup_masks_hangul\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7351:setup_masks_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7352:service_cleanup\\28\\29\n7353:sep_upsample\n7354:self_destruct\n7355:scriptGetMaxValue\\28IntProperty\\20const&\\2c\\20UProperty\\29\n7356:save_marker\n7357:sample8\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7358:sample6\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7359:sample4\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7360:sample2\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7361:sample1\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7362:rgb_rgb_convert\n7363:rgb_rgb565_convert\n7364:rgb_rgb565D_convert\n7365:rgb_gray_convert\n7366:reverse_hit_compare_y\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n7367:reverse_hit_compare_x\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n7368:reset_marker_reader\n7369:reset_input_controller\n7370:reset_error_mgr\n7371:request_virt_sarray\n7372:request_virt_barray\n7373:reorder_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7374:reorder_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7375:reorder_marks_hebrew\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n7376:reorder_marks_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n7377:reorder_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7378:release_data\\28void*\\2c\\20void*\\29\n7379:record_stch\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7380:record_rphf_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7381:record_pref_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7382:realize_virt_arrays\n7383:read_restart_marker\n7384:read_markers\n7385:read_data_from_FT_Stream\n7386:rbbi_cleanup_73\n7387:quantize_ord_dither\n7388:quantize_fs_dither\n7389:quantize3_ord_dither\n7390:putil_cleanup\\28\\29\n7391:psnames_get_service\n7392:pshinter_get_t2_funcs\n7393:pshinter_get_t1_funcs\n7394:pshinter_get_globals_funcs\n7395:psh_globals_new\n7396:psh_globals_destroy\n7397:psaux_get_glyph_name\n7398:ps_table_release\n7399:ps_table_new\n7400:ps_table_done\n7401:ps_table_add\n7402:ps_property_set\n7403:ps_property_get\n7404:ps_parser_to_token_array\n7405:ps_parser_to_int\n7406:ps_parser_to_fixed_array\n7407:ps_parser_to_fixed\n7408:ps_parser_to_coord_array\n7409:ps_parser_to_bytes\n7410:ps_parser_skip_spaces\n7411:ps_parser_load_field_table\n7412:ps_parser_init\n7413:ps_hints_t2mask\n7414:ps_hints_t2counter\n7415:ps_hints_t1stem3\n7416:ps_hints_t1reset\n7417:ps_hints_close\n7418:ps_hints_apply\n7419:ps_hinter_init\n7420:ps_hinter_done\n7421:ps_get_standard_strings\n7422:ps_get_macintosh_name\n7423:ps_decoder_init\n7424:ps_builder_init\n7425:progress_monitor\\28jpeg_common_struct*\\29\n7426:process_data_simple_main\n7427:process_data_crank_post\n7428:process_data_context_main\n7429:prescan_quantize\n7430:preprocess_text_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7431:preprocess_text_thai\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7432:preprocess_text_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7433:preprocess_text_hangul\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7434:prepare_for_output_pass\n7435:premultiply_data\n7436:premul_rgb\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n7437:premul_polar\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n7438:postprocess_glyphs_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n7439:post_process_prepass\n7440:post_process_2pass\n7441:post_process_1pass\n7442:portable::xy_to_unit_angle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7443:portable::xy_to_radius\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7444:portable::xy_to_2pt_conical_well_behaved\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7445:portable::xy_to_2pt_conical_strip\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7446:portable::xy_to_2pt_conical_smaller\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7447:portable::xy_to_2pt_conical_greater\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7448:portable::xy_to_2pt_conical_focal_on_circle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7449:portable::xor_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7450:portable::white_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7451:portable::unpremul_polar\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7452:portable::unpremul\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7453:portable::trace_var\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7454:portable::trace_scope\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7455:portable::trace_line\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7456:portable::trace_exit\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7457:portable::trace_enter\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7458:portable::tan_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7459:portable::swizzle_copy_to_indirect_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7460:portable::swizzle_copy_slot_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7461:portable::swizzle_copy_4_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7462:portable::swizzle_copy_3_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7463:portable::swizzle_copy_2_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7464:portable::swizzle_4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7465:portable::swizzle_3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7466:portable::swizzle_2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7467:portable::swizzle_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7468:portable::swizzle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7469:portable::swap_src_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7470:portable::swap_rb_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7471:portable::swap_rb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7472:portable::sub_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7473:portable::sub_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7474:portable::sub_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7475:portable::sub_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7476:portable::sub_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7477:portable::sub_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7478:portable::sub_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7479:portable::sub_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7480:portable::sub_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7481:portable::sub_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7482:portable::store_src_rg\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7483:portable::store_src_a\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7484:portable::store_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7485:portable::store_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7486:portable::store_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7487:portable::store_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7488:portable::store_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7489:portable::store_r8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7490:portable::store_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7491:portable::store_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7492:portable::store_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7493:portable::store_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7494:portable::store_device_xy01\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7495:portable::store_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7496:portable::store_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7497:portable::store_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7498:portable::store_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7499:portable::store_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7500:portable::store_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7501:portable::store_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7502:portable::store_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7503:portable::store_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7504:portable::store_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7505:portable::store_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7506:portable::start_pipeline\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkRasterPipelineStage*\\2c\\20SkSpan<SkRasterPipeline_MemoryCtxPatch>\\2c\\20unsigned\\20char*\\29\n7507:portable::stack_rewind\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7508:portable::stack_checkpoint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7509:portable::srcover_rgba_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7510:portable::srcover\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7511:portable::srcout\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7512:portable::srcin\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7513:portable::srcatop\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7514:portable::sqrt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7515:portable::splat_4_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7516:portable::splat_3_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7517:portable::splat_2_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7518:portable::softlight\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7519:portable::smoothstep_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7520:portable::sin_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7521:portable::shuffle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7522:portable::set_base_pointer\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7523:portable::seed_shader\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7524:portable::screen\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7525:portable::scale_u8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7526:portable::scale_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7527:portable::saturation\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7528:portable::rgb_to_hsl\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7529:portable::repeat_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7530:portable::repeat_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7531:portable::repeat_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7532:portable::refract_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7533:portable::reenable_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7534:portable::rect_memset64\\28unsigned\\20long\\20long*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n7535:portable::rect_memset32\\28unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n7536:portable::rect_memset16\\28unsigned\\20short*\\2c\\20unsigned\\20short\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n7537:portable::premul_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7538:portable::premul\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7539:portable::pow_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7540:portable::plus_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7541:portable::perlin_noise\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7542:portable::parametric\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7543:portable::overlay\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7544:portable::negate_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7545:portable::multiply\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7546:portable::mul_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7547:portable::mul_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7548:portable::mul_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7549:portable::mul_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7550:portable::mul_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7551:portable::mul_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7552:portable::mul_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7553:portable::mul_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7554:portable::mul_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7555:portable::mul_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7556:portable::mul_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7557:portable::mul_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7558:portable::move_src_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7559:portable::move_dst_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7560:portable::modulate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7561:portable::mod_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7562:portable::mod_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7563:portable::mod_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7564:portable::mod_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7565:portable::mod_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7566:portable::mix_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7567:portable::mix_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7568:portable::mix_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7569:portable::mix_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7570:portable::mix_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7571:portable::mix_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7572:portable::mix_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7573:portable::mix_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7574:portable::mix_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7575:portable::mix_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7576:portable::mirror_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7577:portable::mirror_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7578:portable::mirror_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7579:portable::mipmap_linear_update\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7580:portable::mipmap_linear_init\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7581:portable::mipmap_linear_finish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7582:portable::min_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7583:portable::min_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7584:portable::min_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7585:portable::min_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7586:portable::min_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7587:portable::min_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7588:portable::min_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7589:portable::min_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7590:portable::min_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7591:portable::min_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7592:portable::min_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7593:portable::min_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7594:portable::min_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7595:portable::min_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7596:portable::min_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7597:portable::min_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7598:portable::merge_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7599:portable::merge_inv_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7600:portable::merge_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7601:portable::memset32\\28unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20int\\29\n7602:portable::memset16\\28unsigned\\20short*\\2c\\20unsigned\\20short\\2c\\20int\\29\n7603:portable::max_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7604:portable::max_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7605:portable::max_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7606:portable::max_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7607:portable::max_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7608:portable::max_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7609:portable::max_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7610:portable::max_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7611:portable::max_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7612:portable::max_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7613:portable::max_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7614:portable::max_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7615:portable::max_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7616:portable::max_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7617:portable::max_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7618:portable::max_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7619:portable::matrix_translate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7620:portable::matrix_scale_translate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7621:portable::matrix_perspective\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7622:portable::matrix_multiply_4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7623:portable::matrix_multiply_3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7624:portable::matrix_multiply_2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7625:portable::matrix_4x5\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7626:portable::matrix_4x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7627:portable::matrix_3x4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7628:portable::matrix_3x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7629:portable::matrix_2x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7630:portable::mask_off_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7631:portable::mask_off_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7632:portable::mask_2pt_conical_nan\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7633:portable::mask_2pt_conical_degenerates\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7634:portable::luminosity\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7635:portable::log_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7636:portable::log2_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7637:portable::load_src_rg\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7638:portable::load_rgf16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7639:portable::load_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7640:portable::load_rg88_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7641:portable::load_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7642:portable::load_rg1616_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7643:portable::load_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7644:portable::load_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7645:portable::load_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7646:portable::load_f32_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7647:portable::load_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7648:portable::load_f16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7649:portable::load_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7650:portable::load_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7651:portable::load_af16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7652:portable::load_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7653:portable::load_a8_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7654:portable::load_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7655:portable::load_a16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7656:portable::load_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7657:portable::load_8888_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7658:portable::load_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7659:portable::load_565_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7660:portable::load_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7661:portable::load_4444_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7662:portable::load_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7663:portable::load_16161616_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7664:portable::load_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7665:portable::load_10x6_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7666:portable::load_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7667:portable::load_1010102_xr_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7668:portable::load_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7669:portable::load_1010102_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7670:portable::load_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7671:portable::lighten\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7672:portable::lerp_u8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7673:portable::lerp_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7674:portable::just_return\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7675:portable::jump\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7676:portable::invsqrt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7677:portable::invsqrt_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7678:portable::invsqrt_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7679:portable::invsqrt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7680:portable::inverted_CMYK_to_RGB1\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7681:portable::inverted_CMYK_to_BGR1\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7682:portable::inverse_mat4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7683:portable::inverse_mat3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7684:portable::inverse_mat2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7685:portable::init_lane_masks\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7686:portable::hue\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7687:portable::hsl_to_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7688:portable::hardlight\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7689:portable::gray_to_RGB1\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7690:portable::grayA_to_rgbA\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7691:portable::grayA_to_RGBA\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7692:portable::gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7693:portable::gauss_a_to_rgba\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7694:portable::gather_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7695:portable::gather_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7696:portable::gather_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7697:portable::gather_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7698:portable::gather_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7699:portable::gather_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7700:portable::gather_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7701:portable::gather_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7702:portable::gather_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7703:portable::gather_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7704:portable::gather_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7705:portable::gather_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7706:portable::gather_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7707:portable::gather_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7708:portable::gather_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7709:portable::gamma_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7710:portable::force_opaque_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7711:portable::force_opaque\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7712:portable::floor_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7713:portable::floor_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7714:portable::floor_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7715:portable::floor_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7716:portable::exp_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7717:portable::exp2_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7718:portable::exclusion\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7719:portable::exchange_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7720:portable::evenly_spaced_gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7721:portable::evenly_spaced_2_stop_gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7722:portable::emboss\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7723:portable::dstover\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7724:portable::dstout\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7725:portable::dstin\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7726:portable::dstatop\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7727:portable::dot_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7728:portable::dot_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7729:portable::dot_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7730:portable::div_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7731:portable::div_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7732:portable::div_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7733:portable::div_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7734:portable::div_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7735:portable::div_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7736:portable::div_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7737:portable::div_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7738:portable::div_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7739:portable::div_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7740:portable::div_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7741:portable::div_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7742:portable::div_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7743:portable::div_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7744:portable::div_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7745:portable::dither\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7746:portable::difference\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7747:portable::decal_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7748:portable::decal_x_and_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7749:portable::decal_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7750:portable::darken\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7751:portable::css_oklab_to_linear_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7752:portable::css_oklab_gamut_map_to_linear_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7753:portable::css_lab_to_xyz\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7754:portable::css_hwb_to_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7755:portable::css_hsl_to_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7756:portable::css_hcl_to_lab\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7757:portable::cos_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7758:portable::copy_uniform\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7759:portable::copy_to_indirect_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7760:portable::copy_slot_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7761:portable::copy_slot_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7762:portable::copy_immutable_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7763:portable::copy_constant\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7764:portable::copy_4_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7765:portable::copy_4_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7766:portable::copy_4_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7767:portable::copy_4_immutables_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7768:portable::copy_3_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7769:portable::copy_3_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7770:portable::copy_3_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7771:portable::copy_3_immutables_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7772:portable::copy_2_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7773:portable::copy_2_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7774:portable::continue_op\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7775:portable::colordodge\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7776:portable::colorburn\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7777:portable::color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7778:portable::cmpne_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7779:portable::cmpne_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7780:portable::cmpne_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7781:portable::cmpne_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7782:portable::cmpne_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7783:portable::cmpne_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7784:portable::cmpne_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7785:portable::cmpne_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7786:portable::cmpne_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7787:portable::cmpne_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7788:portable::cmpne_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7789:portable::cmpne_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7790:portable::cmplt_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7791:portable::cmplt_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7792:portable::cmplt_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7793:portable::cmplt_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7794:portable::cmplt_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7795:portable::cmplt_imm_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7796:portable::cmplt_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7797:portable::cmplt_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7798:portable::cmplt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7799:portable::cmplt_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7800:portable::cmplt_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7801:portable::cmplt_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7802:portable::cmplt_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7803:portable::cmplt_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7804:portable::cmplt_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7805:portable::cmplt_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7806:portable::cmplt_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7807:portable::cmplt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7808:portable::cmple_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7809:portable::cmple_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7810:portable::cmple_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7811:portable::cmple_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7812:portable::cmple_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7813:portable::cmple_imm_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7814:portable::cmple_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7815:portable::cmple_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7816:portable::cmple_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7817:portable::cmple_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7818:portable::cmple_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7819:portable::cmple_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7820:portable::cmple_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7821:portable::cmple_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7822:portable::cmple_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7823:portable::cmple_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7824:portable::cmple_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7825:portable::cmple_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7826:portable::cmpeq_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7827:portable::cmpeq_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7828:portable::cmpeq_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7829:portable::cmpeq_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7830:portable::cmpeq_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7831:portable::cmpeq_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7832:portable::cmpeq_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7833:portable::cmpeq_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7834:portable::cmpeq_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7835:portable::cmpeq_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7836:portable::cmpeq_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7837:portable::cmpeq_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7838:portable::clear\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7839:portable::clamp_x_and_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7840:portable::clamp_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7841:portable::clamp_gamut\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7842:portable::clamp_01\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7843:portable::ceil_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7844:portable::ceil_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7845:portable::ceil_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7846:portable::ceil_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7847:portable::cast_to_uint_from_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7848:portable::cast_to_uint_from_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7849:portable::cast_to_uint_from_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7850:portable::cast_to_uint_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7851:portable::cast_to_int_from_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7852:portable::cast_to_int_from_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7853:portable::cast_to_int_from_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7854:portable::cast_to_int_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7855:portable::cast_to_float_from_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7856:portable::cast_to_float_from_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7857:portable::cast_to_float_from_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7858:portable::cast_to_float_from_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7859:portable::cast_to_float_from_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7860:portable::cast_to_float_from_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7861:portable::cast_to_float_from_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7862:portable::cast_to_float_from_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7863:portable::case_op\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7864:portable::callback\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7865:portable::byte_tables\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7866:portable::bt709_luminance_or_luma_to_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7867:portable::bt709_luminance_or_luma_to_alpha\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7868:portable::branch_if_no_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7869:portable::branch_if_no_active_lanes_eq\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7870:portable::branch_if_any_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7871:portable::branch_if_all_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7872:portable::blit_row_s32a_opaque\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n7873:portable::black_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7874:portable::bitwise_xor_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7875:portable::bitwise_xor_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7876:portable::bitwise_xor_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7877:portable::bitwise_xor_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7878:portable::bitwise_xor_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7879:portable::bitwise_xor_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7880:portable::bitwise_or_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7881:portable::bitwise_or_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7882:portable::bitwise_or_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7883:portable::bitwise_or_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7884:portable::bitwise_or_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7885:portable::bitwise_and_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7886:portable::bitwise_and_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7887:portable::bitwise_and_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7888:portable::bitwise_and_imm_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7889:portable::bitwise_and_imm_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7890:portable::bitwise_and_imm_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7891:portable::bitwise_and_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7892:portable::bitwise_and_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7893:portable::bitwise_and_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7894:portable::bilinear_setup\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7895:portable::bilinear_py\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7896:portable::bilinear_px\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7897:portable::bilinear_ny\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7898:portable::bilinear_nx\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7899:portable::bilerp_clamp_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7900:portable::bicubic_setup\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7901:portable::bicubic_p3y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7902:portable::bicubic_p3x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7903:portable::bicubic_p1y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7904:portable::bicubic_p1x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7905:portable::bicubic_n3y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7906:portable::bicubic_n3x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7907:portable::bicubic_n1y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7908:portable::bicubic_n1x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7909:portable::bicubic_clamp_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7910:portable::atan_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7911:portable::atan2_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7912:portable::asin_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7913:portable::alter_2pt_conical_unswap\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7914:portable::alter_2pt_conical_compensate_focal\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7915:portable::alpha_to_red_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7916:portable::alpha_to_red\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7917:portable::alpha_to_gray_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7918:portable::alpha_to_gray\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7919:portable::add_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7920:portable::add_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7921:portable::add_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7922:portable::add_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7923:portable::add_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7924:portable::add_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7925:portable::add_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7926:portable::add_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7927:portable::add_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7928:portable::add_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7929:portable::add_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7930:portable::add_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7931:portable::acos_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7932:portable::accumulate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7933:portable::abs_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7934:portable::abs_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7935:portable::abs_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7936:portable::abs_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7937:portable::RGB_to_RGB1\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7938:portable::RGB_to_BGR1\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7939:portable::RGBA_to_rgbA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7940:portable::RGBA_to_bgrA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7941:portable::RGBA_to_BGRA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7942:portable::PQish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7943:portable::HLGish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7944:portable::HLGinvish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7945:pop_arg_long_double\n7946:pointerTOCLookupFn\\28UDataMemory\\20const*\\2c\\20char\\20const*\\2c\\20int*\\2c\\20UErrorCode*\\29\n7947:png_read_filter_row_up\n7948:png_read_filter_row_sub\n7949:png_read_filter_row_paeth_multibyte_pixel\n7950:png_read_filter_row_paeth_1byte_pixel\n7951:png_read_filter_row_avg\n7952:pass2_no_dither\n7953:pass2_fs_dither\n7954:override_features_khmer\\28hb_ot_shape_planner_t*\\29\n7955:override_features_indic\\28hb_ot_shape_planner_t*\\29\n7956:override_features_hangul\\28hb_ot_shape_planner_t*\\29\n7957:output_message\\28jpeg_common_struct*\\29\n7958:output_message\n7959:offsetTOCLookupFn\\28UDataMemory\\20const*\\2c\\20char\\20const*\\2c\\20int*\\2c\\20UErrorCode*\\29\n7960:null_convert\n7961:noop_upsample\n7962:non-virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n7963:non-virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n7964:non-virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n7965:non-virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n7966:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.3\n7967:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.2\n7968:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.1\n7969:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29\n7970:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::findAlgorithm\\28SkSize\\2c\\20SkColorType\\29\\20const\n7971:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::blur\\28SkSize\\2c\\20sk_sp<SkSpecialImage>\\2c\\20SkIRect\\20const&\\2c\\20SkTileMode\\2c\\20SkIRect\\20const&\\29\\20const\n7972:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29.1\n7973:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29\n7974:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::evict\\28skgpu::PlotLocator\\29\n7975:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29.1\n7976:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29\n7977:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::preFlush\\28GrOnFlushResourceProvider*\\29\n7978:non-virtual\\20thunk\\20to\\20icu_73::UnicodeSet::~UnicodeSet\\28\\29.1\n7979:non-virtual\\20thunk\\20to\\20icu_73::UnicodeSet::~UnicodeSet\\28\\29\n7980:non-virtual\\20thunk\\20to\\20icu_73::UnicodeSet::toPattern\\28icu_73::UnicodeString&\\2c\\20signed\\20char\\29\\20const\n7981:non-virtual\\20thunk\\20to\\20icu_73::UnicodeSet::matches\\28icu_73::Replaceable\\20const&\\2c\\20int&\\2c\\20int\\2c\\20signed\\20char\\29\n7982:non-virtual\\20thunk\\20to\\20icu_73::UnicodeSet::matchesIndexValue\\28unsigned\\20char\\29\\20const\n7983:non-virtual\\20thunk\\20to\\20icu_73::UnicodeSet::addMatchSetTo\\28icu_73::UnicodeSet&\\29\\20const\n7984:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n7985:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n7986:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n7987:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::instanceFlags\\28\\29\\20const\n7988:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n7989:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29.1\n7990:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29\n7991:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n7992:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n7993:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::glyphCount\\28\\29\\20const\n7994:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n7995:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n7996:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n7997:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n7998:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::instanceFlags\\28\\29\\20const\n7999:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n8000:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n8001:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n8002:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n8003:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n8004:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n8005:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n8006:non-virtual\\20thunk\\20to\\20GrOpFlushState::~GrOpFlushState\\28\\29.1\n8007:non-virtual\\20thunk\\20to\\20GrOpFlushState::~GrOpFlushState\\28\\29\n8008:non-virtual\\20thunk\\20to\\20GrOpFlushState::writeView\\28\\29\\20const\n8009:non-virtual\\20thunk\\20to\\20GrOpFlushState::usesMSAASurface\\28\\29\\20const\n8010:non-virtual\\20thunk\\20to\\20GrOpFlushState::threadSafeCache\\28\\29\\20const\n8011:non-virtual\\20thunk\\20to\\20GrOpFlushState::strikeCache\\28\\29\\20const\n8012:non-virtual\\20thunk\\20to\\20GrOpFlushState::smallPathAtlasManager\\28\\29\\20const\n8013:non-virtual\\20thunk\\20to\\20GrOpFlushState::sampledProxyArray\\28\\29\n8014:non-virtual\\20thunk\\20to\\20GrOpFlushState::rtProxy\\28\\29\\20const\n8015:non-virtual\\20thunk\\20to\\20GrOpFlushState::resourceProvider\\28\\29\\20const\n8016:non-virtual\\20thunk\\20to\\20GrOpFlushState::renderPassBarriers\\28\\29\\20const\n8017:non-virtual\\20thunk\\20to\\20GrOpFlushState::recordDraw\\28GrGeometryProcessor\\20const*\\2c\\20GrSimpleMesh\\20const*\\2c\\20int\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPrimitiveType\\29\n8018:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackVertices\\28int\\2c\\20unsigned\\20long\\29\n8019:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndirectDraws\\28int\\29\n8020:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndices\\28int\\29\n8021:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndexedIndirectDraws\\28int\\29\n8022:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeVertexSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n8023:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeVertexSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n8024:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeIndexSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n8025:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeIndexSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n8026:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeDrawIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n8027:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeDrawIndexedIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n8028:non-virtual\\20thunk\\20to\\20GrOpFlushState::dstProxyView\\28\\29\\20const\n8029:non-virtual\\20thunk\\20to\\20GrOpFlushState::detachAppliedClip\\28\\29\n8030:non-virtual\\20thunk\\20to\\20GrOpFlushState::deferredUploadTarget\\28\\29\n8031:non-virtual\\20thunk\\20to\\20GrOpFlushState::colorLoadOp\\28\\29\\20const\n8032:non-virtual\\20thunk\\20to\\20GrOpFlushState::caps\\28\\29\\20const\n8033:non-virtual\\20thunk\\20to\\20GrOpFlushState::atlasManager\\28\\29\\20const\n8034:non-virtual\\20thunk\\20to\\20GrOpFlushState::appliedClip\\28\\29\\20const\n8035:non-virtual\\20thunk\\20to\\20GrGpuBuffer::~GrGpuBuffer\\28\\29\n8036:non-virtual\\20thunk\\20to\\20GrGpuBuffer::unref\\28\\29\\20const\n8037:non-virtual\\20thunk\\20to\\20GrGpuBuffer::ref\\28\\29\\20const\n8038:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n8039:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n8040:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onSetLabel\\28\\29\n8041:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onRelease\\28\\29\n8042:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n8043:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onAbandon\\28\\29\n8044:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n8045:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::backendFormat\\28\\29\\20const\n8046:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n8047:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n8048:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::hasSecondaryOutput\\28\\29\\20const\n8049:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\\28skgpu::BlendEquation\\29\n8050:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::dstColor\\28\\29\n8051:non-virtual\\20thunk\\20to\\20GrGLBuffer::~GrGLBuffer\\28\\29.1\n8052:non-virtual\\20thunk\\20to\\20GrGLBuffer::~GrGLBuffer\\28\\29\n8053:new_color_map_2_quant\n8054:new_color_map_1_quant\n8055:merged_2v_upsample\n8056:merged_1v_upsample\n8057:locale_cleanup\\28\\29\n8058:lin_srgb_to_oklab\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n8059:lin_srgb_to_okhcl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n8060:legalstub$dynCall_vijjjii\n8061:legalstub$dynCall_vijiii\n8062:legalstub$dynCall_viji\n8063:legalstub$dynCall_vij\n8064:legalstub$dynCall_viijii\n8065:legalstub$dynCall_viij\n8066:legalstub$dynCall_viiij\n8067:legalstub$dynCall_viiiiij\n8068:legalstub$dynCall_jiji\n8069:legalstub$dynCall_jiiiiji\n8070:legalstub$dynCall_jiiiiii\n8071:legalstub$dynCall_jii\n8072:legalstub$dynCall_ji\n8073:legalstub$dynCall_iijjiii\n8074:legalstub$dynCall_iijj\n8075:legalstub$dynCall_iiji\n8076:legalstub$dynCall_iij\n8077:legalstub$dynCall_iiiji\n8078:legalstub$dynCall_iiij\n8079:legalstub$dynCall_iiiij\n8080:legalstub$dynCall_iiiiijj\n8081:legalstub$dynCall_iiiiij\n8082:legalstub$dynCall_iiiiiijj\n8083:legalfunc$glWaitSync\n8084:legalfunc$glClientWaitSync\n8085:lcd_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n8086:layoutGetMaxValue\\28IntProperty\\20const&\\2c\\20UProperty\\29\n8087:jpeg_start_decompress\n8088:jpeg_skip_scanlines\n8089:jpeg_save_markers\n8090:jpeg_resync_to_restart\n8091:jpeg_read_scanlines\n8092:jpeg_read_raw_data\n8093:jpeg_read_header\n8094:jpeg_idct_islow\n8095:jpeg_idct_ifast\n8096:jpeg_idct_float\n8097:jpeg_idct_9x9\n8098:jpeg_idct_7x7\n8099:jpeg_idct_6x6\n8100:jpeg_idct_5x5\n8101:jpeg_idct_4x4\n8102:jpeg_idct_3x3\n8103:jpeg_idct_2x2\n8104:jpeg_idct_1x1\n8105:jpeg_idct_16x16\n8106:jpeg_idct_15x15\n8107:jpeg_idct_14x14\n8108:jpeg_idct_13x13\n8109:jpeg_idct_12x12\n8110:jpeg_idct_11x11\n8111:jpeg_idct_10x10\n8112:jpeg_crop_scanline\n8113:is_deleted_glyph\\28hb_glyph_info_t\\20const*\\29\n8114:isRegionalIndicator\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8115:isPOSIX_xdigit\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8116:isPOSIX_print\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8117:isPOSIX_graph\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8118:isPOSIX_blank\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8119:isPOSIX_alnum\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8120:isNormInert\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8121:isMirrored\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8122:isJoinControl\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8123:isCanonSegmentStarter\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8124:isBidiControl\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8125:isAcceptable\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\n8126:int_upsample\n8127:initial_reordering_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8128:icu_73::uprv_normalizer2_cleanup\\28\\29\n8129:icu_73::uprv_loaded_normalizer2_cleanup\\28\\29\n8130:icu_73::unames_cleanup\\28\\29\n8131:icu_73::umtx_init\\28\\29\n8132:icu_73::umtx_cleanup\\28\\29\n8133:icu_73::sortComparator\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void\\20const*\\29\n8134:icu_73::segmentStarterMapper\\28void\\20const*\\2c\\20unsigned\\20int\\29\n8135:icu_73::isAcceptable\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\n8136:icu_73::compareElementStrings\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void\\20const*\\29\n8137:icu_73::cacheDeleter\\28void*\\29\n8138:icu_73::\\28anonymous\\20namespace\\29::versionFilter\\28int\\2c\\20void*\\29\n8139:icu_73::\\28anonymous\\20namespace\\29::utf16_caseContextIterator\\28void*\\2c\\20signed\\20char\\29\n8140:icu_73::\\28anonymous\\20namespace\\29::numericValueFilter\\28int\\2c\\20void*\\29\n8141:icu_73::\\28anonymous\\20namespace\\29::intPropertyFilter\\28int\\2c\\20void*\\29\n8142:icu_73::\\28anonymous\\20namespace\\29::emojiprops_cleanup\\28\\29\n8143:icu_73::\\28anonymous\\20namespace\\29::cleanupKnownCanonicalized\\28\\29\n8144:icu_73::\\28anonymous\\20namespace\\29::AliasReplacer::replace\\28icu_73::Locale\\20const&\\2c\\20icu_73::CharString&\\2c\\20UErrorCode&\\29::$_1::__invoke\\28void*\\29\n8145:icu_73::\\28anonymous\\20namespace\\29::AliasData::cleanup\\28\\29\n8146:icu_73::UnicodeString::~UnicodeString\\28\\29.1\n8147:icu_73::UnicodeString::handleReplaceBetween\\28int\\2c\\20int\\2c\\20icu_73::UnicodeString\\20const&\\29\n8148:icu_73::UnicodeString::getLength\\28\\29\\20const\n8149:icu_73::UnicodeString::getDynamicClassID\\28\\29\\20const\n8150:icu_73::UnicodeString::getCharAt\\28int\\29\\20const\n8151:icu_73::UnicodeString::extractBetween\\28int\\2c\\20int\\2c\\20icu_73::UnicodeString&\\29\\20const\n8152:icu_73::UnicodeString::copy\\28int\\2c\\20int\\2c\\20int\\29\n8153:icu_73::UnicodeString::clone\\28\\29\\20const\n8154:icu_73::UnicodeSet::~UnicodeSet\\28\\29.1\n8155:icu_73::UnicodeSet::toPattern\\28icu_73::UnicodeString&\\2c\\20signed\\20char\\29\\20const\n8156:icu_73::UnicodeSet::size\\28\\29\\20const\n8157:icu_73::UnicodeSet::retain\\28int\\2c\\20int\\29\n8158:icu_73::UnicodeSet::operator==\\28icu_73::UnicodeSet\\20const&\\29\\20const\n8159:icu_73::UnicodeSet::isEmpty\\28\\29\\20const\n8160:icu_73::UnicodeSet::hashCode\\28\\29\\20const\n8161:icu_73::UnicodeSet::getDynamicClassID\\28\\29\\20const\n8162:icu_73::UnicodeSet::contains\\28int\\2c\\20int\\29\\20const\n8163:icu_73::UnicodeSet::containsAll\\28icu_73::UnicodeSet\\20const&\\29\\20const\n8164:icu_73::UnicodeSet::complement\\28int\\2c\\20int\\29\n8165:icu_73::UnicodeSet::complementAll\\28icu_73::UnicodeSet\\20const&\\29\n8166:icu_73::UnicodeSet::addMatchSetTo\\28icu_73::UnicodeSet&\\29\\20const\n8167:icu_73::UnhandledEngine::~UnhandledEngine\\28\\29.1\n8168:icu_73::UnhandledEngine::~UnhandledEngine\\28\\29\n8169:icu_73::UnhandledEngine::handles\\28int\\29\\20const\n8170:icu_73::UnhandledEngine::handleCharacter\\28int\\29\n8171:icu_73::UnhandledEngine::findBreaks\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n8172:icu_73::UVector::~UVector\\28\\29.1\n8173:icu_73::UVector::getDynamicClassID\\28\\29\\20const\n8174:icu_73::UVector32::~UVector32\\28\\29.1\n8175:icu_73::UVector32::getDynamicClassID\\28\\29\\20const\n8176:icu_73::UStack::getDynamicClassID\\28\\29\\20const\n8177:icu_73::UCharsTrieBuilder::~UCharsTrieBuilder\\28\\29.1\n8178:icu_73::UCharsTrieBuilder::~UCharsTrieBuilder\\28\\29\n8179:icu_73::UCharsTrieBuilder::write\\28int\\29\n8180:icu_73::UCharsTrieBuilder::writeValueAndType\\28signed\\20char\\2c\\20int\\2c\\20int\\29\n8181:icu_73::UCharsTrieBuilder::writeValueAndFinal\\28int\\2c\\20signed\\20char\\29\n8182:icu_73::UCharsTrieBuilder::writeElementUnits\\28int\\2c\\20int\\2c\\20int\\29\n8183:icu_73::UCharsTrieBuilder::writeDeltaTo\\28int\\29\n8184:icu_73::UCharsTrieBuilder::skipElementsBySomeUnits\\28int\\2c\\20int\\2c\\20int\\29\\20const\n8185:icu_73::UCharsTrieBuilder::indexOfElementWithNextUnit\\28int\\2c\\20int\\2c\\20char16_t\\29\\20const\n8186:icu_73::UCharsTrieBuilder::getMinLinearMatch\\28\\29\\20const\n8187:icu_73::UCharsTrieBuilder::getLimitOfLinearMatch\\28int\\2c\\20int\\2c\\20int\\29\\20const\n8188:icu_73::UCharsTrieBuilder::getElementValue\\28int\\29\\20const\n8189:icu_73::UCharsTrieBuilder::getElementUnit\\28int\\2c\\20int\\29\\20const\n8190:icu_73::UCharsTrieBuilder::getElementStringLength\\28int\\29\\20const\n8191:icu_73::UCharsTrieBuilder::createLinearMatchNode\\28int\\2c\\20int\\2c\\20int\\2c\\20icu_73::StringTrieBuilder::Node*\\29\\20const\n8192:icu_73::UCharsTrieBuilder::countElementUnits\\28int\\2c\\20int\\2c\\20int\\29\\20const\n8193:icu_73::UCharsTrieBuilder::UCTLinearMatchNode::write\\28icu_73::StringTrieBuilder&\\29\n8194:icu_73::UCharsTrieBuilder::UCTLinearMatchNode::operator==\\28icu_73::StringTrieBuilder::Node\\20const&\\29\\20const\n8195:icu_73::UCharsDictionaryMatcher::~UCharsDictionaryMatcher\\28\\29.1\n8196:icu_73::UCharsDictionaryMatcher::~UCharsDictionaryMatcher\\28\\29\n8197:icu_73::UCharsDictionaryMatcher::matches\\28UText*\\2c\\20int\\2c\\20int\\2c\\20int*\\2c\\20int*\\2c\\20int*\\2c\\20int*\\29\\20const\n8198:icu_73::UCharCharacterIterator::setIndex\\28int\\29\n8199:icu_73::UCharCharacterIterator::setIndex32\\28int\\29\n8200:icu_73::UCharCharacterIterator::previous\\28\\29\n8201:icu_73::UCharCharacterIterator::previous32\\28\\29\n8202:icu_73::UCharCharacterIterator::operator==\\28icu_73::ForwardCharacterIterator\\20const&\\29\\20const\n8203:icu_73::UCharCharacterIterator::next\\28\\29\n8204:icu_73::UCharCharacterIterator::nextPostInc\\28\\29\n8205:icu_73::UCharCharacterIterator::next32\\28\\29\n8206:icu_73::UCharCharacterIterator::next32PostInc\\28\\29\n8207:icu_73::UCharCharacterIterator::move\\28int\\2c\\20icu_73::CharacterIterator::EOrigin\\29\n8208:icu_73::UCharCharacterIterator::move32\\28int\\2c\\20icu_73::CharacterIterator::EOrigin\\29\n8209:icu_73::UCharCharacterIterator::last\\28\\29\n8210:icu_73::UCharCharacterIterator::last32\\28\\29\n8211:icu_73::UCharCharacterIterator::hashCode\\28\\29\\20const\n8212:icu_73::UCharCharacterIterator::hasPrevious\\28\\29\n8213:icu_73::UCharCharacterIterator::hasNext\\28\\29\n8214:icu_73::UCharCharacterIterator::getText\\28icu_73::UnicodeString&\\29\n8215:icu_73::UCharCharacterIterator::getDynamicClassID\\28\\29\\20const\n8216:icu_73::UCharCharacterIterator::first\\28\\29\n8217:icu_73::UCharCharacterIterator::firstPostInc\\28\\29\n8218:icu_73::UCharCharacterIterator::first32\\28\\29\n8219:icu_73::UCharCharacterIterator::first32PostInc\\28\\29\n8220:icu_73::UCharCharacterIterator::current\\28\\29\\20const\n8221:icu_73::UCharCharacterIterator::current32\\28\\29\\20const\n8222:icu_73::UCharCharacterIterator::clone\\28\\29\\20const\n8223:icu_73::ThaiBreakEngine::~ThaiBreakEngine\\28\\29.1\n8224:icu_73::ThaiBreakEngine::~ThaiBreakEngine\\28\\29\n8225:icu_73::ThaiBreakEngine::divideUpDictionaryRange\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n8226:icu_73::StringTrieBuilder::SplitBranchNode::write\\28icu_73::StringTrieBuilder&\\29\n8227:icu_73::StringTrieBuilder::SplitBranchNode::operator==\\28icu_73::StringTrieBuilder::Node\\20const&\\29\\20const\n8228:icu_73::StringTrieBuilder::SplitBranchNode::markRightEdgesFirst\\28int\\29\n8229:icu_73::StringTrieBuilder::Node::markRightEdgesFirst\\28int\\29\n8230:icu_73::StringTrieBuilder::ListBranchNode::write\\28icu_73::StringTrieBuilder&\\29\n8231:icu_73::StringTrieBuilder::ListBranchNode::operator==\\28icu_73::StringTrieBuilder::Node\\20const&\\29\\20const\n8232:icu_73::StringTrieBuilder::ListBranchNode::markRightEdgesFirst\\28int\\29\n8233:icu_73::StringTrieBuilder::IntermediateValueNode::write\\28icu_73::StringTrieBuilder&\\29\n8234:icu_73::StringTrieBuilder::IntermediateValueNode::operator==\\28icu_73::StringTrieBuilder::Node\\20const&\\29\\20const\n8235:icu_73::StringTrieBuilder::IntermediateValueNode::markRightEdgesFirst\\28int\\29\n8236:icu_73::StringTrieBuilder::FinalValueNode::write\\28icu_73::StringTrieBuilder&\\29\n8237:icu_73::StringTrieBuilder::FinalValueNode::operator==\\28icu_73::StringTrieBuilder::Node\\20const&\\29\\20const\n8238:icu_73::StringTrieBuilder::BranchHeadNode::write\\28icu_73::StringTrieBuilder&\\29\n8239:icu_73::StringEnumeration::unext\\28int*\\2c\\20UErrorCode&\\29\n8240:icu_73::StringEnumeration::snext\\28UErrorCode&\\29\n8241:icu_73::StringEnumeration::operator==\\28icu_73::StringEnumeration\\20const&\\29\\20const\n8242:icu_73::StringEnumeration::operator!=\\28icu_73::StringEnumeration\\20const&\\29\\20const\n8243:icu_73::StringEnumeration::next\\28int*\\2c\\20UErrorCode&\\29\n8244:icu_73::SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory\\28\\29.1\n8245:icu_73::SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory\\28\\29\n8246:icu_73::SimpleLocaleKeyFactory::updateVisibleIDs\\28icu_73::Hashtable&\\2c\\20UErrorCode&\\29\\20const\n8247:icu_73::SimpleLocaleKeyFactory::getDynamicClassID\\28\\29\\20const\n8248:icu_73::SimpleLocaleKeyFactory::create\\28icu_73::ICUServiceKey\\20const&\\2c\\20icu_73::ICUService\\20const*\\2c\\20UErrorCode&\\29\\20const\n8249:icu_73::SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator\\28\\29.1\n8250:icu_73::SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator\\28\\29\n8251:icu_73::SimpleFilteredSentenceBreakIterator::setText\\28icu_73::UnicodeString\\20const&\\29\n8252:icu_73::SimpleFilteredSentenceBreakIterator::setText\\28UText*\\2c\\20UErrorCode&\\29\n8253:icu_73::SimpleFilteredSentenceBreakIterator::refreshInputText\\28UText*\\2c\\20UErrorCode&\\29\n8254:icu_73::SimpleFilteredSentenceBreakIterator::previous\\28\\29\n8255:icu_73::SimpleFilteredSentenceBreakIterator::preceding\\28int\\29\n8256:icu_73::SimpleFilteredSentenceBreakIterator::next\\28int\\29\n8257:icu_73::SimpleFilteredSentenceBreakIterator::next\\28\\29\n8258:icu_73::SimpleFilteredSentenceBreakIterator::last\\28\\29\n8259:icu_73::SimpleFilteredSentenceBreakIterator::isBoundary\\28int\\29\n8260:icu_73::SimpleFilteredSentenceBreakIterator::getUText\\28UText*\\2c\\20UErrorCode&\\29\\20const\n8261:icu_73::SimpleFilteredSentenceBreakIterator::getText\\28\\29\\20const\n8262:icu_73::SimpleFilteredSentenceBreakIterator::following\\28int\\29\n8263:icu_73::SimpleFilteredSentenceBreakIterator::first\\28\\29\n8264:icu_73::SimpleFilteredSentenceBreakIterator::current\\28\\29\\20const\n8265:icu_73::SimpleFilteredSentenceBreakIterator::createBufferClone\\28void*\\2c\\20int&\\2c\\20UErrorCode&\\29\n8266:icu_73::SimpleFilteredSentenceBreakIterator::clone\\28\\29\\20const\n8267:icu_73::SimpleFilteredSentenceBreakIterator::adoptText\\28icu_73::CharacterIterator*\\29\n8268:icu_73::SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData\\28\\29.1\n8269:icu_73::SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData\\28\\29\n8270:icu_73::SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder\\28\\29.1\n8271:icu_73::SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder\\28\\29\n8272:icu_73::SimpleFilteredBreakIteratorBuilder::unsuppressBreakAfter\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\n8273:icu_73::SimpleFilteredBreakIteratorBuilder::suppressBreakAfter\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\n8274:icu_73::SimpleFilteredBreakIteratorBuilder::build\\28icu_73::BreakIterator*\\2c\\20UErrorCode&\\29\n8275:icu_73::SimpleFactory::~SimpleFactory\\28\\29.1\n8276:icu_73::SimpleFactory::~SimpleFactory\\28\\29\n8277:icu_73::SimpleFactory::updateVisibleIDs\\28icu_73::Hashtable&\\2c\\20UErrorCode&\\29\\20const\n8278:icu_73::SimpleFactory::getDynamicClassID\\28\\29\\20const\n8279:icu_73::SimpleFactory::getDisplayName\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::Locale\\20const&\\2c\\20icu_73::UnicodeString&\\29\\20const\n8280:icu_73::SimpleFactory::create\\28icu_73::ICUServiceKey\\20const&\\2c\\20icu_73::ICUService\\20const*\\2c\\20UErrorCode&\\29\\20const\n8281:icu_73::ServiceEnumeration::~ServiceEnumeration\\28\\29.1\n8282:icu_73::ServiceEnumeration::~ServiceEnumeration\\28\\29\n8283:icu_73::ServiceEnumeration::snext\\28UErrorCode&\\29\n8284:icu_73::ServiceEnumeration::reset\\28UErrorCode&\\29\n8285:icu_73::ServiceEnumeration::getDynamicClassID\\28\\29\\20const\n8286:icu_73::ServiceEnumeration::count\\28UErrorCode&\\29\\20const\n8287:icu_73::ServiceEnumeration::clone\\28\\29\\20const\n8288:icu_73::RuleBasedBreakIterator::~RuleBasedBreakIterator\\28\\29.1\n8289:icu_73::RuleBasedBreakIterator::setText\\28icu_73::UnicodeString\\20const&\\29\n8290:icu_73::RuleBasedBreakIterator::setText\\28UText*\\2c\\20UErrorCode&\\29\n8291:icu_73::RuleBasedBreakIterator::refreshInputText\\28UText*\\2c\\20UErrorCode&\\29\n8292:icu_73::RuleBasedBreakIterator::previous\\28\\29\n8293:icu_73::RuleBasedBreakIterator::preceding\\28int\\29\n8294:icu_73::RuleBasedBreakIterator::operator==\\28icu_73::BreakIterator\\20const&\\29\\20const\n8295:icu_73::RuleBasedBreakIterator::next\\28int\\29\n8296:icu_73::RuleBasedBreakIterator::next\\28\\29\n8297:icu_73::RuleBasedBreakIterator::last\\28\\29\n8298:icu_73::RuleBasedBreakIterator::isBoundary\\28int\\29\n8299:icu_73::RuleBasedBreakIterator::hashCode\\28\\29\\20const\n8300:icu_73::RuleBasedBreakIterator::getUText\\28UText*\\2c\\20UErrorCode&\\29\\20const\n8301:icu_73::RuleBasedBreakIterator::getText\\28\\29\\20const\n8302:icu_73::RuleBasedBreakIterator::getRules\\28\\29\\20const\n8303:icu_73::RuleBasedBreakIterator::getRuleStatus\\28\\29\\20const\n8304:icu_73::RuleBasedBreakIterator::getRuleStatusVec\\28int*\\2c\\20int\\2c\\20UErrorCode&\\29\n8305:icu_73::RuleBasedBreakIterator::getDynamicClassID\\28\\29\\20const\n8306:icu_73::RuleBasedBreakIterator::getBinaryRules\\28unsigned\\20int&\\29\n8307:icu_73::RuleBasedBreakIterator::following\\28int\\29\n8308:icu_73::RuleBasedBreakIterator::first\\28\\29\n8309:icu_73::RuleBasedBreakIterator::current\\28\\29\\20const\n8310:icu_73::RuleBasedBreakIterator::createBufferClone\\28void*\\2c\\20int&\\2c\\20UErrorCode&\\29\n8311:icu_73::RuleBasedBreakIterator::clone\\28\\29\\20const\n8312:icu_73::RuleBasedBreakIterator::adoptText\\28icu_73::CharacterIterator*\\29\n8313:icu_73::RuleBasedBreakIterator::BreakCache::~BreakCache\\28\\29.1\n8314:icu_73::RuleBasedBreakIterator::BreakCache::~BreakCache\\28\\29\n8315:icu_73::ResourceDataValue::~ResourceDataValue\\28\\29.1\n8316:icu_73::ResourceDataValue::isNoInheritanceMarker\\28\\29\\20const\n8317:icu_73::ResourceDataValue::getUInt\\28UErrorCode&\\29\\20const\n8318:icu_73::ResourceDataValue::getType\\28\\29\\20const\n8319:icu_73::ResourceDataValue::getTable\\28UErrorCode&\\29\\20const\n8320:icu_73::ResourceDataValue::getStringOrFirstOfArray\\28UErrorCode&\\29\\20const\n8321:icu_73::ResourceDataValue::getStringArray\\28icu_73::UnicodeString*\\2c\\20int\\2c\\20UErrorCode&\\29\\20const\n8322:icu_73::ResourceDataValue::getStringArrayOrStringAsArray\\28icu_73::UnicodeString*\\2c\\20int\\2c\\20UErrorCode&\\29\\20const\n8323:icu_73::ResourceDataValue::getInt\\28UErrorCode&\\29\\20const\n8324:icu_73::ResourceDataValue::getIntVector\\28int&\\2c\\20UErrorCode&\\29\\20const\n8325:icu_73::ResourceDataValue::getBinary\\28int&\\2c\\20UErrorCode&\\29\\20const\n8326:icu_73::ResourceDataValue::getAliasString\\28int&\\2c\\20UErrorCode&\\29\\20const\n8327:icu_73::ResourceBundle::~ResourceBundle\\28\\29.1\n8328:icu_73::ResourceBundle::~ResourceBundle\\28\\29\n8329:icu_73::ResourceBundle::getDynamicClassID\\28\\29\\20const\n8330:icu_73::ParsePosition::getDynamicClassID\\28\\29\\20const\n8331:icu_73::Normalizer2WithImpl::spanQuickCheckYes\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n8332:icu_73::Normalizer2WithImpl::normalize\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::UnicodeString&\\2c\\20UErrorCode&\\29\\20const\n8333:icu_73::Normalizer2WithImpl::normalizeSecondAndAppend\\28icu_73::UnicodeString&\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n8334:icu_73::Normalizer2WithImpl::getRawDecomposition\\28int\\2c\\20icu_73::UnicodeString&\\29\\20const\n8335:icu_73::Normalizer2WithImpl::getDecomposition\\28int\\2c\\20icu_73::UnicodeString&\\29\\20const\n8336:icu_73::Normalizer2WithImpl::getCombiningClass\\28int\\29\\20const\n8337:icu_73::Normalizer2WithImpl::composePair\\28int\\2c\\20int\\29\\20const\n8338:icu_73::Normalizer2WithImpl::append\\28icu_73::UnicodeString&\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n8339:icu_73::Normalizer2Impl::~Normalizer2Impl\\28\\29.1\n8340:icu_73::Normalizer2::normalizeUTF8\\28unsigned\\20int\\2c\\20icu_73::StringPiece\\2c\\20icu_73::ByteSink&\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\\20const\n8341:icu_73::Normalizer2::isNormalizedUTF8\\28icu_73::StringPiece\\2c\\20UErrorCode&\\29\\20const\n8342:icu_73::NoopNormalizer2::spanQuickCheckYes\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n8343:icu_73::NoopNormalizer2::normalize\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::UnicodeString&\\2c\\20UErrorCode&\\29\\20const\n8344:icu_73::NoopNormalizer2::normalizeUTF8\\28unsigned\\20int\\2c\\20icu_73::StringPiece\\2c\\20icu_73::ByteSink&\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\\20const\n8345:icu_73::MlBreakEngine::~MlBreakEngine\\28\\29.1\n8346:icu_73::LocaleKeyFactory::~LocaleKeyFactory\\28\\29.1\n8347:icu_73::LocaleKeyFactory::updateVisibleIDs\\28icu_73::Hashtable&\\2c\\20UErrorCode&\\29\\20const\n8348:icu_73::LocaleKeyFactory::handlesKey\\28icu_73::ICUServiceKey\\20const&\\2c\\20UErrorCode&\\29\\20const\n8349:icu_73::LocaleKeyFactory::getDynamicClassID\\28\\29\\20const\n8350:icu_73::LocaleKeyFactory::getDisplayName\\28icu_73::UnicodeString\\20const&\\2c\\20icu_73::Locale\\20const&\\2c\\20icu_73::UnicodeString&\\29\\20const\n8351:icu_73::LocaleKeyFactory::create\\28icu_73::ICUServiceKey\\20const&\\2c\\20icu_73::ICUService\\20const*\\2c\\20UErrorCode&\\29\\20const\n8352:icu_73::LocaleKey::~LocaleKey\\28\\29.1\n8353:icu_73::LocaleKey::~LocaleKey\\28\\29\n8354:icu_73::LocaleKey::prefix\\28icu_73::UnicodeString&\\29\\20const\n8355:icu_73::LocaleKey::isFallbackOf\\28icu_73::UnicodeString\\20const&\\29\\20const\n8356:icu_73::LocaleKey::getDynamicClassID\\28\\29\\20const\n8357:icu_73::LocaleKey::fallback\\28\\29\n8358:icu_73::LocaleKey::currentLocale\\28icu_73::Locale&\\29\\20const\n8359:icu_73::LocaleKey::currentID\\28icu_73::UnicodeString&\\29\\20const\n8360:icu_73::LocaleKey::currentDescriptor\\28icu_73::UnicodeString&\\29\\20const\n8361:icu_73::LocaleKey::canonicalLocale\\28icu_73::Locale&\\29\\20const\n8362:icu_73::LocaleKey::canonicalID\\28icu_73::UnicodeString&\\29\\20const\n8363:icu_73::LocaleBuilder::~LocaleBuilder\\28\\29.1\n8364:icu_73::Locale::~Locale\\28\\29.1\n8365:icu_73::Locale::getDynamicClassID\\28\\29\\20const\n8366:icu_73::LoadedNormalizer2Impl::~LoadedNormalizer2Impl\\28\\29.1\n8367:icu_73::LoadedNormalizer2Impl::~LoadedNormalizer2Impl\\28\\29\n8368:icu_73::LoadedNormalizer2Impl::isAcceptable\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\n8369:icu_73::LaoBreakEngine::~LaoBreakEngine\\28\\29.1\n8370:icu_73::LaoBreakEngine::~LaoBreakEngine\\28\\29\n8371:icu_73::LSTMBreakEngine::~LSTMBreakEngine\\28\\29.1\n8372:icu_73::LSTMBreakEngine::~LSTMBreakEngine\\28\\29\n8373:icu_73::LSTMBreakEngine::name\\28\\29\\20const\n8374:icu_73::LSTMBreakEngine::divideUpDictionaryRange\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n8375:icu_73::KhmerBreakEngine::~KhmerBreakEngine\\28\\29.1\n8376:icu_73::KhmerBreakEngine::~KhmerBreakEngine\\28\\29\n8377:icu_73::KhmerBreakEngine::divideUpDictionaryRange\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n8378:icu_73::KeywordEnumeration::~KeywordEnumeration\\28\\29.1\n8379:icu_73::KeywordEnumeration::~KeywordEnumeration\\28\\29\n8380:icu_73::KeywordEnumeration::snext\\28UErrorCode&\\29\n8381:icu_73::KeywordEnumeration::reset\\28UErrorCode&\\29\n8382:icu_73::KeywordEnumeration::next\\28int*\\2c\\20UErrorCode&\\29\n8383:icu_73::KeywordEnumeration::getDynamicClassID\\28\\29\\20const\n8384:icu_73::KeywordEnumeration::count\\28UErrorCode&\\29\\20const\n8385:icu_73::KeywordEnumeration::clone\\28\\29\\20const\n8386:icu_73::ICUServiceKey::~ICUServiceKey\\28\\29.1\n8387:icu_73::ICUServiceKey::isFallbackOf\\28icu_73::UnicodeString\\20const&\\29\\20const\n8388:icu_73::ICUServiceKey::getDynamicClassID\\28\\29\\20const\n8389:icu_73::ICUServiceKey::currentDescriptor\\28icu_73::UnicodeString&\\29\\20const\n8390:icu_73::ICUServiceKey::canonicalID\\28icu_73::UnicodeString&\\29\\20const\n8391:icu_73::ICUService::unregister\\28void\\20const*\\2c\\20UErrorCode&\\29\n8392:icu_73::ICUService::reset\\28\\29\n8393:icu_73::ICUService::registerInstance\\28icu_73::UObject*\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\n8394:icu_73::ICUService::registerFactory\\28icu_73::ICUServiceFactory*\\2c\\20UErrorCode&\\29\n8395:icu_73::ICUService::reInitializeFactories\\28\\29\n8396:icu_73::ICUService::notifyListener\\28icu_73::EventListener&\\29\\20const\n8397:icu_73::ICUService::isDefault\\28\\29\\20const\n8398:icu_73::ICUService::getKey\\28icu_73::ICUServiceKey&\\2c\\20icu_73::UnicodeString*\\2c\\20UErrorCode&\\29\\20const\n8399:icu_73::ICUService::createSimpleFactory\\28icu_73::UObject*\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\n8400:icu_73::ICUService::createKey\\28icu_73::UnicodeString\\20const*\\2c\\20UErrorCode&\\29\\20const\n8401:icu_73::ICUService::clearCaches\\28\\29\n8402:icu_73::ICUService::acceptsListener\\28icu_73::EventListener\\20const&\\29\\20const\n8403:icu_73::ICUResourceBundleFactory::~ICUResourceBundleFactory\\28\\29.1\n8404:icu_73::ICUResourceBundleFactory::handleCreate\\28icu_73::Locale\\20const&\\2c\\20int\\2c\\20icu_73::ICUService\\20const*\\2c\\20UErrorCode&\\29\\20const\n8405:icu_73::ICUResourceBundleFactory::getSupportedIDs\\28UErrorCode&\\29\\20const\n8406:icu_73::ICUResourceBundleFactory::getDynamicClassID\\28\\29\\20const\n8407:icu_73::ICUNotifier::removeListener\\28icu_73::EventListener\\20const*\\2c\\20UErrorCode&\\29\n8408:icu_73::ICUNotifier::notifyChanged\\28\\29\n8409:icu_73::ICUNotifier::addListener\\28icu_73::EventListener\\20const*\\2c\\20UErrorCode&\\29\n8410:icu_73::ICULocaleService::registerInstance\\28icu_73::UObject*\\2c\\20icu_73::UnicodeString\\20const&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\n8411:icu_73::ICULocaleService::registerInstance\\28icu_73::UObject*\\2c\\20icu_73::Locale\\20const&\\2c\\20int\\2c\\20int\\2c\\20UErrorCode&\\29\n8412:icu_73::ICULocaleService::registerInstance\\28icu_73::UObject*\\2c\\20icu_73::Locale\\20const&\\2c\\20int\\2c\\20UErrorCode&\\29\n8413:icu_73::ICULocaleService::registerInstance\\28icu_73::UObject*\\2c\\20icu_73::Locale\\20const&\\2c\\20UErrorCode&\\29\n8414:icu_73::ICULocaleService::getAvailableLocales\\28\\29\\20const\n8415:icu_73::ICULocaleService::createKey\\28icu_73::UnicodeString\\20const*\\2c\\20int\\2c\\20UErrorCode&\\29\\20const\n8416:icu_73::ICULocaleService::createKey\\28icu_73::UnicodeString\\20const*\\2c\\20UErrorCode&\\29\\20const\n8417:icu_73::ICULanguageBreakFactory::~ICULanguageBreakFactory\\28\\29.1\n8418:icu_73::ICULanguageBreakFactory::~ICULanguageBreakFactory\\28\\29\n8419:icu_73::ICULanguageBreakFactory::loadEngineFor\\28int\\29\n8420:icu_73::ICULanguageBreakFactory::loadDictionaryMatcherFor\\28UScriptCode\\29\n8421:icu_73::ICULanguageBreakFactory::getEngineFor\\28int\\29\n8422:icu_73::ICUBreakIteratorService::~ICUBreakIteratorService\\28\\29.1\n8423:icu_73::ICUBreakIteratorService::~ICUBreakIteratorService\\28\\29\n8424:icu_73::ICUBreakIteratorService::isDefault\\28\\29\\20const\n8425:icu_73::ICUBreakIteratorService::handleDefault\\28icu_73::ICUServiceKey\\20const&\\2c\\20icu_73::UnicodeString*\\2c\\20UErrorCode&\\29\\20const\n8426:icu_73::ICUBreakIteratorService::cloneInstance\\28icu_73::UObject*\\29\\20const\n8427:icu_73::ICUBreakIteratorFactory::~ICUBreakIteratorFactory\\28\\29.1\n8428:icu_73::ICUBreakIteratorFactory::~ICUBreakIteratorFactory\\28\\29\n8429:icu_73::ICUBreakIteratorFactory::handleCreate\\28icu_73::Locale\\20const&\\2c\\20int\\2c\\20icu_73::ICUService\\20const*\\2c\\20UErrorCode&\\29\\20const\n8430:icu_73::GraphemeClusterVectorizer::vectorize\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20icu_73::UVector32&\\2c\\20UErrorCode&\\29\\20const\n8431:icu_73::FCDNormalizer2::spanQuickCheckYes\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20UErrorCode&\\29\\20const\n8432:icu_73::FCDNormalizer2::normalize\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n8433:icu_73::FCDNormalizer2::normalizeAndAppend\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20signed\\20char\\2c\\20icu_73::UnicodeString&\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n8434:icu_73::FCDNormalizer2::isInert\\28int\\29\\20const\n8435:icu_73::EmojiProps::isAcceptable\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\n8436:icu_73::DictionaryBreakEngine::setCharacters\\28icu_73::UnicodeSet\\20const&\\29\n8437:icu_73::DictionaryBreakEngine::handles\\28int\\29\\20const\n8438:icu_73::DictionaryBreakEngine::findBreaks\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n8439:icu_73::DecomposeNormalizer2::spanQuickCheckYes\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20UErrorCode&\\29\\20const\n8440:icu_73::DecomposeNormalizer2::normalize\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n8441:icu_73::DecomposeNormalizer2::normalizeUTF8\\28unsigned\\20int\\2c\\20icu_73::StringPiece\\2c\\20icu_73::ByteSink&\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\\20const\n8442:icu_73::DecomposeNormalizer2::normalizeAndAppend\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20signed\\20char\\2c\\20icu_73::UnicodeString&\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n8443:icu_73::DecomposeNormalizer2::isNormalizedUTF8\\28icu_73::StringPiece\\2c\\20UErrorCode&\\29\\20const\n8444:icu_73::DecomposeNormalizer2::isInert\\28int\\29\\20const\n8445:icu_73::DecomposeNormalizer2::getQuickCheck\\28int\\29\\20const\n8446:icu_73::ConstArray2D::get\\28int\\2c\\20int\\29\\20const\n8447:icu_73::ConstArray1D::get\\28int\\29\\20const\n8448:icu_73::ComposeNormalizer2::spanQuickCheckYes\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20UErrorCode&\\29\\20const\n8449:icu_73::ComposeNormalizer2::quickCheck\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n8450:icu_73::ComposeNormalizer2::normalize\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n8451:icu_73::ComposeNormalizer2::normalizeUTF8\\28unsigned\\20int\\2c\\20icu_73::StringPiece\\2c\\20icu_73::ByteSink&\\2c\\20icu_73::Edits*\\2c\\20UErrorCode&\\29\\20const\n8452:icu_73::ComposeNormalizer2::normalizeAndAppend\\28char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20signed\\20char\\2c\\20icu_73::UnicodeString&\\2c\\20icu_73::ReorderingBuffer&\\2c\\20UErrorCode&\\29\\20const\n8453:icu_73::ComposeNormalizer2::isNormalized\\28icu_73::UnicodeString\\20const&\\2c\\20UErrorCode&\\29\\20const\n8454:icu_73::ComposeNormalizer2::isNormalizedUTF8\\28icu_73::StringPiece\\2c\\20UErrorCode&\\29\\20const\n8455:icu_73::ComposeNormalizer2::isInert\\28int\\29\\20const\n8456:icu_73::ComposeNormalizer2::hasBoundaryBefore\\28int\\29\\20const\n8457:icu_73::ComposeNormalizer2::hasBoundaryAfter\\28int\\29\\20const\n8458:icu_73::ComposeNormalizer2::getQuickCheck\\28int\\29\\20const\n8459:icu_73::CodePointsVectorizer::vectorize\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20icu_73::UVector32&\\2c\\20UErrorCode&\\29\\20const\n8460:icu_73::CjkBreakEngine::~CjkBreakEngine\\28\\29.1\n8461:icu_73::CjkBreakEngine::divideUpDictionaryRange\\28UText*\\2c\\20int\\2c\\20int\\2c\\20icu_73::UVector32&\\2c\\20signed\\20char\\2c\\20UErrorCode&\\29\\20const\n8462:icu_73::CheckedArrayByteSink::Reset\\28\\29\n8463:icu_73::CheckedArrayByteSink::GetAppendBuffer\\28int\\2c\\20int\\2c\\20char*\\2c\\20int\\2c\\20int*\\29\n8464:icu_73::CheckedArrayByteSink::Append\\28char\\20const*\\2c\\20int\\29\n8465:icu_73::CharacterIterator::firstPostInc\\28\\29\n8466:icu_73::CharacterIterator::first32PostInc\\28\\29\n8467:icu_73::CharStringByteSink::GetAppendBuffer\\28int\\2c\\20int\\2c\\20char*\\2c\\20int\\2c\\20int*\\29\n8468:icu_73::CharStringByteSink::Append\\28char\\20const*\\2c\\20int\\29\n8469:icu_73::BytesDictionaryMatcher::~BytesDictionaryMatcher\\28\\29.1\n8470:icu_73::BytesDictionaryMatcher::~BytesDictionaryMatcher\\28\\29\n8471:icu_73::BytesDictionaryMatcher::matches\\28UText*\\2c\\20int\\2c\\20int\\2c\\20int*\\2c\\20int*\\2c\\20int*\\2c\\20int*\\29\\20const\n8472:icu_73::BurmeseBreakEngine::~BurmeseBreakEngine\\28\\29.1\n8473:icu_73::BurmeseBreakEngine::~BurmeseBreakEngine\\28\\29\n8474:icu_73::BreakIterator::getRuleStatusVec\\28int*\\2c\\20int\\2c\\20UErrorCode&\\29\n8475:icu_73::BMPSet::contains\\28int\\29\\20const\n8476:icu_73::Array1D::~Array1D\\28\\29.1\n8477:icu_73::Array1D::~Array1D\\28\\29\n8478:icu_73::Array1D::get\\28int\\29\\20const\n8479:hit_compare_y\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n8480:hit_compare_x\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n8481:hb_unicode_script_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8482:hb_unicode_general_category_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8483:hb_ucd_script\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8484:hb_ucd_mirroring\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8485:hb_ucd_general_category\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8486:hb_ucd_decompose\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8487:hb_ucd_compose\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8488:hb_ucd_combining_class\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8489:hb_syllabic_clear_var\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8490:hb_paint_sweep_gradient_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8491:hb_paint_push_transform_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8492:hb_paint_push_clip_rectangle_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8493:hb_paint_image_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n8494:hb_paint_extents_push_transform\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8495:hb_paint_extents_push_group\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n8496:hb_paint_extents_push_clip_rectangle\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8497:hb_paint_extents_push_clip_glyph\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_font_t*\\2c\\20void*\\29\n8498:hb_paint_extents_pop_transform\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n8499:hb_paint_extents_pop_group\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_paint_composite_mode_t\\2c\\20void*\\29\n8500:hb_paint_extents_pop_clip\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n8501:hb_paint_extents_paint_sweep_gradient\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8502:hb_paint_extents_paint_image\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n8503:hb_paint_extents_paint_color\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8504:hb_outline_recording_pen_quadratic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8505:hb_outline_recording_pen_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8506:hb_outline_recording_pen_line_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8507:hb_outline_recording_pen_cubic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8508:hb_outline_recording_pen_close_path\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20void*\\29\n8509:hb_ot_paint_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8510:hb_ot_map_t::lookup_map_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n8511:hb_ot_map_t::feature_map_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n8512:hb_ot_map_builder_t::feature_info_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n8513:hb_ot_get_variation_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8514:hb_ot_get_nominal_glyphs\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8515:hb_ot_get_nominal_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8516:hb_ot_get_glyph_v_origin\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8517:hb_ot_get_glyph_v_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8518:hb_ot_get_glyph_name\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8519:hb_ot_get_glyph_h_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8520:hb_ot_get_glyph_from_name\\28hb_font_t*\\2c\\20void*\\2c\\20char\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8521:hb_ot_get_glyph_extents\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n8522:hb_ot_get_font_v_extents\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n8523:hb_ot_get_font_h_extents\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n8524:hb_ot_draw_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n8525:hb_font_paint_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8526:hb_font_get_variation_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8527:hb_font_get_nominal_glyphs_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8528:hb_font_get_nominal_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8529:hb_font_get_nominal_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8530:hb_font_get_glyph_v_origin_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8531:hb_font_get_glyph_v_origin_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8532:hb_font_get_glyph_v_kerning_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8533:hb_font_get_glyph_v_advances_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8534:hb_font_get_glyph_v_advance_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8535:hb_font_get_glyph_v_advance_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8536:hb_font_get_glyph_name_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8537:hb_font_get_glyph_name_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8538:hb_font_get_glyph_h_origin_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8539:hb_font_get_glyph_h_origin_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8540:hb_font_get_glyph_h_kerning_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8541:hb_font_get_glyph_h_advances_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8542:hb_font_get_glyph_h_advance_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8543:hb_font_get_glyph_h_advance_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8544:hb_font_get_glyph_from_name_default\\28hb_font_t*\\2c\\20void*\\2c\\20char\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8545:hb_font_get_glyph_extents_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n8546:hb_font_get_glyph_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n8547:hb_font_get_glyph_contour_point_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8548:hb_font_get_glyph_contour_point_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n8549:hb_font_get_font_v_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n8550:hb_font_get_font_h_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n8551:hb_font_draw_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n8552:hb_draw_quadratic_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8553:hb_draw_quadratic_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8554:hb_draw_move_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8555:hb_draw_line_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8556:hb_draw_extents_quadratic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8557:hb_draw_extents_cubic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8558:hb_draw_cubic_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n8559:hb_draw_close_path_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20void*\\29\n8560:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::hhea>\\28hb_blob_t*\\29\n8561:hb_aat_map_builder_t::feature_info_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n8562:hb_aat_map_builder_t::feature_event_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n8563:hashStringTrieNode\\28UElement\\29\n8564:hashEntry\\28UElement\\29\n8565:hasFullCompositionExclusion\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8566:hasEmojiProperty\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8567:h2v2_upsample\n8568:h2v2_merged_upsample_565D\n8569:h2v2_merged_upsample_565\n8570:h2v2_merged_upsample\n8571:h2v2_fancy_upsample\n8572:h2v1_upsample\n8573:h2v1_merged_upsample_565D\n8574:h2v1_merged_upsample_565\n8575:h2v1_merged_upsample\n8576:h2v1_fancy_upsample\n8577:grayscale_convert\n8578:gray_rgb_convert\n8579:gray_rgb565_convert\n8580:gray_rgb565D_convert\n8581:gray_raster_render\n8582:gray_raster_new\n8583:gray_raster_done\n8584:gray_move_to\n8585:gray_line_to\n8586:gray_cubic_to\n8587:gray_conic_to\n8588:get_sk_marker_list\\28jpeg_decompress_struct*\\29\n8589:get_sfnt_table\n8590:get_interesting_appn\n8591:getVo\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8592:getTrailCombiningClass\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8593:getScript\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8594:getNumericType\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8595:getNormQuickCheck\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8596:getLeadCombiningClass\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8597:getJoiningType\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8598:getJoiningGroup\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8599:getInSC\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8600:getInPC\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8601:getHangulSyllableType\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8602:getGeneralCategory\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8603:getCombiningClass\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8604:getBiDiPairedBracketType\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8605:getBiDiClass\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8606:fullsize_upsample\n8607:ft_smooth_transform\n8608:ft_smooth_set_mode\n8609:ft_smooth_render\n8610:ft_smooth_overlap_spans\n8611:ft_smooth_lcd_spans\n8612:ft_smooth_init\n8613:ft_smooth_get_cbox\n8614:ft_gzip_free\n8615:ft_gzip_alloc\n8616:ft_ansi_stream_io\n8617:ft_ansi_stream_close\n8618:fquad_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n8619:format_message\n8620:fmt_fp\n8621:fline_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n8622:first_axis_intersection\\28double\\20const*\\2c\\20bool\\2c\\20double\\2c\\20double*\\29\n8623:finish_pass1\n8624:finish_output_pass\n8625:finish_input_pass\n8626:final_reordering_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8627:fcubic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n8628:fconic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n8629:fast_swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8630:fast_swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8631:fast_swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8632:fast_swizzle_rgb_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8633:fast_swizzle_rgb_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8634:fast_swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8635:fast_swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8636:fast_swizzle_gray_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8637:fast_swizzle_cmyk_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8638:fast_swizzle_cmyk_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8639:error_exit\n8640:error_callback\n8641:equalStringTrieNodes\\28UElement\\2c\\20UElement\\29\n8642:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkTextBlob>*\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n8643:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n8644:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n8645:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\2c\\20float\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8646:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\29\n8647:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20SkPath\\20const&\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20SkPath*\\2c\\20SkPaint*\\29\n8648:emscripten::internal::MethodInvoker<skia::textlayout::SkRange<unsigned\\20long>\\20\\28skia::textlayout::Paragraph::*\\29\\28unsigned\\20int\\29\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::Paragraph*\\2c\\20unsigned\\20int>::invoke\\28skia::textlayout::SkRange<unsigned\\20long>\\20\\28skia::textlayout::Paragraph::*\\20const&\\29\\28unsigned\\20int\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20unsigned\\20int\\29\n8649:emscripten::internal::MethodInvoker<skia::textlayout::PositionWithAffinity\\20\\28skia::textlayout::Paragraph::*\\29\\28float\\2c\\20float\\29\\2c\\20skia::textlayout::PositionWithAffinity\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float>::invoke\\28skia::textlayout::PositionWithAffinity\\20\\28skia::textlayout::Paragraph::*\\20const&\\29\\28float\\2c\\20float\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n8650:emscripten::internal::MethodInvoker<int\\20\\28skia::textlayout::Paragraph::*\\29\\28unsigned\\20long\\29\\20const\\2c\\20int\\2c\\20skia::textlayout::Paragraph\\20const*\\2c\\20unsigned\\20long>::invoke\\28int\\20\\28skia::textlayout::Paragraph::*\\20const&\\29\\28unsigned\\20long\\29\\20const\\2c\\20skia::textlayout::Paragraph\\20const*\\2c\\20unsigned\\20long\\29\n8651:emscripten::internal::MethodInvoker<bool\\20\\28SkPath::*\\29\\28float\\2c\\20float\\29\\20const\\2c\\20bool\\2c\\20SkPath\\20const*\\2c\\20float\\2c\\20float>::invoke\\28bool\\20\\28SkPath::*\\20const&\\29\\28float\\2c\\20float\\29\\20const\\2c\\20SkPath\\20const*\\2c\\20float\\2c\\20float\\29\n8652:emscripten::internal::MethodInvoker<SkPath&\\20\\28SkPath::*\\29\\28bool\\29\\2c\\20SkPath&\\2c\\20SkPath*\\2c\\20bool>::invoke\\28SkPath&\\20\\28SkPath::*\\20const&\\29\\28bool\\29\\2c\\20SkPath*\\2c\\20bool\\29\n8653:emscripten::internal::Invoker<void\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8654:emscripten::internal::Invoker<void\\2c\\20emscripten::val>::invoke\\28void\\20\\28*\\29\\28emscripten::val\\29\\2c\\20emscripten::_EM_VAL*\\29\n8655:emscripten::internal::Invoker<unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28unsigned\\20long\\20\\28*\\29\\28unsigned\\20long\\29\\2c\\20unsigned\\20long\\29\n8656:emscripten::internal::Invoker<sk_sp<SkTextBlob>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&>::invoke\\28sk_sp<SkTextBlob>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont*\\29\n8657:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>*\\2c\\20int\\2c\\20int\\29\n8658:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>*\\29\n8659:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20int\\2c\\20int\\29\n8660:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20SimpleImageInfo>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20SimpleImageInfo\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20SimpleImageInfo*\\29\n8661:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8662:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n8663:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n8664:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n8665:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n8666:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\\2c\\20float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\n8667:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n8668:emscripten::internal::Invoker<sk_sp<SkRuntimeEffect>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val>::invoke\\28sk_sp<SkRuntimeEffect>\\20\\28*\\29\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\2c\\20emscripten::_EM_VAL*\\29\n8669:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20float>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28unsigned\\20long\\2c\\20int\\2c\\20float\\29\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20float\\29\n8670:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20unsigned\\20long\\2c\\20SkPath>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkPath\\29\\2c\\20unsigned\\20long\\2c\\20SkPath*\\29\n8671:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20float\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28float\\2c\\20unsigned\\20long\\29\\2c\\20float\\2c\\20unsigned\\20long\\29\n8672:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20unsigned\\20int\\29\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\29\n8673:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20float>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28float\\29\\2c\\20float\\29\n8674:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style\\29\n8675:emscripten::internal::Invoker<sk_sp<SkMaskFilter>\\2c\\20SkBlurStyle\\2c\\20float\\2c\\20bool>::invoke\\28sk_sp<SkMaskFilter>\\20\\28*\\29\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\\2c\\20SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n8676:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>*\\29\n8677:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>*\\29\n8678:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkShader>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkShader>\\29\\2c\\20sk_sp<SkShader>*\\29\n8679:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImage>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8680:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImage>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8681:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>*\\29\n8682:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>*\\29\n8683:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>*\\29\n8684:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>*\\2c\\20sk_sp<SkImageFilter>*\\29\n8685:emscripten::internal::Invoker<sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImage>\\20\\28*\\29\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\29\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\29\n8686:emscripten::internal::Invoker<sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20emscripten::val>::invoke\\28sk_sp<SkImage>\\20\\28*\\29\\28SimpleImageInfo\\2c\\20emscripten::val\\29\\2c\\20SimpleImageInfo*\\2c\\20emscripten::_EM_VAL*\\29\n8687:emscripten::internal::Invoker<sk_sp<SkColorFilter>\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkColorFilter>\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>*\\29\n8688:emscripten::internal::Invoker<sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>>::invoke\\28sk_sp<SkColorFilter>\\20\\28*\\29\\28sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>\\29\\2c\\20sk_sp<SkColorFilter>*\\2c\\20sk_sp<SkColorFilter>*\\29\n8689:emscripten::internal::Invoker<sk_sp<SkColorFilter>\\2c\\20float\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>>::invoke\\28sk_sp<SkColorFilter>\\20\\28*\\29\\28float\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>\\29\\2c\\20float\\2c\\20sk_sp<SkColorFilter>*\\2c\\20sk_sp<SkColorFilter>*\\29\n8690:emscripten::internal::Invoker<emscripten::val\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28emscripten::val\\20\\28*\\29\\28unsigned\\20long\\2c\\20int\\29\\2c\\20unsigned\\20long\\2c\\20int\\29\n8691:emscripten::internal::Invoker<emscripten::val\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>::invoke\\28emscripten::val\\20\\28*\\29\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\29\n8692:emscripten::internal::Invoker<emscripten::val\\2c\\20emscripten::val\\2c\\20emscripten::val\\2c\\20float>::invoke\\28emscripten::val\\20\\28*\\29\\28emscripten::val\\2c\\20emscripten::val\\2c\\20float\\29\\2c\\20emscripten::_EM_VAL*\\2c\\20emscripten::_EM_VAL*\\2c\\20float\\29\n8693:emscripten::internal::Invoker<emscripten::val\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20float>::invoke\\28emscripten::val\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20float\\29\n8694:emscripten::internal::Invoker<emscripten::val\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp>::invoke\\28emscripten::val\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20SkPathOp\\29\n8695:emscripten::internal::Invoker<bool\\2c\\20unsigned\\20long\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long>::invoke\\28bool\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\\2c\\20unsigned\\20long\\2c\\20SkPath*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\n8696:emscripten::internal::Invoker<bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>>::invoke\\28bool\\20\\28*\\29\\28sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20sk_sp<SkColorSpace>*\\2c\\20sk_sp<SkColorSpace>*\\29\n8697:emscripten::internal::Invoker<bool\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&>::invoke\\28bool\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\\2c\\20SkPath*\\2c\\20SkPath*\\29\n8698:emscripten::internal::Invoker<SkVertices::Builder*\\2c\\20SkVertices::VertexMode&&\\2c\\20int&&\\2c\\20int&&\\2c\\20unsigned\\20int&&>::invoke\\28SkVertices::Builder*\\20\\28*\\29\\28SkVertices::VertexMode&&\\2c\\20int&&\\2c\\20int&&\\2c\\20unsigned\\20int&&\\29\\2c\\20SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n8699:emscripten::internal::Invoker<SkRuntimeEffect::TracedShader\\2c\\20sk_sp<SkShader>\\2c\\20int\\2c\\20int>::invoke\\28SkRuntimeEffect::TracedShader\\20\\28*\\29\\28sk_sp<SkShader>\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<SkShader>*\\2c\\20int\\2c\\20int\\29\n8700:emscripten::internal::Invoker<SkPath\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28SkPath\\20\\28*\\29\\28unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n8701:emscripten::internal::Invoker<SkFont*\\2c\\20sk_sp<SkTypeface>&&\\2c\\20float&&\\2c\\20float&&\\2c\\20float&&>::invoke\\28SkFont*\\20\\28*\\29\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\2c\\20float&&\\2c\\20float&&\\29\\2c\\20sk_sp<SkTypeface>*\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8702:emscripten::internal::Invoker<SkFont*\\2c\\20sk_sp<SkTypeface>&&\\2c\\20float&&>::invoke\\28SkFont*\\20\\28*\\29\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\29\\2c\\20sk_sp<SkTypeface>*\\2c\\20float\\29\n8703:emscripten::internal::Invoker<SkFont*\\2c\\20sk_sp<SkTypeface>&&>::invoke\\28SkFont*\\20\\28*\\29\\28sk_sp<SkTypeface>&&\\29\\2c\\20sk_sp<SkTypeface>*\\29\n8704:emscripten::internal::Invoker<SkContourMeasureIter*\\2c\\20SkPath\\20const&\\2c\\20bool&&\\2c\\20float&&>::invoke\\28SkContourMeasureIter*\\20\\28*\\29\\28SkPath\\20const&\\2c\\20bool&&\\2c\\20float&&\\29\\2c\\20SkPath*\\2c\\20bool\\2c\\20float\\29\n8705:emscripten::internal::Invoker<SkCanvas*\\2c\\20float&&\\2c\\20float&&>::invoke\\28SkCanvas*\\20\\28*\\29\\28float&&\\2c\\20float&&\\29\\2c\\20float\\2c\\20float\\29\n8706:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long\\29\\2c\\20void\\2c\\20skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long\\29\\2c\\20skia::textlayout::TypefaceFontProvider*\\2c\\20sk_sp<SkTypeface>*\\2c\\20unsigned\\20long\\29\n8707:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\29\n8708:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\n8709:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20SimpleTextStyle*\\2c\\20SkPaint*\\2c\\20SkPaint*\\29\n8710:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20SimpleTextStyle*\\29\n8711:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8712:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8713:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8714:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n8715:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8716:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8717:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20void\\2c\\20SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28**\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20SkContourMeasure*\\2c\\20float\\2c\\20unsigned\\20long\\29\n8718:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont*\\2c\\20SkPaint*\\29\n8719:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint*\\29\n8720:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8721:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8722:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8723:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n8724:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont*\\2c\\20SkPaint*\\29\n8725:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n8726:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\\2c\\20SkCanvas*\\2c\\20SkPath*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n8727:emscripten::internal::FunctionInvoker<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20\\28*\\29\\28SkSL::DebugTrace&\\29\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::DebugTrace&>::invoke\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20\\28**\\29\\28SkSL::DebugTrace&\\29\\2c\\20SkSL::DebugTrace*\\29\n8728:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\\20\\28*\\29\\28SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20sk_sp<SkTypeface>\\2c\\20SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28sk_sp<SkTypeface>\\20\\28**\\29\\28SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20SkFontMgr*\\2c\\20unsigned\\20long\\2c\\20int\\29\n8729:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\\20\\28*\\29\\28SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\\2c\\20sk_sp<SkTypeface>\\2c\\20SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val>::invoke\\28sk_sp<SkTypeface>\\20\\28**\\29\\28SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\\2c\\20SkFontMgr*\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\2c\\20emscripten::_EM_VAL*\\29\n8730:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\n8731:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\n8732:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20SkRuntimeEffect*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8733:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\\2c\\20SkRuntimeEffect*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\n8734:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20SkPicture*\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8735:emscripten::internal::FunctionInvoker<sk_sp<SkPicture>\\20\\28*\\29\\28SkPictureRecorder&\\29\\2c\\20sk_sp<SkPicture>\\2c\\20SkPictureRecorder&>::invoke\\28sk_sp<SkPicture>\\20\\28**\\29\\28SkPictureRecorder&\\29\\2c\\20SkPictureRecorder*\\29\n8736:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\\20\\28*\\29\\28SkSurface&\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>\\2c\\20SkSurface&\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImage>\\20\\28**\\29\\28SkSurface&\\2c\\20unsigned\\20long\\29\\2c\\20SkSurface*\\2c\\20unsigned\\20long\\29\n8737:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\\20\\28*\\29\\28SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo\\29\\2c\\20sk_sp<SkImage>\\2c\\20SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo>::invoke\\28sk_sp<SkImage>\\20\\28**\\29\\28SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo\\29\\2c\\20SkSurface*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo*\\29\n8738:emscripten::internal::FunctionInvoker<sk_sp<SkBlender>\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\\2c\\20sk_sp<SkBlender>\\2c\\20SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool>::invoke\\28sk_sp<SkBlender>\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\\2c\\20SkRuntimeEffect*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n8739:emscripten::internal::FunctionInvoker<int\\20\\28*\\29\\28SkCanvas&\\2c\\20SkPaint\\29\\2c\\20int\\2c\\20SkCanvas&\\2c\\20SkPaint>::invoke\\28int\\20\\28**\\29\\28SkCanvas&\\2c\\20SkPaint\\29\\2c\\20SkCanvas*\\2c\\20SkPaint*\\29\n8740:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\\2c\\20emscripten::val\\2c\\20skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle>::invoke\\28emscripten::val\\20\\28**\\29\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n8741:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float\\29\\2c\\20emscripten::val\\2c\\20skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float>::invoke\\28emscripten::val\\20\\28**\\29\\28skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n8742:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20emscripten::val\\2c\\20sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*>::invoke\\28emscripten::val\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\n8743:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\\2c\\20emscripten::val\\2c\\20sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int>::invoke\\28emscripten::val\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\n8744:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28sk_sp<SkImage>\\29\\2c\\20emscripten::val\\2c\\20sk_sp<SkImage>>::invoke\\28emscripten::val\\20\\28**\\29\\28sk_sp<SkImage>\\29\\2c\\20sk_sp<SkImage>*\\29\n8745:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20emscripten::val\\2c\\20SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float>::invoke\\28emscripten::val\\20\\28**\\29\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20SkFont*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n8746:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20bool\\2c\\20sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*>::invoke\\28bool\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\n8747:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20bool\\2c\\20sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int>::invoke\\28bool\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n8748:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8749:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8750:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20StrokeOpts\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20StrokeOpts>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20StrokeOpts\\29\\2c\\20SkPath*\\2c\\20StrokeOpts*\\29\n8751:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20bool\\2c\\20SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int>::invoke\\28bool\\20\\28**\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20SkCanvas*\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n8752:emscripten::internal::FunctionInvoker<SkPath\\20\\28*\\29\\28SkPath\\20const&\\29\\2c\\20SkPath\\2c\\20SkPath\\20const&>::invoke\\28SkPath\\20\\28**\\29\\28SkPath\\20const&\\29\\2c\\20SkPath*\\29\n8753:emscripten::internal::FunctionInvoker<SkPath\\20\\28*\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath\\2c\\20SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28SkPath\\20\\28**\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkContourMeasure*\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8754:emscripten::internal::FunctionInvoker<SkPaint\\20\\28*\\29\\28SkPaint\\20const&\\29\\2c\\20SkPaint\\2c\\20SkPaint\\20const&>::invoke\\28SkPaint\\20\\28**\\29\\28SkPaint\\20const&\\29\\2c\\20SkPaint*\\29\n8755:emscripten::internal::FunctionInvoker<SimpleImageInfo\\20\\28*\\29\\28SkSurface&\\29\\2c\\20SimpleImageInfo\\2c\\20SkSurface&>::invoke\\28SimpleImageInfo\\20\\28**\\29\\28SkSurface&\\29\\2c\\20SkSurface*\\29\n8756:emscripten::internal::FunctionInvoker<RuntimeEffectUniform\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20int\\29\\2c\\20RuntimeEffectUniform\\2c\\20SkRuntimeEffect&\\2c\\20int>::invoke\\28RuntimeEffectUniform\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20int\\29\\2c\\20SkRuntimeEffect*\\2c\\20int\\29\n8757:emit_message\n8758:embind_init_Skia\\28\\29::$_9::__invoke\\28SkAnimatedImage&\\29\n8759:embind_init_Skia\\28\\29::$_99::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20bool\\29\n8760:embind_init_Skia\\28\\29::$_98::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20bool\\29\n8761:embind_init_Skia\\28\\29::$_97::__invoke\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8762:embind_init_Skia\\28\\29::$_96::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20int\\29\n8763:embind_init_Skia\\28\\29::$_95::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\29\n8764:embind_init_Skia\\28\\29::$_94::__invoke\\28unsigned\\20long\\2c\\20SkPath\\29\n8765:embind_init_Skia\\28\\29::$_93::__invoke\\28float\\2c\\20unsigned\\20long\\29\n8766:embind_init_Skia\\28\\29::$_92::__invoke\\28unsigned\\20long\\2c\\20int\\2c\\20float\\29\n8767:embind_init_Skia\\28\\29::$_91::__invoke\\28\\29\n8768:embind_init_Skia\\28\\29::$_90::__invoke\\28\\29\n8769:embind_init_Skia\\28\\29::$_8::__invoke\\28emscripten::val\\29\n8770:embind_init_Skia\\28\\29::$_89::__invoke\\28sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>\\29\n8771:embind_init_Skia\\28\\29::$_88::__invoke\\28SkPaint&\\2c\\20unsigned\\20int\\2c\\20sk_sp<SkColorSpace>\\29\n8772:embind_init_Skia\\28\\29::$_87::__invoke\\28SkPaint&\\2c\\20unsigned\\20int\\29\n8773:embind_init_Skia\\28\\29::$_86::__invoke\\28SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n8774:embind_init_Skia\\28\\29::$_85::__invoke\\28SkPaint&\\2c\\20unsigned\\20long\\29\n8775:embind_init_Skia\\28\\29::$_84::__invoke\\28SkPaint\\20const&\\29\n8776:embind_init_Skia\\28\\29::$_83::__invoke\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n8777:embind_init_Skia\\28\\29::$_82::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n8778:embind_init_Skia\\28\\29::$_81::__invoke\\28unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>\\29\n8779:embind_init_Skia\\28\\29::$_80::__invoke\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n8780:embind_init_Skia\\28\\29::$_7::__invoke\\28GrDirectContext&\\2c\\20unsigned\\20long\\29\n8781:embind_init_Skia\\28\\29::$_79::__invoke\\28sk_sp<SkImage>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8782:embind_init_Skia\\28\\29::$_78::__invoke\\28sk_sp<SkImage>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8783:embind_init_Skia\\28\\29::$_77::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n8784:embind_init_Skia\\28\\29::$_76::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\n8785:embind_init_Skia\\28\\29::$_75::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\n8786:embind_init_Skia\\28\\29::$_74::__invoke\\28sk_sp<SkShader>\\29\n8787:embind_init_Skia\\28\\29::$_73::__invoke\\28SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n8788:embind_init_Skia\\28\\29::$_72::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n8789:embind_init_Skia\\28\\29::$_71::__invoke\\28sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n8790:embind_init_Skia\\28\\29::$_70::__invoke\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\n8791:embind_init_Skia\\28\\29::$_6::__invoke\\28GrDirectContext&\\29\n8792:embind_init_Skia\\28\\29::$_69::__invoke\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n8793:embind_init_Skia\\28\\29::$_68::__invoke\\28SkImageFilter\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8794:embind_init_Skia\\28\\29::$_67::__invoke\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n8795:embind_init_Skia\\28\\29::$_66::__invoke\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\n8796:embind_init_Skia\\28\\29::$_65::__invoke\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\n8797:embind_init_Skia\\28\\29::$_64::__invoke\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\n8798:embind_init_Skia\\28\\29::$_63::__invoke\\28sk_sp<SkImage>\\29\n8799:embind_init_Skia\\28\\29::$_62::__invoke\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\n8800:embind_init_Skia\\28\\29::$_61::__invoke\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\n8801:embind_init_Skia\\28\\29::$_60::__invoke\\28sk_sp<SkImage>\\29\n8802:embind_init_Skia\\28\\29::$_5::__invoke\\28GrDirectContext&\\29\n8803:embind_init_Skia\\28\\29::$_59::__invoke\\28sk_sp<SkImage>\\29\n8804:embind_init_Skia\\28\\29::$_58::__invoke\\28SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int\\29\n8805:embind_init_Skia\\28\\29::$_57::__invoke\\28SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\n8806:embind_init_Skia\\28\\29::$_56::__invoke\\28SkFontMgr&\\2c\\20int\\29\n8807:embind_init_Skia\\28\\29::$_55::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\29\n8808:embind_init_Skia\\28\\29::$_54::__invoke\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n8809:embind_init_Skia\\28\\29::$_53::__invoke\\28SkFont&\\29\n8810:embind_init_Skia\\28\\29::$_52::__invoke\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8811:embind_init_Skia\\28\\29::$_51::__invoke\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint*\\29\n8812:embind_init_Skia\\28\\29::$_50::__invoke\\28SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8813:embind_init_Skia\\28\\29::$_4::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n8814:embind_init_Skia\\28\\29::$_49::__invoke\\28SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long\\29\n8815:embind_init_Skia\\28\\29::$_48::__invoke\\28unsigned\\20long\\29\n8816:embind_init_Skia\\28\\29::$_47::__invoke\\28unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>\\29\n8817:embind_init_Skia\\28\\29::$_46::__invoke\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n8818:embind_init_Skia\\28\\29::$_45::__invoke\\28SkCanvas&\\2c\\20SkPaint\\29\n8819:embind_init_Skia\\28\\29::$_44::__invoke\\28SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\n8820:embind_init_Skia\\28\\29::$_43::__invoke\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n8821:embind_init_Skia\\28\\29::$_42::__invoke\\28SkCanvas&\\2c\\20SimpleImageInfo\\29\n8822:embind_init_Skia\\28\\29::$_41::__invoke\\28SkCanvas\\20const&\\2c\\20unsigned\\20long\\29\n8823:embind_init_Skia\\28\\29::$_40::__invoke\\28SkCanvas\\20const&\\2c\\20unsigned\\20long\\29\n8824:embind_init_Skia\\28\\29::$_3::__invoke\\28unsigned\\20long\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\n8825:embind_init_Skia\\28\\29::$_39::__invoke\\28SkCanvas\\20const&\\2c\\20unsigned\\20long\\29\n8826:embind_init_Skia\\28\\29::$_38::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\n8827:embind_init_Skia\\28\\29::$_37::__invoke\\28SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n8828:embind_init_Skia\\28\\29::$_36::__invoke\\28SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n8829:embind_init_Skia\\28\\29::$_35::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n8830:embind_init_Skia\\28\\29::$_34::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n8831:embind_init_Skia\\28\\29::$_33::__invoke\\28SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&\\29\n8832:embind_init_Skia\\28\\29::$_32::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n8833:embind_init_Skia\\28\\29::$_31::__invoke\\28SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n8834:embind_init_Skia\\28\\29::$_30::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n8835:embind_init_Skia\\28\\29::$_2::__invoke\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\29\n8836:embind_init_Skia\\28\\29::$_29::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n8837:embind_init_Skia\\28\\29::$_28::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8838:embind_init_Skia\\28\\29::$_27::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const*\\2c\\20bool\\29\n8839:embind_init_Skia\\28\\29::$_26::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n8840:embind_init_Skia\\28\\29::$_25::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n8841:embind_init_Skia\\28\\29::$_24::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8842:embind_init_Skia\\28\\29::$_23::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8843:embind_init_Skia\\28\\29::$_22::__invoke\\28SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\n8844:embind_init_Skia\\28\\29::$_21::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n8845:embind_init_Skia\\28\\29::$_20::__invoke\\28SkCanvas&\\2c\\20unsigned\\20int\\2c\\20SkBlendMode\\29\n8846:embind_init_Skia\\28\\29::$_1::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n8847:embind_init_Skia\\28\\29::$_19::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\n8848:embind_init_Skia\\28\\29::$_18::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n8849:embind_init_Skia\\28\\29::$_17::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n8850:embind_init_Skia\\28\\29::$_16::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n8851:embind_init_Skia\\28\\29::$_15::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n8852:embind_init_Skia\\28\\29::$_14::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n8853:embind_init_Skia\\28\\29::$_148::__invoke\\28SkVertices::Builder&\\29\n8854:embind_init_Skia\\28\\29::$_147::__invoke\\28SkVertices::Builder&\\29\n8855:embind_init_Skia\\28\\29::$_146::__invoke\\28SkVertices::Builder&\\29\n8856:embind_init_Skia\\28\\29::$_145::__invoke\\28SkVertices::Builder&\\29\n8857:embind_init_Skia\\28\\29::$_144::__invoke\\28SkVertices&\\2c\\20unsigned\\20long\\29\n8858:embind_init_Skia\\28\\29::$_143::__invoke\\28SkTypeface&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8859:embind_init_Skia\\28\\29::$_142::__invoke\\28unsigned\\20long\\2c\\20int\\29\n8860:embind_init_Skia\\28\\29::$_141::__invoke\\28\\29\n8861:embind_init_Skia\\28\\29::$_140::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n8862:embind_init_Skia\\28\\29::$_13::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\n8863:embind_init_Skia\\28\\29::$_139::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n8864:embind_init_Skia\\28\\29::$_138::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n8865:embind_init_Skia\\28\\29::$_137::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n8866:embind_init_Skia\\28\\29::$_136::__invoke\\28SkSurface&\\29\n8867:embind_init_Skia\\28\\29::$_135::__invoke\\28SkSurface&\\29\n8868:embind_init_Skia\\28\\29::$_134::__invoke\\28SkSurface&\\29\n8869:embind_init_Skia\\28\\29::$_133::__invoke\\28SkSurface&\\2c\\20SimpleImageInfo\\29\n8870:embind_init_Skia\\28\\29::$_132::__invoke\\28SkSurface&\\2c\\20unsigned\\20long\\29\n8871:embind_init_Skia\\28\\29::$_131::__invoke\\28SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo\\29\n8872:embind_init_Skia\\28\\29::$_130::__invoke\\28SkSurface&\\29\n8873:embind_init_Skia\\28\\29::$_12::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\n8874:embind_init_Skia\\28\\29::$_129::__invoke\\28SkSurface&\\29\n8875:embind_init_Skia\\28\\29::$_128::__invoke\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8876:embind_init_Skia\\28\\29::$_127::__invoke\\28SkRuntimeEffect&\\2c\\20int\\29\n8877:embind_init_Skia\\28\\29::$_126::__invoke\\28SkRuntimeEffect&\\2c\\20int\\29\n8878:embind_init_Skia\\28\\29::$_125::__invoke\\28SkRuntimeEffect&\\29\n8879:embind_init_Skia\\28\\29::$_124::__invoke\\28SkRuntimeEffect&\\29\n8880:embind_init_Skia\\28\\29::$_123::__invoke\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n8881:embind_init_Skia\\28\\29::$_122::__invoke\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8882:embind_init_Skia\\28\\29::$_121::__invoke\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\n8883:embind_init_Skia\\28\\29::$_120::__invoke\\28sk_sp<SkShader>\\2c\\20int\\2c\\20int\\29\n8884:embind_init_Skia\\28\\29::$_11::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n8885:embind_init_Skia\\28\\29::$_119::__invoke\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\n8886:embind_init_Skia\\28\\29::$_118::__invoke\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\n8887:embind_init_Skia\\28\\29::$_117::__invoke\\28SkSL::DebugTrace&\\29\n8888:embind_init_Skia\\28\\29::$_116::__invoke\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n8889:embind_init_Skia\\28\\29::$_115::__invoke\\28float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\n8890:embind_init_Skia\\28\\29::$_114::__invoke\\28float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n8891:embind_init_Skia\\28\\29::$_113::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n8892:embind_init_Skia\\28\\29::$_112::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n8893:embind_init_Skia\\28\\29::$_111::__invoke\\28float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\n8894:embind_init_Skia\\28\\29::$_110::__invoke\\28unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n8895:embind_init_Skia\\28\\29::$_10::__invoke\\28SkAnimatedImage&\\29\n8896:embind_init_Skia\\28\\29::$_109::operator\\28\\29\\28SkPicture&\\29\\20const::'lambda'\\28SkImage*\\2c\\20void*\\29::__invoke\\28SkImage*\\2c\\20void*\\29\n8897:embind_init_Skia\\28\\29::$_109::__invoke\\28SkPicture&\\29\n8898:embind_init_Skia\\28\\29::$_108::__invoke\\28SkPicture&\\2c\\20unsigned\\20long\\29\n8899:embind_init_Skia\\28\\29::$_107::__invoke\\28SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8900:embind_init_Skia\\28\\29::$_106::__invoke\\28SkPictureRecorder&\\29\n8901:embind_init_Skia\\28\\29::$_105::__invoke\\28SkPictureRecorder&\\2c\\20unsigned\\20long\\2c\\20bool\\29\n8902:embind_init_Skia\\28\\29::$_104::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\29\n8903:embind_init_Skia\\28\\29::$_103::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\29\n8904:embind_init_Skia\\28\\29::$_102::__invoke\\28SkPath&\\2c\\20int\\2c\\20unsigned\\20long\\29\n8905:embind_init_Skia\\28\\29::$_101::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n8906:embind_init_Skia\\28\\29::$_100::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20bool\\29\n8907:embind_init_Skia\\28\\29::$_0::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n8908:embind_init_Paragraph\\28\\29::$_9::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8909:embind_init_Paragraph\\28\\29::$_8::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\29\n8910:embind_init_Paragraph\\28\\29::$_7::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\n8911:embind_init_Paragraph\\28\\29::$_6::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint\\29\n8912:embind_init_Paragraph\\28\\29::$_5::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\29\n8913:embind_init_Paragraph\\28\\29::$_4::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n8914:embind_init_Paragraph\\28\\29::$_3::__invoke\\28emscripten::val\\2c\\20emscripten::val\\2c\\20float\\29\n8915:embind_init_Paragraph\\28\\29::$_2::__invoke\\28SimpleParagraphStyle\\2c\\20sk_sp<skia::textlayout::FontCollection>\\29\n8916:embind_init_Paragraph\\28\\29::$_18::__invoke\\28skia::textlayout::FontCollection&\\2c\\20sk_sp<skia::textlayout::TypefaceFontProvider>\\20const&\\29\n8917:embind_init_Paragraph\\28\\29::$_17::__invoke\\28\\29\n8918:embind_init_Paragraph\\28\\29::$_16::__invoke\\28skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long\\29\n8919:embind_init_Paragraph\\28\\29::$_15::__invoke\\28\\29\n8920:embind_init_Paragraph\\28\\29::$_14::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8921:embind_init_Paragraph\\28\\29::$_13::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8922:embind_init_Paragraph\\28\\29::$_12::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8923:embind_init_Paragraph\\28\\29::$_11::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8924:embind_init_Paragraph\\28\\29::$_10::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n8925:dispose_external_texture\\28void*\\29\n8926:deleteJSTexture\\28void*\\29\n8927:deflate_slow\n8928:deflate_fast\n8929:defaultGetValue\\28IntProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8930:defaultGetMaxValue\\28IntProperty\\20const&\\2c\\20UProperty\\29\n8931:defaultContains\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n8932:decompress_smooth_data\n8933:decompress_onepass\n8934:decompress_data\n8935:decompose_unicode\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n8936:decompose_khmer\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n8937:decompose_indic\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n8938:decode_mcu_DC_refine\n8939:decode_mcu_DC_first\n8940:decode_mcu_AC_refine\n8941:decode_mcu_AC_first\n8942:decode_mcu\n8943:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::Make\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::Make\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8944:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader*\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&>\\28SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8945:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList*\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList\\2c\\20skgpu::ganesh::StrokeTessellator::PathStrokeList>\\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8946:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator*\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator\\2c\\20skgpu::tess::PatchAttribs&>\\28skgpu::tess::PatchAttribs&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::StrokeTessellator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8947:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList*\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::PathTessellator::PathDrawList&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8948:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Make\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Make\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8949:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::RectanizerSkyline*\\20SkArenaAlloc::make<skgpu::RectanizerSkyline\\2c\\20int&\\2c\\20int&>\\28int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28skgpu::RectanizerSkyline&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8950:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::RectanizerPow2*\\20SkArenaAlloc::make<skgpu::RectanizerPow2\\2c\\20int&\\2c\\20int&>\\28int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28skgpu::RectanizerPow2&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8951:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<sk_sp<SkShader>*\\20SkArenaAlloc::make<sk_sp<SkShader>>\\28\\29::'lambda'\\28void*\\29>\\28sk_sp<SkShader>&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8952:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc>\\28\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::TextureOpImpl::Desc&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8953:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TentPass*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TentPass\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&>\\28skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::TentPass&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8954:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::SimpleTriangleShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::SimpleTriangleShader\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::SimpleTriangleShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8955:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&>\\28skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::GaussPass&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8956:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::DrawAtlasPathShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::DrawAtlasPathShader\\2c\\20bool&\\2c\\20skgpu::ganesh::AtlasInstancedHelper*\\2c\\20GrShaderCaps\\20const&>\\28bool&\\2c\\20skgpu::ganesh::AtlasInstancedHelper*&&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::DrawAtlasPathShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8957:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::BoundingBoxShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::BoundingBoxShader\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&>\\28SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::BoundingBoxShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8958:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<Sprite_D32_S32*\\20SkArenaAlloc::make<Sprite_D32_S32\\2c\\20SkPixmap\\20const&\\2c\\20unsigned\\20char>\\28SkPixmap\\20const&\\2c\\20unsigned\\20char&&\\29::'lambda'\\28void*\\29>\\28Sprite_D32_S32&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8959:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTriColorShader*\\20SkArenaAlloc::make<SkTriColorShader\\2c\\20bool\\2c\\20bool\\20const&>\\28bool&&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTriColorShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8960:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTCubic*\\20SkArenaAlloc::make<SkTCubic>\\28\\29::'lambda'\\28void*\\29>\\28SkTCubic&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8961:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTConic*\\20SkArenaAlloc::make<SkTConic>\\28\\29::'lambda'\\28void*\\29>\\28SkTConic&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8962:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy*\\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy\\2c\\20SkPixmap\\20const&>\\28SkPixmap\\20const&\\29::'lambda'\\28void*\\29>\\28SkSpriteBlitter_Memcpy&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8963:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter*\\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter\\2c\\20SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\2c\\20sk_sp<SkShader>&>\\28SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\2c\\20sk_sp<SkShader>&\\29::'lambda'\\28void*\\29>\\28SkRasterPipelineSpriteBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8964:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkRasterPipelineBlitter*\\20SkArenaAlloc::make<SkRasterPipelineBlitter\\2c\\20SkPixmap\\20const&\\2c\\20SkArenaAlloc*&>\\28SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\29::'lambda'\\28void*\\29>\\28SkRasterPipelineBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8965:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkNullBlitter*\\20SkArenaAlloc::make<SkNullBlitter>\\28\\29::'lambda'\\28void*\\29>\\28SkNullBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8966:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkMipmapAccessor*\\20SkArenaAlloc::make<SkMipmapAccessor\\2c\\20SkImage_Base\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode&>\\28SkImage_Base\\20const*&&\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode&\\29::'lambda'\\28void*\\29>\\28SkMipmapAccessor&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8967:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph::PathData*\\20SkArenaAlloc::make<SkGlyph::PathData>\\28\\29::'lambda'\\28void*\\29>\\28SkGlyph::PathData&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8968:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph::DrawableData*\\20SkArenaAlloc::make<SkGlyph::DrawableData>\\28\\29::'lambda'\\28void*\\29>\\28SkGlyph::DrawableData&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8969:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph*\\20SkArenaAlloc::make<SkGlyph\\2c\\20SkGlyph>\\28SkGlyph&&\\29::'lambda'\\28void*\\29>\\28SkGlyph&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8970:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8971:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20skgpu::AtlasToken>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\2c\\20skgpu::AtlasToken&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8972:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node>\\28\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::Draw>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8973:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkA8_Coverage_Blitter*\\20SkArenaAlloc::make<SkA8_Coverage_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29::'lambda'\\28void*\\29>\\28SkA8_Coverage_Blitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8974:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrSimpleMesh*\\20SkArenaAlloc::make<GrSimpleMesh>\\28\\29::'lambda'\\28void*\\29>\\28GrSimpleMesh&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8975:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrResourceAllocator::Register*\\20SkArenaAlloc::make<GrResourceAllocator::Register\\2c\\20GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceProvider*&>\\28GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey&&\\2c\\20GrResourceProvider*&\\29::'lambda'\\28void*\\29>\\28GrResourceAllocator::Register&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8976:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrInnerFanTriangulator*\\20SkArenaAlloc::make<GrInnerFanTriangulator\\2c\\20SkPath\\20const&\\2c\\20SkArenaAlloc*\\20const&>\\28SkPath\\20const&\\2c\\20SkArenaAlloc*\\20const&\\29::'lambda'\\28void*\\29>\\28GrInnerFanTriangulator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8977:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrDistanceFieldLCDTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28GrDistanceFieldLCDTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8978:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8979:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrAppliedClip*\\20SkArenaAlloc::make<GrAppliedClip\\2c\\20GrAppliedClip>\\28GrAppliedClip&&\\29::'lambda'\\28void*\\29>\\28GrAppliedClip&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8980:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<EllipseGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28EllipseGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n8981:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>&\\2c\\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8982:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&\\29\n8983:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8984:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8985:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\29\n8986:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>&\\2c\\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8987:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&\\29\n8988:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8989:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8990:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n8991:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\29\n8992:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\29\n8993:deallocate_buffer_var\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8994:ddquad_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n8995:ddquad_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n8996:ddline_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n8997:ddline_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n8998:ddcubic_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n8999:ddcubic_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9000:ddconic_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9001:ddconic_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9002:data_destroy_use\\28void*\\29\n9003:data_create_use\\28hb_ot_shape_plan_t\\20const*\\29\n9004:data_create_khmer\\28hb_ot_shape_plan_t\\20const*\\29\n9005:data_create_indic\\28hb_ot_shape_plan_t\\20const*\\29\n9006:data_create_hangul\\28hb_ot_shape_plan_t\\20const*\\29\n9007:copy\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n9008:convert_bytes_to_data\n9009:consume_markers\n9010:consume_data\n9011:computeTonalColors\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n9012:compose_unicode\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9013:compose_indic\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9014:compose_hebrew\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9015:compare_ppem\n9016:compare_offsets\n9017:compare_myanmar_order\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\n9018:compare_combining_class\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\n9019:compareKeywordStructs\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void\\20const*\\29\n9020:compareEntries\\28UElement\\2c\\20UElement\\29\n9021:color_quantize3\n9022:color_quantize\n9023:collect_features_use\\28hb_ot_shape_planner_t*\\29\n9024:collect_features_myanmar\\28hb_ot_shape_planner_t*\\29\n9025:collect_features_khmer\\28hb_ot_shape_planner_t*\\29\n9026:collect_features_indic\\28hb_ot_shape_planner_t*\\29\n9027:collect_features_hangul\\28hb_ot_shape_planner_t*\\29\n9028:collect_features_arabic\\28hb_ot_shape_planner_t*\\29\n9029:clip\\28SkPath\\20const&\\2c\\20SkHalfPlane\\20const&\\29::$_0::__invoke\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\n9030:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9031:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n9032:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9033:charIterTextLength\\28UText*\\29\n9034:charIterTextExtract\\28UText*\\2c\\20long\\20long\\2c\\20long\\20long\\2c\\20char16_t*\\2c\\20int\\2c\\20UErrorCode*\\29\n9035:charIterTextClose\\28UText*\\29\n9036:charIterTextClone\\28UText*\\2c\\20UText\\20const*\\2c\\20signed\\20char\\2c\\20UErrorCode*\\29\n9037:changesWhenNFKC_Casefolded\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n9038:changesWhenCasefolded\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n9039:cff_slot_init\n9040:cff_slot_done\n9041:cff_size_request\n9042:cff_size_init\n9043:cff_size_done\n9044:cff_sid_to_glyph_name\n9045:cff_set_var_design\n9046:cff_set_mm_weightvector\n9047:cff_set_mm_blend\n9048:cff_set_instance\n9049:cff_random\n9050:cff_ps_has_glyph_names\n9051:cff_ps_get_font_info\n9052:cff_ps_get_font_extra\n9053:cff_parse_vsindex\n9054:cff_parse_private_dict\n9055:cff_parse_multiple_master\n9056:cff_parse_maxstack\n9057:cff_parse_font_matrix\n9058:cff_parse_font_bbox\n9059:cff_parse_cid_ros\n9060:cff_parse_blend\n9061:cff_metrics_adjust\n9062:cff_hadvance_adjust\n9063:cff_glyph_load\n9064:cff_get_var_design\n9065:cff_get_var_blend\n9066:cff_get_standard_encoding\n9067:cff_get_ros\n9068:cff_get_ps_name\n9069:cff_get_name_index\n9070:cff_get_mm_weightvector\n9071:cff_get_mm_var\n9072:cff_get_mm_blend\n9073:cff_get_is_cid\n9074:cff_get_interface\n9075:cff_get_glyph_name\n9076:cff_get_glyph_data\n9077:cff_get_cmap_info\n9078:cff_get_cid_from_glyph_index\n9079:cff_get_advances\n9080:cff_free_glyph_data\n9081:cff_fd_select_get\n9082:cff_face_init\n9083:cff_face_done\n9084:cff_driver_init\n9085:cff_done_blend\n9086:cff_decoder_prepare\n9087:cff_decoder_init\n9088:cff_cmap_unicode_init\n9089:cff_cmap_unicode_char_next\n9090:cff_cmap_unicode_char_index\n9091:cff_cmap_encoding_init\n9092:cff_cmap_encoding_done\n9093:cff_cmap_encoding_char_next\n9094:cff_cmap_encoding_char_index\n9095:cff_builder_start_point\n9096:cff_builder_init\n9097:cff_builder_add_point1\n9098:cff_builder_add_point\n9099:cff_builder_add_contour\n9100:cff_blend_check_vector\n9101:cf2_free_instance\n9102:cf2_decoder_parse_charstrings\n9103:cf2_builder_moveTo\n9104:cf2_builder_lineTo\n9105:cf2_builder_cubeTo\n9106:caseBinaryPropertyContains\\28BinaryProperty\\20const&\\2c\\20int\\2c\\20UProperty\\29\n9107:bw_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n9108:bw_square_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9109:bw_pt_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9110:bw_poly_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9111:bw_line_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9112:breakiterator_cleanup\\28\\29\n9113:bool\\20\\28anonymous\\20namespace\\29::FindVisitor<\\28anonymous\\20namespace\\29::SpotVerticesFactory>\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9114:bool\\20\\28anonymous\\20namespace\\29::FindVisitor<\\28anonymous\\20namespace\\29::AmbientVerticesFactory>\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9115:bool\\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9116:bool\\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9117:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9118:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9119:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&_hb_arabic_pua_trad_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9120:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&_hb_arabic_pua_simp_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9121:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&OT::_hb_symbol_pua_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9122:bool\\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtableFormat12>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9123:bool\\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtable>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9124:blur_y_radius_4\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9125:blur_y_radius_3\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9126:blur_y_radius_2\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9127:blur_y_radius_1\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9128:blur_x_radius_4\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9129:blur_x_radius_3\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9130:blur_x_radius_2\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9131:blur_x_radius_1\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9132:blit_row_s32a_blend\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9133:blit_row_s32_opaque\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9134:blit_row_s32_blend\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9135:biDiGetMaxValue\\28IntProperty\\20const&\\2c\\20UProperty\\29\n9136:argb32_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n9137:arabic_fallback_shape\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9138:alwaysSaveTypefaceBytes\\28SkTypeface*\\2c\\20void*\\29\n9139:alloc_sarray\n9140:alloc_barray\n9141:afm_parser_parse\n9142:afm_parser_init\n9143:afm_parser_done\n9144:afm_compare_kern_pairs\n9145:af_property_set\n9146:af_property_get\n9147:af_latin_metrics_scale\n9148:af_latin_metrics_init\n9149:af_latin_hints_init\n9150:af_latin_hints_apply\n9151:af_latin_get_standard_widths\n9152:af_indic_metrics_init\n9153:af_indic_hints_apply\n9154:af_get_interface\n9155:af_face_globals_free\n9156:af_dummy_hints_init\n9157:af_dummy_hints_apply\n9158:af_cjk_metrics_init\n9159:af_autofitter_load_glyph\n9160:af_autofitter_init\n9161:access_virt_sarray\n9162:access_virt_barray\n9163:aa_square_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9164:aa_poly_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9165:aa_line_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9166:_hb_ot_font_destroy\\28void*\\29\n9167:_hb_glyph_info_is_default_ignorable\\28hb_glyph_info_t\\20const*\\29\n9168:_hb_face_for_data_reference_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9169:_hb_face_for_data_closure_destroy\\28void*\\29\n9170:_hb_clear_substitution_flags\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9171:_embind_initialize_bindings\n9172:__wasm_call_ctors\n9173:__stdio_write\n9174:__stdio_seek\n9175:__stdio_read\n9176:__stdio_close\n9177:__getTypeName\n9178:__cxxabiv1::__vmi_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n9179:__cxxabiv1::__vmi_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n9180:__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n9181:__cxxabiv1::__si_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n9182:__cxxabiv1::__si_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n9183:__cxxabiv1::__si_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n9184:__cxxabiv1::__class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n9185:__cxxabiv1::__class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n9186:__cxxabiv1::__class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n9187:__cxxabiv1::__class_type_info::can_catch\\28__cxxabiv1::__shim_type_info\\20const*\\2c\\20void*&\\29\\20const\n9188:__cxx_global_array_dtor.87\n9189:__cxx_global_array_dtor.72\n9190:__cxx_global_array_dtor.6\n9191:__cxx_global_array_dtor.57\n9192:__cxx_global_array_dtor.5\n9193:__cxx_global_array_dtor.44\n9194:__cxx_global_array_dtor.42\n9195:__cxx_global_array_dtor.40\n9196:__cxx_global_array_dtor.4\n9197:__cxx_global_array_dtor.38\n9198:__cxx_global_array_dtor.36\n9199:__cxx_global_array_dtor.34\n9200:__cxx_global_array_dtor.32\n9201:__cxx_global_array_dtor.2\n9202:__cxx_global_array_dtor.17\n9203:__cxx_global_array_dtor.16\n9204:__cxx_global_array_dtor.15\n9205:__cxx_global_array_dtor.138\n9206:__cxx_global_array_dtor.135\n9207:__cxx_global_array_dtor.111\n9208:__cxx_global_array_dtor.11\n9209:__cxx_global_array_dtor.10\n9210:__cxx_global_array_dtor.1.2\n9211:__cxx_global_array_dtor.1.1\n9212:__cxx_global_array_dtor.1\n9213:__cxx_global_array_dtor\n9214:__cxa_pure_virtual\n9215:__cxa_is_pointer_type\n9216:\\28anonymous\\20namespace\\29::uprops_cleanup\\28\\29\n9217:\\28anonymous\\20namespace\\29::ulayout_isAcceptable\\28void*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20UDataInfo\\20const*\\29\n9218:\\28anonymous\\20namespace\\29::skhb_nominal_glyphs\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9219:\\28anonymous\\20namespace\\29::skhb_nominal_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9220:\\28anonymous\\20namespace\\29::skhb_glyph_h_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9221:\\28anonymous\\20namespace\\29::skhb_glyph_h_advance\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9222:\\28anonymous\\20namespace\\29::skhb_glyph_extents\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n9223:\\28anonymous\\20namespace\\29::skhb_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9224:\\28anonymous\\20namespace\\29::skhb_get_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n9225:\\28anonymous\\20namespace\\29::skhb_get_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9226:\\28anonymous\\20namespace\\29::make_morphology\\28\\28anonymous\\20namespace\\29::MorphType\\2c\\20SkSize\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n9227:\\28anonymous\\20namespace\\29::make_drop_shadow_graph\\28SkPoint\\2c\\20SkSize\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20sk_sp<SkImageFilter>\\2c\\20std::__2::optional<SkRect>\\20const&\\29\n9228:\\28anonymous\\20namespace\\29::extension_compare\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\n9229:\\28anonymous\\20namespace\\29::characterproperties_cleanup\\28\\29\n9230:\\28anonymous\\20namespace\\29::_set_add\\28USet*\\2c\\20int\\29\n9231:\\28anonymous\\20namespace\\29::_set_addString\\28USet*\\2c\\20char16_t\\20const*\\2c\\20int\\29\n9232:\\28anonymous\\20namespace\\29::_set_addRange\\28USet*\\2c\\20int\\2c\\20int\\29\n9233:\\28anonymous\\20namespace\\29::YUVPlanesRec::~YUVPlanesRec\\28\\29.1\n9234:\\28anonymous\\20namespace\\29::YUVPlanesRec::getCategory\\28\\29\\20const\n9235:\\28anonymous\\20namespace\\29::YUVPlanesRec::diagnostic_only_getDiscardable\\28\\29\\20const\n9236:\\28anonymous\\20namespace\\29::YUVPlanesRec::bytesUsed\\28\\29\\20const\n9237:\\28anonymous\\20namespace\\29::YUVPlanesRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9238:\\28anonymous\\20namespace\\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\\28\\29.1\n9239:\\28anonymous\\20namespace\\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\\28\\29\n9240:\\28anonymous\\20namespace\\29::TriangulatingPathOp::~TriangulatingPathOp\\28\\29.1\n9241:\\28anonymous\\20namespace\\29::TriangulatingPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9242:\\28anonymous\\20namespace\\29::TriangulatingPathOp::programInfo\\28\\29\n9243:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9244:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9245:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9246:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9247:\\28anonymous\\20namespace\\29::TriangulatingPathOp::name\\28\\29\\20const\n9248:\\28anonymous\\20namespace\\29::TriangulatingPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9249:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::unflattenSize\\28\\29\\20const\n9250:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n9251:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::instanceFlags\\28\\29\\20const\n9252:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n9253:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n9254:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n9255:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n9256:\\28anonymous\\20namespace\\29::TextureOpImpl::~TextureOpImpl\\28\\29.1\n9257:\\28anonymous\\20namespace\\29::TextureOpImpl::~TextureOpImpl\\28\\29\n9258:\\28anonymous\\20namespace\\29::TextureOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9259:\\28anonymous\\20namespace\\29::TextureOpImpl::programInfo\\28\\29\n9260:\\28anonymous\\20namespace\\29::TextureOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9261:\\28anonymous\\20namespace\\29::TextureOpImpl::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9262:\\28anonymous\\20namespace\\29::TextureOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9263:\\28anonymous\\20namespace\\29::TextureOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9264:\\28anonymous\\20namespace\\29::TextureOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9265:\\28anonymous\\20namespace\\29::TextureOpImpl::name\\28\\29\\20const\n9266:\\28anonymous\\20namespace\\29::TextureOpImpl::fixedFunctionFlags\\28\\29\\20const\n9267:\\28anonymous\\20namespace\\29::TextureOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9268:\\28anonymous\\20namespace\\29::TentPass::startBlur\\28\\29\n9269:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n9270:\\28anonymous\\20namespace\\29::TentPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::makePass\\28void*\\2c\\20SkArenaAlloc*\\29\\20const\n9271:\\28anonymous\\20namespace\\29::TentPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::bufferSizeBytes\\28\\29\\20const\n9272:\\28anonymous\\20namespace\\29::StaticVertexAllocator::~StaticVertexAllocator\\28\\29.1\n9273:\\28anonymous\\20namespace\\29::StaticVertexAllocator::~StaticVertexAllocator\\28\\29\n9274:\\28anonymous\\20namespace\\29::StaticVertexAllocator::unlock\\28int\\29\n9275:\\28anonymous\\20namespace\\29::StaticVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n9276:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::currentScript\\28\\29\\20const\n9277:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::consume\\28\\29\n9278:\\28anonymous\\20namespace\\29::SkUbrkGetLocaleByType<UBreakIterator\\20const*\\2c\\20void>::getLocaleByType\\28UBreakIterator\\20const*\\2c\\20ULocDataLocaleType\\2c\\20UErrorCode*\\29\n9279:\\28anonymous\\20namespace\\29::SkUbrkClone<UBreakIterator\\20const*\\2c\\20void>::clone\\28UBreakIterator\\20const*\\2c\\20UErrorCode*\\29\n9280:\\28anonymous\\20namespace\\29::SkShaderImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9281:\\28anonymous\\20namespace\\29::SkShaderImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9282:\\28anonymous\\20namespace\\29::SkShaderImageFilter::getTypeName\\28\\29\\20const\n9283:\\28anonymous\\20namespace\\29::SkShaderImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9284:\\28anonymous\\20namespace\\29::SkShaderImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9285:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9286:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9287:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9288:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::getTypeName\\28\\29\\20const\n9289:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9290:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9291:\\28anonymous\\20namespace\\29::SkMergeImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9292:\\28anonymous\\20namespace\\29::SkMergeImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9293:\\28anonymous\\20namespace\\29::SkMergeImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9294:\\28anonymous\\20namespace\\29::SkMergeImageFilter::getTypeName\\28\\29\\20const\n9295:\\28anonymous\\20namespace\\29::SkMergeImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9296:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9297:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9298:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9299:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::getTypeName\\28\\29\\20const\n9300:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9301:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9302:\\28anonymous\\20namespace\\29::SkImageImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9303:\\28anonymous\\20namespace\\29::SkImageImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9304:\\28anonymous\\20namespace\\29::SkImageImageFilter::getTypeName\\28\\29\\20const\n9305:\\28anonymous\\20namespace\\29::SkImageImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9306:\\28anonymous\\20namespace\\29::SkImageImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9307:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Quad\\28FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20void*\\29\n9308:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Move\\28FT_Vector_\\20const*\\2c\\20void*\\29\n9309:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Line\\28FT_Vector_\\20const*\\2c\\20void*\\29\n9310:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Cubic\\28FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20void*\\29\n9311:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n9312:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onGetFamilyName\\28SkString*\\29\\20const\n9313:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n9314:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCreateFamilyNameIterator\\28\\29\\20const\n9315:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n9316:\\28anonymous\\20namespace\\29::SkEmptyTypeface::MakeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\n9317:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9318:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9319:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9320:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::getTypeName\\28\\29\\20const\n9321:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9322:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9323:\\28anonymous\\20namespace\\29::SkCropImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9324:\\28anonymous\\20namespace\\29::SkCropImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9325:\\28anonymous\\20namespace\\29::SkCropImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9326:\\28anonymous\\20namespace\\29::SkCropImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n9327:\\28anonymous\\20namespace\\29::SkCropImageFilter::getTypeName\\28\\29\\20const\n9328:\\28anonymous\\20namespace\\29::SkCropImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9329:\\28anonymous\\20namespace\\29::SkCropImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9330:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9331:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9332:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9333:\\28anonymous\\20namespace\\29::SkComposeImageFilter::getTypeName\\28\\29\\20const\n9334:\\28anonymous\\20namespace\\29::SkComposeImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9335:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onIsColorFilterNode\\28SkColorFilter**\\29\\20const\n9336:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9337:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9338:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9339:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n9340:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::getTypeName\\28\\29\\20const\n9341:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9342:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9343:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9344:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9345:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9346:\\28anonymous\\20namespace\\29::SkBlurImageFilter::getTypeName\\28\\29\\20const\n9347:\\28anonymous\\20namespace\\29::SkBlurImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9348:\\28anonymous\\20namespace\\29::SkBlurImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9349:\\28anonymous\\20namespace\\29::SkBlendImageFilter::~SkBlendImageFilter\\28\\29.1\n9350:\\28anonymous\\20namespace\\29::SkBlendImageFilter::~SkBlendImageFilter\\28\\29\n9351:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9352:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n9353:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n9354:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n9355:\\28anonymous\\20namespace\\29::SkBlendImageFilter::getTypeName\\28\\29\\20const\n9356:\\28anonymous\\20namespace\\29::SkBlendImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9357:\\28anonymous\\20namespace\\29::SkBlendImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n9358:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::~SkBidiIterator_icu\\28\\29.1\n9359:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::~SkBidiIterator_icu\\28\\29\n9360:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::getLevelAt\\28int\\29\n9361:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::getLength\\28\\29\n9362:\\28anonymous\\20namespace\\29::SimpleTriangleShader::name\\28\\29\\20const\n9363:\\28anonymous\\20namespace\\29::SimpleTriangleShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n9364:\\28anonymous\\20namespace\\29::SimpleTriangleShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n9365:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::~ShaperHarfBuzz\\28\\29.1\n9366:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::FontRunIterator&\\2c\\20SkShaper::BiDiRunIterator&\\2c\\20SkShaper::ScriptRunIterator&\\2c\\20SkShaper::LanguageRunIterator&\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n9367:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::FontRunIterator&\\2c\\20SkShaper::BiDiRunIterator&\\2c\\20SkShaper::ScriptRunIterator&\\2c\\20SkShaper::LanguageRunIterator&\\2c\\20SkShaper::Feature\\20const*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n9368:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20bool\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n9369:\\28anonymous\\20namespace\\29::ShapeDontWrapOrReorder::~ShapeDontWrapOrReorder\\28\\29\n9370:\\28anonymous\\20namespace\\29::ShapeDontWrapOrReorder::wrap\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::BiDiRunIterator\\20const&\\2c\\20SkShaper::LanguageRunIterator\\20const&\\2c\\20SkShaper::ScriptRunIterator\\20const&\\2c\\20SkShaper::FontRunIterator\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue&\\2c\\20SkShaper::Feature\\20const*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n9371:\\28anonymous\\20namespace\\29::ShadowInvalidator::~ShadowInvalidator\\28\\29.1\n9372:\\28anonymous\\20namespace\\29::ShadowInvalidator::~ShadowInvalidator\\28\\29\n9373:\\28anonymous\\20namespace\\29::ShadowInvalidator::changed\\28\\29\n9374:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\\28\\29.1\n9375:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\\28\\29\n9376:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9377:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::programInfo\\28\\29\n9378:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9379:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9380:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9381:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9382:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::name\\28\\29\\20const\n9383:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9384:\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29.1\n9385:\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29\n9386:\\28anonymous\\20namespace\\29::SDFTSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n9387:\\28anonymous\\20namespace\\29::SDFTSubRun::vertexFiller\\28\\29\\20const\n9388:\\28anonymous\\20namespace\\29::SDFTSubRun::unflattenSize\\28\\29\\20const\n9389:\\28anonymous\\20namespace\\29::SDFTSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n9390:\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n9391:\\28anonymous\\20namespace\\29::SDFTSubRun::glyphs\\28\\29\\20const\n9392:\\28anonymous\\20namespace\\29::SDFTSubRun::glyphCount\\28\\29\\20const\n9393:\\28anonymous\\20namespace\\29::SDFTSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n9394:\\28anonymous\\20namespace\\29::SDFTSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n9395:\\28anonymous\\20namespace\\29::SDFTSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n9396:\\28anonymous\\20namespace\\29::SDFTSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n9397:\\28anonymous\\20namespace\\29::RectsBlurRec::~RectsBlurRec\\28\\29.1\n9398:\\28anonymous\\20namespace\\29::RectsBlurRec::~RectsBlurRec\\28\\29\n9399:\\28anonymous\\20namespace\\29::RectsBlurRec::getCategory\\28\\29\\20const\n9400:\\28anonymous\\20namespace\\29::RectsBlurRec::diagnostic_only_getDiscardable\\28\\29\\20const\n9401:\\28anonymous\\20namespace\\29::RectsBlurRec::bytesUsed\\28\\29\\20const\n9402:\\28anonymous\\20namespace\\29::RectsBlurRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9403:\\28anonymous\\20namespace\\29::RRectBlurRec::~RRectBlurRec\\28\\29.1\n9404:\\28anonymous\\20namespace\\29::RRectBlurRec::~RRectBlurRec\\28\\29\n9405:\\28anonymous\\20namespace\\29::RRectBlurRec::getCategory\\28\\29\\20const\n9406:\\28anonymous\\20namespace\\29::RRectBlurRec::diagnostic_only_getDiscardable\\28\\29\\20const\n9407:\\28anonymous\\20namespace\\29::RRectBlurRec::bytesUsed\\28\\29\\20const\n9408:\\28anonymous\\20namespace\\29::RRectBlurRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9409:\\28anonymous\\20namespace\\29::PathSubRun::~PathSubRun\\28\\29.1\n9410:\\28anonymous\\20namespace\\29::PathSubRun::~PathSubRun\\28\\29\n9411:\\28anonymous\\20namespace\\29::PathSubRun::unflattenSize\\28\\29\\20const\n9412:\\28anonymous\\20namespace\\29::PathSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n9413:\\28anonymous\\20namespace\\29::PathSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n9414:\\28anonymous\\20namespace\\29::MipMapRec::~MipMapRec\\28\\29.1\n9415:\\28anonymous\\20namespace\\29::MipMapRec::~MipMapRec\\28\\29\n9416:\\28anonymous\\20namespace\\29::MipMapRec::getCategory\\28\\29\\20const\n9417:\\28anonymous\\20namespace\\29::MipMapRec::diagnostic_only_getDiscardable\\28\\29\\20const\n9418:\\28anonymous\\20namespace\\29::MipMapRec::bytesUsed\\28\\29\\20const\n9419:\\28anonymous\\20namespace\\29::MipMapRec::Finder\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9420:\\28anonymous\\20namespace\\29::MiddleOutShader::~MiddleOutShader\\28\\29.1\n9421:\\28anonymous\\20namespace\\29::MiddleOutShader::~MiddleOutShader\\28\\29\n9422:\\28anonymous\\20namespace\\29::MiddleOutShader::name\\28\\29\\20const\n9423:\\28anonymous\\20namespace\\29::MiddleOutShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n9424:\\28anonymous\\20namespace\\29::MiddleOutShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n9425:\\28anonymous\\20namespace\\29::MiddleOutShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n9426:\\28anonymous\\20namespace\\29::MeshOp::~MeshOp\\28\\29.1\n9427:\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9428:\\28anonymous\\20namespace\\29::MeshOp::programInfo\\28\\29\n9429:\\28anonymous\\20namespace\\29::MeshOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9430:\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9431:\\28anonymous\\20namespace\\29::MeshOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9432:\\28anonymous\\20namespace\\29::MeshOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9433:\\28anonymous\\20namespace\\29::MeshOp::name\\28\\29\\20const\n9434:\\28anonymous\\20namespace\\29::MeshOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9435:\\28anonymous\\20namespace\\29::MeshGP::~MeshGP\\28\\29.1\n9436:\\28anonymous\\20namespace\\29::MeshGP::onTextureSampler\\28int\\29\\20const\n9437:\\28anonymous\\20namespace\\29::MeshGP::name\\28\\29\\20const\n9438:\\28anonymous\\20namespace\\29::MeshGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n9439:\\28anonymous\\20namespace\\29::MeshGP::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n9440:\\28anonymous\\20namespace\\29::MeshGP::Impl::~Impl\\28\\29.1\n9441:\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n9442:\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n9443:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::toLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n9444:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleShader\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n9445:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleColorFilter\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n9446:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleBlender\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n9447:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::getMangledName\\28char\\20const*\\29\n9448:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::getMainName\\28\\29\n9449:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::fromLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n9450:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::defineFunction\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n9451:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::declareUniform\\28SkSL::VarDeclaration\\20const*\\29\n9452:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::declareFunction\\28char\\20const*\\29\n9453:\\28anonymous\\20namespace\\29::ImageFromPictureRec::~ImageFromPictureRec\\28\\29.1\n9454:\\28anonymous\\20namespace\\29::ImageFromPictureRec::~ImageFromPictureRec\\28\\29\n9455:\\28anonymous\\20namespace\\29::ImageFromPictureRec::getCategory\\28\\29\\20const\n9456:\\28anonymous\\20namespace\\29::ImageFromPictureRec::bytesUsed\\28\\29\\20const\n9457:\\28anonymous\\20namespace\\29::ImageFromPictureRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9458:\\28anonymous\\20namespace\\29::HQDownSampler::buildLevel\\28SkPixmap\\20const&\\2c\\20SkPixmap\\20const&\\29\n9459:\\28anonymous\\20namespace\\29::GaussPass::startBlur\\28\\29\n9460:\\28anonymous\\20namespace\\29::GaussPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n9461:\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::makePass\\28void*\\2c\\20SkArenaAlloc*\\29\\20const\n9462:\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::bufferSizeBytes\\28\\29\\20const\n9463:\\28anonymous\\20namespace\\29::FillRectOpImpl::~FillRectOpImpl\\28\\29.1\n9464:\\28anonymous\\20namespace\\29::FillRectOpImpl::~FillRectOpImpl\\28\\29\n9465:\\28anonymous\\20namespace\\29::FillRectOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9466:\\28anonymous\\20namespace\\29::FillRectOpImpl::programInfo\\28\\29\n9467:\\28anonymous\\20namespace\\29::FillRectOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9468:\\28anonymous\\20namespace\\29::FillRectOpImpl::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9469:\\28anonymous\\20namespace\\29::FillRectOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9470:\\28anonymous\\20namespace\\29::FillRectOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9471:\\28anonymous\\20namespace\\29::FillRectOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9472:\\28anonymous\\20namespace\\29::FillRectOpImpl::name\\28\\29\\20const\n9473:\\28anonymous\\20namespace\\29::FillRectOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9474:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onMakeProgramImpl\\28\\29\\20const\n9475:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n9476:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::name\\28\\29\\20const\n9477:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::clone\\28\\29\\20const\n9478:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n9479:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n9480:\\28anonymous\\20namespace\\29::DrawableSubRun::~DrawableSubRun\\28\\29.1\n9481:\\28anonymous\\20namespace\\29::DrawableSubRun::~DrawableSubRun\\28\\29\n9482:\\28anonymous\\20namespace\\29::DrawableSubRun::unflattenSize\\28\\29\\20const\n9483:\\28anonymous\\20namespace\\29::DrawableSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n9484:\\28anonymous\\20namespace\\29::DrawableSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n9485:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::~DrawAtlasPathShader\\28\\29.1\n9486:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::~DrawAtlasPathShader\\28\\29\n9487:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::onTextureSampler\\28int\\29\\20const\n9488:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::name\\28\\29\\20const\n9489:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n9490:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n9491:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n9492:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n9493:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\\28\\29.1\n9494:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\\28\\29\n9495:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9496:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9497:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9498:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::name\\28\\29\\20const\n9499:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9500:\\28anonymous\\20namespace\\29::DirectMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n9501:\\28anonymous\\20namespace\\29::DirectMaskSubRun::unflattenSize\\28\\29\\20const\n9502:\\28anonymous\\20namespace\\29::DirectMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n9503:\\28anonymous\\20namespace\\29::DirectMaskSubRun::instanceFlags\\28\\29\\20const\n9504:\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n9505:\\28anonymous\\20namespace\\29::DirectMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n9506:\\28anonymous\\20namespace\\29::DirectMaskSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n9507:\\28anonymous\\20namespace\\29::DirectMaskSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n9508:\\28anonymous\\20namespace\\29::DefaultPathOp::~DefaultPathOp\\28\\29.1\n9509:\\28anonymous\\20namespace\\29::DefaultPathOp::~DefaultPathOp\\28\\29\n9510:\\28anonymous\\20namespace\\29::DefaultPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9511:\\28anonymous\\20namespace\\29::DefaultPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9512:\\28anonymous\\20namespace\\29::DefaultPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9513:\\28anonymous\\20namespace\\29::DefaultPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9514:\\28anonymous\\20namespace\\29::DefaultPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9515:\\28anonymous\\20namespace\\29::DefaultPathOp::name\\28\\29\\20const\n9516:\\28anonymous\\20namespace\\29::DefaultPathOp::fixedFunctionFlags\\28\\29\\20const\n9517:\\28anonymous\\20namespace\\29::DefaultPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9518:\\28anonymous\\20namespace\\29::CircularRRectEffect::onMakeProgramImpl\\28\\29\\20const\n9519:\\28anonymous\\20namespace\\29::CircularRRectEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n9520:\\28anonymous\\20namespace\\29::CircularRRectEffect::name\\28\\29\\20const\n9521:\\28anonymous\\20namespace\\29::CircularRRectEffect::clone\\28\\29\\20const\n9522:\\28anonymous\\20namespace\\29::CircularRRectEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n9523:\\28anonymous\\20namespace\\29::CircularRRectEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n9524:\\28anonymous\\20namespace\\29::CachedTessellationsRec::~CachedTessellationsRec\\28\\29.1\n9525:\\28anonymous\\20namespace\\29::CachedTessellationsRec::~CachedTessellationsRec\\28\\29\n9526:\\28anonymous\\20namespace\\29::CachedTessellationsRec::getCategory\\28\\29\\20const\n9527:\\28anonymous\\20namespace\\29::CachedTessellationsRec::bytesUsed\\28\\29\\20const\n9528:\\28anonymous\\20namespace\\29::CachedTessellations::~CachedTessellations\\28\\29.1\n9529:\\28anonymous\\20namespace\\29::CacheImpl::~CacheImpl\\28\\29.1\n9530:\\28anonymous\\20namespace\\29::CacheImpl::set\\28SkImageFilterCacheKey\\20const&\\2c\\20SkImageFilter\\20const*\\2c\\20skif::FilterResult\\20const&\\29\n9531:\\28anonymous\\20namespace\\29::CacheImpl::purge\\28\\29\n9532:\\28anonymous\\20namespace\\29::CacheImpl::purgeByImageFilter\\28SkImageFilter\\20const*\\29\n9533:\\28anonymous\\20namespace\\29::CacheImpl::get\\28SkImageFilterCacheKey\\20const&\\2c\\20skif::FilterResult*\\29\\20const\n9534:\\28anonymous\\20namespace\\29::BoundingBoxShader::name\\28\\29\\20const\n9535:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n9536:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n9537:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n9538:\\28anonymous\\20namespace\\29::AAHairlineOp::~AAHairlineOp\\28\\29.1\n9539:\\28anonymous\\20namespace\\29::AAHairlineOp::~AAHairlineOp\\28\\29\n9540:\\28anonymous\\20namespace\\29::AAHairlineOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n9541:\\28anonymous\\20namespace\\29::AAHairlineOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n9542:\\28anonymous\\20namespace\\29::AAHairlineOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9543:\\28anonymous\\20namespace\\29::AAHairlineOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n9544:\\28anonymous\\20namespace\\29::AAHairlineOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n9545:\\28anonymous\\20namespace\\29::AAHairlineOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n9546:\\28anonymous\\20namespace\\29::AAHairlineOp::name\\28\\29\\20const\n9547:\\28anonymous\\20namespace\\29::AAHairlineOp::fixedFunctionFlags\\28\\29\\20const\n9548:\\28anonymous\\20namespace\\29::AAHairlineOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n9549:YuvToRgbaRow\n9550:YuvToRgba4444Row\n9551:YuvToRgbRow\n9552:YuvToRgb565Row\n9553:YuvToBgraRow\n9554:YuvToBgrRow\n9555:YuvToArgbRow\n9556:Write_CVT_Stretched\n9557:Write_CVT\n9558:WebPYuv444ToRgba_C\n9559:WebPYuv444ToRgba4444_C\n9560:WebPYuv444ToRgb_C\n9561:WebPYuv444ToRgb565_C\n9562:WebPYuv444ToBgra_C\n9563:WebPYuv444ToBgr_C\n9564:WebPYuv444ToArgb_C\n9565:WebPRescalerImportRowShrink_C\n9566:WebPRescalerImportRowExpand_C\n9567:WebPRescalerExportRowShrink_C\n9568:WebPRescalerExportRowExpand_C\n9569:WebPMultRow_C\n9570:WebPMultARGBRow_C\n9571:WebPConvertRGBA32ToUV_C\n9572:WebPConvertARGBToUV_C\n9573:WebGLTextureImageGenerator::~WebGLTextureImageGenerator\\28\\29.1\n9574:WebGLTextureImageGenerator::~WebGLTextureImageGenerator\\28\\29\n9575:WebGLTextureImageGenerator::generateExternalTexture\\28GrRecordingContext*\\2c\\20skgpu::Mipmapped\\29\n9576:Vertish_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9577:Vertish_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9578:VerticalUnfilter_C\n9579:VerticalFilter_C\n9580:VertState::Triangles\\28VertState*\\29\n9581:VertState::TrianglesX\\28VertState*\\29\n9582:VertState::TriangleStrip\\28VertState*\\29\n9583:VertState::TriangleStripX\\28VertState*\\29\n9584:VertState::TriangleFan\\28VertState*\\29\n9585:VertState::TriangleFanX\\28VertState*\\29\n9586:VR4_C\n9587:VP8LTransformColorInverse_C\n9588:VP8LPredictor9_C\n9589:VP8LPredictor8_C\n9590:VP8LPredictor7_C\n9591:VP8LPredictor6_C\n9592:VP8LPredictor5_C\n9593:VP8LPredictor4_C\n9594:VP8LPredictor3_C\n9595:VP8LPredictor2_C\n9596:VP8LPredictor1_C\n9597:VP8LPredictor13_C\n9598:VP8LPredictor12_C\n9599:VP8LPredictor11_C\n9600:VP8LPredictor10_C\n9601:VP8LPredictor0_C\n9602:VP8LConvertBGRAToRGB_C\n9603:VP8LConvertBGRAToRGBA_C\n9604:VP8LConvertBGRAToRGBA4444_C\n9605:VP8LConvertBGRAToRGB565_C\n9606:VP8LConvertBGRAToBGR_C\n9607:VP8LAddGreenToBlueAndRed_C\n9608:VLine_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9609:VLine_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9610:VL4_C\n9611:VFilter8i_C\n9612:VFilter8_C\n9613:VFilter16i_C\n9614:VFilter16_C\n9615:VE8uv_C\n9616:VE4_C\n9617:VE16_C\n9618:UpsampleRgbaLinePair_C\n9619:UpsampleRgba4444LinePair_C\n9620:UpsampleRgbLinePair_C\n9621:UpsampleRgb565LinePair_C\n9622:UpsampleBgraLinePair_C\n9623:UpsampleBgrLinePair_C\n9624:UpsampleArgbLinePair_C\n9625:UnresolvedCodepoints\\28skia::textlayout::Paragraph&\\29\n9626:UnicodeString_charAt\\28int\\2c\\20void*\\29\n9627:TransformWHT_C\n9628:TransformUV_C\n9629:TransformTwo_C\n9630:TransformDC_C\n9631:TransformDCUV_C\n9632:TransformAC3_C\n9633:ToSVGString\\28SkPath\\20const&\\29\n9634:ToCmds\\28SkPath\\20const&\\29\n9635:TT_Set_MM_Blend\n9636:TT_RunIns\n9637:TT_Load_Simple_Glyph\n9638:TT_Load_Glyph_Header\n9639:TT_Load_Composite_Glyph\n9640:TT_Get_Var_Design\n9641:TT_Get_MM_Blend\n9642:TT_Forget_Glyph_Frame\n9643:TT_Access_Glyph_Frame\n9644:TM8uv_C\n9645:TM4_C\n9646:TM16_C\n9647:Sync\n9648:SquareCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n9649:Sprite_D32_S32::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9650:SkWuffsFrameHolder::onGetFrame\\28int\\29\\20const\n9651:SkWuffsCodec::~SkWuffsCodec\\28\\29.1\n9652:SkWuffsCodec::~SkWuffsCodec\\28\\29\n9653:SkWuffsCodec::onIncrementalDecode\\28int*\\29\n9654:SkWuffsCodec::onGetRepetitionCount\\28\\29\n9655:SkWuffsCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9656:SkWuffsCodec::onGetFrameInfo\\28int\\2c\\20SkCodec::FrameInfo*\\29\\20const\n9657:SkWuffsCodec::onGetFrameCount\\28\\29\n9658:SkWuffsCodec::getFrameHolder\\28\\29\\20const\n9659:SkWuffsCodec::getEncodedData\\28\\29\\20const\n9660:SkWriteICCProfile\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n9661:SkWebpDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9662:SkWebpCodec::~SkWebpCodec\\28\\29.1\n9663:SkWebpCodec::~SkWebpCodec\\28\\29\n9664:SkWebpCodec::onGetValidSubset\\28SkIRect*\\29\\20const\n9665:SkWebpCodec::onGetRepetitionCount\\28\\29\n9666:SkWebpCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9667:SkWebpCodec::onGetFrameInfo\\28int\\2c\\20SkCodec::FrameInfo*\\29\\20const\n9668:SkWebpCodec::onGetFrameCount\\28\\29\n9669:SkWebpCodec::getFrameHolder\\28\\29\\20const\n9670:SkWebpCodec::FrameHolder::~FrameHolder\\28\\29.1\n9671:SkWebpCodec::FrameHolder::~FrameHolder\\28\\29\n9672:SkWebpCodec::FrameHolder::onGetFrame\\28int\\29\\20const\n9673:SkWeakRefCnt::internal_dispose\\28\\29\\20const\n9674:SkWbmpDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9675:SkWbmpCodec::~SkWbmpCodec\\28\\29.1\n9676:SkWbmpCodec::~SkWbmpCodec\\28\\29\n9677:SkWbmpCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9678:SkWbmpCodec::onSkipScanlines\\28int\\29\n9679:SkWbmpCodec::onRewind\\28\\29\n9680:SkWbmpCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n9681:SkWbmpCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9682:SkWbmpCodec::getSampler\\28bool\\29\n9683:SkWbmpCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n9684:SkVertices::Builder*\\20emscripten::internal::operator_new<SkVertices::Builder\\2c\\20SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int>\\28SkVertices::VertexMode&&\\2c\\20int&&\\2c\\20int&&\\2c\\20unsigned\\20int&&\\29\n9685:SkUserTypeface::~SkUserTypeface\\28\\29.1\n9686:SkUserTypeface::~SkUserTypeface\\28\\29\n9687:SkUserTypeface::onOpenStream\\28int*\\29\\20const\n9688:SkUserTypeface::onGetUPEM\\28\\29\\20const\n9689:SkUserTypeface::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n9690:SkUserTypeface::onGetFamilyName\\28SkString*\\29\\20const\n9691:SkUserTypeface::onFilterRec\\28SkScalerContextRec*\\29\\20const\n9692:SkUserTypeface::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n9693:SkUserTypeface::onCountGlyphs\\28\\29\\20const\n9694:SkUserTypeface::onComputeBounds\\28SkRect*\\29\\20const\n9695:SkUserTypeface::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n9696:SkUserTypeface::getGlyphToUnicodeMap\\28int*\\29\\20const\n9697:SkUserScalerContext::~SkUserScalerContext\\28\\29\n9698:SkUserScalerContext::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n9699:SkUserScalerContext::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n9700:SkUserScalerContext::generateImage\\28SkGlyph\\20const&\\2c\\20void*\\29\n9701:SkUserScalerContext::generateFontMetrics\\28SkFontMetrics*\\29\n9702:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::~DrawableMatrixWrapper\\28\\29.1\n9703:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::~DrawableMatrixWrapper\\28\\29\n9704:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::onGetBounds\\28\\29\n9705:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::onDraw\\28SkCanvas*\\29\n9706:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::onApproximateBytesUsed\\28\\29\n9707:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29\n9708:SkUnicode_icu::~SkUnicode_icu\\28\\29.1\n9709:SkUnicode_icu::~SkUnicode_icu\\28\\29\n9710:SkUnicode_icu::toUpper\\28SkString\\20const&\\2c\\20char\\20const*\\29\n9711:SkUnicode_icu::toUpper\\28SkString\\20const&\\29\n9712:SkUnicode_icu::reorderVisual\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\n9713:SkUnicode_icu::makeBreakIterator\\28char\\20const*\\2c\\20SkUnicode::BreakType\\29\n9714:SkUnicode_icu::makeBreakIterator\\28SkUnicode::BreakType\\29\n9715:SkUnicode_icu::makeBidiIterator\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\n9716:SkUnicode_icu::makeBidiIterator\\28char\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\n9717:SkUnicode_icu::isWhitespace\\28int\\29\n9718:SkUnicode_icu::isTabulation\\28int\\29\n9719:SkUnicode_icu::isSpace\\28int\\29\n9720:SkUnicode_icu::isRegionalIndicator\\28int\\29\n9721:SkUnicode_icu::isIdeographic\\28int\\29\n9722:SkUnicode_icu::isHardBreak\\28int\\29\n9723:SkUnicode_icu::isEmoji\\28int\\29\n9724:SkUnicode_icu::isEmojiModifier\\28int\\29\n9725:SkUnicode_icu::isEmojiModifierBase\\28int\\29\n9726:SkUnicode_icu::isEmojiComponent\\28int\\29\n9727:SkUnicode_icu::isControl\\28int\\29\n9728:SkUnicode_icu::getWords\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29\n9729:SkUnicode_icu::getUtf8Words\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29\n9730:SkUnicode_icu::getSentences\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29\n9731:SkUnicode_icu::getBidiRegions\\28char\\20const*\\2c\\20int\\2c\\20SkUnicode::TextDirection\\2c\\20std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>*\\29\n9732:SkUnicode_icu::computeCodeUnitFlags\\28char16_t*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29\n9733:SkUnicode_icu::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29\n9734:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\\28\\29.1\n9735:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\\28\\29\n9736:SkUnicodeBidiRunIterator::endOfCurrentRun\\28\\29\\20const\n9737:SkUnicodeBidiRunIterator::currentLevel\\28\\29\\20const\n9738:SkUnicodeBidiRunIterator::consume\\28\\29\n9739:SkUnicodeBidiRunIterator::atEnd\\28\\29\\20const\n9740:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\\28\\29.1\n9741:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\\28\\29\n9742:SkTypeface_FreeTypeStream::onOpenStream\\28int*\\29\\20const\n9743:SkTypeface_FreeTypeStream::onMakeFontData\\28\\29\\20const\n9744:SkTypeface_FreeTypeStream::onMakeClone\\28SkFontArguments\\20const&\\29\\20const\n9745:SkTypeface_FreeTypeStream::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n9746:SkTypeface_FreeType::onGlyphMaskNeedsCurrentColor\\28\\29\\20const\n9747:SkTypeface_FreeType::onGetVariationDesignPosition\\28SkFontArguments::VariationPosition::Coordinate*\\2c\\20int\\29\\20const\n9748:SkTypeface_FreeType::onGetVariationDesignParameters\\28SkFontParameters::Variation::Axis*\\2c\\20int\\29\\20const\n9749:SkTypeface_FreeType::onGetUPEM\\28\\29\\20const\n9750:SkTypeface_FreeType::onGetTableTags\\28unsigned\\20int*\\29\\20const\n9751:SkTypeface_FreeType::onGetTableData\\28unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20void*\\29\\20const\n9752:SkTypeface_FreeType::onGetPostScriptName\\28SkString*\\29\\20const\n9753:SkTypeface_FreeType::onGetKerningPairAdjustments\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n9754:SkTypeface_FreeType::onGetAdvancedMetrics\\28\\29\\20const\n9755:SkTypeface_FreeType::onFilterRec\\28SkScalerContextRec*\\29\\20const\n9756:SkTypeface_FreeType::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n9757:SkTypeface_FreeType::onCreateFamilyNameIterator\\28\\29\\20const\n9758:SkTypeface_FreeType::onCountGlyphs\\28\\29\\20const\n9759:SkTypeface_FreeType::onCopyTableData\\28unsigned\\20int\\29\\20const\n9760:SkTypeface_FreeType::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n9761:SkTypeface_FreeType::getPostScriptGlyphNames\\28SkString*\\29\\20const\n9762:SkTypeface_FreeType::getGlyphToUnicodeMap\\28int*\\29\\20const\n9763:SkTypeface_Empty::~SkTypeface_Empty\\28\\29\n9764:SkTypeface_Custom::~SkTypeface_Custom\\28\\29.1\n9765:SkTypeface_Custom::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n9766:SkTypeface::onCopyTableData\\28unsigned\\20int\\29\\20const\n9767:SkTypeface::onComputeBounds\\28SkRect*\\29\\20const\n9768:SkTrimPE::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9769:SkTrimPE::getTypeName\\28\\29\\20const\n9770:SkTriColorShader::type\\28\\29\\20const\n9771:SkTriColorShader::isOpaque\\28\\29\\20const\n9772:SkTriColorShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9773:SkTransformShader::type\\28\\29\\20const\n9774:SkTransformShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9775:SkTQuad::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n9776:SkTQuad::setBounds\\28SkDRect*\\29\\20const\n9777:SkTQuad::ptAtT\\28double\\29\\20const\n9778:SkTQuad::make\\28SkArenaAlloc&\\29\\20const\n9779:SkTQuad::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n9780:SkTQuad::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n9781:SkTQuad::dxdyAtT\\28double\\29\\20const\n9782:SkTQuad::debugInit\\28\\29\n9783:SkTCubic::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n9784:SkTCubic::setBounds\\28SkDRect*\\29\\20const\n9785:SkTCubic::ptAtT\\28double\\29\\20const\n9786:SkTCubic::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n9787:SkTCubic::make\\28SkArenaAlloc&\\29\\20const\n9788:SkTCubic::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n9789:SkTCubic::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n9790:SkTCubic::hullIntersects\\28SkDCubic\\20const&\\2c\\20bool*\\29\\20const\n9791:SkTCubic::dxdyAtT\\28double\\29\\20const\n9792:SkTCubic::debugInit\\28\\29\n9793:SkTCubic::controlsInside\\28\\29\\20const\n9794:SkTCubic::collapsed\\28\\29\\20const\n9795:SkTConic::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n9796:SkTConic::setBounds\\28SkDRect*\\29\\20const\n9797:SkTConic::ptAtT\\28double\\29\\20const\n9798:SkTConic::make\\28SkArenaAlloc&\\29\\20const\n9799:SkTConic::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n9800:SkTConic::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n9801:SkTConic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n9802:SkTConic::dxdyAtT\\28double\\29\\20const\n9803:SkTConic::debugInit\\28\\29\n9804:SkSwizzler::onSetSampleX\\28int\\29\n9805:SkSwizzler::fillWidth\\28\\29\\20const\n9806:SkSweepGradient::getTypeName\\28\\29\\20const\n9807:SkSweepGradient::flatten\\28SkWriteBuffer&\\29\\20const\n9808:SkSweepGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n9809:SkSweepGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n9810:SkSurface_Raster::~SkSurface_Raster\\28\\29.1\n9811:SkSurface_Raster::~SkSurface_Raster\\28\\29\n9812:SkSurface_Raster::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n9813:SkSurface_Raster::onRestoreBackingMutability\\28\\29\n9814:SkSurface_Raster::onNewSurface\\28SkImageInfo\\20const&\\29\n9815:SkSurface_Raster::onNewImageSnapshot\\28SkIRect\\20const*\\29\n9816:SkSurface_Raster::onNewCanvas\\28\\29\n9817:SkSurface_Raster::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n9818:SkSurface_Raster::onCopyOnWrite\\28SkSurface::ContentChangeMode\\29\n9819:SkSurface_Raster::imageInfo\\28\\29\\20const\n9820:SkSurface_Ganesh::~SkSurface_Ganesh\\28\\29.1\n9821:SkSurface_Ganesh::~SkSurface_Ganesh\\28\\29\n9822:SkSurface_Ganesh::replaceBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrSurfaceOrigin\\2c\\20SkSurface::ContentChangeMode\\2c\\20void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n9823:SkSurface_Ganesh::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n9824:SkSurface_Ganesh::onWait\\28int\\2c\\20GrBackendSemaphore\\20const*\\2c\\20bool\\29\n9825:SkSurface_Ganesh::onNewSurface\\28SkImageInfo\\20const&\\29\n9826:SkSurface_Ganesh::onNewImageSnapshot\\28SkIRect\\20const*\\29\n9827:SkSurface_Ganesh::onNewCanvas\\28\\29\n9828:SkSurface_Ganesh::onIsCompatible\\28GrSurfaceCharacterization\\20const&\\29\\20const\n9829:SkSurface_Ganesh::onGetRecordingContext\\28\\29\\20const\n9830:SkSurface_Ganesh::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n9831:SkSurface_Ganesh::onDiscard\\28\\29\n9832:SkSurface_Ganesh::onCopyOnWrite\\28SkSurface::ContentChangeMode\\29\n9833:SkSurface_Ganesh::onCharacterize\\28GrSurfaceCharacterization*\\29\\20const\n9834:SkSurface_Ganesh::onCapabilities\\28\\29\n9835:SkSurface_Ganesh::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n9836:SkSurface_Ganesh::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n9837:SkSurface_Ganesh::imageInfo\\28\\29\\20const\n9838:SkSurface_Base::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n9839:SkSurface::imageInfo\\28\\29\\20const\n9840:SkSurface::height\\28\\29\\20const\n9841:SkStrikeCache::~SkStrikeCache\\28\\29.1\n9842:SkStrikeCache::~SkStrikeCache\\28\\29\n9843:SkStrikeCache::findOrCreateScopedStrike\\28SkStrikeSpec\\20const&\\29\n9844:SkStrike::~SkStrike\\28\\29.1\n9845:SkStrike::~SkStrike\\28\\29\n9846:SkStrike::strikePromise\\28\\29\n9847:SkStrike::roundingSpec\\28\\29\\20const\n9848:SkStrike::prepareForPath\\28SkGlyph*\\29\n9849:SkStrike::prepareForImage\\28SkGlyph*\\29\n9850:SkStrike::prepareForDrawable\\28SkGlyph*\\29\n9851:SkStrike::getDescriptor\\28\\29\\20const\n9852:SkSpriteBlitter_Memcpy::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9853:SkSpriteBlitter::~SkSpriteBlitter\\28\\29.1\n9854:SkSpriteBlitter::setup\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\n9855:SkSpriteBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n9856:SkSpriteBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n9857:SkSpriteBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9858:SkSpecialImage_Raster::~SkSpecialImage_Raster\\28\\29.1\n9859:SkSpecialImage_Raster::~SkSpecialImage_Raster\\28\\29\n9860:SkSpecialImage_Raster::onMakeBackingStoreSubset\\28SkIRect\\20const&\\29\\20const\n9861:SkSpecialImage_Raster::getSize\\28\\29\\20const\n9862:SkSpecialImage_Raster::backingStoreDimensions\\28\\29\\20const\n9863:SkSpecialImage_Raster::asShader\\28SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\\20const\n9864:SkSpecialImage_Raster::asImage\\28\\29\\20const\n9865:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\\28\\29.1\n9866:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\\28\\29\n9867:SkSpecialImage_Gpu::onMakeBackingStoreSubset\\28SkIRect\\20const&\\29\\20const\n9868:SkSpecialImage_Gpu::getSize\\28\\29\\20const\n9869:SkSpecialImage_Gpu::backingStoreDimensions\\28\\29\\20const\n9870:SkSpecialImage_Gpu::asImage\\28\\29\\20const\n9871:SkSpecialImage::~SkSpecialImage\\28\\29\n9872:SkSpecialImage::asShader\\28SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\\20const\n9873:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\\28\\29.1\n9874:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\\28\\29\n9875:SkShaper::TrivialLanguageRunIterator::currentLanguage\\28\\29\\20const\n9876:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\\28\\29.1\n9877:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\\28\\29\n9878:SkShaper::TrivialBiDiRunIterator::currentLevel\\28\\29\\20const\n9879:SkScan::HairSquarePath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9880:SkScan::HairRoundPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9881:SkScan::HairPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9882:SkScan::AntiHairSquarePath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9883:SkScan::AntiHairRoundPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9884:SkScan::AntiHairPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9885:SkScan::AntiFillPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n9886:SkScalingCodec::onGetScaledDimensions\\28float\\29\\20const\n9887:SkScalingCodec::onDimensionsSupported\\28SkISize\\20const&\\29\n9888:SkScalerContext_FreeType::~SkScalerContext_FreeType\\28\\29.1\n9889:SkScalerContext_FreeType::~SkScalerContext_FreeType\\28\\29\n9890:SkScalerContext_FreeType::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n9891:SkScalerContext_FreeType::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n9892:SkScalerContext_FreeType::generateImage\\28SkGlyph\\20const&\\2c\\20void*\\29\n9893:SkScalerContext_FreeType::generateFontMetrics\\28SkFontMetrics*\\29\n9894:SkScalerContext_FreeType::generateDrawable\\28SkGlyph\\20const&\\29\n9895:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::~SkScalerContext_Empty\\28\\29\n9896:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n9897:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n9898:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generateFontMetrics\\28SkFontMetrics*\\29\n9899:SkSampledCodec::onGetSampledDimensions\\28int\\29\\20const\n9900:SkSampledCodec::onGetAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const&\\29\n9901:SkSRGBColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n9902:SkSRGBColorSpaceLuminance::fromLuma\\28float\\2c\\20float\\29\\20const\n9903:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_3::__invoke\\28double\\2c\\20double\\29\n9904:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_2::__invoke\\28double\\2c\\20double\\29\n9905:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_1::__invoke\\28double\\2c\\20double\\29\n9906:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_0::__invoke\\28double\\2c\\20double\\29\n9907:SkSL::remove_break_statements\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29::RemoveBreaksWriter::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n9908:SkSL::hoist_vardecl_symbols_into_outer_scope\\28SkSL::Context\\20const&\\2c\\20SkSL::Block\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::SymbolTable*\\29::SymbolHoister::visitStatement\\28SkSL::Statement\\20const&\\29\n9909:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\\28\\29.1\n9910:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\\28\\29\n9911:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\\28\\29.1\n9912:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\\28\\29\n9913:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n9914:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::visitExpressionPtr\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&\\29\n9915:SkSL::count_returns_at_end_of_control_flow\\28SkSL::FunctionDefinition\\20const&\\29::CountReturnsAtEndOfControlFlow::visitStatement\\28SkSL::Statement\\20const&\\29\n9916:SkSL::\\28anonymous\\20namespace\\29::VariableWriteVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9917:SkSL::\\28anonymous\\20namespace\\29::SampleOutsideMainVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n9918:SkSL::\\28anonymous\\20namespace\\29::SampleOutsideMainVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9919:SkSL::\\28anonymous\\20namespace\\29::ReturnsNonOpaqueColorVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9920:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9921:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n9922:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9923:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9924:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n9925:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9926:SkSL::\\28anonymous\\20namespace\\29::MergeSampleUsageVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n9927:SkSL::\\28anonymous\\20namespace\\29::MergeSampleUsageVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9928:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::~FinalizationVisitor\\28\\29.1\n9929:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::~FinalizationVisitor\\28\\29\n9930:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9931:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::~ES2IndexingVisitor\\28\\29.1\n9932:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::~ES2IndexingVisitor\\28\\29\n9933:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9934:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9935:SkSL::VectorType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n9936:SkSL::VectorType::isAllowedInES2\\28\\29\\20const\n9937:SkSL::VariableReference::clone\\28SkSL::Position\\29\\20const\n9938:SkSL::Variable::~Variable\\28\\29.1\n9939:SkSL::Variable::~Variable\\28\\29\n9940:SkSL::Variable::setInterfaceBlock\\28SkSL::InterfaceBlock*\\29\n9941:SkSL::Variable::mangledName\\28\\29\\20const\n9942:SkSL::Variable::layout\\28\\29\\20const\n9943:SkSL::Variable::description\\28\\29\\20const\n9944:SkSL::VarDeclaration::~VarDeclaration\\28\\29.1\n9945:SkSL::VarDeclaration::~VarDeclaration\\28\\29\n9946:SkSL::VarDeclaration::description\\28\\29\\20const\n9947:SkSL::TypeReference::clone\\28SkSL::Position\\29\\20const\n9948:SkSL::Type::minimumValue\\28\\29\\20const\n9949:SkSL::Type::maximumValue\\28\\29\\20const\n9950:SkSL::Type::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n9951:SkSL::Type::fields\\28\\29\\20const\n9952:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\\28\\29.1\n9953:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\\28\\29\n9954:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n9955:SkSL::Tracer::var\\28int\\2c\\20int\\29\n9956:SkSL::Tracer::scope\\28int\\29\n9957:SkSL::Tracer::line\\28int\\29\n9958:SkSL::Tracer::exit\\28int\\29\n9959:SkSL::Tracer::enter\\28int\\29\n9960:SkSL::TextureType::textureAccess\\28\\29\\20const\n9961:SkSL::TextureType::isMultisampled\\28\\29\\20const\n9962:SkSL::TextureType::isDepth\\28\\29\\20const\n9963:SkSL::TextureType::isArrayedTexture\\28\\29\\20const\n9964:SkSL::TernaryExpression::~TernaryExpression\\28\\29.1\n9965:SkSL::TernaryExpression::~TernaryExpression\\28\\29\n9966:SkSL::TernaryExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n9967:SkSL::TernaryExpression::clone\\28SkSL::Position\\29\\20const\n9968:SkSL::TProgramVisitor<SkSL::ProgramWriterTypes>::visitExpression\\28SkSL::Expression&\\29\n9969:SkSL::Swizzle::~Swizzle\\28\\29.1\n9970:SkSL::Swizzle::~Swizzle\\28\\29\n9971:SkSL::Swizzle::description\\28SkSL::OperatorPrecedence\\29\\20const\n9972:SkSL::Swizzle::clone\\28SkSL::Position\\29\\20const\n9973:SkSL::SwitchStatement::description\\28\\29\\20const\n9974:SkSL::SwitchCase::description\\28\\29\\20const\n9975:SkSL::StructType::slotType\\28unsigned\\20long\\29\\20const\n9976:SkSL::StructType::isOrContainsUnsizedArray\\28\\29\\20const\n9977:SkSL::StructType::isOrContainsAtomic\\28\\29\\20const\n9978:SkSL::StructType::isOrContainsArray\\28\\29\\20const\n9979:SkSL::StructType::isInterfaceBlock\\28\\29\\20const\n9980:SkSL::StructType::isBuiltin\\28\\29\\20const\n9981:SkSL::StructType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n9982:SkSL::StructType::isAllowedInES2\\28\\29\\20const\n9983:SkSL::StructType::fields\\28\\29\\20const\n9984:SkSL::StructDefinition::description\\28\\29\\20const\n9985:SkSL::StringStream::~StringStream\\28\\29.1\n9986:SkSL::StringStream::~StringStream\\28\\29\n9987:SkSL::StringStream::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n9988:SkSL::StringStream::writeText\\28char\\20const*\\29\n9989:SkSL::StringStream::write8\\28unsigned\\20char\\29\n9990:SkSL::SingleArgumentConstructor::~SingleArgumentConstructor\\28\\29\n9991:SkSL::Setting::description\\28SkSL::OperatorPrecedence\\29\\20const\n9992:SkSL::Setting::clone\\28SkSL::Position\\29\\20const\n9993:SkSL::ScalarType::priority\\28\\29\\20const\n9994:SkSL::ScalarType::numberKind\\28\\29\\20const\n9995:SkSL::ScalarType::minimumValue\\28\\29\\20const\n9996:SkSL::ScalarType::maximumValue\\28\\29\\20const\n9997:SkSL::ScalarType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n9998:SkSL::ScalarType::isAllowedInES2\\28\\29\\20const\n9999:SkSL::ScalarType::bitWidth\\28\\29\\20const\n10000:SkSL::SamplerType::textureAccess\\28\\29\\20const\n10001:SkSL::SamplerType::isMultisampled\\28\\29\\20const\n10002:SkSL::SamplerType::isDepth\\28\\29\\20const\n10003:SkSL::SamplerType::isArrayedTexture\\28\\29\\20const\n10004:SkSL::SamplerType::dimensions\\28\\29\\20const\n10005:SkSL::ReturnStatement::description\\28\\29\\20const\n10006:SkSL::RP::VariableLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10007:SkSL::RP::VariableLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10008:SkSL::RP::VariableLValue::isWritable\\28\\29\\20const\n10009:SkSL::RP::VariableLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10010:SkSL::RP::UnownedLValueSlice::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10011:SkSL::RP::UnownedLValueSlice::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10012:SkSL::RP::UnownedLValueSlice::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10013:SkSL::RP::SwizzleLValue::~SwizzleLValue\\28\\29.1\n10014:SkSL::RP::SwizzleLValue::~SwizzleLValue\\28\\29\n10015:SkSL::RP::SwizzleLValue::swizzle\\28\\29\n10016:SkSL::RP::SwizzleLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10017:SkSL::RP::SwizzleLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10018:SkSL::RP::SwizzleLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10019:SkSL::RP::ScratchLValue::~ScratchLValue\\28\\29.1\n10020:SkSL::RP::ScratchLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10021:SkSL::RP::ScratchLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10022:SkSL::RP::LValueSlice::~LValueSlice\\28\\29.1\n10023:SkSL::RP::LValueSlice::~LValueSlice\\28\\29\n10024:SkSL::RP::LValue::~LValue\\28\\29.1\n10025:SkSL::RP::ImmutableLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10026:SkSL::RP::ImmutableLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10027:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\\28\\29.1\n10028:SkSL::RP::DynamicIndexLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10029:SkSL::RP::DynamicIndexLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10030:SkSL::RP::DynamicIndexLValue::isWritable\\28\\29\\20const\n10031:SkSL::RP::DynamicIndexLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10032:SkSL::ProgramVisitor::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\20const&\\29\n10033:SkSL::ProgramVisitor::visitExpressionPtr\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const&\\29\n10034:SkSL::PrefixExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10035:SkSL::PrefixExpression::clone\\28SkSL::Position\\29\\20const\n10036:SkSL::PostfixExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10037:SkSL::PostfixExpression::clone\\28SkSL::Position\\29\\20const\n10038:SkSL::Poison::description\\28SkSL::OperatorPrecedence\\29\\20const\n10039:SkSL::Poison::clone\\28SkSL::Position\\29\\20const\n10040:SkSL::PipelineStage::Callbacks::getMainName\\28\\29\n10041:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\\28\\29.1\n10042:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\\28\\29\n10043:SkSL::Parser::Checkpoint::ForwardingErrorReporter::handleError\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n10044:SkSL::Nop::description\\28\\29\\20const\n10045:SkSL::MultiArgumentConstructor::~MultiArgumentConstructor\\28\\29\n10046:SkSL::ModifiersDeclaration::description\\28\\29\\20const\n10047:SkSL::MethodReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n10048:SkSL::MethodReference::clone\\28SkSL::Position\\29\\20const\n10049:SkSL::MatrixType::slotCount\\28\\29\\20const\n10050:SkSL::MatrixType::rows\\28\\29\\20const\n10051:SkSL::MatrixType::isAllowedInES2\\28\\29\\20const\n10052:SkSL::LiteralType::minimumValue\\28\\29\\20const\n10053:SkSL::LiteralType::maximumValue\\28\\29\\20const\n10054:SkSL::Literal::getConstantValue\\28int\\29\\20const\n10055:SkSL::Literal::description\\28SkSL::OperatorPrecedence\\29\\20const\n10056:SkSL::Literal::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n10057:SkSL::Literal::clone\\28SkSL::Position\\29\\20const\n10058:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::finalize_distance\\28double\\29\n10059:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_uintBitsToFloat\\28double\\2c\\20double\\2c\\20double\\29\n10060:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_trunc\\28double\\2c\\20double\\2c\\20double\\29\n10061:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_tanh\\28double\\2c\\20double\\2c\\20double\\29\n10062:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_tan\\28double\\2c\\20double\\2c\\20double\\29\n10063:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sub\\28double\\2c\\20double\\2c\\20double\\29\n10064:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_step\\28double\\2c\\20double\\2c\\20double\\29\n10065:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sqrt\\28double\\2c\\20double\\2c\\20double\\29\n10066:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_smoothstep\\28double\\2c\\20double\\2c\\20double\\29\n10067:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sinh\\28double\\2c\\20double\\2c\\20double\\29\n10068:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sin\\28double\\2c\\20double\\2c\\20double\\29\n10069:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_saturate\\28double\\2c\\20double\\2c\\20double\\29\n10070:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_radians\\28double\\2c\\20double\\2c\\20double\\29\n10071:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_pow\\28double\\2c\\20double\\2c\\20double\\29\n10072:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mod\\28double\\2c\\20double\\2c\\20double\\29\n10073:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mix\\28double\\2c\\20double\\2c\\20double\\29\n10074:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_min\\28double\\2c\\20double\\2c\\20double\\29\n10075:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_max\\28double\\2c\\20double\\2c\\20double\\29\n10076:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_log\\28double\\2c\\20double\\2c\\20double\\29\n10077:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_log2\\28double\\2c\\20double\\2c\\20double\\29\n10078:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_inversesqrt\\28double\\2c\\20double\\2c\\20double\\29\n10079:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_intBitsToFloat\\28double\\2c\\20double\\2c\\20double\\29\n10080:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_fract\\28double\\2c\\20double\\2c\\20double\\29\n10081:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_fma\\28double\\2c\\20double\\2c\\20double\\29\n10082:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floor\\28double\\2c\\20double\\2c\\20double\\29\n10083:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floatBitsToUint\\28double\\2c\\20double\\2c\\20double\\29\n10084:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floatBitsToInt\\28double\\2c\\20double\\2c\\20double\\29\n10085:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_exp\\28double\\2c\\20double\\2c\\20double\\29\n10086:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_exp2\\28double\\2c\\20double\\2c\\20double\\29\n10087:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_div\\28double\\2c\\20double\\2c\\20double\\29\n10088:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_degrees\\28double\\2c\\20double\\2c\\20double\\29\n10089:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_cosh\\28double\\2c\\20double\\2c\\20double\\29\n10090:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_cos\\28double\\2c\\20double\\2c\\20double\\29\n10091:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_clamp\\28double\\2c\\20double\\2c\\20double\\29\n10092:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_ceil\\28double\\2c\\20double\\2c\\20double\\29\n10093:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atanh\\28double\\2c\\20double\\2c\\20double\\29\n10094:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atan\\28double\\2c\\20double\\2c\\20double\\29\n10095:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atan2\\28double\\2c\\20double\\2c\\20double\\29\n10096:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_asinh\\28double\\2c\\20double\\2c\\20double\\29\n10097:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_asin\\28double\\2c\\20double\\2c\\20double\\29\n10098:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_add\\28double\\2c\\20double\\2c\\20double\\29\n10099:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_acosh\\28double\\2c\\20double\\2c\\20double\\29\n10100:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_acos\\28double\\2c\\20double\\2c\\20double\\29\n10101:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_abs\\28double\\2c\\20double\\2c\\20double\\29\n10102:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_notEqual\\28double\\2c\\20double\\29\n10103:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_lessThan\\28double\\2c\\20double\\29\n10104:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_lessThanEqual\\28double\\2c\\20double\\29\n10105:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_greaterThan\\28double\\2c\\20double\\29\n10106:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_greaterThanEqual\\28double\\2c\\20double\\29\n10107:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_equal\\28double\\2c\\20double\\29\n10108:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_dot\\28double\\2c\\20double\\2c\\20double\\29\n10109:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_distance\\28double\\2c\\20double\\2c\\20double\\29\n10110:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_any\\28double\\2c\\20double\\2c\\20double\\29\n10111:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_all\\28double\\2c\\20double\\2c\\20double\\29\n10112:SkSL::InterfaceBlock::~InterfaceBlock\\28\\29.1\n10113:SkSL::InterfaceBlock::description\\28\\29\\20const\n10114:SkSL::IndexExpression::~IndexExpression\\28\\29.1\n10115:SkSL::IndexExpression::~IndexExpression\\28\\29\n10116:SkSL::IndexExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10117:SkSL::IndexExpression::clone\\28SkSL::Position\\29\\20const\n10118:SkSL::IfStatement::~IfStatement\\28\\29.1\n10119:SkSL::IfStatement::~IfStatement\\28\\29\n10120:SkSL::IfStatement::description\\28\\29\\20const\n10121:SkSL::GlobalVarDeclaration::description\\28\\29\\20const\n10122:SkSL::GenericType::slotType\\28unsigned\\20long\\29\\20const\n10123:SkSL::GenericType::coercibleTypes\\28\\29\\20const\n10124:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\\28\\29.1\n10125:SkSL::FunctionReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n10126:SkSL::FunctionReference::clone\\28SkSL::Position\\29\\20const\n10127:SkSL::FunctionPrototype::description\\28\\29\\20const\n10128:SkSL::FunctionDefinition::description\\28\\29\\20const\n10129:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::~Finalizer\\28\\29.1\n10130:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::~Finalizer\\28\\29\n10131:SkSL::FunctionCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n10132:SkSL::FunctionCall::clone\\28SkSL::Position\\29\\20const\n10133:SkSL::ForStatement::~ForStatement\\28\\29.1\n10134:SkSL::ForStatement::~ForStatement\\28\\29\n10135:SkSL::ForStatement::description\\28\\29\\20const\n10136:SkSL::FieldSymbol::description\\28\\29\\20const\n10137:SkSL::FieldAccess::clone\\28SkSL::Position\\29\\20const\n10138:SkSL::Extension::description\\28\\29\\20const\n10139:SkSL::ExtendedVariable::~ExtendedVariable\\28\\29.1\n10140:SkSL::ExtendedVariable::~ExtendedVariable\\28\\29\n10141:SkSL::ExtendedVariable::setInterfaceBlock\\28SkSL::InterfaceBlock*\\29\n10142:SkSL::ExtendedVariable::mangledName\\28\\29\\20const\n10143:SkSL::ExtendedVariable::layout\\28\\29\\20const\n10144:SkSL::ExtendedVariable::interfaceBlock\\28\\29\\20const\n10145:SkSL::ExtendedVariable::detachDeadInterfaceBlock\\28\\29\n10146:SkSL::ExpressionStatement::description\\28\\29\\20const\n10147:SkSL::Expression::getConstantValue\\28int\\29\\20const\n10148:SkSL::EmptyExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10149:SkSL::EmptyExpression::clone\\28SkSL::Position\\29\\20const\n10150:SkSL::DoStatement::description\\28\\29\\20const\n10151:SkSL::DiscardStatement::description\\28\\29\\20const\n10152:SkSL::DebugTracePriv::~DebugTracePriv\\28\\29.1\n10153:SkSL::DebugTracePriv::writeTrace\\28SkWStream*\\29\\20const\n10154:SkSL::DebugTracePriv::dump\\28SkWStream*\\29\\20const\n10155:SkSL::CountReturnsWithLimit::visitStatement\\28SkSL::Statement\\20const&\\29\n10156:SkSL::ContinueStatement::description\\28\\29\\20const\n10157:SkSL::ConstructorStruct::clone\\28SkSL::Position\\29\\20const\n10158:SkSL::ConstructorSplat::getConstantValue\\28int\\29\\20const\n10159:SkSL::ConstructorSplat::clone\\28SkSL::Position\\29\\20const\n10160:SkSL::ConstructorScalarCast::clone\\28SkSL::Position\\29\\20const\n10161:SkSL::ConstructorMatrixResize::getConstantValue\\28int\\29\\20const\n10162:SkSL::ConstructorMatrixResize::clone\\28SkSL::Position\\29\\20const\n10163:SkSL::ConstructorDiagonalMatrix::getConstantValue\\28int\\29\\20const\n10164:SkSL::ConstructorDiagonalMatrix::clone\\28SkSL::Position\\29\\20const\n10165:SkSL::ConstructorCompoundCast::clone\\28SkSL::Position\\29\\20const\n10166:SkSL::ConstructorCompound::clone\\28SkSL::Position\\29\\20const\n10167:SkSL::ConstructorArrayCast::clone\\28SkSL::Position\\29\\20const\n10168:SkSL::ConstructorArray::clone\\28SkSL::Position\\29\\20const\n10169:SkSL::Compiler::CompilerErrorReporter::handleError\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n10170:SkSL::CodeGenerator::~CodeGenerator\\28\\29\n10171:SkSL::ChildCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n10172:SkSL::ChildCall::clone\\28SkSL::Position\\29\\20const\n10173:SkSL::BreakStatement::description\\28\\29\\20const\n10174:SkSL::Block::~Block\\28\\29.1\n10175:SkSL::Block::~Block\\28\\29\n10176:SkSL::Block::isEmpty\\28\\29\\20const\n10177:SkSL::Block::description\\28\\29\\20const\n10178:SkSL::BinaryExpression::~BinaryExpression\\28\\29.1\n10179:SkSL::BinaryExpression::~BinaryExpression\\28\\29\n10180:SkSL::BinaryExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10181:SkSL::BinaryExpression::clone\\28SkSL::Position\\29\\20const\n10182:SkSL::ArrayType::slotType\\28unsigned\\20long\\29\\20const\n10183:SkSL::ArrayType::slotCount\\28\\29\\20const\n10184:SkSL::ArrayType::isUnsizedArray\\28\\29\\20const\n10185:SkSL::ArrayType::isOrContainsUnsizedArray\\28\\29\\20const\n10186:SkSL::ArrayType::isOrContainsAtomic\\28\\29\\20const\n10187:SkSL::ArrayType::isBuiltin\\28\\29\\20const\n10188:SkSL::ArrayType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n10189:SkSL::AnyConstructor::getConstantValue\\28int\\29\\20const\n10190:SkSL::AnyConstructor::description\\28SkSL::OperatorPrecedence\\29\\20const\n10191:SkSL::AnyConstructor::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n10192:SkSL::Analysis::IsDynamicallyUniformExpression\\28SkSL::Expression\\20const&\\29::IsDynamicallyUniformExpressionVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10193:SkSL::Analysis::IsCompileTimeConstant\\28SkSL::Expression\\20const&\\29::IsCompileTimeConstantVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10194:SkSL::Analysis::HasSideEffects\\28SkSL::Expression\\20const&\\29::HasSideEffectsVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10195:SkSL::Analysis::ContainsVariable\\28SkSL::Expression\\20const&\\2c\\20SkSL::Variable\\20const&\\29::ContainsVariableVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10196:SkSL::Analysis::ContainsRTAdjust\\28SkSL::Expression\\20const&\\29::ContainsRTAdjustVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10197:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::~ProgramSizeVisitor\\28\\29.1\n10198:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::~ProgramSizeVisitor\\28\\29\n10199:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n10200:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10201:SkSL::AliasType::textureAccess\\28\\29\\20const\n10202:SkSL::AliasType::slotType\\28unsigned\\20long\\29\\20const\n10203:SkSL::AliasType::slotCount\\28\\29\\20const\n10204:SkSL::AliasType::rows\\28\\29\\20const\n10205:SkSL::AliasType::priority\\28\\29\\20const\n10206:SkSL::AliasType::isVector\\28\\29\\20const\n10207:SkSL::AliasType::isUnsizedArray\\28\\29\\20const\n10208:SkSL::AliasType::isStruct\\28\\29\\20const\n10209:SkSL::AliasType::isScalar\\28\\29\\20const\n10210:SkSL::AliasType::isMultisampled\\28\\29\\20const\n10211:SkSL::AliasType::isMatrix\\28\\29\\20const\n10212:SkSL::AliasType::isLiteral\\28\\29\\20const\n10213:SkSL::AliasType::isInterfaceBlock\\28\\29\\20const\n10214:SkSL::AliasType::isDepth\\28\\29\\20const\n10215:SkSL::AliasType::isArrayedTexture\\28\\29\\20const\n10216:SkSL::AliasType::isArray\\28\\29\\20const\n10217:SkSL::AliasType::dimensions\\28\\29\\20const\n10218:SkSL::AliasType::componentType\\28\\29\\20const\n10219:SkSL::AliasType::columns\\28\\29\\20const\n10220:SkSL::AliasType::coercibleTypes\\28\\29\\20const\n10221:SkRuntimeShader::~SkRuntimeShader\\28\\29.1\n10222:SkRuntimeShader::type\\28\\29\\20const\n10223:SkRuntimeShader::isOpaque\\28\\29\\20const\n10224:SkRuntimeShader::getTypeName\\28\\29\\20const\n10225:SkRuntimeShader::flatten\\28SkWriteBuffer&\\29\\20const\n10226:SkRuntimeShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10227:SkRuntimeEffect::~SkRuntimeEffect\\28\\29.1\n10228:SkRuntimeEffect::MakeFromSource\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\2c\\20SkSL::ProgramKind\\29\n10229:SkRuntimeColorFilter::~SkRuntimeColorFilter\\28\\29.1\n10230:SkRuntimeColorFilter::~SkRuntimeColorFilter\\28\\29\n10231:SkRuntimeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n10232:SkRuntimeColorFilter::getTypeName\\28\\29\\20const\n10233:SkRuntimeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10234:SkRuntimeBlender::~SkRuntimeBlender\\28\\29.1\n10235:SkRuntimeBlender::~SkRuntimeBlender\\28\\29\n10236:SkRuntimeBlender::onAppendStages\\28SkStageRec\\20const&\\29\\20const\n10237:SkRuntimeBlender::getTypeName\\28\\29\\20const\n10238:SkRgnClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10239:SkRgnClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10240:SkRgnClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10241:SkRgnClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10242:SkRgnClipBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10243:SkRgnClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10244:SkRgnBuilder::~SkRgnBuilder\\28\\29.1\n10245:SkRgnBuilder::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10246:SkResourceCache::SetTotalByteLimit\\28unsigned\\20long\\29\n10247:SkResourceCache::GetTotalBytesUsed\\28\\29\n10248:SkResourceCache::GetTotalByteLimit\\28\\29\n10249:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::~Result\\28\\29.1\n10250:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::~Result\\28\\29\n10251:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::data\\28int\\29\\20const\n10252:SkRefCntSet::~SkRefCntSet\\28\\29.1\n10253:SkRefCntSet::incPtr\\28void*\\29\n10254:SkRefCntSet::decPtr\\28void*\\29\n10255:SkRectClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10256:SkRectClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10257:SkRectClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10258:SkRectClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10259:SkRectClipBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10260:SkRectClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10261:SkRecorder::~SkRecorder\\28\\29.1\n10262:SkRecorder::~SkRecorder\\28\\29\n10263:SkRecorder::willSave\\28\\29\n10264:SkRecorder::onResetClip\\28\\29\n10265:SkRecorder::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10266:SkRecorder::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10267:SkRecorder::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n10268:SkRecorder::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n10269:SkRecorder::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n10270:SkRecorder::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10271:SkRecorder::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10272:SkRecorder::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n10273:SkRecorder::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n10274:SkRecorder::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n10275:SkRecorder::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10276:SkRecorder::onDrawPaint\\28SkPaint\\20const&\\29\n10277:SkRecorder::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10278:SkRecorder::onDrawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n10279:SkRecorder::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10280:SkRecorder::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n10281:SkRecorder::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10282:SkRecorder::onDrawGlyphRunList\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n10283:SkRecorder::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n10284:SkRecorder::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10285:SkRecorder::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n10286:SkRecorder::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10287:SkRecorder::onDrawBehind\\28SkPaint\\20const&\\29\n10288:SkRecorder::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n10289:SkRecorder::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n10290:SkRecorder::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n10291:SkRecorder::onDoSaveBehind\\28SkRect\\20const*\\29\n10292:SkRecorder::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n10293:SkRecorder::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10294:SkRecorder::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10295:SkRecorder::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10296:SkRecorder::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10297:SkRecorder::getSaveLayerStrategy\\28SkCanvas::SaveLayerRec\\20const&\\29\n10298:SkRecorder::didTranslate\\28float\\2c\\20float\\29\n10299:SkRecorder::didSetM44\\28SkM44\\20const&\\29\n10300:SkRecorder::didScale\\28float\\2c\\20float\\29\n10301:SkRecorder::didRestore\\28\\29\n10302:SkRecorder::didConcat44\\28SkM44\\20const&\\29\n10303:SkRecordedDrawable::~SkRecordedDrawable\\28\\29.1\n10304:SkRecordedDrawable::~SkRecordedDrawable\\28\\29\n10305:SkRecordedDrawable::onMakePictureSnapshot\\28\\29\n10306:SkRecordedDrawable::onGetBounds\\28\\29\n10307:SkRecordedDrawable::onDraw\\28SkCanvas*\\29\n10308:SkRecordedDrawable::onApproximateBytesUsed\\28\\29\n10309:SkRecordedDrawable::getTypeName\\28\\29\\20const\n10310:SkRecordedDrawable::flatten\\28SkWriteBuffer&\\29\\20const\n10311:SkRecord::~SkRecord\\28\\29.1\n10312:SkRecord::~SkRecord\\28\\29\n10313:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\\28\\29.1\n10314:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\\28\\29\n10315:SkRasterPipelineSpriteBlitter::setup\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\n10316:SkRasterPipelineSpriteBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10317:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\\28\\29.1\n10318:SkRasterPipelineBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10319:SkRasterPipelineBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10320:SkRasterPipelineBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10321:SkRasterPipelineBlitter::blitAntiV2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n10322:SkRasterPipelineBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10323:SkRasterPipelineBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n10324:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_3::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10325:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_2::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10326:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_1::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10327:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_0::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10328:SkRadialGradient::getTypeName\\28\\29\\20const\n10329:SkRadialGradient::flatten\\28SkWriteBuffer&\\29\\20const\n10330:SkRadialGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10331:SkRadialGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n10332:SkRTree::~SkRTree\\28\\29.1\n10333:SkRTree::~SkRTree\\28\\29\n10334:SkRTree::search\\28SkRect\\20const&\\2c\\20std::__2::vector<int\\2c\\20std::__2::allocator<int>>*\\29\\20const\n10335:SkRTree::insert\\28SkRect\\20const*\\2c\\20int\\29\n10336:SkRTree::bytesUsed\\28\\29\\20const\n10337:SkPtrSet::~SkPtrSet\\28\\29\n10338:SkPngNormalDecoder::~SkPngNormalDecoder\\28\\29\n10339:SkPngNormalDecoder::setRange\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n10340:SkPngNormalDecoder::decode\\28int*\\29\n10341:SkPngNormalDecoder::decodeAllRows\\28void*\\2c\\20unsigned\\20long\\2c\\20int*\\29\n10342:SkPngNormalDecoder::RowCallback\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20int\\29\n10343:SkPngNormalDecoder::AllRowsCallback\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20int\\29\n10344:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\\28\\29.1\n10345:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\\28\\29\n10346:SkPngInterlacedDecoder::setRange\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n10347:SkPngInterlacedDecoder::decode\\28int*\\29\n10348:SkPngInterlacedDecoder::decodeAllRows\\28void*\\2c\\20unsigned\\20long\\2c\\20int*\\29\n10349:SkPngInterlacedDecoder::InterlacedRowCallback\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20int\\29\n10350:SkPngEncoderImpl::~SkPngEncoderImpl\\28\\29.1\n10351:SkPngEncoderImpl::~SkPngEncoderImpl\\28\\29\n10352:SkPngEncoderImpl::onEncodeRows\\28int\\29\n10353:SkPngDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n10354:SkPngCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n10355:SkPngCodec::onRewind\\28\\29\n10356:SkPngCodec::onIncrementalDecode\\28int*\\29\n10357:SkPngCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n10358:SkPngCodec::getSampler\\28bool\\29\n10359:SkPngCodec::createColorTable\\28SkImageInfo\\20const&\\29\n10360:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_2::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10361:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_1::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10362:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_0::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10363:SkPixelRef::~SkPixelRef\\28\\29.1\n10364:SkPictureShader::~SkPictureShader\\28\\29.1\n10365:SkPictureShader::~SkPictureShader\\28\\29\n10366:SkPictureShader::type\\28\\29\\20const\n10367:SkPictureShader::getTypeName\\28\\29\\20const\n10368:SkPictureShader::flatten\\28SkWriteBuffer&\\29\\20const\n10369:SkPictureShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10370:SkPictureRecorder*\\20emscripten::internal::operator_new<SkPictureRecorder>\\28\\29\n10371:SkPictureRecord::~SkPictureRecord\\28\\29.1\n10372:SkPictureRecord::willSave\\28\\29\n10373:SkPictureRecord::willRestore\\28\\29\n10374:SkPictureRecord::onResetClip\\28\\29\n10375:SkPictureRecord::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10376:SkPictureRecord::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10377:SkPictureRecord::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n10378:SkPictureRecord::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n10379:SkPictureRecord::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n10380:SkPictureRecord::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10381:SkPictureRecord::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10382:SkPictureRecord::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n10383:SkPictureRecord::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n10384:SkPictureRecord::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n10385:SkPictureRecord::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10386:SkPictureRecord::onDrawPaint\\28SkPaint\\20const&\\29\n10387:SkPictureRecord::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10388:SkPictureRecord::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10389:SkPictureRecord::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n10390:SkPictureRecord::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10391:SkPictureRecord::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n10392:SkPictureRecord::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10393:SkPictureRecord::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n10394:SkPictureRecord::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10395:SkPictureRecord::onDrawBehind\\28SkPaint\\20const&\\29\n10396:SkPictureRecord::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n10397:SkPictureRecord::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n10398:SkPictureRecord::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n10399:SkPictureRecord::onDoSaveBehind\\28SkRect\\20const*\\29\n10400:SkPictureRecord::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n10401:SkPictureRecord::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10402:SkPictureRecord::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10403:SkPictureRecord::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10404:SkPictureRecord::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10405:SkPictureRecord::getSaveLayerStrategy\\28SkCanvas::SaveLayerRec\\20const&\\29\n10406:SkPictureRecord::didTranslate\\28float\\2c\\20float\\29\n10407:SkPictureRecord::didSetM44\\28SkM44\\20const&\\29\n10408:SkPictureRecord::didScale\\28float\\2c\\20float\\29\n10409:SkPictureRecord::didConcat44\\28SkM44\\20const&\\29\n10410:SkPictureData::serialize\\28SkWStream*\\2c\\20SkSerialProcs\\20const&\\2c\\20SkRefCntSet*\\2c\\20bool\\29\\20const::DevNull::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n10411:SkPerlinNoiseShader::~SkPerlinNoiseShader\\28\\29.1\n10412:SkPerlinNoiseShader::~SkPerlinNoiseShader\\28\\29\n10413:SkPerlinNoiseShader::type\\28\\29\\20const\n10414:SkPerlinNoiseShader::getTypeName\\28\\29\\20const\n10415:SkPerlinNoiseShader::flatten\\28SkWriteBuffer&\\29\\20const\n10416:SkPerlinNoiseShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10417:SkPath::setIsVolatile\\28bool\\29\n10418:SkPath::setFillType\\28SkPathFillType\\29\n10419:SkPath::isVolatile\\28\\29\\20const\n10420:SkPath::getFillType\\28\\29\\20const\n10421:SkPath2DPathEffectImpl::~SkPath2DPathEffectImpl\\28\\29.1\n10422:SkPath2DPathEffectImpl::~SkPath2DPathEffectImpl\\28\\29\n10423:SkPath2DPathEffectImpl::next\\28SkPoint\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPath*\\29\\20const\n10424:SkPath2DPathEffectImpl::getTypeName\\28\\29\\20const\n10425:SkPath2DPathEffectImpl::getFactory\\28\\29\\20const\n10426:SkPath2DPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n10427:SkPath2DPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n10428:SkPath1DPathEffectImpl::~SkPath1DPathEffectImpl\\28\\29.1\n10429:SkPath1DPathEffectImpl::~SkPath1DPathEffectImpl\\28\\29\n10430:SkPath1DPathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n10431:SkPath1DPathEffectImpl::next\\28SkPath*\\2c\\20float\\2c\\20SkPathMeasure&\\29\\20const\n10432:SkPath1DPathEffectImpl::getTypeName\\28\\29\\20const\n10433:SkPath1DPathEffectImpl::getFactory\\28\\29\\20const\n10434:SkPath1DPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n10435:SkPath1DPathEffectImpl::begin\\28float\\29\\20const\n10436:SkPath1DPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n10437:SkPath*\\20emscripten::internal::operator_new<SkPath>\\28\\29\n10438:SkPairPathEffect::~SkPairPathEffect\\28\\29.1\n10439:SkPaint::setDither\\28bool\\29\n10440:SkPaint::setAntiAlias\\28bool\\29\n10441:SkPaint::getStrokeMiter\\28\\29\\20const\n10442:SkPaint::getStrokeJoin\\28\\29\\20const\n10443:SkPaint::getStrokeCap\\28\\29\\20const\n10444:SkPaint*\\20emscripten::internal::operator_new<SkPaint>\\28\\29\n10445:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\\28\\29.1\n10446:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\\28\\29\n10447:SkOTUtils::LocalizedStrings_SingleName::next\\28SkTypeface::LocalizedString*\\29\n10448:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\\28\\29.1\n10449:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\\28\\29\n10450:SkOTUtils::LocalizedStrings_NameTable::next\\28SkTypeface::LocalizedString*\\29\n10451:SkNoPixelsDevice::~SkNoPixelsDevice\\28\\29.1\n10452:SkNoPixelsDevice::~SkNoPixelsDevice\\28\\29\n10453:SkNoPixelsDevice::replaceClip\\28SkIRect\\20const&\\29\n10454:SkNoPixelsDevice::pushClipStack\\28\\29\n10455:SkNoPixelsDevice::popClipStack\\28\\29\n10456:SkNoPixelsDevice::onClipShader\\28sk_sp<SkShader>\\29\n10457:SkNoPixelsDevice::isClipWideOpen\\28\\29\\20const\n10458:SkNoPixelsDevice::isClipRect\\28\\29\\20const\n10459:SkNoPixelsDevice::isClipEmpty\\28\\29\\20const\n10460:SkNoPixelsDevice::isClipAntiAliased\\28\\29\\20const\n10461:SkNoPixelsDevice::devClipBounds\\28\\29\\20const\n10462:SkNoPixelsDevice::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10463:SkNoPixelsDevice::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10464:SkNoPixelsDevice::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10465:SkNoPixelsDevice::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10466:SkNoPixelsDevice::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n10467:SkNoDrawCanvas::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10468:SkNoDrawCanvas::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n10469:SkMipmap::~SkMipmap\\28\\29.1\n10470:SkMipmap::~SkMipmap\\28\\29\n10471:SkMipmap::onDataChange\\28void*\\2c\\20void*\\29\n10472:SkMipmap::countLevels\\28\\29\\20const\n10473:SkMemoryStream::~SkMemoryStream\\28\\29.1\n10474:SkMemoryStream::~SkMemoryStream\\28\\29\n10475:SkMemoryStream::setMemory\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n10476:SkMemoryStream::seek\\28unsigned\\20long\\29\n10477:SkMemoryStream::rewind\\28\\29\n10478:SkMemoryStream::read\\28void*\\2c\\20unsigned\\20long\\29\n10479:SkMemoryStream::peek\\28void*\\2c\\20unsigned\\20long\\29\\20const\n10480:SkMemoryStream::onFork\\28\\29\\20const\n10481:SkMemoryStream::onDuplicate\\28\\29\\20const\n10482:SkMemoryStream::move\\28long\\29\n10483:SkMemoryStream::isAtEnd\\28\\29\\20const\n10484:SkMemoryStream::getMemoryBase\\28\\29\n10485:SkMemoryStream::getLength\\28\\29\\20const\n10486:SkMemoryStream::getData\\28\\29\\20const\n10487:SkMatrixColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n10488:SkMatrixColorFilter::onAsAColorMatrix\\28float*\\29\\20const\n10489:SkMatrixColorFilter::getTypeName\\28\\29\\20const\n10490:SkMatrixColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10491:SkMatrixColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10492:SkMatrix::Trans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10493:SkMatrix::Trans_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10494:SkMatrix::Scale_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10495:SkMatrix::Scale_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10496:SkMatrix::ScaleTrans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10497:SkMatrix::Poly4Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n10498:SkMatrix::Poly3Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n10499:SkMatrix::Poly2Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n10500:SkMatrix::Persp_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10501:SkMatrix::Persp_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10502:SkMatrix::Identity_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10503:SkMatrix::Identity_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10504:SkMatrix::Affine_vpts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10505:SkMaskSwizzler::onSetSampleX\\28int\\29\n10506:SkMaskFilterBase::filterRectsToNine\\28SkRect\\20const*\\2c\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n10507:SkMaskFilterBase::filterRRectToNine\\28SkRRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n10508:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::PixelRef::~PixelRef\\28\\29.1\n10509:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::PixelRef::~PixelRef\\28\\29\n10510:SkMakePixelRefWithProc\\28int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29::PixelRef::~PixelRef\\28\\29.1\n10511:SkMakePixelRefWithProc\\28int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29::PixelRef::~PixelRef\\28\\29\n10512:SkLumaColorFilter::Make\\28\\29\n10513:SkLocalMatrixShader::~SkLocalMatrixShader\\28\\29.1\n10514:SkLocalMatrixShader::~SkLocalMatrixShader\\28\\29\n10515:SkLocalMatrixShader::onIsAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n10516:SkLocalMatrixShader::makeAsALocalMatrixShader\\28SkMatrix*\\29\\20const\n10517:SkLocalMatrixShader::isOpaque\\28\\29\\20const\n10518:SkLocalMatrixShader::isConstant\\28\\29\\20const\n10519:SkLocalMatrixShader::getTypeName\\28\\29\\20const\n10520:SkLocalMatrixShader::flatten\\28SkWriteBuffer&\\29\\20const\n10521:SkLocalMatrixShader::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10522:SkLocalMatrixShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10523:SkLinearGradient::getTypeName\\28\\29\\20const\n10524:SkLinearGradient::flatten\\28SkWriteBuffer&\\29\\20const\n10525:SkLinearGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10526:SkLine2DPathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n10527:SkLine2DPathEffectImpl::nextSpan\\28int\\2c\\20int\\2c\\20int\\2c\\20SkPath*\\29\\20const\n10528:SkLine2DPathEffectImpl::getTypeName\\28\\29\\20const\n10529:SkLine2DPathEffectImpl::getFactory\\28\\29\\20const\n10530:SkLine2DPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n10531:SkLine2DPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n10532:SkJpegMetadataDecoderImpl::~SkJpegMetadataDecoderImpl\\28\\29.1\n10533:SkJpegMetadataDecoderImpl::~SkJpegMetadataDecoderImpl\\28\\29\n10534:SkJpegMetadataDecoderImpl::getICCProfileData\\28bool\\29\\20const\n10535:SkJpegMetadataDecoderImpl::getExifMetadata\\28bool\\29\\20const\n10536:SkJpegMemorySourceMgr::skipInputBytes\\28unsigned\\20long\\2c\\20unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n10537:SkJpegMemorySourceMgr::initSource\\28unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n10538:SkJpegDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n10539:SkJpegCodec::~SkJpegCodec\\28\\29.1\n10540:SkJpegCodec::~SkJpegCodec\\28\\29\n10541:SkJpegCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n10542:SkJpegCodec::onSkipScanlines\\28int\\29\n10543:SkJpegCodec::onRewind\\28\\29\n10544:SkJpegCodec::onQueryYUVAInfo\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\2c\\20SkYUVAPixmapInfo*\\29\\20const\n10545:SkJpegCodec::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n10546:SkJpegCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n10547:SkJpegCodec::onGetScaledDimensions\\28float\\29\\20const\n10548:SkJpegCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n10549:SkJpegCodec::onDimensionsSupported\\28SkISize\\20const&\\29\n10550:SkJpegCodec::getSampler\\28bool\\29\n10551:SkJpegCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n10552:SkJpegBufferedSourceMgr::~SkJpegBufferedSourceMgr\\28\\29.1\n10553:SkJpegBufferedSourceMgr::~SkJpegBufferedSourceMgr\\28\\29\n10554:SkJpegBufferedSourceMgr::skipInputBytes\\28unsigned\\20long\\2c\\20unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n10555:SkJpegBufferedSourceMgr::initSource\\28unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n10556:SkJpegBufferedSourceMgr::fillInputBuffer\\28unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n10557:SkImage_Raster::~SkImage_Raster\\28\\29.1\n10558:SkImage_Raster::~SkImage_Raster\\28\\29\n10559:SkImage_Raster::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n10560:SkImage_Raster::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n10561:SkImage_Raster::onPeekPixels\\28SkPixmap*\\29\\20const\n10562:SkImage_Raster::onMakeWithMipmaps\\28sk_sp<SkMipmap>\\29\\20const\n10563:SkImage_Raster::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n10564:SkImage_Raster::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n10565:SkImage_Raster::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n10566:SkImage_Raster::onHasMipmaps\\28\\29\\20const\n10567:SkImage_Raster::onAsLegacyBitmap\\28GrDirectContext*\\2c\\20SkBitmap*\\29\\20const\n10568:SkImage_Raster::notifyAddedToRasterCache\\28\\29\\20const\n10569:SkImage_Raster::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n10570:SkImage_LazyTexture::readPixelsProxy\\28GrDirectContext*\\2c\\20SkPixmap\\20const&\\29\\20const\n10571:SkImage_LazyTexture::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n10572:SkImage_Lazy::~SkImage_Lazy\\28\\29\n10573:SkImage_Lazy::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n10574:SkImage_Lazy::onRefEncoded\\28\\29\\20const\n10575:SkImage_Lazy::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n10576:SkImage_Lazy::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n10577:SkImage_Lazy::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n10578:SkImage_Lazy::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n10579:SkImage_Lazy::onIsProtected\\28\\29\\20const\n10580:SkImage_Lazy::isValid\\28GrRecordingContext*\\29\\20const\n10581:SkImage_Lazy::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n10582:SkImage_GaneshBase::~SkImage_GaneshBase\\28\\29\n10583:SkImage_GaneshBase::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n10584:SkImage_GaneshBase::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n10585:SkImage_GaneshBase::makeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n10586:SkImage_GaneshBase::makeColorTypeAndColorSpace\\28skgpu::graphite::Recorder*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n10587:SkImage_GaneshBase::makeColorTypeAndColorSpace\\28GrDirectContext*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n10588:SkImage_GaneshBase::isValid\\28GrRecordingContext*\\29\\20const\n10589:SkImage_GaneshBase::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n10590:SkImage_GaneshBase::directContext\\28\\29\\20const\n10591:SkImage_Ganesh::~SkImage_Ganesh\\28\\29.1\n10592:SkImage_Ganesh::textureSize\\28\\29\\20const\n10593:SkImage_Ganesh::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n10594:SkImage_Ganesh::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n10595:SkImage_Ganesh::onIsProtected\\28\\29\\20const\n10596:SkImage_Ganesh::onHasMipmaps\\28\\29\\20const\n10597:SkImage_Ganesh::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n10598:SkImage_Ganesh::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n10599:SkImage_Ganesh::generatingSurfaceIsDeleted\\28\\29\n10600:SkImage_Ganesh::flush\\28GrDirectContext*\\2c\\20GrFlushInfo\\20const&\\29\\20const\n10601:SkImage_Ganesh::asView\\28GrRecordingContext*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\\20const\n10602:SkImage_Ganesh::asFragmentProcessor\\28GrRecordingContext*\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\\20const\n10603:SkImage_Base::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n10604:SkImage_Base::notifyAddedToRasterCache\\28\\29\\20const\n10605:SkImage_Base::makeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n10606:SkImage_Base::makeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n10607:SkImage_Base::makeColorTypeAndColorSpace\\28skgpu::graphite::Recorder*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n10608:SkImage_Base::makeColorTypeAndColorSpace\\28GrDirectContext*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n10609:SkImage_Base::makeColorSpace\\28skgpu::graphite::Recorder*\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n10610:SkImage_Base::makeColorSpace\\28GrDirectContext*\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n10611:SkImage_Base::isTextureBacked\\28\\29\\20const\n10612:SkImage_Base::isLazyGenerated\\28\\29\\20const\n10613:SkImageShader::~SkImageShader\\28\\29.1\n10614:SkImageShader::~SkImageShader\\28\\29\n10615:SkImageShader::type\\28\\29\\20const\n10616:SkImageShader::onIsAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n10617:SkImageShader::isOpaque\\28\\29\\20const\n10618:SkImageShader::getTypeName\\28\\29\\20const\n10619:SkImageShader::flatten\\28SkWriteBuffer&\\29\\20const\n10620:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10621:SkImageGenerator::~SkImageGenerator\\28\\29\n10622:SkImageFilters::Compose\\28sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n10623:SkImage::~SkImage\\28\\29\n10624:SkIcoDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n10625:SkIcoCodec::~SkIcoCodec\\28\\29.1\n10626:SkIcoCodec::~SkIcoCodec\\28\\29\n10627:SkIcoCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n10628:SkIcoCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n10629:SkIcoCodec::onSkipScanlines\\28int\\29\n10630:SkIcoCodec::onIncrementalDecode\\28int*\\29\n10631:SkIcoCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n10632:SkIcoCodec::onGetScanlineOrder\\28\\29\\20const\n10633:SkIcoCodec::onGetScaledDimensions\\28float\\29\\20const\n10634:SkIcoCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n10635:SkIcoCodec::onDimensionsSupported\\28SkISize\\20const&\\29\n10636:SkIcoCodec::getSampler\\28bool\\29\n10637:SkIcoCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n10638:SkGradientBaseShader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n10639:SkGradientBaseShader::isOpaque\\28\\29\\20const\n10640:SkGradientBaseShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10641:SkGifDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n10642:SkGaussianColorFilter::getTypeName\\28\\29\\20const\n10643:SkGaussianColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10644:SkGammaColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n10645:SkGammaColorSpaceLuminance::fromLuma\\28float\\2c\\20float\\29\\20const\n10646:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\\28\\29.1\n10647:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\\28\\29\n10648:SkFontStyleSet_Custom::getStyle\\28int\\2c\\20SkFontStyle*\\2c\\20SkString*\\29\n10649:SkFontScanner_FreeType::~SkFontScanner_FreeType\\28\\29.1\n10650:SkFontScanner_FreeType::~SkFontScanner_FreeType\\28\\29\n10651:SkFontScanner_FreeType::scanFile\\28SkStreamAsset*\\2c\\20int*\\29\\20const\n10652:SkFontScanner_FreeType::scanFace\\28SkStreamAsset*\\2c\\20int\\2c\\20int*\\29\\20const\n10653:SkFontMgr_Custom::~SkFontMgr_Custom\\28\\29.1\n10654:SkFontMgr_Custom::~SkFontMgr_Custom\\28\\29\n10655:SkFontMgr_Custom::onMatchFamily\\28char\\20const*\\29\\20const\n10656:SkFontMgr_Custom::onMatchFamilyStyle\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\29\\20const\n10657:SkFontMgr_Custom::onMakeFromStreamIndex\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n10658:SkFontMgr_Custom::onMakeFromStreamArgs\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\\20const\n10659:SkFontMgr_Custom::onMakeFromFile\\28char\\20const*\\2c\\20int\\29\\20const\n10660:SkFontMgr_Custom::onMakeFromData\\28sk_sp<SkData>\\2c\\20int\\29\\20const\n10661:SkFontMgr_Custom::onLegacyMakeTypeface\\28char\\20const*\\2c\\20SkFontStyle\\29\\20const\n10662:SkFontMgr_Custom::onGetFamilyName\\28int\\2c\\20SkString*\\29\\20const\n10663:SkFont::setScaleX\\28float\\29\n10664:SkFont::setEmbeddedBitmaps\\28bool\\29\n10665:SkFont::isEmbolden\\28\\29\\20const\n10666:SkFont::getSkewX\\28\\29\\20const\n10667:SkFont::getSize\\28\\29\\20const\n10668:SkFont::getScaleX\\28\\29\\20const\n10669:SkFont*\\20emscripten::internal::operator_new<SkFont\\2c\\20sk_sp<SkTypeface>\\2c\\20float\\2c\\20float\\2c\\20float>\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\2c\\20float&&\\2c\\20float&&\\29\n10670:SkFont*\\20emscripten::internal::operator_new<SkFont\\2c\\20sk_sp<SkTypeface>\\2c\\20float>\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\29\n10671:SkFont*\\20emscripten::internal::operator_new<SkFont\\2c\\20sk_sp<SkTypeface>>\\28sk_sp<SkTypeface>&&\\29\n10672:SkFont*\\20emscripten::internal::operator_new<SkFont>\\28\\29\n10673:SkFILEStream::~SkFILEStream\\28\\29.1\n10674:SkFILEStream::~SkFILEStream\\28\\29\n10675:SkFILEStream::seek\\28unsigned\\20long\\29\n10676:SkFILEStream::rewind\\28\\29\n10677:SkFILEStream::read\\28void*\\2c\\20unsigned\\20long\\29\n10678:SkFILEStream::onFork\\28\\29\\20const\n10679:SkFILEStream::onDuplicate\\28\\29\\20const\n10680:SkFILEStream::move\\28long\\29\n10681:SkFILEStream::isAtEnd\\28\\29\\20const\n10682:SkFILEStream::getPosition\\28\\29\\20const\n10683:SkFILEStream::getLength\\28\\29\\20const\n10684:SkEncoder::~SkEncoder\\28\\29\n10685:SkEmptyShader::getTypeName\\28\\29\\20const\n10686:SkEmptyPicture::~SkEmptyPicture\\28\\29\n10687:SkEmptyPicture::cullRect\\28\\29\\20const\n10688:SkEmptyFontMgr::onMatchFamily\\28char\\20const*\\29\\20const\n10689:SkEdgeBuilder::~SkEdgeBuilder\\28\\29\n10690:SkEdgeBuilder::build\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\2c\\20bool\\29::$_0::__invoke\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\n10691:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\\28\\29.1\n10692:SkDrawable::onMakePictureSnapshot\\28\\29\n10693:SkDrawBase::~SkDrawBase\\28\\29\n10694:SkDraw::paintMasks\\28SkZip<SkGlyph\\20const*\\2c\\20SkPoint>\\2c\\20SkPaint\\20const&\\29\\20const\n10695:SkDiscretePathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n10696:SkDiscretePathEffectImpl::getTypeName\\28\\29\\20const\n10697:SkDiscretePathEffectImpl::getFactory\\28\\29\\20const\n10698:SkDiscretePathEffectImpl::computeFastBounds\\28SkRect*\\29\\20const\n10699:SkDiscretePathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n10700:SkDevice::~SkDevice\\28\\29\n10701:SkDevice::strikeDeviceInfo\\28\\29\\20const\n10702:SkDevice::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n10703:SkDevice::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n10704:SkDevice::drawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n10705:SkDevice::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const&\\29\n10706:SkDevice::drawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n10707:SkDevice::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n10708:SkDevice::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10709:SkDevice::drawCoverageMask\\28SkSpecialImage\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n10710:SkDevice::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n10711:SkDevice::drawAsTiledImageRect\\28SkCanvas*\\2c\\20SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n10712:SkDevice::createImageFilteringBackend\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\29\\20const\n10713:SkDashImpl::~SkDashImpl\\28\\29.1\n10714:SkDashImpl::~SkDashImpl\\28\\29\n10715:SkDashImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n10716:SkDashImpl::onAsPoints\\28SkPathEffectBase::PointData*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\29\\20const\n10717:SkDashImpl::onAsADash\\28SkPathEffect::DashInfo*\\29\\20const\n10718:SkDashImpl::getTypeName\\28\\29\\20const\n10719:SkDashImpl::flatten\\28SkWriteBuffer&\\29\\20const\n10720:SkCustomTypefaceBuilder::MakeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\n10721:SkCornerPathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n10722:SkCornerPathEffectImpl::getTypeName\\28\\29\\20const\n10723:SkCornerPathEffectImpl::getFactory\\28\\29\\20const\n10724:SkCornerPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n10725:SkCornerPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n10726:SkCornerPathEffect::Make\\28float\\29\n10727:SkContourMeasureIter*\\20emscripten::internal::operator_new<SkContourMeasureIter\\2c\\20SkPath\\20const&\\2c\\20bool\\2c\\20float>\\28SkPath\\20const&\\2c\\20bool&&\\2c\\20float&&\\29\n10728:SkContourMeasure::~SkContourMeasure\\28\\29.1\n10729:SkContourMeasure::~SkContourMeasure\\28\\29\n10730:SkContourMeasure::isClosed\\28\\29\\20const\n10731:SkConicalGradient::getTypeName\\28\\29\\20const\n10732:SkConicalGradient::flatten\\28SkWriteBuffer&\\29\\20const\n10733:SkConicalGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10734:SkConicalGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n10735:SkComposePathEffect::~SkComposePathEffect\\28\\29\n10736:SkComposePathEffect::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n10737:SkComposePathEffect::getTypeName\\28\\29\\20const\n10738:SkComposePathEffect::computeFastBounds\\28SkRect*\\29\\20const\n10739:SkComposeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n10740:SkComposeColorFilter::getTypeName\\28\\29\\20const\n10741:SkComposeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10742:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\\28\\29.1\n10743:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\\28\\29\n10744:SkColorSpaceXformColorFilter::getTypeName\\28\\29\\20const\n10745:SkColorSpaceXformColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10746:SkColorSpaceXformColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10747:SkColorShader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n10748:SkColorShader::isOpaque\\28\\29\\20const\n10749:SkColorShader::getTypeName\\28\\29\\20const\n10750:SkColorShader::flatten\\28SkWriteBuffer&\\29\\20const\n10751:SkColorShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10752:SkColorPalette::~SkColorPalette\\28\\29.1\n10753:SkColorPalette::~SkColorPalette\\28\\29\n10754:SkColorFilters::SRGBToLinearGamma\\28\\29\n10755:SkColorFilters::LinearToSRGBGamma\\28\\29\n10756:SkColorFilters::Lerp\\28float\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>\\29\n10757:SkColorFilters::Compose\\28sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>\\29\n10758:SkColorFilterShader::~SkColorFilterShader\\28\\29.1\n10759:SkColorFilterShader::~SkColorFilterShader\\28\\29\n10760:SkColorFilterShader::isOpaque\\28\\29\\20const\n10761:SkColorFilterShader::getTypeName\\28\\29\\20const\n10762:SkColorFilterShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10763:SkColorFilterBase::onFilterColor4f\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkColorSpace*\\29\\20const\n10764:SkColor4Shader::~SkColor4Shader\\28\\29.1\n10765:SkColor4Shader::~SkColor4Shader\\28\\29\n10766:SkColor4Shader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n10767:SkColor4Shader::isOpaque\\28\\29\\20const\n10768:SkColor4Shader::getTypeName\\28\\29\\20const\n10769:SkColor4Shader::flatten\\28SkWriteBuffer&\\29\\20const\n10770:SkColor4Shader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10771:SkCodecImageGenerator::~SkCodecImageGenerator\\28\\29.1\n10772:SkCodecImageGenerator::~SkCodecImageGenerator\\28\\29\n10773:SkCodecImageGenerator::onRefEncodedData\\28\\29\n10774:SkCodecImageGenerator::onQueryYUVAInfo\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\2c\\20SkYUVAPixmapInfo*\\29\\20const\n10775:SkCodecImageGenerator::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n10776:SkCodecImageGenerator::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageGenerator::Options\\20const&\\29\n10777:SkCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n10778:SkCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n10779:SkCodec::onOutputScanline\\28int\\29\\20const\n10780:SkCodec::onGetScaledDimensions\\28float\\29\\20const\n10781:SkCodec::getEncodedData\\28\\29\\20const\n10782:SkCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n10783:SkCanvas::rotate\\28float\\2c\\20float\\2c\\20float\\29\n10784:SkCanvas::recordingContext\\28\\29\\20const\n10785:SkCanvas::recorder\\28\\29\\20const\n10786:SkCanvas::onPeekPixels\\28SkPixmap*\\29\n10787:SkCanvas::onNewSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n10788:SkCanvas::onImageInfo\\28\\29\\20const\n10789:SkCanvas::onGetProps\\28SkSurfaceProps*\\2c\\20bool\\29\\20const\n10790:SkCanvas::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10791:SkCanvas::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10792:SkCanvas::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n10793:SkCanvas::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n10794:SkCanvas::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n10795:SkCanvas::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10796:SkCanvas::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10797:SkCanvas::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n10798:SkCanvas::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n10799:SkCanvas::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n10800:SkCanvas::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10801:SkCanvas::onDrawPaint\\28SkPaint\\20const&\\29\n10802:SkCanvas::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10803:SkCanvas::onDrawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n10804:SkCanvas::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10805:SkCanvas::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n10806:SkCanvas::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10807:SkCanvas::onDrawGlyphRunList\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n10808:SkCanvas::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n10809:SkCanvas::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10810:SkCanvas::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n10811:SkCanvas::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10812:SkCanvas::onDrawBehind\\28SkPaint\\20const&\\29\n10813:SkCanvas::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n10814:SkCanvas::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n10815:SkCanvas::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n10816:SkCanvas::onDiscard\\28\\29\n10817:SkCanvas::onConvertGlyphRunListToSlug\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n10818:SkCanvas::onAccessTopLayerPixels\\28SkPixmap*\\29\n10819:SkCanvas::isClipRect\\28\\29\\20const\n10820:SkCanvas::isClipEmpty\\28\\29\\20const\n10821:SkCanvas::getSaveCount\\28\\29\\20const\n10822:SkCanvas::getBaseLayerSize\\28\\29\\20const\n10823:SkCanvas::drawTextBlob\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10824:SkCanvas::drawPicture\\28sk_sp<SkPicture>\\20const&\\29\n10825:SkCanvas::drawCircle\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10826:SkCanvas*\\20emscripten::internal::operator_new<SkCanvas\\2c\\20float\\2c\\20float>\\28float&&\\2c\\20float&&\\29\n10827:SkCanvas*\\20emscripten::internal::operator_new<SkCanvas>\\28\\29\n10828:SkCachedData::~SkCachedData\\28\\29.1\n10829:SkCTMShader::~SkCTMShader\\28\\29\n10830:SkCTMShader::isConstant\\28\\29\\20const\n10831:SkCTMShader::getTypeName\\28\\29\\20const\n10832:SkCTMShader::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10833:SkCTMShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10834:SkBreakIterator_icu::~SkBreakIterator_icu\\28\\29.1\n10835:SkBreakIterator_icu::~SkBreakIterator_icu\\28\\29\n10836:SkBreakIterator_icu::status\\28\\29\n10837:SkBreakIterator_icu::setText\\28char\\20const*\\2c\\20int\\29\n10838:SkBreakIterator_icu::setText\\28char16_t\\20const*\\2c\\20int\\29\n10839:SkBreakIterator_icu::next\\28\\29\n10840:SkBreakIterator_icu::isDone\\28\\29\n10841:SkBreakIterator_icu::first\\28\\29\n10842:SkBreakIterator_icu::current\\28\\29\n10843:SkBmpStandardCodec::~SkBmpStandardCodec\\28\\29.1\n10844:SkBmpStandardCodec::~SkBmpStandardCodec\\28\\29\n10845:SkBmpStandardCodec::onPrepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n10846:SkBmpStandardCodec::onInIco\\28\\29\\20const\n10847:SkBmpStandardCodec::getSampler\\28bool\\29\n10848:SkBmpStandardCodec::decodeRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n10849:SkBmpRLESampler::onSetSampleX\\28int\\29\n10850:SkBmpRLESampler::fillWidth\\28\\29\\20const\n10851:SkBmpRLECodec::~SkBmpRLECodec\\28\\29.1\n10852:SkBmpRLECodec::~SkBmpRLECodec\\28\\29\n10853:SkBmpRLECodec::skipRows\\28int\\29\n10854:SkBmpRLECodec::onPrepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n10855:SkBmpRLECodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n10856:SkBmpRLECodec::getSampler\\28bool\\29\n10857:SkBmpRLECodec::decodeRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n10858:SkBmpMaskCodec::~SkBmpMaskCodec\\28\\29.1\n10859:SkBmpMaskCodec::~SkBmpMaskCodec\\28\\29\n10860:SkBmpMaskCodec::onPrepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n10861:SkBmpMaskCodec::getSampler\\28bool\\29\n10862:SkBmpMaskCodec::decodeRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n10863:SkBmpDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n10864:SkBmpCodec::~SkBmpCodec\\28\\29\n10865:SkBmpCodec::skipRows\\28int\\29\n10866:SkBmpCodec::onSkipScanlines\\28int\\29\n10867:SkBmpCodec::onRewind\\28\\29\n10868:SkBmpCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n10869:SkBmpCodec::onGetScanlineOrder\\28\\29\\20const\n10870:SkBlurMaskFilterImpl::getTypeName\\28\\29\\20const\n10871:SkBlurMaskFilterImpl::flatten\\28SkWriteBuffer&\\29\\20const\n10872:SkBlurMaskFilterImpl::filterRectsToNine\\28SkRect\\20const*\\2c\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n10873:SkBlurMaskFilterImpl::filterRRectToNine\\28SkRRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n10874:SkBlurMaskFilterImpl::filterMask\\28SkMaskBuilder*\\2c\\20SkMask\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\29\\20const\n10875:SkBlurMaskFilterImpl::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n10876:SkBlurMaskFilterImpl::asImageFilter\\28SkMatrix\\20const&\\29\\20const\n10877:SkBlurMaskFilterImpl::asABlur\\28SkMaskFilterBase::BlurRec*\\29\\20const\n10878:SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29.1\n10879:SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29\n10880:SkBlockMemoryStream::seek\\28unsigned\\20long\\29\n10881:SkBlockMemoryStream::rewind\\28\\29\n10882:SkBlockMemoryStream::read\\28void*\\2c\\20unsigned\\20long\\29\n10883:SkBlockMemoryStream::peek\\28void*\\2c\\20unsigned\\20long\\29\\20const\n10884:SkBlockMemoryStream::onFork\\28\\29\\20const\n10885:SkBlockMemoryStream::onDuplicate\\28\\29\\20const\n10886:SkBlockMemoryStream::move\\28long\\29\n10887:SkBlockMemoryStream::isAtEnd\\28\\29\\20const\n10888:SkBlockMemoryStream::getMemoryBase\\28\\29\n10889:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\\28\\29.1\n10890:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\\28\\29\n10891:SkBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10892:SkBlitter::blitAntiV2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n10893:SkBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10894:SkBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n10895:SkBlitter::allocBlitMemory\\28unsigned\\20long\\29\n10896:SkBlenderBase::asBlendMode\\28\\29\\20const\n10897:SkBlendShader::getTypeName\\28\\29\\20const\n10898:SkBlendShader::flatten\\28SkWriteBuffer&\\29\\20const\n10899:SkBlendShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10900:SkBlendModeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n10901:SkBlendModeColorFilter::onAsAColorMode\\28unsigned\\20int*\\2c\\20SkBlendMode*\\29\\20const\n10902:SkBlendModeColorFilter::getTypeName\\28\\29\\20const\n10903:SkBlendModeColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10904:SkBlendModeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10905:SkBlendModeBlender::onAppendStages\\28SkStageRec\\20const&\\29\\20const\n10906:SkBlendModeBlender::getTypeName\\28\\29\\20const\n10907:SkBlendModeBlender::flatten\\28SkWriteBuffer&\\29\\20const\n10908:SkBlendModeBlender::asBlendMode\\28\\29\\20const\n10909:SkBitmapDevice::~SkBitmapDevice\\28\\29.1\n10910:SkBitmapDevice::~SkBitmapDevice\\28\\29\n10911:SkBitmapDevice::snapSpecial\\28SkIRect\\20const&\\2c\\20bool\\29\n10912:SkBitmapDevice::setImmutable\\28\\29\n10913:SkBitmapDevice::replaceClip\\28SkIRect\\20const&\\29\n10914:SkBitmapDevice::pushClipStack\\28\\29\n10915:SkBitmapDevice::popClipStack\\28\\29\n10916:SkBitmapDevice::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n10917:SkBitmapDevice::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n10918:SkBitmapDevice::onPeekPixels\\28SkPixmap*\\29\n10919:SkBitmapDevice::onDrawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n10920:SkBitmapDevice::onClipShader\\28sk_sp<SkShader>\\29\n10921:SkBitmapDevice::onAccessPixels\\28SkPixmap*\\29\n10922:SkBitmapDevice::makeSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n10923:SkBitmapDevice::makeSpecial\\28SkImage\\20const*\\29\n10924:SkBitmapDevice::makeSpecial\\28SkBitmap\\20const&\\29\n10925:SkBitmapDevice::isClipWideOpen\\28\\29\\20const\n10926:SkBitmapDevice::isClipRect\\28\\29\\20const\n10927:SkBitmapDevice::isClipEmpty\\28\\29\\20const\n10928:SkBitmapDevice::isClipAntiAliased\\28\\29\\20const\n10929:SkBitmapDevice::getRasterHandle\\28\\29\\20const\n10930:SkBitmapDevice::drawVertices\\28SkVertices\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n10931:SkBitmapDevice::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n10932:SkBitmapDevice::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10933:SkBitmapDevice::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10934:SkBitmapDevice::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n10935:SkBitmapDevice::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n10936:SkBitmapDevice::drawPaint\\28SkPaint\\20const&\\29\n10937:SkBitmapDevice::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10938:SkBitmapDevice::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n10939:SkBitmapDevice::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n10940:SkBitmapDevice::devClipBounds\\28\\29\\20const\n10941:SkBitmapDevice::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n10942:SkBitmapDevice::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10943:SkBitmapDevice::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10944:SkBitmapDevice::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10945:SkBitmapDevice::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10946:SkBitmapDevice::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n10947:SkBitmapCache::Rec::~Rec\\28\\29.1\n10948:SkBitmapCache::Rec::~Rec\\28\\29\n10949:SkBitmapCache::Rec::postAddInstall\\28void*\\29\n10950:SkBitmapCache::Rec::getCategory\\28\\29\\20const\n10951:SkBitmapCache::Rec::canBePurged\\28\\29\n10952:SkBitmapCache::Rec::bytesUsed\\28\\29\\20const\n10953:SkBitmapCache::Rec::ReleaseProc\\28void*\\2c\\20void*\\29\n10954:SkBitmapCache::Rec::Finder\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n10955:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\\28\\29.1\n10956:SkBinaryWriteBuffer::write\\28SkM44\\20const&\\29\n10957:SkBinaryWriteBuffer::writeTypeface\\28SkTypeface*\\29\n10958:SkBinaryWriteBuffer::writeString\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n10959:SkBinaryWriteBuffer::writeStream\\28SkStream*\\2c\\20unsigned\\20long\\29\n10960:SkBinaryWriteBuffer::writeScalar\\28float\\29\n10961:SkBinaryWriteBuffer::writeSampling\\28SkSamplingOptions\\20const&\\29\n10962:SkBinaryWriteBuffer::writeRegion\\28SkRegion\\20const&\\29\n10963:SkBinaryWriteBuffer::writeRect\\28SkRect\\20const&\\29\n10964:SkBinaryWriteBuffer::writePoint\\28SkPoint\\20const&\\29\n10965:SkBinaryWriteBuffer::writePointArray\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\29\n10966:SkBinaryWriteBuffer::writePoint3\\28SkPoint3\\20const&\\29\n10967:SkBinaryWriteBuffer::writePath\\28SkPath\\20const&\\29\n10968:SkBinaryWriteBuffer::writePaint\\28SkPaint\\20const&\\29\n10969:SkBinaryWriteBuffer::writePad32\\28void\\20const*\\2c\\20unsigned\\20long\\29\n10970:SkBinaryWriteBuffer::writeMatrix\\28SkMatrix\\20const&\\29\n10971:SkBinaryWriteBuffer::writeImage\\28SkImage\\20const*\\29\n10972:SkBinaryWriteBuffer::writeColor4fArray\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20unsigned\\20int\\29\n10973:SkBigPicture::~SkBigPicture\\28\\29.1\n10974:SkBigPicture::~SkBigPicture\\28\\29\n10975:SkBigPicture::playback\\28SkCanvas*\\2c\\20SkPicture::AbortCallback*\\29\\20const\n10976:SkBigPicture::cullRect\\28\\29\\20const\n10977:SkBigPicture::approximateOpCount\\28bool\\29\\20const\n10978:SkBigPicture::approximateBytesUsed\\28\\29\\20const\n10979:SkBidiICUFactory::errorName\\28UErrorCode\\29\\20const\n10980:SkBidiICUFactory::bidi_setPara\\28UBiDi*\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20UErrorCode*\\29\\20const\n10981:SkBidiICUFactory::bidi_reorderVisual\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n10982:SkBidiICUFactory::bidi_openSized\\28int\\2c\\20int\\2c\\20UErrorCode*\\29\\20const\n10983:SkBidiICUFactory::bidi_getLevelAt\\28UBiDi\\20const*\\2c\\20int\\29\\20const\n10984:SkBidiICUFactory::bidi_getLength\\28UBiDi\\20const*\\29\\20const\n10985:SkBidiICUFactory::bidi_getDirection\\28UBiDi\\20const*\\29\\20const\n10986:SkBidiICUFactory::bidi_close_callback\\28\\29\\20const\n10987:SkBezierCubic::Subdivide\\28double\\20const*\\2c\\20double\\2c\\20double*\\29\n10988:SkBasicEdgeBuilder::recoverClip\\28SkIRect\\20const&\\29\\20const\n10989:SkBasicEdgeBuilder::allocEdges\\28unsigned\\20long\\2c\\20unsigned\\20long*\\29\n10990:SkBasicEdgeBuilder::addQuad\\28SkPoint\\20const*\\29\n10991:SkBasicEdgeBuilder::addPolyLine\\28SkPoint\\20const*\\2c\\20char*\\2c\\20char**\\29\n10992:SkBasicEdgeBuilder::addLine\\28SkPoint\\20const*\\29\n10993:SkBasicEdgeBuilder::addCubic\\28SkPoint\\20const*\\29\n10994:SkBaseShadowTessellator::~SkBaseShadowTessellator\\28\\29\n10995:SkBBoxHierarchy::insert\\28SkRect\\20const*\\2c\\20SkBBoxHierarchy::Metadata\\20const*\\2c\\20int\\29\n10996:SkArenaAlloc::SkipPod\\28char*\\29\n10997:SkArenaAlloc::NextBlock\\28char*\\29\n10998:SkAnimatedImage::~SkAnimatedImage\\28\\29.1\n10999:SkAnimatedImage::~SkAnimatedImage\\28\\29\n11000:SkAnimatedImage::reset\\28\\29\n11001:SkAnimatedImage::onGetBounds\\28\\29\n11002:SkAnimatedImage::onDraw\\28SkCanvas*\\29\n11003:SkAnimatedImage::getRepetitionCount\\28\\29\\20const\n11004:SkAnimatedImage::getCurrentFrame\\28\\29\n11005:SkAnimatedImage::currentFrameDuration\\28\\29\n11006:SkAndroidCodecAdapter::onGetSupportedSubset\\28SkIRect*\\29\\20const\n11007:SkAndroidCodecAdapter::onGetSampledDimensions\\28int\\29\\20const\n11008:SkAndroidCodecAdapter::onGetAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const&\\29\n11009:SkAnalyticEdgeBuilder::recoverClip\\28SkIRect\\20const&\\29\\20const\n11010:SkAnalyticEdgeBuilder::allocEdges\\28unsigned\\20long\\2c\\20unsigned\\20long*\\29\n11011:SkAnalyticEdgeBuilder::addQuad\\28SkPoint\\20const*\\29\n11012:SkAnalyticEdgeBuilder::addPolyLine\\28SkPoint\\20const*\\2c\\20char*\\2c\\20char**\\29\n11013:SkAnalyticEdgeBuilder::addLine\\28SkPoint\\20const*\\29\n11014:SkAnalyticEdgeBuilder::addCubic\\28SkPoint\\20const*\\29\n11015:SkAAClipBlitter::~SkAAClipBlitter\\28\\29.1\n11016:SkAAClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11017:SkAAClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11018:SkAAClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11019:SkAAClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11020:SkAAClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n11021:SkAAClip::Builder::operateY\\28SkAAClip\\20const&\\2c\\20SkAAClip\\20const&\\2c\\20SkClipOp\\29::$_1::__invoke\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n11022:SkAAClip::Builder::operateY\\28SkAAClip\\20const&\\2c\\20SkAAClip\\20const&\\2c\\20SkClipOp\\29::$_0::__invoke\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n11023:SkAAClip::Builder::Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11024:SkAAClip::Builder::Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11025:SkAAClip::Builder::Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11026:SkAAClip::Builder::Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11027:SkAAClip::Builder::Blitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n11028:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\\28\\29.1\n11029:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\\28\\29\n11030:SkA8_Coverage_Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11031:SkA8_Coverage_Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11032:SkA8_Coverage_Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11033:SkA8_Coverage_Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11034:SkA8_Coverage_Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n11035:SkA8_Blitter::~SkA8_Blitter\\28\\29.1\n11036:SkA8_Blitter::~SkA8_Blitter\\28\\29\n11037:SkA8_Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11038:SkA8_Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11039:SkA8_Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11040:SkA8_Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11041:SkA8_Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n11042:SkA8Blitter_Choose\\28SkPixmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n11043:Sk2DPathEffect::nextSpan\\28int\\2c\\20int\\2c\\20int\\2c\\20SkPath*\\29\\20const\n11044:Sk2DPathEffect::flatten\\28SkWriteBuffer&\\29\\20const\n11045:SimpleVFilter16i_C\n11046:SimpleVFilter16_C\n11047:SimpleTextStyle*\\20emscripten::internal::raw_constructor<SimpleTextStyle>\\28\\29\n11048:SimpleTextStyle*\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleTextStyle>::getWire<SimpleParagraphStyle>\\28SimpleTextStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle\\20const&\\29\n11049:SimpleStrutStyle*\\20emscripten::internal::raw_constructor<SimpleStrutStyle>\\28\\29\n11050:SimpleStrutStyle*\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleStrutStyle>::getWire<SimpleParagraphStyle>\\28SimpleStrutStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle\\20const&\\29\n11051:SimpleParagraphStyle*\\20emscripten::internal::raw_constructor<SimpleParagraphStyle>\\28\\29\n11052:SimpleHFilter16i_C\n11053:SimpleHFilter16_C\n11054:SimpleFontStyle*\\20emscripten::internal::raw_constructor<SimpleFontStyle>\\28\\29\n11055:ShaderPDXferProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11056:ShaderPDXferProcessor::name\\28\\29\\20const\n11057:ShaderPDXferProcessor::makeProgramImpl\\28\\29\\20const\n11058:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11059:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n11060:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11061:RuntimeEffectUniform*\\20emscripten::internal::raw_constructor<RuntimeEffectUniform>\\28\\29\n11062:RuntimeEffectRPCallbacks::toLinearSrgb\\28void\\20const*\\29\n11063:RuntimeEffectRPCallbacks::fromLinearSrgb\\28void\\20const*\\29\n11064:RuntimeEffectRPCallbacks::appendShader\\28int\\29\n11065:RuntimeEffectRPCallbacks::appendColorFilter\\28int\\29\n11066:RuntimeEffectRPCallbacks::appendBlender\\28int\\29\n11067:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\\28\\29\n11068:RunBasedAdditiveBlitter::getRealBlitter\\28bool\\29\n11069:RunBasedAdditiveBlitter::flush_if_y_changed\\28int\\2c\\20int\\29\n11070:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11071:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n11072:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11073:Round_Up_To_Grid\n11074:Round_To_Half_Grid\n11075:Round_To_Grid\n11076:Round_To_Double_Grid\n11077:Round_Super_45\n11078:Round_Super\n11079:Round_None\n11080:Round_Down_To_Grid\n11081:RoundJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n11082:RoundCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n11083:Reset\n11084:Read_CVT_Stretched\n11085:Read_CVT\n11086:RD4_C\n11087:Project_y\n11088:Project\n11089:ProcessRows\n11090:PredictorAdd9_C\n11091:PredictorAdd8_C\n11092:PredictorAdd7_C\n11093:PredictorAdd6_C\n11094:PredictorAdd5_C\n11095:PredictorAdd4_C\n11096:PredictorAdd3_C\n11097:PredictorAdd2_C\n11098:PredictorAdd1_C\n11099:PredictorAdd13_C\n11100:PredictorAdd12_C\n11101:PredictorAdd11_C\n11102:PredictorAdd10_C\n11103:PredictorAdd0_C\n11104:PrePostInverseBlitterProc\\28SkBlitter*\\2c\\20int\\2c\\20bool\\29\n11105:PorterDuffXferProcessor::onHasSecondaryOutput\\28\\29\\20const\n11106:PorterDuffXferProcessor::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11107:PorterDuffXferProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11108:PorterDuffXferProcessor::name\\28\\29\\20const\n11109:PorterDuffXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11110:PorterDuffXferProcessor::makeProgramImpl\\28\\29\\20const\n11111:ParseVP8X\n11112:PackRGB_C\n11113:PDLCDXferProcessor::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n11114:PDLCDXferProcessor::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11115:PDLCDXferProcessor::name\\28\\29\\20const\n11116:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrXferProcessor\\20const&\\29\n11117:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11118:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const\n11119:OT::match_glyph\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11120:OT::match_coverage\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11121:OT::match_class_cached\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11122:OT::match_class_cached2\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11123:OT::match_class_cached1\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11124:OT::match_class\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11125:OT::hb_ot_apply_context_t::return_t\\20OT::Layout::GSUB_impl::SubstLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\29\n11126:OT::hb_ot_apply_context_t::return_t\\20OT::Layout::GPOS_impl::PosLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\29\n11127:OT::cff1::accelerator_t::gname_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n11128:OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>::cmp_range\\28void\\20const*\\2c\\20void\\20const*\\29\n11129:OT::ColorLine<OT::Variable>::static_get_color_stops\\28hb_color_line_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_color_stop_t*\\2c\\20void*\\29\n11130:OT::ColorLine<OT::NoVariable>::static_get_color_stops\\28hb_color_line_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_color_stop_t*\\2c\\20void*\\29\n11131:OT::CmapSubtableFormat4::accelerator_t::get_glyph_func\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n11132:Move_CVT_Stretched\n11133:Move_CVT\n11134:MiterJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n11135:MaskAdditiveBlitter::~MaskAdditiveBlitter\\28\\29.1\n11136:MaskAdditiveBlitter::~MaskAdditiveBlitter\\28\\29\n11137:MaskAdditiveBlitter::getWidth\\28\\29\n11138:MaskAdditiveBlitter::getRealBlitter\\28bool\\29\n11139:MaskAdditiveBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11140:MaskAdditiveBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11141:MaskAdditiveBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n11142:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11143:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n11144:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11145:MapAlpha_C\n11146:MapARGB_C\n11147:MakeRenderTarget\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\29\n11148:MakeRenderTarget\\28sk_sp<GrDirectContext>\\2c\\20SimpleImageInfo\\29\n11149:MakePathFromVerbsPointsWeights\\28unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n11150:MakePathFromSVGString\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11151:MakePathFromOp\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\n11152:MakePathFromInterpolation\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\29\n11153:MakePathFromCmds\\28unsigned\\20long\\2c\\20int\\29\n11154:MakeOnScreenGLSurface\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\29\n11155:MakeImageFromGenerator\\28SimpleImageInfo\\2c\\20emscripten::val\\29\n11156:MakeGrContext\\28\\29\n11157:MakeAsWinding\\28SkPath\\20const&\\29\n11158:LD4_C\n11159:JpegDecoderMgr::returnFailure\\28char\\20const*\\2c\\20SkCodec::Result\\29\n11160:JpegDecoderMgr::init\\28\\29\n11161:JpegDecoderMgr::SourceMgr::SkipInputData\\28jpeg_decompress_struct*\\2c\\20long\\29\n11162:JpegDecoderMgr::SourceMgr::InitSource\\28jpeg_decompress_struct*\\29\n11163:JpegDecoderMgr::SourceMgr::FillInputBuffer\\28jpeg_decompress_struct*\\29\n11164:JpegDecoderMgr::JpegDecoderMgr\\28SkStream*\\29\n11165:IsValidSimpleFormat\n11166:IsValidExtendedFormat\n11167:InverseBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11168:Init\n11169:HorizontalUnfilter_C\n11170:HorizontalFilter_C\n11171:Horish_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11172:Horish_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11173:HasAlpha8b_C\n11174:HasAlpha32b_C\n11175:HU4_C\n11176:HLine_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11177:HLine_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11178:HFilter8i_C\n11179:HFilter8_C\n11180:HFilter16i_C\n11181:HFilter16_C\n11182:HE8uv_C\n11183:HE4_C\n11184:HE16_C\n11185:HD4_C\n11186:GradientUnfilter_C\n11187:GradientFilter_C\n11188:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11189:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11190:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const\n11191:GrYUVtoRGBEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11192:GrYUVtoRGBEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11193:GrYUVtoRGBEffect::name\\28\\29\\20const\n11194:GrYUVtoRGBEffect::clone\\28\\29\\20const\n11195:GrXferProcessor::ProgramImpl::emitWriteSwizzle\\28GrGLSLXPFragmentBuilder*\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n11196:GrXferProcessor::ProgramImpl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11197:GrXferProcessor::ProgramImpl::emitBlendCodeForDstRead\\28GrGLSLXPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrXferProcessor\\20const&\\29\n11198:GrWritePixelsTask::~GrWritePixelsTask\\28\\29.1\n11199:GrWritePixelsTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n11200:GrWritePixelsTask::onExecute\\28GrOpFlushState*\\29\n11201:GrWritePixelsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11202:GrWaitRenderTask::~GrWaitRenderTask\\28\\29.1\n11203:GrWaitRenderTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n11204:GrWaitRenderTask::onExecute\\28GrOpFlushState*\\29\n11205:GrWaitRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11206:GrTriangulator::~GrTriangulator\\28\\29\n11207:GrTransferFromRenderTask::~GrTransferFromRenderTask\\28\\29.1\n11208:GrTransferFromRenderTask::onExecute\\28GrOpFlushState*\\29\n11209:GrTransferFromRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11210:GrThreadSafeCache::Trampoline::~Trampoline\\28\\29.1\n11211:GrThreadSafeCache::Trampoline::~Trampoline\\28\\29\n11212:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\\28\\29.1\n11213:GrTextureResolveRenderTask::onExecute\\28GrOpFlushState*\\29\n11214:GrTextureResolveRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11215:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n11216:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n11217:GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n11218:GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n11219:GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n11220:GrTextureProxy::~GrTextureProxy\\28\\29.2\n11221:GrTextureProxy::~GrTextureProxy\\28\\29.1\n11222:GrTextureProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n11223:GrTextureProxy::instantiate\\28GrResourceProvider*\\29\n11224:GrTextureProxy::createSurface\\28GrResourceProvider*\\29\\20const\n11225:GrTextureProxy::callbackDesc\\28\\29\\20const\n11226:GrTextureEffect::~GrTextureEffect\\28\\29.1\n11227:GrTextureEffect::~GrTextureEffect\\28\\29\n11228:GrTextureEffect::onMakeProgramImpl\\28\\29\\20const\n11229:GrTextureEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11230:GrTextureEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11231:GrTextureEffect::name\\28\\29\\20const\n11232:GrTextureEffect::clone\\28\\29\\20const\n11233:GrTextureEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11234:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11235:GrTexture::onGpuMemorySize\\28\\29\\20const\n11236:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::~GrTDeferredProxyUploader\\28\\29.1\n11237:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::freeData\\28\\29\n11238:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::~GrTDeferredProxyUploader\\28\\29.1\n11239:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::~GrTDeferredProxyUploader\\28\\29\n11240:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::freeData\\28\\29\n11241:GrSurfaceProxy::getUniqueKey\\28\\29\\20const\n11242:GrSurface::~GrSurface\\28\\29\n11243:GrSurface::getResourceType\\28\\29\\20const\n11244:GrStrokeTessellationShader::~GrStrokeTessellationShader\\28\\29.1\n11245:GrStrokeTessellationShader::~GrStrokeTessellationShader\\28\\29\n11246:GrStrokeTessellationShader::name\\28\\29\\20const\n11247:GrStrokeTessellationShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11248:GrStrokeTessellationShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11249:GrStrokeTessellationShader::Impl::~Impl\\28\\29.1\n11250:GrStrokeTessellationShader::Impl::~Impl\\28\\29\n11251:GrStrokeTessellationShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11252:GrStrokeTessellationShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11253:GrSkSLFP::~GrSkSLFP\\28\\29.1\n11254:GrSkSLFP::~GrSkSLFP\\28\\29\n11255:GrSkSLFP::onMakeProgramImpl\\28\\29\\20const\n11256:GrSkSLFP::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11257:GrSkSLFP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11258:GrSkSLFP::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11259:GrSkSLFP::clone\\28\\29\\20const\n11260:GrSkSLFP::Impl::~Impl\\28\\29.1\n11261:GrSkSLFP::Impl::~Impl\\28\\29\n11262:GrSkSLFP::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11263:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::toLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11264:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleShader\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11265:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleColorFilter\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11266:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleBlender\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11267:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::getMangledName\\28char\\20const*\\29\n11268:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::fromLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11269:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::defineFunction\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n11270:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::declareUniform\\28SkSL::VarDeclaration\\20const*\\29\n11271:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::declareFunction\\28char\\20const*\\29\n11272:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11273:GrSimpleMesh*\\20SkArenaAlloc::allocUninitializedArray<GrSimpleMesh>\\28unsigned\\20long\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n11274:GrRingBuffer::FinishSubmit\\28void*\\29\n11275:GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\n11276:GrRenderTask::~GrRenderTask\\28\\29\n11277:GrRenderTask::disown\\28GrDrawingManager*\\29\n11278:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.1\n11279:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29\n11280:GrRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n11281:GrRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n11282:GrRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n11283:GrRenderTargetProxy::callbackDesc\\28\\29\\20const\n11284:GrRecordingContext::~GrRecordingContext\\28\\29.1\n11285:GrRecordingContext::abandoned\\28\\29\n11286:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\\28\\29.1\n11287:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\\28\\29\n11288:GrRRectShadowGeoProc::onTextureSampler\\28int\\29\\20const\n11289:GrRRectShadowGeoProc::name\\28\\29\\20const\n11290:GrRRectShadowGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11291:GrRRectShadowGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11292:GrQuadEffect::name\\28\\29\\20const\n11293:GrQuadEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11294:GrQuadEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11295:GrQuadEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11296:GrQuadEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11297:GrPorterDuffXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11298:GrPorterDuffXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11299:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\\28\\29.1\n11300:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\\28\\29\n11301:GrPerlinNoise2Effect::onMakeProgramImpl\\28\\29\\20const\n11302:GrPerlinNoise2Effect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11303:GrPerlinNoise2Effect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11304:GrPerlinNoise2Effect::name\\28\\29\\20const\n11305:GrPerlinNoise2Effect::clone\\28\\29\\20const\n11306:GrPerlinNoise2Effect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11307:GrPerlinNoise2Effect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11308:GrPathTessellationShader::Impl::~Impl\\28\\29\n11309:GrPathTessellationShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11310:GrPathTessellationShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11311:GrOpsRenderPass::~GrOpsRenderPass\\28\\29\n11312:GrOpsRenderPass::onExecuteDrawable\\28std::__2::unique_ptr<SkDrawable::GpuDrawHandler\\2c\\20std::__2::default_delete<SkDrawable::GpuDrawHandler>>\\29\n11313:GrOpsRenderPass::onDrawIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11314:GrOpsRenderPass::onDrawIndexedIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11315:GrOpFlushState::~GrOpFlushState\\28\\29.1\n11316:GrOpFlushState::~GrOpFlushState\\28\\29\n11317:GrOpFlushState::writeView\\28\\29\\20const\n11318:GrOpFlushState::usesMSAASurface\\28\\29\\20const\n11319:GrOpFlushState::tokenTracker\\28\\29\n11320:GrOpFlushState::threadSafeCache\\28\\29\\20const\n11321:GrOpFlushState::strikeCache\\28\\29\\20const\n11322:GrOpFlushState::smallPathAtlasManager\\28\\29\\20const\n11323:GrOpFlushState::sampledProxyArray\\28\\29\n11324:GrOpFlushState::rtProxy\\28\\29\\20const\n11325:GrOpFlushState::resourceProvider\\28\\29\\20const\n11326:GrOpFlushState::renderPassBarriers\\28\\29\\20const\n11327:GrOpFlushState::recordDraw\\28GrGeometryProcessor\\20const*\\2c\\20GrSimpleMesh\\20const*\\2c\\20int\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPrimitiveType\\29\n11328:GrOpFlushState::putBackVertices\\28int\\2c\\20unsigned\\20long\\29\n11329:GrOpFlushState::putBackIndirectDraws\\28int\\29\n11330:GrOpFlushState::putBackIndices\\28int\\29\n11331:GrOpFlushState::putBackIndexedIndirectDraws\\28int\\29\n11332:GrOpFlushState::makeVertexSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n11333:GrOpFlushState::makeVertexSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n11334:GrOpFlushState::makeIndexSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n11335:GrOpFlushState::makeIndexSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n11336:GrOpFlushState::makeDrawIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n11337:GrOpFlushState::makeDrawIndexedIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n11338:GrOpFlushState::dstProxyView\\28\\29\\20const\n11339:GrOpFlushState::colorLoadOp\\28\\29\\20const\n11340:GrOpFlushState::atlasManager\\28\\29\\20const\n11341:GrOpFlushState::appliedClip\\28\\29\\20const\n11342:GrOpFlushState::addInlineUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29\n11343:GrOp::~GrOp\\28\\29\n11344:GrOnFlushCallbackObject::postFlush\\28skgpu::AtlasToken\\29\n11345:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11346:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11347:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const\n11348:GrModulateAtlasCoverageEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11349:GrModulateAtlasCoverageEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11350:GrModulateAtlasCoverageEffect::name\\28\\29\\20const\n11351:GrModulateAtlasCoverageEffect::clone\\28\\29\\20const\n11352:GrMeshDrawOp::onPrepare\\28GrOpFlushState*\\29\n11353:GrMeshDrawOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11354:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11355:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11356:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const\n11357:GrMatrixEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11358:GrMatrixEffect::name\\28\\29\\20const\n11359:GrMatrixEffect::clone\\28\\29\\20const\n11360:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29.1\n11361:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29\n11362:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::$_0::__invoke\\28void\\20const*\\2c\\20void*\\29\n11363:GrImageContext::~GrImageContext\\28\\29.1\n11364:GrImageContext::~GrImageContext\\28\\29\n11365:GrHardClip::apply\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrDrawOp*\\2c\\20GrAAType\\2c\\20GrAppliedClip*\\2c\\20SkRect*\\29\\20const\n11366:GrGpuResource::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n11367:GrGpuBuffer::~GrGpuBuffer\\28\\29\n11368:GrGpuBuffer::unref\\28\\29\\20const\n11369:GrGpuBuffer::getResourceType\\28\\29\\20const\n11370:GrGpuBuffer::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n11371:GrGeometryProcessor::onTextureSampler\\28int\\29\\20const\n11372:GrGeometryProcessor::ProgramImpl::~ProgramImpl\\28\\29\n11373:GrGLVaryingHandler::~GrGLVaryingHandler\\28\\29\n11374:GrGLUniformHandler::~GrGLUniformHandler\\28\\29.1\n11375:GrGLUniformHandler::~GrGLUniformHandler\\28\\29\n11376:GrGLUniformHandler::samplerVariable\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n11377:GrGLUniformHandler::samplerSwizzle\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n11378:GrGLUniformHandler::internalAddUniformArray\\28GrProcessor\\20const*\\2c\\20unsigned\\20int\\2c\\20SkSLType\\2c\\20char\\20const*\\2c\\20bool\\2c\\20int\\2c\\20char\\20const**\\29\n11379:GrGLUniformHandler::getUniformCStr\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n11380:GrGLUniformHandler::appendUniformDecls\\28GrShaderFlags\\2c\\20SkString*\\29\\20const\n11381:GrGLUniformHandler::addSampler\\28GrBackendFormat\\20const&\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\2c\\20GrShaderCaps\\20const*\\29\n11382:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n11383:GrGLTextureRenderTarget::onSetLabel\\28\\29\n11384:GrGLTextureRenderTarget::onRelease\\28\\29\n11385:GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n11386:GrGLTextureRenderTarget::onAbandon\\28\\29\n11387:GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n11388:GrGLTextureRenderTarget::backendFormat\\28\\29\\20const\n11389:GrGLTexture::~GrGLTexture\\28\\29.1\n11390:GrGLTexture::~GrGLTexture\\28\\29\n11391:GrGLTexture::textureParamsModified\\28\\29\n11392:GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29\n11393:GrGLTexture::getBackendTexture\\28\\29\\20const\n11394:GrGLSemaphore::~GrGLSemaphore\\28\\29.1\n11395:GrGLSemaphore::~GrGLSemaphore\\28\\29\n11396:GrGLSemaphore::setIsOwned\\28\\29\n11397:GrGLSemaphore::backendSemaphore\\28\\29\\20const\n11398:GrGLSLVertexBuilder::~GrGLSLVertexBuilder\\28\\29\n11399:GrGLSLVertexBuilder::onFinalize\\28\\29\n11400:GrGLSLUniformHandler::inputSamplerSwizzle\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n11401:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n11402:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n11403:GrGLSLFragmentShaderBuilder::onFinalize\\28\\29\n11404:GrGLSLFragmentShaderBuilder::hasSecondaryOutput\\28\\29\\20const\n11405:GrGLSLFragmentShaderBuilder::forceHighPrecision\\28\\29\n11406:GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\\28skgpu::BlendEquation\\29\n11407:GrGLRenderTarget::~GrGLRenderTarget\\28\\29.1\n11408:GrGLRenderTarget::~GrGLRenderTarget\\28\\29\n11409:GrGLRenderTarget::onGpuMemorySize\\28\\29\\20const\n11410:GrGLRenderTarget::getBackendRenderTarget\\28\\29\\20const\n11411:GrGLRenderTarget::completeStencilAttachment\\28GrAttachment*\\2c\\20bool\\29\n11412:GrGLRenderTarget::canAttemptStencilAttachment\\28bool\\29\\20const\n11413:GrGLRenderTarget::backendFormat\\28\\29\\20const\n11414:GrGLRenderTarget::alwaysClearStencil\\28\\29\\20const\n11415:GrGLProgramDataManager::~GrGLProgramDataManager\\28\\29.1\n11416:GrGLProgramDataManager::~GrGLProgramDataManager\\28\\29\n11417:GrGLProgramDataManager::setMatrix4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11418:GrGLProgramDataManager::setMatrix4f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n11419:GrGLProgramDataManager::setMatrix3fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11420:GrGLProgramDataManager::setMatrix3f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n11421:GrGLProgramDataManager::setMatrix2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11422:GrGLProgramDataManager::setMatrix2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n11423:GrGLProgramDataManager::set4iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11424:GrGLProgramDataManager::set4i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n11425:GrGLProgramDataManager::set4f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\20const\n11426:GrGLProgramDataManager::set3iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11427:GrGLProgramDataManager::set3i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n11428:GrGLProgramDataManager::set3fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11429:GrGLProgramDataManager::set3f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\2c\\20float\\29\\20const\n11430:GrGLProgramDataManager::set2iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11431:GrGLProgramDataManager::set2i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\29\\20const\n11432:GrGLProgramDataManager::set2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\29\\20const\n11433:GrGLProgramDataManager::set1iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11434:GrGLProgramDataManager::set1i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\29\\20const\n11435:GrGLProgramDataManager::set1fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11436:GrGLProgramDataManager::set1f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\29\\20const\n11437:GrGLProgramBuilder::~GrGLProgramBuilder\\28\\29.1\n11438:GrGLProgramBuilder::varyingHandler\\28\\29\n11439:GrGLProgramBuilder::caps\\28\\29\\20const\n11440:GrGLProgram::~GrGLProgram\\28\\29.1\n11441:GrGLOpsRenderPass::~GrGLOpsRenderPass\\28\\29\n11442:GrGLOpsRenderPass::onSetScissorRect\\28SkIRect\\20const&\\29\n11443:GrGLOpsRenderPass::onEnd\\28\\29\n11444:GrGLOpsRenderPass::onDraw\\28int\\2c\\20int\\29\n11445:GrGLOpsRenderPass::onDrawInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11446:GrGLOpsRenderPass::onDrawIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11447:GrGLOpsRenderPass::onDrawIndexed\\28int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20int\\29\n11448:GrGLOpsRenderPass::onDrawIndexedInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11449:GrGLOpsRenderPass::onDrawIndexedIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11450:GrGLOpsRenderPass::onClear\\28GrScissorState\\20const&\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n11451:GrGLOpsRenderPass::onClearStencilClip\\28GrScissorState\\20const&\\2c\\20bool\\29\n11452:GrGLOpsRenderPass::onBindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29\n11453:GrGLOpsRenderPass::onBindPipeline\\28GrProgramInfo\\20const&\\2c\\20SkRect\\20const&\\29\n11454:GrGLOpsRenderPass::onBindBuffers\\28sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20GrPrimitiveRestart\\29\n11455:GrGLOpsRenderPass::onBegin\\28\\29\n11456:GrGLOpsRenderPass::inlineUpload\\28GrOpFlushState*\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\29\n11457:GrGLInterface::~GrGLInterface\\28\\29.1\n11458:GrGLInterface::~GrGLInterface\\28\\29\n11459:GrGLGpu::~GrGLGpu\\28\\29.1\n11460:GrGLGpu::xferBarrier\\28GrRenderTarget*\\2c\\20GrXferBarrierType\\29\n11461:GrGLGpu::wrapBackendSemaphore\\28GrBackendSemaphore\\20const&\\2c\\20GrSemaphoreWrapType\\2c\\20GrWrapOwnership\\29\n11462:GrGLGpu::willExecute\\28\\29\n11463:GrGLGpu::waitSemaphore\\28GrSemaphore*\\29\n11464:GrGLGpu::submit\\28GrOpsRenderPass*\\29\n11465:GrGLGpu::stagingBufferManager\\28\\29\n11466:GrGLGpu::refPipelineBuilder\\28\\29\n11467:GrGLGpu::prepareTextureForCrossContextUsage\\28GrTexture*\\29\n11468:GrGLGpu::precompileShader\\28SkData\\20const&\\2c\\20SkData\\20const&\\29\n11469:GrGLGpu::pipelineBuilder\\28\\29\n11470:GrGLGpu::onWritePixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20bool\\29\n11471:GrGLGpu::onWrapRenderableBackendTexture\\28GrBackendTexture\\20const&\\2c\\20int\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\29\n11472:GrGLGpu::onWrapCompressedBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\29\n11473:GrGLGpu::onWrapBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\29\n11474:GrGLGpu::onWrapBackendRenderTarget\\28GrBackendRenderTarget\\20const&\\29\n11475:GrGLGpu::onUpdateCompressedBackendTexture\\28GrBackendTexture\\20const&\\2c\\20sk_sp<skgpu::RefCntedCallback>\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n11476:GrGLGpu::onTransferPixelsTo\\28GrTexture*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n11477:GrGLGpu::onTransferPixelsFrom\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\29\n11478:GrGLGpu::onTransferFromBufferToBuffer\\28sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n11479:GrGLGpu::onSubmitToGpu\\28GrSyncCpu\\29\n11480:GrGLGpu::onResolveRenderTarget\\28GrRenderTarget*\\2c\\20SkIRect\\20const&\\29\n11481:GrGLGpu::onResetTextureBindings\\28\\29\n11482:GrGLGpu::onResetContext\\28unsigned\\20int\\29\n11483:GrGLGpu::onRegenerateMipMapLevels\\28GrTexture*\\29\n11484:GrGLGpu::onReadPixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20void*\\2c\\20unsigned\\20long\\29\n11485:GrGLGpu::onGetOpsRenderPass\\28GrRenderTarget*\\2c\\20bool\\2c\\20GrAttachment*\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\20const&\\2c\\20GrOpsRenderPass::LoadAndStoreInfo\\20const&\\2c\\20GrOpsRenderPass::StencilLoadAndStoreInfo\\20const&\\2c\\20skia_private::TArray<GrSurfaceProxy*\\2c\\20true>\\20const&\\2c\\20GrXferBarrierFlags\\29\n11486:GrGLGpu::onDumpJSON\\28SkJSONWriter*\\29\\20const\n11487:GrGLGpu::onCreateTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n11488:GrGLGpu::onCreateCompressedTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n11489:GrGLGpu::onCreateCompressedBackendTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\29\n11490:GrGLGpu::onCreateBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n11491:GrGLGpu::onCreateBackendTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n11492:GrGLGpu::onCopySurface\\28GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20SkFilterMode\\29\n11493:GrGLGpu::onClearBackendTexture\\28GrBackendTexture\\20const&\\2c\\20sk_sp<skgpu::RefCntedCallback>\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n11494:GrGLGpu::makeStencilAttachment\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\29\n11495:GrGLGpu::makeSemaphore\\28bool\\29\n11496:GrGLGpu::makeMSAAAttachment\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\29\n11497:GrGLGpu::insertSemaphore\\28GrSemaphore*\\29\n11498:GrGLGpu::getPreferredStencilFormat\\28GrBackendFormat\\20const&\\29\n11499:GrGLGpu::finishOutstandingGpuWork\\28\\29\n11500:GrGLGpu::disconnect\\28GrGpu::DisconnectType\\29\n11501:GrGLGpu::deleteBackendTexture\\28GrBackendTexture\\20const&\\29\n11502:GrGLGpu::compile\\28GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\29\n11503:GrGLGpu::checkFinishProcs\\28\\29\n11504:GrGLGpu::addFinishedProc\\28void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n11505:GrGLGpu::ProgramCache::~ProgramCache\\28\\29.1\n11506:GrGLGpu::ProgramCache::~ProgramCache\\28\\29\n11507:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29\n11508:GrGLFunction<void\\20\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11509:GrGLFunction<void\\20\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11510:GrGLFunction<void\\20\\28float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28float\\29\\29::'lambda'\\28void\\20const*\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20float\\29\n11511:GrGLFunction<void\\20\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29>::GrGLFunction\\28void\\20\\28*\\29\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\\29::'lambda'\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29::__invoke\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\n11512:GrGLFunction<void\\20\\28\\29>::GrGLFunction\\28void\\20\\28*\\29\\28\\29\\29::'lambda'\\28void\\20const*\\29::__invoke\\28void\\20const*\\29\n11513:GrGLFunction<unsigned\\20int\\20\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29>::GrGLFunction\\28unsigned\\20int\\20\\28*\\29\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\\29::'lambda'\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29::__invoke\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\n11514:GrGLFunction<unsigned\\20int\\20\\28\\29>::GrGLFunction\\28unsigned\\20int\\20\\28*\\29\\28\\29\\29::'lambda'\\28void\\20const*\\29::__invoke\\28void\\20const*\\29\n11515:GrGLCaps::~GrGLCaps\\28\\29.1\n11516:GrGLCaps::surfaceSupportsReadPixels\\28GrSurface\\20const*\\29\\20const\n11517:GrGLCaps::supportedWritePixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11518:GrGLCaps::onSurfaceSupportsWritePixels\\28GrSurface\\20const*\\29\\20const\n11519:GrGLCaps::onSupportsDynamicMSAA\\28GrRenderTargetProxy\\20const*\\29\\20const\n11520:GrGLCaps::onSupportedReadPixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11521:GrGLCaps::onIsWindowRectanglesSupportedForRT\\28GrBackendRenderTarget\\20const&\\29\\20const\n11522:GrGLCaps::onGetReadSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11523:GrGLCaps::onGetDstSampleFlagsForProxy\\28GrRenderTargetProxy\\20const*\\29\\20const\n11524:GrGLCaps::onGetDefaultBackendFormat\\28GrColorType\\29\\20const\n11525:GrGLCaps::onDumpJSON\\28SkJSONWriter*\\29\\20const\n11526:GrGLCaps::onCanCopySurface\\28GrSurfaceProxy\\20const*\\2c\\20SkIRect\\20const&\\2c\\20GrSurfaceProxy\\20const*\\2c\\20SkIRect\\20const&\\29\\20const\n11527:GrGLCaps::onAreColorTypeAndFormatCompatible\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\29\\20const\n11528:GrGLCaps::onApplyOptionsOverrides\\28GrContextOptions\\20const&\\29\n11529:GrGLCaps::maxRenderTargetSampleCount\\28GrBackendFormat\\20const&\\29\\20const\n11530:GrGLCaps::makeDesc\\28GrRenderTarget*\\2c\\20GrProgramInfo\\20const&\\2c\\20GrCaps::ProgramDescOverrideFlags\\29\\20const\n11531:GrGLCaps::isFormatTexturable\\28GrBackendFormat\\20const&\\2c\\20GrTextureType\\29\\20const\n11532:GrGLCaps::isFormatSRGB\\28GrBackendFormat\\20const&\\29\\20const\n11533:GrGLCaps::isFormatRenderable\\28GrBackendFormat\\20const&\\2c\\20int\\29\\20const\n11534:GrGLCaps::isFormatCopyable\\28GrBackendFormat\\20const&\\29\\20const\n11535:GrGLCaps::isFormatAsColorTypeRenderable\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20int\\29\\20const\n11536:GrGLCaps::getWriteSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11537:GrGLCaps::getRenderTargetSampleCount\\28int\\2c\\20GrBackendFormat\\20const&\\29\\20const\n11538:GrGLCaps::getDstCopyRestrictions\\28GrRenderTargetProxy\\20const*\\2c\\20GrColorType\\29\\20const\n11539:GrGLCaps::getBackendFormatFromCompressionType\\28SkTextureCompressionType\\29\\20const\n11540:GrGLCaps::computeFormatKey\\28GrBackendFormat\\20const&\\29\\20const\n11541:GrGLBuffer::~GrGLBuffer\\28\\29.1\n11542:GrGLBuffer::~GrGLBuffer\\28\\29\n11543:GrGLBuffer::setMemoryBacking\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\29\\20const\n11544:GrGLBuffer::onUpdateData\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n11545:GrGLBuffer::onUnmap\\28GrGpuBuffer::MapType\\29\n11546:GrGLBuffer::onSetLabel\\28\\29\n11547:GrGLBuffer::onRelease\\28\\29\n11548:GrGLBuffer::onMap\\28GrGpuBuffer::MapType\\29\n11549:GrGLBuffer::onClearToZero\\28\\29\n11550:GrGLBuffer::onAbandon\\28\\29\n11551:GrGLBackendTextureData::~GrGLBackendTextureData\\28\\29.1\n11552:GrGLBackendTextureData::~GrGLBackendTextureData\\28\\29\n11553:GrGLBackendTextureData::isSameTexture\\28GrBackendTextureData\\20const*\\29\\20const\n11554:GrGLBackendTextureData::isProtected\\28\\29\\20const\n11555:GrGLBackendTextureData::getBackendFormat\\28\\29\\20const\n11556:GrGLBackendTextureData::equal\\28GrBackendTextureData\\20const*\\29\\20const\n11557:GrGLBackendTextureData::copyTo\\28SkAnySubclass<GrBackendTextureData\\2c\\20160ul>&\\29\\20const\n11558:GrGLBackendRenderTargetData::isProtected\\28\\29\\20const\n11559:GrGLBackendRenderTargetData::getBackendFormat\\28\\29\\20const\n11560:GrGLBackendRenderTargetData::equal\\28GrBackendRenderTargetData\\20const*\\29\\20const\n11561:GrGLBackendRenderTargetData::copyTo\\28SkAnySubclass<GrBackendRenderTargetData\\2c\\20160ul>&\\29\\20const\n11562:GrGLBackendFormatData::toString\\28\\29\\20const\n11563:GrGLBackendFormatData::stencilBits\\28\\29\\20const\n11564:GrGLBackendFormatData::equal\\28GrBackendFormatData\\20const*\\29\\20const\n11565:GrGLBackendFormatData::desc\\28\\29\\20const\n11566:GrGLBackendFormatData::copyTo\\28SkAnySubclass<GrBackendFormatData\\2c\\2064ul>&\\29\\20const\n11567:GrGLBackendFormatData::compressionType\\28\\29\\20const\n11568:GrGLBackendFormatData::channelMask\\28\\29\\20const\n11569:GrGLBackendFormatData::bytesPerBlock\\28\\29\\20const\n11570:GrGLAttachment::~GrGLAttachment\\28\\29\n11571:GrGLAttachment::setMemoryBacking\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\29\\20const\n11572:GrGLAttachment::onSetLabel\\28\\29\n11573:GrGLAttachment::onRelease\\28\\29\n11574:GrGLAttachment::onAbandon\\28\\29\n11575:GrGLAttachment::backendFormat\\28\\29\\20const\n11576:GrFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11577:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11578:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n11579:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11580:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11581:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::name\\28\\29\\20const\n11582:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11583:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::clone\\28\\29\\20const\n11584:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11585:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::onMakeProgramImpl\\28\\29\\20const\n11586:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::name\\28\\29\\20const\n11587:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::clone\\28\\29\\20const\n11588:GrFragmentProcessor::ProgramImpl::~ProgramImpl\\28\\29\n11589:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11590:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n11591:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::name\\28\\29\\20const\n11592:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::clone\\28\\29\\20const\n11593:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11594:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::onMakeProgramImpl\\28\\29\\20const\n11595:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::name\\28\\29\\20const\n11596:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11597:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::clone\\28\\29\\20const\n11598:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11599:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::onMakeProgramImpl\\28\\29\\20const\n11600:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::name\\28\\29\\20const\n11601:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11602:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::clone\\28\\29\\20const\n11603:GrFixedClip::~GrFixedClip\\28\\29.1\n11604:GrFixedClip::~GrFixedClip\\28\\29\n11605:GrExternalTextureGenerator::onGenerateTexture\\28GrRecordingContext*\\2c\\20SkImageInfo\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n11606:GrEagerDynamicVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n11607:GrDynamicAtlas::~GrDynamicAtlas\\28\\29.1\n11608:GrDynamicAtlas::~GrDynamicAtlas\\28\\29\n11609:GrDrawOp::usesStencil\\28\\29\\20const\n11610:GrDrawOp::usesMSAA\\28\\29\\20const\n11611:GrDrawOp::fixedFunctionFlags\\28\\29\\20const\n11612:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\\28\\29.1\n11613:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\\28\\29\n11614:GrDistanceFieldPathGeoProc::onTextureSampler\\28int\\29\\20const\n11615:GrDistanceFieldPathGeoProc::name\\28\\29\\20const\n11616:GrDistanceFieldPathGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11617:GrDistanceFieldPathGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11618:GrDistanceFieldPathGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11619:GrDistanceFieldPathGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11620:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\\28\\29.1\n11621:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\\28\\29\n11622:GrDistanceFieldLCDTextGeoProc::name\\28\\29\\20const\n11623:GrDistanceFieldLCDTextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11624:GrDistanceFieldLCDTextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11625:GrDistanceFieldLCDTextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11626:GrDistanceFieldLCDTextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11627:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29.1\n11628:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29\n11629:GrDistanceFieldA8TextGeoProc::name\\28\\29\\20const\n11630:GrDistanceFieldA8TextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11631:GrDistanceFieldA8TextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11632:GrDistanceFieldA8TextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11633:GrDistanceFieldA8TextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11634:GrDisableColorXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11635:GrDisableColorXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11636:GrDirectContext::~GrDirectContext\\28\\29.1\n11637:GrDirectContext::releaseResourcesAndAbandonContext\\28\\29\n11638:GrDirectContext::init\\28\\29\n11639:GrDirectContext::abandoned\\28\\29\n11640:GrDirectContext::abandonContext\\28\\29\n11641:GrDeferredProxyUploader::~GrDeferredProxyUploader\\28\\29.1\n11642:GrDeferredProxyUploader::~GrDeferredProxyUploader\\28\\29\n11643:GrCpuVertexAllocator::~GrCpuVertexAllocator\\28\\29.1\n11644:GrCpuVertexAllocator::~GrCpuVertexAllocator\\28\\29\n11645:GrCpuVertexAllocator::unlock\\28int\\29\n11646:GrCpuVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n11647:GrCpuBuffer::unref\\28\\29\\20const\n11648:GrCoverageSetOpXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11649:GrCoverageSetOpXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11650:GrCopyRenderTask::~GrCopyRenderTask\\28\\29.1\n11651:GrCopyRenderTask::onMakeSkippable\\28\\29\n11652:GrCopyRenderTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n11653:GrCopyRenderTask::onExecute\\28GrOpFlushState*\\29\n11654:GrCopyRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11655:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11656:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11657:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const\n11658:GrConvexPolyEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11659:GrConvexPolyEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11660:GrConvexPolyEffect::name\\28\\29\\20const\n11661:GrConvexPolyEffect::clone\\28\\29\\20const\n11662:GrContext_Base::~GrContext_Base\\28\\29.1\n11663:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\\28\\29.1\n11664:GrContextThreadSafeProxy::isValidCharacterizationForVulkan\\28sk_sp<GrCaps\\20const>\\2c\\20bool\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20bool\\2c\\20bool\\29\n11665:GrConicEffect::name\\28\\29\\20const\n11666:GrConicEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11667:GrConicEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11668:GrConicEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11669:GrConicEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11670:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29.1\n11671:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29\n11672:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11673:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11674:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const\n11675:GrColorSpaceXformEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11676:GrColorSpaceXformEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11677:GrColorSpaceXformEffect::name\\28\\29\\20const\n11678:GrColorSpaceXformEffect::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11679:GrColorSpaceXformEffect::clone\\28\\29\\20const\n11680:GrCaps::~GrCaps\\28\\29\n11681:GrCaps::getDstCopyRestrictions\\28GrRenderTargetProxy\\20const*\\2c\\20GrColorType\\29\\20const\n11682:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\\28\\29.1\n11683:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\\28\\29\n11684:GrBitmapTextGeoProc::onTextureSampler\\28int\\29\\20const\n11685:GrBitmapTextGeoProc::name\\28\\29\\20const\n11686:GrBitmapTextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11687:GrBitmapTextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11688:GrBitmapTextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11689:GrBitmapTextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11690:GrBicubicEffect::onMakeProgramImpl\\28\\29\\20const\n11691:GrBicubicEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11692:GrBicubicEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11693:GrBicubicEffect::name\\28\\29\\20const\n11694:GrBicubicEffect::clone\\28\\29\\20const\n11695:GrBicubicEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11696:GrBicubicEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11697:GrAttachment::onGpuMemorySize\\28\\29\\20const\n11698:GrAttachment::getResourceType\\28\\29\\20const\n11699:GrAttachment::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n11700:GrAtlasManager::~GrAtlasManager\\28\\29.1\n11701:GrAtlasManager::preFlush\\28GrOnFlushResourceProvider*\\29\n11702:GrAtlasManager::postFlush\\28skgpu::AtlasToken\\29\n11703:GrAATriangulator::tessellate\\28GrTriangulator::VertexList\\20const&\\2c\\20GrTriangulator::Comparator\\20const&\\29\n11704:GetRectsForRange\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n11705:GetRectsForPlaceholders\\28skia::textlayout::Paragraph&\\29\n11706:GetLineMetrics\\28skia::textlayout::Paragraph&\\29\n11707:GetLineMetricsAt\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20long\\29\n11708:GetGlyphInfoAt\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20long\\29\n11709:GetCoeffsFast\n11710:GetCoeffsAlt\n11711:GetClosestGlyphInfoAtCoordinate\\28skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float\\29\n11712:FontMgrRunIterator::~FontMgrRunIterator\\28\\29.1\n11713:FontMgrRunIterator::~FontMgrRunIterator\\28\\29\n11714:FontMgrRunIterator::currentFont\\28\\29\\20const\n11715:FontMgrRunIterator::consume\\28\\29\n11716:ExtractGreen_C\n11717:ExtractAlpha_C\n11718:ExtractAlphaRows\n11719:ExternalWebGLTexture::~ExternalWebGLTexture\\28\\29.1\n11720:ExternalWebGLTexture::~ExternalWebGLTexture\\28\\29\n11721:ExternalWebGLTexture::getBackendTexture\\28\\29\n11722:ExternalWebGLTexture::dispose\\28\\29\n11723:ExportAlphaRGBA4444\n11724:ExportAlpha\n11725:Equals\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n11726:EmitYUV\n11727:EmitSampledRGB\n11728:EmitRescaledYUV\n11729:EmitRescaledRGB\n11730:EmitRescaledAlphaYUV\n11731:EmitRescaledAlphaRGB\n11732:EmitFancyRGB\n11733:EmitAlphaYUV\n11734:EmitAlphaRGBA4444\n11735:EmitAlphaRGB\n11736:EllipticalRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11737:EllipticalRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11738:EllipticalRRectOp::name\\28\\29\\20const\n11739:EllipticalRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11740:EllipseOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11741:EllipseOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11742:EllipseOp::name\\28\\29\\20const\n11743:EllipseOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11744:EllipseGeometryProcessor::name\\28\\29\\20const\n11745:EllipseGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11746:EllipseGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11747:EllipseGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11748:Dual_Project\n11749:DitherCombine8x8_C\n11750:DispatchAlpha_C\n11751:DispatchAlphaToGreen_C\n11752:DisableColorXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11753:DisableColorXP::name\\28\\29\\20const\n11754:DisableColorXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11755:DisableColorXP::makeProgramImpl\\28\\29\\20const\n11756:Direct_Move_Y\n11757:Direct_Move_X\n11758:Direct_Move_Orig_Y\n11759:Direct_Move_Orig_X\n11760:Direct_Move_Orig\n11761:Direct_Move\n11762:DefaultGeoProc::name\\28\\29\\20const\n11763:DefaultGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11764:DefaultGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11765:DefaultGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11766:DefaultGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11767:DataFontLoader::loadSystemFonts\\28SkFontScanner\\20const*\\2c\\20skia_private::TArray<sk_sp<SkFontStyleSet_Custom>\\2c\\20true>*\\29\\20const\n11768:DataCacheElement_deleter\\28void*\\29\n11769:DIEllipseOp::~DIEllipseOp\\28\\29.1\n11770:DIEllipseOp::~DIEllipseOp\\28\\29\n11771:DIEllipseOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11772:DIEllipseOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11773:DIEllipseOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11774:DIEllipseOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11775:DIEllipseOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11776:DIEllipseOp::name\\28\\29\\20const\n11777:DIEllipseOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11778:DIEllipseGeometryProcessor::name\\28\\29\\20const\n11779:DIEllipseGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11780:DIEllipseGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11781:DIEllipseGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11782:DC8uv_C\n11783:DC8uvNoTop_C\n11784:DC8uvNoTopLeft_C\n11785:DC8uvNoLeft_C\n11786:DC4_C\n11787:DC16_C\n11788:DC16NoTop_C\n11789:DC16NoTopLeft_C\n11790:DC16NoLeft_C\n11791:CustomXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11792:CustomXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11793:CustomXP::xferBarrierType\\28GrCaps\\20const&\\29\\20const\n11794:CustomXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11795:CustomXP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11796:CustomXP::name\\28\\29\\20const\n11797:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11798:CustomXP::makeProgramImpl\\28\\29\\20const\n11799:CustomTeardown\n11800:CustomSetup\n11801:CustomPut\n11802:Current_Ppem_Stretched\n11803:Current_Ppem\n11804:Cr_z_zcfree\n11805:Cr_z_zcalloc\n11806:CoverageSetOpXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11807:CoverageSetOpXP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11808:CoverageSetOpXP::name\\28\\29\\20const\n11809:CoverageSetOpXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11810:CoverageSetOpXP::makeProgramImpl\\28\\29\\20const\n11811:CopyPath\\28SkPath\\20const&\\29\n11812:ConvertRGB24ToY_C\n11813:ConvertBGR24ToY_C\n11814:ConvertARGBToY_C\n11815:ColorTableEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11816:ColorTableEffect::onMakeProgramImpl\\28\\29\\20const\n11817:ColorTableEffect::name\\28\\29\\20const\n11818:ColorTableEffect::clone\\28\\29\\20const\n11819:CircularRRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11820:CircularRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11821:CircularRRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11822:CircularRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11823:CircularRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11824:CircularRRectOp::name\\28\\29\\20const\n11825:CircularRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11826:CircleOp::~CircleOp\\28\\29.1\n11827:CircleOp::~CircleOp\\28\\29\n11828:CircleOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11829:CircleOp::programInfo\\28\\29\n11830:CircleOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11831:CircleOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11832:CircleOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11833:CircleOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11834:CircleOp::name\\28\\29\\20const\n11835:CircleOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11836:CircleGeometryProcessor::name\\28\\29\\20const\n11837:CircleGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11838:CircleGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11839:CircleGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11840:CanInterpolate\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n11841:ButtCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n11842:ButtCapDashedCircleOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11843:ButtCapDashedCircleOp::programInfo\\28\\29\n11844:ButtCapDashedCircleOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11845:ButtCapDashedCircleOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11846:ButtCapDashedCircleOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11847:ButtCapDashedCircleOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11848:ButtCapDashedCircleOp::name\\28\\29\\20const\n11849:ButtCapDashedCircleOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11850:ButtCapDashedCircleGeometryProcessor::name\\28\\29\\20const\n11851:ButtCapDashedCircleGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11852:ButtCapDashedCircleGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11853:ButtCapDashedCircleGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11854:BluntJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n11855:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11856:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11857:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n11858:BlendFragmentProcessor::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11859:BlendFragmentProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11860:BlendFragmentProcessor::name\\28\\29\\20const\n11861:BlendFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11862:BlendFragmentProcessor::clone\\28\\29\\20const\n11863:AutoCleanPng::infoCallback\\28unsigned\\20long\\29\n11864:AutoCleanPng::decodeBounds\\28\\29\n11865:ApplyTrim\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n11866:ApplyTransform\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11867:ApplyStroke\\28SkPath&\\2c\\20StrokeOpts\\29\n11868:ApplySimplify\\28SkPath&\\29\n11869:ApplyRewind\\28SkPath&\\29\n11870:ApplyReset\\28SkPath&\\29\n11871:ApplyRQuadTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11872:ApplyRMoveTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n11873:ApplyRLineTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n11874:ApplyRCubicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11875:ApplyRConicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11876:ApplyRArcToArcSize\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n11877:ApplyQuadTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11878:ApplyPathOp\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\n11879:ApplyMoveTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n11880:ApplyLineTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n11881:ApplyDash\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11882:ApplyCubicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11883:ApplyConicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11884:ApplyClose\\28SkPath&\\29\n11885:ApplyArcToTangent\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11886:ApplyArcToArcSize\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n11887:ApplyAlphaMultiply_C\n11888:ApplyAlphaMultiply_16b_C\n11889:ApplyAddPath\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n11890:AlphaReplace_C\n11891:$_3::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\29\n11892:$_2::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\29\n11893:$_1::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\29\n11894:$_0::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\29\n"
  },
  {
    "path": "legacy/dist/canvaskit/chromium/canvaskit.js",
    "content": "\nvar CanvasKitInit = (() => {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n  return (\nfunction(moduleArg = {}) {\n\nvar r=moduleArg,aa,ba;r.ready=new Promise((a,b)=>{aa=a;ba=b});\n(function(a){a.Gd=a.Gd||[];a.Gd.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.ge=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,\nalphaType: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.ge=null,e.Oe=b,e.Le=c,e.Me=f,e.re=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.Dd(this.Cd);this._flush();if(this.ge){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.re,this.Me);c=new ImageData(c,this.Oe,this.Le);b?this.ge.getContext(\"2d\").putImageData(c,\n0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.ge.getContext(\"2d\").putImageData(c,0,0)}};a.Surface.prototype.dispose=function(){this.re&&a._free(this.re);this.delete()};a.Dd=a.Dd||function(){};a.he=a.he||function(){return null}})})(r);\n(function(a){a.Gd=a.Gd||[];a.Gd.push(function(){function b(m,q,w){return m&&m.hasOwnProperty(q)?m[q]:w}function c(m){var q=da(ea);ea[q]=m;return q}function e(m){return m.naturalHeight||m.videoHeight||m.displayHeight||m.height}function f(m){return m.naturalWidth||m.videoWidth||m.displayWidth||m.width}function k(m,q,w,y){m.bindTexture(m.TEXTURE_2D,q);y||w.alphaType!==a.AlphaType.Premul||m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);return q}function l(m,q,w){w||q.alphaType!==a.AlphaType.Premul||\nm.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);m.bindTexture(m.TEXTURE_2D,null)}a.GetWebGLContext=function(m,q){if(!m)throw\"null canvas passed into makeWebGLContext\";var w={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\",\n0),enableExtensionsByDefault:b(q,\"enableExtensionsByDefault\",1),explicitSwapControl:b(q,\"explicitSwapControl\",0),renderViaOffscreenBackBuffer:b(q,\"renderViaOffscreenBackBuffer\",0)};w.majorVersion=q&&q.majorVersion?q.majorVersion:\"undefined\"!==typeof WebGL2RenderingContext?2:1;if(w.explicitSwapControl)throw\"explicitSwapControl is not supported\";m=fa(m,w);if(!m)return 0;ha(m);x.Od.getExtension(\"WEBGL_debug_renderer_info\");return m};a.deleteContext=function(m){x===ia[m]&&(x=null);\"object\"==typeof JSEvents&&\nJSEvents.sf(ia[m].Od.canvas);ia[m]&&ia[m].Od.canvas&&(ia[m].Od.canvas.Je=void 0);ia[m]=null};a._setTextureCleanup({deleteTexture:function(m,q){var w=ea[q];w&&ia[m].Od.deleteTexture(w);ea[q]=null}});a.MakeWebGLContext=function(m){if(!this.Dd(m))return null;var q=this._MakeGrContext();if(!q)return null;q.Cd=m;var w=q.delete.bind(q);q[\"delete\"]=function(){a.Dd(this.Cd);w()}.bind(q);return x.te=q};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.Dd(this.Cd);\nthis._getResourceCacheLimitBytes()};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.Dd(this.Cd);this._getResourceCacheUsageBytes()};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.Dd(this.Cd);this._releaseResourcesAndAbandonContext()};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(m){a.Dd(this.Cd);this._setResourceCacheLimitBytes(m)};a.MakeOnScreenGLSurface=function(m,q,w,y,B,D){if(!this.Dd(m.Cd))return null;q=void 0===B||void 0===D?\nthis._MakeOnScreenGLSurface(m,q,w,y):this._MakeOnScreenGLSurface(m,q,w,y,B,D);if(!q)return null;q.Cd=m.Cd;return q};a.MakeRenderTarget=function(){var m=arguments[0];if(!this.Dd(m.Cd))return null;if(3===arguments.length){var q=this._MakeRenderTargetWH(m,arguments[1],arguments[2]);if(!q)return null}else if(2===arguments.length){if(q=this._MakeRenderTargetII(m,arguments[1]),!q)return null}else return null;q.Cd=m.Cd;return q};a.MakeWebGLCanvasSurface=function(m,q,w){q=q||null;var y=m,B=\"undefined\"!==\ntypeof OffscreenCanvas&&y instanceof OffscreenCanvas;if(!(\"undefined\"!==typeof HTMLCanvasElement&&y instanceof HTMLCanvasElement||B||(y=document.getElementById(m),y)))throw\"Canvas with id \"+m+\" was not found\";m=this.GetWebGLContext(y,w);if(!m||0>m)throw\"failed to create webgl context: err \"+m;m=this.MakeWebGLContext(m);q=this.MakeOnScreenGLSurface(m,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=\na.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(m,q){a.Dd(this.Cd);m=c(m);if(q=this._makeImageFromTexture(this.Cd,m,q))q.be=m;return q};a.Surface.prototype.makeImageFromTextureSource=function(m,q,w){q||(q={height:e(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);a.Dd(this.Cd);var y=x.Od;w=k(y,y.createTexture(),q,w);2===x.version?y.texImage2D(y.TEXTURE_2D,0,y.RGBA,q.width,q.height,\n0,y.RGBA,y.UNSIGNED_BYTE,m):y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,m);l(y,q);this._resetContext();return this.makeImageFromTexture(w,q)};a.Surface.prototype.updateTextureFromSource=function(m,q,w){if(m.be){a.Dd(this.Cd);var y=m.getImageInfo(),B=x.Od,D=k(B,ea[m.be],y,w);2===x.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);l(B,y,w);this._resetContext();ea[m.be]=null;m.be=c(D);y.colorSpace=\nm.getColorSpace();q=this._makeImageFromTexture(this.Cd,m.be,y);w=m.jd.Ed;B=m.jd.Jd;m.jd.Ed=q.jd.Ed;m.jd.Jd=q.jd.Jd;q.jd.Ed=w;q.jd.Jd=B;q.delete();y.colorSpace.delete()}};a.MakeLazyImageFromTextureSource=function(m,q,w){q||(q={height:e(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);var y={makeTexture:function(){var B=x,D=B.Od,u=k(D,D.createTexture(),q,w);2===B.version?D.texImage2D(D.TEXTURE_2D,0,D.RGBA,\nq.width,q.height,0,D.RGBA,D.UNSIGNED_BYTE,m):D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,m);l(D,q,w);return c(u)},freeSrc:function(){}};\"VideoFrame\"===m.constructor.name&&(y.freeSrc=function(){m.close()});return a.Image._makeFromGenerator(q,y)};a.Dd=function(m){return m?ha(m):!1};a.he=function(){return x&&x.te&&!x.te.isDeleted()?x.te:null}})})(r);\n(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,\nMath.min(g||0,255)))}function k(g,d){d&&d._ck||a._free(g)}function l(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 m(g){var d={Ld:M,count:g.length,colorType:a.ColorType.RGBA_F32};if(g instanceof Float32Array)d.Ld=l(g,\"HEAPF32\"),d.count=g.length/4;else if(g instanceof Uint32Array)d.Ld=l(g,\"HEAPU32\"),d.colorType=a.ColorType.RGBA_8888;else if(g instanceof Array){if(g&&g.length){for(var h=a._malloc(16*\ng.length),n=0,t=h/4,v=0;v<g.length;v++)for(var z=0;4>z;z++)a.HEAPF32[t+n]=g[v][z],n++;g=h}else g=M;d.Ld=g}else throw\"Invalid argument to copyFlexibleColorArray, Not a color array \"+typeof g;return d}function q(g){if(!g)return M;var d=T.toTypedArray();if(g.length){if(6===g.length||9===g.length)return l(g,\"HEAPF32\",H),6===g.length&&a.HEAPF32.set(fd,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\";\n}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 w(g){if(!g)return M;var d=Y.toTypedArray();if(g.length){if(16!==g.length&&6!==g.length&&9!==g.length)throw\"invalid matrix size\";if(16===g.length)return l(g,\"HEAPF32\",ca);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 ca}if(void 0===\ng.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 ca}function y(g,d){return l(g,\"HEAPF32\",d||va)}function B(g,d,h,n){var t=Ma.toTypedArray();t[0]=g;t[1]=d;t[2]=h;t[3]=n;return va}function D(g){for(var d=new Float32Array(4),h=0;4>h;h++)d[h]=a.HEAPF32[g/4+h];return d}function u(g,d){return l(g,\"HEAPF32\",d||X)}function F(g,d){return l(g,\n\"HEAPF32\",d||Eb)}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,\n1,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*\ng[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,\n-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&&\nthis.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,T,ca=M,Y,va=M,Ma,na,X=M,fc,Ba=M,gc,Fb=M,hc,Gb=M,hb,Sa=M,ic,Eb=M,jc,kc=M,fd=Float32Array.of(0,0,1),M=0;a.onRuntimeInitialized=function(){function g(d,h,n,t,v,z,E){z||(z=4*t.width,t.colorType===a.ColorType.RGBA_F16?z*=2:t.colorType===a.ColorType.RGBA_F32&&(z*=4));var J=z*t.height;var I=v?v.byteOffset:a._malloc(J);\nif(E?!d._readPixels(t,I,z,h,n,E):!d._readPixels(t,I,z,h,n))return v||a._free(I),null;if(v)return v.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:d=(new Uint8Array(a.HEAPU8.buffer,I,J)).slice();break;case a.ColorType.RGBA_F32:d=(new Float32Array(a.HEAPU8.buffer,I,J)).slice();break;default:return null}a._free(I);return d}Ma=a.Malloc(Float32Array,4);va=Ma.byteOffset;Y=a.Malloc(Float32Array,16);ca=Y.byteOffset;T=a.Malloc(Float32Array,9);H=T.byteOffset;ic=a.Malloc(Float32Array,\n12);Eb=ic.byteOffset;jc=a.Malloc(Float32Array,12);kc=jc.byteOffset;na=a.Malloc(Float32Array,4);X=na.byteOffset;fc=a.Malloc(Float32Array,4);Ba=fc.byteOffset;gc=a.Malloc(Float32Array,3);Fb=gc.byteOffset;hc=a.Malloc(Float32Array,3);Gb=hc.byteOffset;hb=a.Malloc(Int32Array,4);Sa=hb.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=\nfunction(d){var h=l(d,\"HEAPF32\"),n=a.Path._MakeFromCmds(h,d.length);k(h,d);return n};a.Path.MakeFromVerbsPointsWeights=function(d,h,n){var t=l(d,\"HEAPU8\"),v=l(h,\"HEAPF32\"),z=l(n,\"HEAPF32\"),E=a.Path._MakeFromVerbsPointsWeights(t,d.length,v,h.length,z,n&&n.length||0);k(t,d);k(v,h);k(z,n);return E};a.Path.prototype.addArc=function(d,h,n){d=u(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===\nn&&(n=1);d=u(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=\nfunction(d,h){var n=l(d,\"HEAPF32\");this._addPoly(n,d.length/2,h);k(n,d);return this};a.Path.prototype.addRect=function(d,h){d=u(d);this._addRect(d,!!h);return this};a.Path.prototype.addRRect=function(d,h){d=F(d);this._addRRect(d,!!h);return this};a.Path.prototype.addVerbsPointsWeights=function(d,h,n){var t=l(d,\"HEAPU8\"),v=l(h,\"HEAPF32\"),z=l(n,\"HEAPF32\");this._addVerbsPointsWeights(t,d.length,v,h.length,z,n&&n.length||0);k(t,d);k(v,h);k(z,n)};a.Path.prototype.arc=function(d,h,n,t,v,z){d=a.LTRBRect(d-\nn,h-n,d+n,h+n);v=(v-t)/Math.PI*180-360*!!z;z=new a.Path;z.addArc(d,t/Math.PI*180,v);this.addPath(z,!0);z.delete();return this};a.Path.prototype.arcToOval=function(d,h,n,t){d=u(d);this._arcToOval(d,h,n,t);return this};a.Path.prototype.arcToRotated=function(d,h,n,t,v,z,E){this._arcToRotated(d,h,n,!!t,!!v,z,E);return this};a.Path.prototype.arcToTangent=function(d,h,n,t,v){this._arcToTangent(d,h,n,t,v);return this};a.Path.prototype.close=function(){this._close();return this};a.Path.prototype.conicTo=\nfunction(d,h,n,t,v){this._conicTo(d,h,n,t,v);return this};a.Path.prototype.computeTightBounds=function(d){this._computeTightBounds(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.cubicTo=function(d,h,n,t,v,z){this._cubicTo(d,h,n,t,v,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(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.lineTo=function(d,\nh){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,v,z,E){this._rArcTo(d,h,n,t,v,z,E);return this};a.Path.prototype.rConicTo=function(d,h,n,t,v){this._rConicTo(d,h,n,t,v);return this};a.Path.prototype.rCubicTo=function(d,h,n,t,v,z){this._rCubicTo(d,\nh,n,t,v,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===\narguments.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.he();d=d||a.ImageFormat.PNG;h=h||100;\nreturn n?this._encodeToBytes(d,h,n):this._encodeToBytes(d,h)};a.Image.prototype.makeShaderCubic=function(d,h,n,t,v){v=q(v);return this._makeShaderCubic(d,h,n,t,v)};a.Image.prototype.makeShaderOptions=function(d,h,n,t,v){v=q(v);return this._makeShaderOptions(d,h,n,t,v)};a.Image.prototype.readPixels=function(d,h,n,t,v){var z=a.he();return g(this,d,h,n,t,v,z)};a.Canvas.prototype.clear=function(d){a.Dd(this.Cd);d=y(d);this._clear(d)};a.Canvas.prototype.clipRRect=function(d,h,n){a.Dd(this.Cd);d=F(d);this._clipRRect(d,\nh,n)};a.Canvas.prototype.clipRect=function(d,h,n){a.Dd(this.Cd);d=u(d);this._clipRect(d,h,n)};a.Canvas.prototype.concat=function(d){a.Dd(this.Cd);d=w(d);this._concat(d)};a.Canvas.prototype.drawArc=function(d,h,n,t,v){a.Dd(this.Cd);d=u(d);this._drawArc(d,h,n,t,v)};a.Canvas.prototype.drawAtlas=function(d,h,n,t,v,z,E){if(d&&t&&h&&n&&h.length===n.length){a.Dd(this.Cd);v||(v=a.BlendMode.SrcOver);var J=l(h,\"HEAPF32\"),I=l(n,\"HEAPF32\"),U=n.length/4,V=l(c(z),\"HEAPU32\");if(E&&\"B\"in E&&\"C\"in E)this._drawAtlasCubic(d,\nI,J,V,U,v,E.B,E.C,t);else{let p=a.FilterMode.Linear,A=a.MipmapMode.None;E&&(p=E.filter,\"mipmap\"in E&&(A=E.mipmap));this._drawAtlasOptions(d,I,J,V,U,v,p,A,t)}k(J,h);k(I,n);k(V,z)}};a.Canvas.prototype.drawCircle=function(d,h,n,t){a.Dd(this.Cd);this._drawCircle(d,h,n,t)};a.Canvas.prototype.drawColor=function(d,h){a.Dd(this.Cd);d=y(d);void 0!==h?this._drawColor(d,h):this._drawColor(d)};a.Canvas.prototype.drawColorInt=function(d,h){a.Dd(this.Cd);this._drawColorInt(d,h||a.BlendMode.SrcOver)};a.Canvas.prototype.drawColorComponents=\nfunction(d,h,n,t,v){a.Dd(this.Cd);d=B(d,h,n,t);void 0!==v?this._drawColor(d,v):this._drawColor(d)};a.Canvas.prototype.drawDRRect=function(d,h,n){a.Dd(this.Cd);d=F(d,Eb);h=F(h,kc);this._drawDRRect(d,h,n)};a.Canvas.prototype.drawImage=function(d,h,n,t){a.Dd(this.Cd);this._drawImage(d,h,n,t||null)};a.Canvas.prototype.drawImageCubic=function(d,h,n,t,v,z){a.Dd(this.Cd);this._drawImageCubic(d,h,n,t,v,z||null)};a.Canvas.prototype.drawImageOptions=function(d,h,n,t,v,z){a.Dd(this.Cd);this._drawImageOptions(d,\nh,n,t,v,z||null)};a.Canvas.prototype.drawImageNine=function(d,h,n,t,v){a.Dd(this.Cd);h=l(h,\"HEAP32\",Sa);n=u(n);this._drawImageNine(d,h,n,t,v||null)};a.Canvas.prototype.drawImageRect=function(d,h,n,t,v){a.Dd(this.Cd);u(h,X);u(n,Ba);this._drawImageRect(d,X,Ba,t,!!v)};a.Canvas.prototype.drawImageRectCubic=function(d,h,n,t,v,z){a.Dd(this.Cd);u(h,X);u(n,Ba);this._drawImageRectCubic(d,X,Ba,t,v,z||null)};a.Canvas.prototype.drawImageRectOptions=function(d,h,n,t,v,z){a.Dd(this.Cd);u(h,X);u(n,Ba);this._drawImageRectOptions(d,\nX,Ba,t,v,z||null)};a.Canvas.prototype.drawLine=function(d,h,n,t,v){a.Dd(this.Cd);this._drawLine(d,h,n,t,v)};a.Canvas.prototype.drawOval=function(d,h){a.Dd(this.Cd);d=u(d);this._drawOval(d,h)};a.Canvas.prototype.drawPaint=function(d){a.Dd(this.Cd);this._drawPaint(d)};a.Canvas.prototype.drawParagraph=function(d,h,n){a.Dd(this.Cd);this._drawParagraph(d,h,n)};a.Canvas.prototype.drawPatch=function(d,h,n,t,v){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\";\na.Dd(this.Cd);const z=l(d,\"HEAPF32\"),E=h?l(c(h),\"HEAPU32\"):M,J=n?l(n,\"HEAPF32\"):M;t||(t=a.BlendMode.Modulate);this._drawPatch(z,E,J,t,v);k(J,n);k(E,h);k(z,d)};a.Canvas.prototype.drawPath=function(d,h){a.Dd(this.Cd);this._drawPath(d,h)};a.Canvas.prototype.drawPicture=function(d){a.Dd(this.Cd);this._drawPicture(d)};a.Canvas.prototype.drawPoints=function(d,h,n){a.Dd(this.Cd);var t=l(h,\"HEAPF32\");this._drawPoints(d,t,h.length/2,n);k(t,h)};a.Canvas.prototype.drawRRect=function(d,h){a.Dd(this.Cd);d=F(d);\nthis._drawRRect(d,h)};a.Canvas.prototype.drawRect=function(d,h){a.Dd(this.Cd);d=u(d);this._drawRect(d,h)};a.Canvas.prototype.drawRect4f=function(d,h,n,t,v){a.Dd(this.Cd);this._drawRect4f(d,h,n,t,v)};a.Canvas.prototype.drawShadow=function(d,h,n,t,v,z,E){a.Dd(this.Cd);var J=l(v,\"HEAPF32\"),I=l(z,\"HEAPF32\");h=l(h,\"HEAPF32\",Fb);n=l(n,\"HEAPF32\",Gb);this._drawShadow(d,h,n,t,J,I,E);k(J,v);k(I,z)};a.getShadowLocalBounds=function(d,h,n,t,v,z,E){d=q(d);n=l(n,\"HEAPF32\",Fb);t=l(t,\"HEAPF32\",Gb);if(!this._getShadowLocalBounds(d,\nh,n,t,v,z,X))return null;h=na.toTypedArray();return E?(E.set(h),E):h.slice()};a.Canvas.prototype.drawTextBlob=function(d,h,n,t){a.Dd(this.Cd);this._drawTextBlob(d,h,n,t)};a.Canvas.prototype.drawVertices=function(d,h,n){a.Dd(this.Cd);this._drawVertices(d,h,n)};a.Canvas.prototype.getDeviceClipBounds=function(d){this._getDeviceClipBounds(Sa);var h=hb.toTypedArray();d?d.set(h):d=h.slice();return d};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(ca);for(var d=ca,h=Array(16),n=0;16>\nn;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.Cd=this.Cd;return d};a.Canvas.prototype.readPixels=function(d,h,n,t,v){a.Dd(this.Cd);return g(this,d,h,n,t,v)};a.Canvas.prototype.saveLayer=function(d,h,n,t){h=u(h);return this._saveLayer(d||null,h,n||null,t||0)};a.Canvas.prototype.writePixels=function(d,h,n,t,v,\nz,E,J){if(d.byteLength%(h*n))throw\"pixels length must be a multiple of the srcWidth * srcHeight\";a.Dd(this.Cd);var I=d.byteLength/(h*n);z=z||a.AlphaType.Unpremul;E=E||a.ColorType.RGBA_8888;J=J||a.ColorSpace.SRGB;var U=I*h;I=l(d,\"HEAPU8\");h=this._writePixels({width:h,height:n,colorType:E,alphaType:z,colorSpace:J},I,U,t,v);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\";\nvar h=l(d,\"HEAPF32\"),n=a.ColorFilter._makeMatrix(h);k(h,d);return n};a.ContourMeasure.prototype.getPosTan=function(d,h){this._getPosTan(d,X);d=na.toTypedArray();return h?(h.set(d),h):d.slice()};a.ImageFilter.prototype.getOutputBounds=function(d,h,n){d=u(d,X);h=q(h);this._getOutputBounds(d,h,Sa);h=hb.toTypedArray();return n?(n.set(h),n):h.slice()};a.ImageFilter.MakeDropShadow=function(d,h,n,t,v,z){v=y(v,va);return a.ImageFilter._MakeDropShadow(d,h,n,t,v,z)};a.ImageFilter.MakeDropShadowOnly=function(d,\nh,n,t,v,z){v=y(v,va);return a.ImageFilter._MakeDropShadowOnly(d,h,n,t,v,z)};a.ImageFilter.MakeImage=function(d,h,n,t){n=u(n,X);t=u(t,Ba);if(\"B\"in h&&\"C\"in h)return a.ImageFilter._MakeImageCubic(d,h.B,h.C,n,t);const v=h.filter;let z=a.MipmapMode.None;\"mipmap\"in h&&(z=h.mipmap);return a.ImageFilter._MakeImageOptions(d,v,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 v=a.MipmapMode.None;\n\"mipmap\"in h&&(v=h.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(d,t,v,n)};a.Paint.prototype.getColor=function(){this._getColor(va);return D(va)};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,v){v=v||null;d=B(d,h,n,t);this._setColor(d,v)};a.Path.prototype.getPoint=function(d,h){this._getPoint(d,X);d=na.toTypedArray();return h?(h[0]=d[0],h[1]=d[1],h):d.slice(0,2)};a.Picture.prototype.makeShader=function(d,\nh,n,t,v){t=q(t);v=u(v);return this._makeShader(d,h,n,t,v)};a.Picture.prototype.cullRect=function(d){this._cullRect(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.PictureRecorder.prototype.beginRecording=function(d,h){d=u(d);return this._beginRecording(d,!!h)};a.Surface.prototype.getCanvas=function(){var d=this._getCanvas();d.Cd=this.Cd;return d};a.Surface.prototype.makeImageSnapshot=function(d){a.Dd(this.Cd);d=l(d,\"HEAP32\",Sa);return this._makeImageSnapshot(d)};a.Surface.prototype.makeSurface=\nfunction(d){a.Dd(this.Cd);d=this._makeSurface(d);d.Cd=this.Cd;return d};a.Surface.prototype.Ne=function(d,h){this.ae||(this.ae=this.getCanvas());return requestAnimationFrame(function(){a.Dd(this.Cd);d(this.ae);this.flush(h)}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=a.Surface.prototype.Ne);a.Surface.prototype.Ke=function(d,h){this.ae||(this.ae=this.getCanvas());requestAnimationFrame(function(){a.Dd(this.Cd);d(this.ae);this.flush(h);this.dispose()}.bind(this))};\na.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Ke);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=l(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,\nh)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(d,h,n,t,v,z,E,J){J=J||null;var I=m(n),U=l(t,\"HEAPF32\");E=E||0;z=q(z);var V=na.toTypedArray();V.set(d);V.set(h,2);d=a.Shader._MakeLinearGradient(X,I.Ld,I.colorType,U,I.count,v,E,z,J);k(I.Ld,n);t&&k(U,t);return d};a.Shader.MakeRadialGradient=function(d,h,n,t,v,z,E,J){J=J||null;var I=m(n),U=l(t,\"HEAPF32\");E=E||0;z=q(z);d=a.Shader._MakeRadialGradient(d[0],d[1],h,I.Ld,I.colorType,U,I.count,v,E,\nz,J);k(I.Ld,n);t&&k(U,t);return d};a.Shader.MakeSweepGradient=function(d,h,n,t,v,z,E,J,I,U){U=U||null;var V=m(n),p=l(t,\"HEAPF32\");E=E||0;J=J||0;I=I||360;z=q(z);d=a.Shader._MakeSweepGradient(d,h,V.Ld,V.colorType,p,V.count,v,J,I,E,z,U);k(V.Ld,n);t&&k(p,t);return d};a.Shader.MakeTwoPointConicalGradient=function(d,h,n,t,v,z,E,J,I,U){U=U||null;var V=m(v),p=l(z,\"HEAPF32\");I=I||0;J=q(J);var A=na.toTypedArray();A.set(d);A.set(n,2);d=a.Shader._MakeTwoPointConicalGradient(X,h,t,V.Ld,V.colorType,p,V.count,E,\nI,J,U);k(V.Ld,v);z&&k(p,z);return d};a.Vertices.prototype.bounds=function(d){this._bounds(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.Gd&&a.Gd.forEach(function(d){d()})};a.computeTonalColors=function(g){var d=l(g.ambient,\"HEAPF32\"),h=l(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=\nfunction(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))?\ng:null};var Ta=null;a.MakeImageFromCanvasImageSource=function(g){var d=g.width,h=g.height;Ta||(Ta=document.createElement(\"canvas\"));Ta.width=d;Ta.height=h;var n=Ta.getContext(\"2d\",{willReadFrequently:!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)};\na.MakeVertices=function(g,d,h,n,t,v){var z=t&&t.length||0,E=0;h&&h.length&&(E|=1);n&&n.length&&(E|=2);void 0===v||v||(E|=4);g=new a._VerticesBuilder(g,d.length/2,z,E);l(d,\"HEAPF32\",g.positions());g.texCoords()&&l(h,\"HEAPF32\",g.texCoords());g.colors()&&l(c(n),\"HEAPU32\",g.colors());g.indices()&&l(t,\"HEAPU16\",g.indices());return g.detach()};(function(g){g.Gd=g.Gd||[];g.Gd.push(function(){function d(p){p&&(p.dir=0===p.dir?g.TextDirection.RTL:g.TextDirection.LTR);return p}function h(p){if(!p||!p.length)return[];\nfor(var A=[],O=0;O<p.length;O+=5){var Z=g.LTRBRect(p[O],p[O+1],p[O+2],p[O+3]),za=g.TextDirection.LTR;0===p[O+4]&&(za=g.TextDirection.RTL);A.push({rect:Z,dir:za})}g._free(p.byteOffset);return A}function n(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 t(p){if(!p||!p.length)return M;for(var A=[],O=0;O<p.length;O++){var Z=v(p[O]);A.push(Z)}return l(A,\"HEAPU32\")}function v(p){if(J[p])return J[p];var A=\nja(p)+1,O=g._malloc(A);ka(p,C,O,A);return J[p]=O}function z(p){p._colorPtr=y(p.color);p._foregroundColorPtr=M;p._backgroundColorPtr=M;p._decorationColorPtr=M;p.foregroundColor&&(p._foregroundColorPtr=y(p.foregroundColor,I));p.backgroundColor&&(p._backgroundColorPtr=y(p.backgroundColor,U));p.decorationColor&&(p._decorationColorPtr=y(p.decorationColor,V));Array.isArray(p.fontFamilies)&&p.fontFamilies.length?(p._fontFamiliesPtr=t(p.fontFamilies),p._fontFamiliesLen=p.fontFamilies.length):(p._fontFamiliesPtr=\nM,p._fontFamiliesLen=0);if(p.locale){var A=p.locale;p._localePtr=v(A);p._localeLen=ja(A)}else p._localePtr=M,p._localeLen=0;if(Array.isArray(p.shadows)&&p.shadows.length){A=p.shadows;var O=A.map(function(qa){return qa.color||g.BLACK}),Z=A.map(function(qa){return qa.blurRadius||0});p._shadowLen=A.length;for(var za=g._malloc(8*A.length),Hb=za/4,Ib=0;Ib<A.length;Ib++){var lc=A[Ib].offset||[0,0];g.HEAPF32[Hb]=lc[0];g.HEAPF32[Hb+1]=lc[1];Hb+=2}p._shadowColorsPtr=m(O).Ld;p._shadowOffsetsPtr=za;p._shadowBlurRadiiPtr=\nl(Z,\"HEAPF32\")}else p._shadowLen=0,p._shadowColorsPtr=M,p._shadowOffsetsPtr=M,p._shadowBlurRadiiPtr=M;Array.isArray(p.fontFeatures)&&p.fontFeatures.length?(A=p.fontFeatures,O=A.map(function(qa){return qa.name}),Z=A.map(function(qa){return qa.value}),p._fontFeatureLen=A.length,p._fontFeatureNamesPtr=t(O),p._fontFeatureValuesPtr=l(Z,\"HEAPU32\")):(p._fontFeatureLen=0,p._fontFeatureNamesPtr=M,p._fontFeatureValuesPtr=M);Array.isArray(p.fontVariations)&&p.fontVariations.length?(A=p.fontVariations,O=A.map(function(qa){return qa.axis}),\nZ=A.map(function(qa){return qa.value}),p._fontVariationLen=A.length,p._fontVariationAxesPtr=t(O),p._fontVariationValuesPtr=l(Z,\"HEAPF32\")):(p._fontVariationLen=0,p._fontVariationAxesPtr=M,p._fontVariationValuesPtr=M)}function E(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=\nfunction(p,A,O,Z){p=this._getRectsForRange(p,A,O,Z);return h(p)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var p=this._getRectsForPlaceholders();return h(p)};g.Paragraph.prototype.getGlyphInfoAt=function(p){return d(this._getGlyphInfoAt(p))};g.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(p,A){return d(this._getClosestGlyphInfoAtCoordinate(p,A))};g.TypefaceFontProvider.prototype.registerFont=function(p,A){p=g.Typeface.MakeTypefaceFromData(p);if(!p)return null;A=v(A);\nthis._registerFont(p,A)};g.ParagraphStyle=function(p){p.disableHinting=p.disableHinting||!1;if(p.ellipsis){var A=p.ellipsis;p._ellipsisPtr=v(A);p._ellipsisLen=ja(A)}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=t(A.fontFamilies),A._fontFamiliesLen=\nA.fontFamilies.length):(A._fontFamiliesPtr=M,A._fontFamiliesLen=0);A.fontStyle=n(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=\n!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=n(p.fontStyle);return p};var J=\n{},I=g._malloc(16),U=g._malloc(16),V=g._malloc(16);g.ParagraphBuilder.Make=function(p,A){z(p.textStyle);A=g.ParagraphBuilder._Make(p,A);E(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontProvider=function(p,A){z(p.textStyle);A=g.ParagraphBuilder._MakeFromFontProvider(p,A);E(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontCollection=function(p,A){z(p.textStyle);A=g.ParagraphBuilder._MakeFromFontCollection(p,A);E(p.textStyle);return A};g.ParagraphBuilder.ShapeText=function(p,A,O){let Z=0;\nfor(const za of A)Z+=za.length;if(Z!==p.length)throw\"Accumulated block lengths must equal text.length\";return g.ParagraphBuilder._ShapeText(p,A,O)};g.ParagraphBuilder.prototype.pushStyle=function(p){z(p);this._pushStyle(p);E(p)};g.ParagraphBuilder.prototype.pushPaintStyle=function(p,A,O){z(p);this._pushPaintStyle(p,A,O);E(p)};g.ParagraphBuilder.prototype.addPlaceholder=function(p,A,O,Z,za){O=O||g.PlaceholderAlignment.Baseline;Z=Z||g.TextBaseline.Alphabetic;this._addPlaceholder(p||0,A||0,O,Z,za||0)};\ng.ParagraphBuilder.prototype.setWordsUtf8=function(p){var A=l(p,\"HEAPU32\");this._setWordsUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setWordsUtf16=function(p){var A=l(p,\"HEAPU32\");this._setWordsUtf16(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf8=function(p){var A=l(p,\"HEAPU32\");this._setGraphemeBreaksUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setGraphemeBreaksUtf16=function(p){var A=l(p,\"HEAPU32\");this._setGraphemeBreaksUtf16(A,p&&p.length||\n0);k(A,p)};g.ParagraphBuilder.prototype.setLineBreaksUtf8=function(p){var A=l(p,\"HEAPU32\");this._setLineBreaksUtf8(A,p&&p.length||0);k(A,p)};g.ParagraphBuilder.prototype.setLineBreaksUtf16=function(p){var A=l(p,\"HEAPU32\");this._setLineBreaksUtf16(A,p&&p.length||0);k(A,p)}})})(r);a.Gd=a.Gd||[];a.Gd.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.Gd=a.Gd||[];a.Gd.push(function(){a.Canvas.prototype.drawText=\nfunction(g,d,h,n,t){var v=ja(g),z=a._malloc(v+1);ka(g,C,z,v+1);this._drawSimpleText(z,v,d,h,t,n);a._free(z)};a.Canvas.prototype.drawGlyphs=function(g,d,h,n,t,v){if(!(2*g.length<=d.length))throw\"Not enough positions for the array of gyphs\";a.Dd(this.Cd);const z=l(g,\"HEAPU16\"),E=l(d,\"HEAPF32\");this._drawGlyphs(g.length,z,E,h,n,t,v);k(E,d);k(z,g)};a.Font.prototype.getGlyphBounds=function(g,d,h){var n=l(g,\"HEAPU16\"),t=a._malloc(16*g.length);this._getGlyphWidthBounds(n,g.length,M,t,d||null);d=new Float32Array(a.HEAPU8.buffer,\nt,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=l(g,\"HEAPU16\"),v=l(d,\"HEAPF32\");return this._getGlyphIntercepts(t,\ng.length,!(g&&g._ck),v,d.length,!(d&&d._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,d,h){var n=l(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=\n0;n<g.length;n++){var t=new Uint8Array(g[n]),v=l(t,\"HEAPU8\");d.push(v);h.push(t.byteLength)}d=l(d,\"HEAPU32\");h=l(h,\"HEAPU32\");g=a.FontMgr._fromData(d,h,g.length);a._free(d);a._free(h);return g};a.Typeface.MakeTypefaceFromData=function(g){g=new Uint8Array(g);var d=l(g,\"HEAPU8\");return(g=a.Typeface._MakeTypefaceFromData(d,g.byteLength))?g:null};a.Typeface.MakeFreeTypeFaceFromData=a.Typeface.MakeTypefaceFromData;a.Typeface.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);\nka(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 v=[];d=new a.ContourMeasureIter(d,!1,1);for(var z=d.next(),E=new Float32Array(4),J=0;J<g.length&&\nz;J++){var I=t[J];n+=I/2;if(n>z.length()){z.delete();z=d.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];v.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,v,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=l(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=l(g,\"HEAPU16\");d=l(d,\"HEAPF32\");\nh=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,d,h);k(n,g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,d){var h=l(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.Gd=a.Gd||[];a.Gd.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var d=\na._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._MakePicture(d,g.byteLength))?g:null}});a.Gd=a.Gd||[];a.Gd.push(function(){a.RuntimeEffect.Make=function(g,d){return a.RuntimeEffect._Make(g,{onError:d||function(h){console.log(\"RuntimeEffect error\",h)}})};a.RuntimeEffect.MakeForBlender=function(g,d){return a.RuntimeEffect._MakeForBlender(g,{onError:d||function(h){console.log(\"RuntimeEffect error\",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,d){var h=!g._ck,n=l(g,\"HEAPF32\");d=q(d);return this._makeShader(n,\n4*g.length,h,d)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(g,d,h){var n=!g._ck,t=l(g,\"HEAPF32\");h=q(h);for(var v=[],z=0;z<d.length;z++)v.push(d[z].jd.Ed);d=l(v,\"HEAPU32\");return this._makeShaderWithChildren(t,4*g.length,n,d,v.length,h)};a.RuntimeEffect.prototype.makeBlender=function(g){var d=!g._ck,h=l(g,\"HEAPF32\");return this._makeBlender(h,4*g.length,d)}})})(r);\nvar la=Object.assign({},r),ma=\"./this.program\",oa=(a,b)=>{throw b;},pa=\"object\"==typeof window,ra=\"function\"==typeof importScripts,sa=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,ta=\"\",ua,wa,xa;\nif(sa){var fs=require(\"fs\"),ya=require(\"path\");ta=ra?ya.dirname(ta)+\"/\":__dirname+\"/\";ua=(a,b)=>{a=a.startsWith(\"file://\")?new URL(a):ya.normalize(a);return fs.readFileSync(a,b?void 0:\"utf8\")};xa=a=>{a=ua(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c,e=!0)=>{a=a.startsWith(\"file://\")?new URL(a):ya.normalize(a);fs.readFile(a,e?void 0:\"utf8\",(f,k)=>{f?c(f):b(e?k.buffer:k)})};!r.thisProgram&&1<process.argv.length&&(ma=process.argv[1].replace(/\\\\/g,\"/\"));process.argv.slice(2);oa=(a,b)=>{process.exitCode=\na;throw b;};r.inspect=()=>\"[Emscripten Module object]\"}else if(pa||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=\"\",ua=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText},ra&&(xa=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}),\nwa=(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 Aa=r.print||console.log.bind(console),Ca=r.printErr||console.error.bind(console);Object.assign(r,la);la=null;r.thisProgram&&(ma=r.thisProgram);r.quit&&(oa=r.quit);var Da;r.wasmBinary&&(Da=r.wasmBinary);var noExitRuntime=r.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&Ea(\"no native wasm support detected\");\nvar Fa,G,Ga=!1,Ha,C,Ia,Ja,K,L,N,Ka;function La(){var a=Fa.buffer;r.HEAP8=Ha=new Int8Array(a);r.HEAP16=Ia=new Int16Array(a);r.HEAP32=K=new Int32Array(a);r.HEAPU8=C=new Uint8Array(a);r.HEAPU16=Ja=new Uint16Array(a);r.HEAPU32=L=new Uint32Array(a);r.HEAPF32=N=new Float32Array(a);r.HEAPF64=Ka=new Float64Array(a)}var Na,Oa=[],Pa=[],Qa=[];function Ra(){var a=r.preRun.shift();Oa.unshift(a)}var Ua=0,Va=null,Wa=null;\nfunction Ea(a){if(r.onAbort)r.onAbort(a);a=\"Aborted(\"+a+\")\";Ca(a);Ga=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ba(a);throw a;}function Xa(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var Ya;Ya=\"canvaskit.wasm\";if(!Xa(Ya)){var Za=Ya;Ya=r.locateFile?r.locateFile(Za,ta):ta+Za}function $a(a){if(a==Ya&&Da)return new Uint8Array(Da);if(xa)return xa(a);throw\"both async and sync fetching of the wasm failed\";}\nfunction ab(a){if(!Da&&(pa||ra)){if(\"function\"==typeof fetch&&!a.startsWith(\"file://\"))return fetch(a,{credentials:\"same-origin\"}).then(b=>{if(!b.ok)throw\"failed to load wasm binary file at '\"+a+\"'\";return b.arrayBuffer()}).catch(()=>$a(a));if(wa)return new Promise((b,c)=>{wa(a,e=>b(new Uint8Array(e)),c)})}return Promise.resolve().then(()=>$a(a))}function bb(a,b,c){return ab(a).then(e=>WebAssembly.instantiate(e,b)).then(e=>e).then(c,e=>{Ca(\"failed to asynchronously prepare wasm: \"+e);Ea(e)})}\nfunction cb(a,b){var c=Ya;return Da||\"function\"!=typeof WebAssembly.instantiateStreaming||Xa(c)||c.startsWith(\"file://\")||sa||\"function\"!=typeof fetch?bb(c,a,b):fetch(c,{credentials:\"same-origin\"}).then(e=>WebAssembly.instantiateStreaming(e,a).then(b,function(f){Ca(\"wasm streaming compile failed: \"+f);Ca(\"falling back to ArrayBuffer instantiation\");return bb(c,a,b)}))}function db(a){this.name=\"ExitStatus\";this.message=`Program terminated with exit(${a})`;this.status=a}var eb=a=>{for(;0<a.length;)a.shift()(r)};\nfunction fb(a){this.Ed=a-24;this.Ie=function(b){L[this.Ed+4>>2]=b};this.qe=function(b){L[this.Ed+8>>2]=b};this.Td=function(b,c){this.pe();this.Ie(b);this.qe(c)};this.pe=function(){L[this.Ed+16>>2]=0}}\nvar gb=0,ib=0,jb=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,kb=(a,b,c)=>{var e=b+c;for(c=b;a[c]&&!(c>=e);)++c;if(16<c-b&&a.buffer&&jb)return jb.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 l=a[b++]&63;f=224==(f&240)?(f&15)<<12|k<<6|l:(f&7)<<18|k<<12|l<<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},\nlb={};function mb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function nb(a){return this.fromWireType(K[a>>2])}var ob={},pb={},qb={},rb=void 0;function sb(a){throw new rb(a);}\nfunction tb(a,b,c){function e(m){m=c(m);m.length!==a.length&&sb(\"Mismatched type converter count\");for(var q=0;q<a.length;++q)ub(a[q],m[q])}a.forEach(function(m){qb[m]=b});var f=Array(b.length),k=[],l=0;b.forEach((m,q)=>{pb.hasOwnProperty(m)?f[q]=pb[m]:(k.push(m),ob.hasOwnProperty(m)||(ob[m]=[]),ob[m].push(()=>{f[q]=pb[m];++l;l===k.length&&e(f)}))});0===k.length&&e(f)}\nfunction vb(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 wb=void 0;function P(a){for(var b=\"\";C[a];)b+=wb[C[a++]];return b}var xb=void 0;function Q(a){throw new xb(a);}\nfunction yb(a,b,c={}){var e=b.name;a||Q(`type \"${e}\" must have a positive integer typeid pointer`);if(pb.hasOwnProperty(a)){if(c.$e)return;Q(`Cannot register type '${e}' twice`)}pb[a]=b;delete qb[a];ob.hasOwnProperty(a)&&(b=ob[a],delete ob[a],b.forEach(f=>f()))}function ub(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");yb(a,b,c)}function zb(a){Q(a.jd.Hd.Fd.name+\" instance already deleted\")}var Ab=!1;function Bb(){}\nfunction Cb(a){--a.count.value;0===a.count.value&&(a.Jd?a.Nd.Rd(a.Jd):a.Hd.Fd.Rd(a.Ed))}function Db(a,b,c){if(b===c)return a;if(void 0===c.Kd)return null;a=Db(a,b,c.Kd);return null===a?null:c.Se(a)}var Jb={},Kb=[];function Lb(){for(;Kb.length;){var a=Kb.pop();a.jd.Zd=!1;a[\"delete\"]()}}var Mb=void 0,Nb={};function Ob(a,b){for(void 0===b&&Q(\"ptr should not be undefined\");a.Kd;)b=a.ee(b),a=a.Kd;return Nb[b]}\nfunction Pb(a,b){b.Hd&&b.Ed||sb(\"makeClassHandle requires ptr and ptrType\");!!b.Nd!==!!b.Jd&&sb(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return Qb(Object.create(a,{jd:{value:b}}))}function Qb(a){if(\"undefined\"===typeof FinalizationRegistry)return Qb=b=>b,a;Ab=new FinalizationRegistry(b=>{Cb(b.jd)});Qb=b=>{var c=b.jd;c.Jd&&Ab.register(b,{jd:c},b);return b};Bb=b=>{Ab.unregister(b)};return Qb(a)}function Rb(){}\nfunction Sb(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 Tb(a,b){a=Sb(a);return{[a]:function(){return b.apply(this,arguments)}}[a]}\nfunction Ub(a,b,c){if(void 0===a[b].Id){var e=a[b];a[b]=function(){a[b].Id.hasOwnProperty(arguments.length)||Q(`Function '${c}' called with an invalid number of arguments (${arguments.length}) - expects one of (${a[b].Id})!`);return a[b].Id[arguments.length].apply(this,arguments)};a[b].Id=[];a[b].Id[e.Xd]=e}}\nfunction Vb(a,b,c){r.hasOwnProperty(a)?((void 0===c||void 0!==r[a].Id&&void 0!==r[a].Id[c])&&Q(`Cannot register public name '${a}' twice`),Ub(r,a,a),r.hasOwnProperty(c)&&Q(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`),r[a].Id[c]=b):(r[a]=b,void 0!==c&&(r[a].rf=c))}function Wb(a,b,c,e,f,k,l,m){this.name=a;this.constructor=b;this.$d=c;this.Rd=e;this.Kd=f;this.Ve=k;this.ee=l;this.Se=m;this.df=[]}\nfunction Xb(a,b,c){for(;b!==c;)b.ee||Q(`Expected null or instance of ${c.name}, got an instance of ${b.name}`),a=b.ee(a),b=b.Kd;return a}function Yb(a,b){if(null===b)return this.ue&&Q(`null is not a valid ${this.name}`),0;b.jd||Q(`Cannot pass \"${Zb(b)}\" as a ${this.name}`);b.jd.Ed||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);return Xb(b.jd.Ed,b.jd.Hd.Fd,this.Fd)}\nfunction $b(a,b){if(null===b){this.ue&&Q(`null is not a valid ${this.name}`);if(this.je){var c=this.ve();null!==a&&a.push(this.Rd,c);return c}return 0}b.jd||Q(`Cannot pass \"${Zb(b)}\" as a ${this.name}`);b.jd.Ed||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);!this.ie&&b.jd.Hd.ie&&Q(`Cannot convert argument of type ${b.jd.Nd?b.jd.Nd.name:b.jd.Hd.name} to parameter type ${this.name}`);c=Xb(b.jd.Ed,b.jd.Hd.Fd,this.Fd);if(this.je)switch(void 0===b.jd.Jd&&Q(\"Passing raw pointer to smart pointer is illegal\"),\nthis.jf){case 0:b.jd.Nd===this?c=b.jd.Jd:Q(`Cannot convert argument of type ${b.jd.Nd?b.jd.Nd.name:b.jd.Hd.name} to parameter type ${this.name}`);break;case 1:c=b.jd.Jd;break;case 2:if(b.jd.Nd===this)c=b.jd.Jd;else{var e=b.clone();c=this.ef(c,ac(function(){e[\"delete\"]()}));null!==a&&a.push(this.Rd,c)}break;default:Q(\"Unsupporting sharing policy\")}return c}\nfunction bc(a,b){if(null===b)return this.ue&&Q(`null is not a valid ${this.name}`),0;b.jd||Q(`Cannot pass \"${Zb(b)}\" as a ${this.name}`);b.jd.Ed||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);b.jd.Hd.ie&&Q(`Cannot convert argument of type ${b.jd.Hd.name} to parameter type ${this.name}`);return Xb(b.jd.Ed,b.jd.Hd.Fd,this.Fd)}\nfunction cc(a,b,c,e,f,k,l,m,q,w,y){this.name=a;this.Fd=b;this.ue=c;this.ie=e;this.je=f;this.cf=k;this.jf=l;this.Ee=m;this.ve=q;this.ef=w;this.Rd=y;f||void 0!==b.Kd?this.toWireType=$b:(this.toWireType=e?Yb:bc,this.Md=null)}function dc(a,b,c){r.hasOwnProperty(a)||sb(\"Replacing nonexistant public symbol\");void 0!==r[a].Id&&void 0!==c?r[a].Id[c]=b:(r[a]=b,r[a].Xd=c)}\nvar 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=Na.get(b).apply(null,c);return e}};function mc(a,b){a=P(a);var c=a.includes(\"j\")?ec(a,b):Na.get(b);\"function\"!=typeof c&&Q(`unknown function pointer with signature ${a}: ${b}`);return c}var nc=void 0;function oc(a){a=pc(a);var b=P(a);qc(a);return b}\nfunction rc(a,b){function c(k){f[k]||pb[k]||(qb[k]?qb[k].forEach(c):(e.push(k),f[k]=!0))}var e=[],f={};b.forEach(c);throw new nc(`${a}: `+e.map(oc).join([\", \"]));}\nfunction sc(a,b,c,e,f){var k=b.length;2>k&&Q(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var l=null!==b[1]&&null!==c,m=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].Md){m=!0;break}var q=\"void\"!==b[0].name,w=k-2,y=Array(w),B=[],D=[];return function(){arguments.length!==w&&Q(`function ${a} called with ${arguments.length} arguments, expected ${w} args!`);D.length=0;B.length=l?2:1;B[0]=f;if(l){var u=b[1].toWireType(D,this);B[1]=u}for(var F=0;F<w;++F)y[F]=\nb[F+2].toWireType(D,arguments[F]),B.push(y[F]);F=e.apply(null,B);if(m)mb(D);else for(var H=l?1:2;H<b.length;H++){var T=1===H?u:y[H-2];null!==b[H].Md&&b[H].Md(T)}u=q?b[0].fromWireType(F):void 0;return u}}function tc(a,b){for(var c=[],e=0;e<a;e++)c.push(L[b+4*e>>2]);return c}function uc(){this.Qd=[void 0];this.Ce=[]}var vc=new uc;function wc(a){a>=vc.Td&&0===--vc.get(a).Fe&&vc.qe(a)}\nvar xc=a=>{a||Q(\"Cannot use deleted val. handle = \"+a);return vc.get(a).value},ac=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:return vc.pe({Fe:1,value:a})}};function yc(a,b,c){switch(b){case 0:return function(e){return this.fromWireType((c?Ha:C)[e])};case 1:return function(e){return this.fromWireType((c?Ia:Ja)[e>>1])};case 2:return function(e){return this.fromWireType((c?K:L)[e>>2])};default:throw new TypeError(\"Unknown integer type: \"+a);}}\nfunction zc(a,b){var c=pb[a];void 0===c&&Q(b+\" has unknown type \"+oc(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 Ac(a,b){switch(b){case 2:return function(c){return this.fromWireType(N[c>>2])};case 3:return function(c){return this.fromWireType(Ka[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction Bc(a,b,c){switch(b){case 0:return c?function(e){return Ha[e]}:function(e){return C[e]};case 1:return c?function(e){return Ia[e>>1]}:function(e){return Ja[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return L[e>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}\nvar 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 l=a.charCodeAt(k);if(55296<=l&&57343>=l){var m=a.charCodeAt(++k);l=65536+((l&1023)<<10)|m&1023}if(127>=l){if(c>=e)break;b[c++]=l}else{if(2047>=l){if(c+1>=e)break;b[c++]=192|l>>6}else{if(65535>=l){if(c+2>=e)break;b[c++]=224|l>>12}else{if(c+3>=e)break;b[c++]=240|l>>18;b[c++]=128|l>>12&63}b[c++]=128|l>>6&63}b[c++]=128|l&63}}b[c]=0;return c-f},ja=a=>{for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);127>=e?b++:2047>=\ne?b+=2:55296<=e&&57343>=e?(b+=4,++c):b+=3}return b},Cc=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-16le\"):void 0,Dc=(a,b)=>{var c=a>>1;for(var e=c+b/2;!(c>=e)&&Ja[c];)++c;c<<=1;if(32<c-a&&Cc)return Cc.decode(C.subarray(a,c));c=\"\";for(e=0;!(e>=b/2);++e){var f=Ia[a+2*e>>1];if(0==f)break;c+=String.fromCharCode(f)}return c},Ec=(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)Ia[b>>1]=a.charCodeAt(f),b+=2;Ia[b>>1]=0;return b-e},\nFc=a=>2*a.length,Gc=(a,b)=>{for(var c=0,e=\"\";!(c>=b/4);){var f=K[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},Hc=(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 l=a.charCodeAt(++f);k=65536+((k&1023)<<10)|l&1023}K[b>>2]=k;b+=4;if(b+4>c)break}K[b>>2]=0;return b-e},Ic=a=>{for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);\n55296<=e&&57343>=e&&++c;b+=4}return b},Jc={};function Kc(a){var b=Jc[a];return void 0===b?P(a):b}var Lc=[];\nfunction Mc(){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.\");\n}function Nc(a){var b=Lc.length;Lc.push(a);return b}function Oc(a,b){for(var c=Array(a),e=0;e<a;++e)c[e]=zc(L[b+4*e>>2],\"parameter \"+e);return c}var Pc=[];function Qc(a){var b=Array(a+1);return function(c,e,f){b[0]=c;for(var k=0;k<a;++k){var l=zc(L[e+4*k>>2],\"parameter \"+k);b[k+1]=l.readValueFromPointer(f);f+=l.argPackAdvance}c=new (c.bind.apply(c,b));return ac(c)}}var Rc={};\nfunction 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,l){b.drawElementsInstancedANGLE(c,e,f,k,l)})}\nfunction 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)})}\nvar Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],dd={},ed={},gd=4;function R(a){hd||(hd=a)}function da(a){for(var b=Vc++,c=a.length;c<b;c++)a[c]=null;return b}function fa(a,b){a.Td||(a.Td=a.getContext,a.getContext=function(e,f){f=a.Td(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}\nfunction jd(a,b){var c=da(ia),e={handle:c,attributes:b,version:b.majorVersion,Od:a};a.canvas&&(a.canvas.Je=e);ia[c]=e;(\"undefined\"==typeof b.Te||b.Te)&&kd(e);return c}function ha(a){x=ia[a];r.pf=S=x&&x.Od;return!(a&&!S)}\nfunction kd(a){a||(a=x);if(!a.af){a.af=!0;var b=a.Od;Sc(b);Tc(b);Uc(b);b.ze=b.getExtension(\"WEBGL_draw_instanced_base_vertex_base_instance\");b.De=b.getExtension(\"WEBGL_multi_draw_instanced_base_vertex_base_instance\");2<=a.version&&(b.Ae=b.getExtension(\"EXT_disjoint_timer_query_webgl2\"));if(2>a.version||!b.Ae)b.Ae=b.getExtension(\"EXT_disjoint_timer_query\");b.qf=b.getExtension(\"WEBGL_multi_draw\");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes(\"lose_context\")||c.includes(\"debug\")||b.getExtension(c)})}}\nvar x,hd,ld={},nd=()=>{if(!md){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\",_:ma||\"./this.program\"},b;for(b in ld)void 0===ld[b]?delete a[b]:a[b]=ld[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);md=c}return md},md,od=[null,[],[]];function pd(a){S.bindVertexArray(ad[a])}\nfunction qd(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2];S.deleteVertexArray(ad[e]);ad[e]=null}}var rd=[];function sd(a,b,c,e){S.drawElements(a,b,c,e)}function td(a,b,c,e){for(var f=0;f<a;f++){var k=S[c](),l=k&&da(e);k?(k.name=l,e[l]=k):R(1282);K[b+4*f>>2]=l}}function ud(a,b){td(a,b,\"createVertexArray\",ad)}\nfunction vd(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=S.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>x.version){R(1282);return}e=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>x.version){R(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=S.getParameter(a),typeof f){case \"number\":e=f;break;case \"boolean\":e=f?1:0;break;case \"string\":R(1280);return;case \"object\":if(null===\nf)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:R(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:K[b+4*a>>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ha[b+a>>0]=f[a]?1:0}return}try{e=f.name|0}catch(k){R(1280);\nCa(\"GL_INVALID_ENUM in glGet\"+c+\"v: Unknown object returned from WebGL getParameter(\"+a+\")! (error: \"+k+\")\");return}}break;default:R(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;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=e;break;case 2:N[b>>2]=e;break;case 4:Ha[b>>0]=e?1:0}}else R(1281)}var xd=a=>{var b=ja(a)+1,c=wd(b);c&&ka(a,C,c,b);return c};\nfunction yd(a){return\"]\"==a.slice(-1)&&a.lastIndexOf(\"[\")}function zd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function Ad(a,b,c,e,f){a=zd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=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)+l-1&-l)>>k)}\nfunction W(a){var b=S.Qe;if(b){var c=b.de[a];\"number\"==typeof c&&(b.de[a]=c=S.getUniformLocation(b,b.Ge[a]+(0<c?\"[\"+c+\"]\":\"\")));return c}R(1282)}var Bd=[],Cd=[],Dd=a=>0===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}\nvar Hd=(a,b,c,e)=>{function f(u,F,H){for(u=\"number\"==typeof u?u.toString():u||\"\";u.length<F;)u=H[0]+u;return u}function k(u,F){return f(u,F,\"0\")}function l(u,F){function H(ca){return 0>ca?-1:0<ca?1:0}var T;0===(T=H(u.getFullYear()-F.getFullYear()))&&0===(T=H(u.getMonth()-F.getMonth()))&&(T=H(u.getDate()-F.getDate()));return T}function m(u){switch(u.getDay()){case 0:return new Date(u.getFullYear()-1,11,29);case 1:return u;case 2:return new Date(u.getFullYear(),0,3);case 3:return new Date(u.getFullYear(),\n0,2);case 4:return new Date(u.getFullYear(),0,1);case 5:return new Date(u.getFullYear()-1,11,31);case 6:return new Date(u.getFullYear()-1,11,30)}}function q(u){var F=u.Ud;for(u=new Date((new Date(u.Vd+1900,0,1)).getTime());0<F;){var H=u.getMonth(),T=(Dd(u.getFullYear())?Ed:Fd)[H];if(F>T-u.getDate())F-=T-u.getDate()+1,u.setDate(1),11>H?u.setMonth(H+1):(u.setMonth(0),u.setFullYear(u.getFullYear()+1));else{u.setDate(u.getDate()+F);break}}H=new Date(u.getFullYear()+1,0,4);F=m(new Date(u.getFullYear(),\n0,4));H=m(H);return 0>=l(F,u)?0>=l(H,u)?u.getFullYear()+1:u.getFullYear():u.getFullYear()-1}var w=K[e+40>>2];e={mf:K[e>>2],lf:K[e+4>>2],ne:K[e+8>>2],we:K[e+12>>2],oe:K[e+16>>2],Vd:K[e+20>>2],Pd:K[e+24>>2],Ud:K[e+28>>2],tf:K[e+32>>2],kf:K[e+36>>2],nf:w?w?kb(C,w):\"\":\"\"};c=c?kb(C,c):\"\";w={\"%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\",\n\"%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 w)c=c.replace(new RegExp(y,\"g\"),w[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(\" \");w={\"%a\":u=>B[u.Pd].substring(0,3),\"%A\":u=>B[u.Pd],\"%b\":u=>D[u.oe].substring(0,3),\"%B\":u=>D[u.oe],\"%C\":u=>k((u.Vd+1900)/\n100|0,2),\"%d\":u=>k(u.we,2),\"%e\":u=>f(u.we,2,\" \"),\"%g\":u=>q(u).toString().substring(2),\"%G\":u=>q(u),\"%H\":u=>k(u.ne,2),\"%I\":u=>{u=u.ne;0==u?u=12:12<u&&(u-=12);return k(u,2)},\"%j\":u=>{for(var F=0,H=0;H<=u.oe-1;F+=(Dd(u.Vd+1900)?Ed:Fd)[H++]);return k(u.we+F,3)},\"%m\":u=>k(u.oe+1,2),\"%M\":u=>k(u.lf,2),\"%n\":()=>\"\\n\",\"%p\":u=>0<=u.ne&&12>u.ne?\"AM\":\"PM\",\"%S\":u=>k(u.mf,2),\"%t\":()=>\"\\t\",\"%u\":u=>u.Pd||7,\"%U\":u=>k(Math.floor((u.Ud+7-u.Pd)/7),2),\"%V\":u=>{var F=Math.floor((u.Ud+7-(u.Pd+6)%7)/7);2>=(u.Pd+371-u.Ud-\n2)%7&&F++;if(F)53==F&&(H=(u.Pd+371-u.Ud)%7,4==H||3==H&&Dd(u.Vd)||(F=1));else{F=52;var H=(u.Pd+7-u.Ud-1)%7;(4==H||5==H&&Dd(u.Vd%400-1))&&F++}return k(F,2)},\"%w\":u=>u.Pd,\"%W\":u=>k(Math.floor((u.Ud+7-(u.Pd+6)%7)/7),2),\"%y\":u=>(u.Vd+1900).toString().substring(2),\"%Y\":u=>u.Vd+1900,\"%z\":u=>{u=u.kf;var F=0<=u;u=Math.abs(u)/60;return(F?\"+\":\"-\")+String(\"0000\"+(u/60*100+u%60)).slice(-4)},\"%Z\":u=>u.nf,\"%%\":()=>\"%\"};c=c.replace(/%%/g,\"\\x00\\x00\");for(y in w)c.includes(y)&&(c=c.replace(new RegExp(y,\"g\"),w[y](e)));\nc=c.replace(/\\0\\0/g,\"%\");y=Gd(c);if(y.length>b)return 0;Ha.set(y,a);return y.length-1};rb=r.InternalError=class extends Error{constructor(a){super(a);this.name=\"InternalError\"}};for(var Id=Array(256),Jd=0;256>Jd;++Jd)Id[Jd]=String.fromCharCode(Jd);wb=Id;xb=r.BindingError=class extends Error{constructor(a){super(a);this.name=\"BindingError\"}};\nRb.prototype.isAliasOf=function(a){if(!(this instanceof Rb&&a instanceof Rb))return!1;var b=this.jd.Hd.Fd,c=this.jd.Ed,e=a.jd.Hd.Fd;for(a=a.jd.Ed;b.Kd;)c=b.ee(c),b=b.Kd;for(;e.Kd;)a=e.ee(a),e=e.Kd;return b===e&&c===a};\nRb.prototype.clone=function(){this.jd.Ed||zb(this);if(this.jd.ce)return this.jd.count.value+=1,this;var a=Qb,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,Ed:f.Ed,Hd:f.Hd,Jd:f.Jd,Nd:f.Nd}}}));a.jd.count.value+=1;a.jd.Zd=!1;return a};Rb.prototype[\"delete\"]=function(){this.jd.Ed||zb(this);this.jd.Zd&&!this.jd.ce&&Q(\"Object already scheduled for deletion\");Bb(this);Cb(this.jd);this.jd.ce||(this.jd.Jd=void 0,this.jd.Ed=void 0)};\nRb.prototype.isDeleted=function(){return!this.jd.Ed};Rb.prototype.deleteLater=function(){this.jd.Ed||zb(this);this.jd.Zd&&!this.jd.ce&&Q(\"Object already scheduled for deletion\");Kb.push(this);1===Kb.length&&Mb&&Mb(Lb);this.jd.Zd=!0;return this};r.getInheritedInstanceCount=function(){return Object.keys(Nb).length};r.getLiveInheritedInstances=function(){var a=[],b;for(b in Nb)Nb.hasOwnProperty(b)&&a.push(Nb[b]);return a};r.flushPendingDeletes=Lb;r.setDelayFunction=function(a){Mb=a;Kb.length&&Mb&&Mb(Lb)};\ncc.prototype.We=function(a){this.Ee&&(a=this.Ee(a));return a};cc.prototype.ye=function(a){this.Rd&&this.Rd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=nb;cc.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\ncc.prototype.fromWireType=function(a){function b(){return this.je?Pb(this.Fd.$d,{Hd:this.cf,Ed:c,Nd:this,Jd:a}):Pb(this.Fd.$d,{Hd:this,Ed:a})}var c=this.We(a);if(!c)return this.ye(a),null;var e=Ob(this.Fd,c);if(void 0!==e){if(0===e.jd.count.value)return e.jd.Ed=c,e.jd.Jd=a,e.clone();e=e.clone();this.ye(a);return e}e=this.Fd.Ve(c);e=Jb[e];if(!e)return b.call(this);e=this.ie?e.Pe:e.pointerType;var f=Db(c,this.Fd,e.Fd);return null===f?b.call(this):this.je?Pb(e.Fd.$d,{Hd:e,Ed:f,Nd:this,Jd:a}):Pb(e.Fd.$d,\n{Hd:e,Ed:f})};nc=r.UnboundTypeError=function(a,b){var c=Tb(b,function(e){this.name=b;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+\"\\n\"+e.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,\"UnboundTypeError\");\nObject.assign(uc.prototype,{get(a){return this.Qd[a]},has(a){return void 0!==this.Qd[a]},pe(a){var b=this.Ce.pop()||this.Qd.length;this.Qd[b]=a;return b},qe(a){this.Qd[a]=void 0;this.Ce.push(a)}});vc.Qd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Td=vc.Qd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Td;b<vc.Qd.length;++b)void 0!==vc.Qd[b]&&++a;return a};for(var S,Kd=0;32>Kd;++Kd)rd.push(Array(Kd));var Ld=new Float32Array(288);\nfor(Kd=0;288>Kd;++Kd)Bd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)Cd[Kd]=Md.subarray(0,Kd+1);\nvar $d={H:function(a,b,c){(new fb(a)).Td(b,c);gb=a;ib++;throw gb;},_:function(){return 0},_c:()=>{},Zc:function(){return 0},Yc:()=>{},Xc:function(){},Wc:()=>{},D:function(a){var b=lb[a];delete lb[a];var c=b.ve,e=b.Rd,f=b.Be,k=f.map(l=>l.Ze).concat(f.map(l=>l.gf));tb([a],k,l=>{var m={};f.forEach((q,w)=>{var y=l[w],B=q.Xe,D=q.Ye,u=l[w+f.length],F=q.ff,H=q.hf;m[q.Ue]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(q){var w=\n{},y;for(y in m)w[y]=m[y].read(q);e(q);return w},toWireType:function(q,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: \"${y}\"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==q&&q.push(e,B);return B},argPackAdvance:8,readValueFromPointer:nb,Md:e}]})},ea:function(){},Sc:function(a,b,c,e,f){var k=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?e:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia;\nelse if(4===c)m=K;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(m[l>>k])},Md:null})},l:function(a,b,c,e,f,k,l,m,q,w,y,B,D){y=P(y);k=mc(f,k);m&&(m=mc(l,m));w&&(w=mc(q,w));D=mc(B,D);var u=Sb(y);Vb(u,function(){rc(`Cannot construct ${y} due to unbound types`,[e])});tb([a,b,c],e?[e]:[],function(F){F=F[0];if(e){var H=F.Fd;var T=H.$d}else T=Rb.prototype;F=Tb(u,function(){if(Object.getPrototypeOf(this)!==ca)throw new xb(\"Use 'new' to construct \"+y);if(void 0===Y.Sd)throw new xb(y+\n\" has no accessible constructor\");var Ma=Y.Sd[arguments.length];if(void 0===Ma)throw new xb(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(Y.Sd).toString()}) parameters instead!`);return Ma.apply(this,arguments)});var ca=Object.create(T,{constructor:{value:F}});F.prototype=ca;var Y=new Wb(y,F,ca,D,H,k,m,w);Y.Kd&&(void 0===Y.Kd.fe&&(Y.Kd.fe=[]),Y.Kd.fe.push(Y));H=new cc(y,Y,!0,!1,!1);T=new cc(y+\"*\",Y,!1,!1,!1);var va=new cc(y+\" const*\",\nY,!1,!0,!1);Jb[a]={pointerType:T,Pe:va};dc(u,F);return[H,T,va]})},e:function(a,b,c,e,f,k,l){var m=tc(c,e);b=P(b);k=mc(f,k);tb([],[a],function(q){function w(){rc(`Cannot call ${y} due to unbound types`,m)}q=q[0];var y=`${q.name}.${b}`;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var B=q.Fd.constructor;void 0===B[b]?(w.Xd=c-1,B[b]=w):(Ub(B,b,y),B[b].Id[c-1]=w);tb([],m,function(D){D=[D[0],null].concat(D.slice(1));D=sc(y,D,null,k,l);void 0===B[b].Id?(D.Xd=c-1,B[b]=D):B[b].Id[c-1]=D;if(q.Fd.fe)for(const u of q.Fd.fe)u.constructor.hasOwnProperty(b)||\n(u.constructor[b]=D);return[]});return[]})},B:function(a,b,c,e,f,k){var l=tc(b,c);f=mc(e,f);tb([],[a],function(m){m=m[0];var q=`constructor ${m.name}`;void 0===m.Fd.Sd&&(m.Fd.Sd=[]);if(void 0!==m.Fd.Sd[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Fd.Sd[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)};\ntb([],l,function(w){w.splice(1,0,null);m.Fd.Sd[b-1]=sc(q,w,null,f,k);return[]});return[]})},a:function(a,b,c,e,f,k,l,m){var q=tc(c,e);b=P(b);k=mc(f,k);tb([],[a],function(w){function y(){rc(`Cannot call ${B} due to unbound types`,q)}w=w[0];var B=`${w.name}.${b}`;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);m&&w.Fd.df.push(b);var D=w.Fd.$d,u=D[b];void 0===u||void 0===u.Id&&u.className!==w.name&&u.Xd===c-2?(y.Xd=c-2,y.className=w.name,D[b]=y):(Ub(D,b,B),D[b].Id[c-2]=y);tb([],q,function(F){F=sc(B,F,\nw,k,l);void 0===D[b].Id?(F.Xd=c-2,D[b]=F):D[b].Id[c-2]=F;return[]});return[]})},s:function(a,b,c){a=P(a);tb([],[b],function(e){e=e[0];r[a]=e.fromWireType(c);return[]})},Rc:function(a,b){b=P(b);ub(a,{name:b,fromWireType:function(c){var e=xc(c);wc(c);return e},toWireType:function(c,e){return ac(e)},argPackAdvance:8,readValueFromPointer:nb,Md:null})},i:function(a,b,c,e){function f(){}c=vb(c);b=P(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,\nl){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,e),Md:null});Vb(b,f)},b:function(a,b,c){var e=zc(a,\"enum\");b=P(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${e.name}_${b}`,function(){})}});a.values[c]=e;a[b]=e},X:function(a,b,c){c=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Md:null})},v:function(a,b,c,e,f,k){var l=tc(b,c);a=P(a);f=\nmc(e,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},E:function(a,b,c,e,f){b=P(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===e){var l=32-8*c;k=m=>m<<l>>>l}c=b.includes(\"unsigned\")?function(m,q){return q>>>0}:function(m,q){return q};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==e),Md:null})},r:function(a,b,c){function e(k){k>>=2;var l=\nL;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);ub(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{$e:!0})},p:function(a,b,c,e,f,k,l,m,q,w,y,B){c=P(c);k=mc(f,k);m=mc(l,m);w=mc(q,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Fd,!1,!1,!0,D,e,k,m,w,B)]})},W:function(a,b){b=P(b);var c=\"std::string\"===b;ub(a,{name:b,fromWireType:function(e){var f=L[e>>2],k=e+4;if(c)for(var l=\nk,m=0;m<=f;++m){var q=k+m;if(m==f||0==C[q]){l=l?kb(C,l,q-l):\"\";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=q+1}}else{w=Array(f);for(m=0;m<f;++m)w[m]=String.fromCharCode(C[k+m]);w=w.join(\"\")}qc(e);return w},toWireType:function(e,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k=\"string\"==typeof f;k||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q(\"Cannot pass non-string to std::string\");var l=c&&k?ja(f):f.length;var m=wd(4+l+1),q=m+4;L[m>>2]=\nl;if(c&&k)ka(f,C,q,l+1);else if(k)for(k=0;k<l;++k){var w=f.charCodeAt(k);255<w&&(qc(q),Q(\"String has UTF-16 code units that do not fit in 8 bits\"));C[q+k]=w}else for(k=0;k<l;++k)C[q+k]=f[k];null!==e&&e.push(qc,m);return m},argPackAdvance:8,readValueFromPointer:nb,Md:function(e){qc(e)}})},O:function(a,b,c){c=P(c);if(2===b){var e=Dc;var f=Ec;var k=Fc;var l=()=>Ja;var m=1}else 4===b&&(e=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(q){for(var w=L[q>>2],y=l(),B,D=q+4,u=0;u<=w;++u){var F=\nq+4+u*b;if(u==w||0==y[F>>m])D=e(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(q);return B},toWireType:function(q,w){\"string\"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=wd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==q&&q.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Md:function(q){qc(q)}})},C:function(a,b,c,e,f,k){lb[a]={name:P(b),ve:mc(c,e),Rd:mc(f,k),Be:[]}},d:function(a,b,c,e,f,k,l,m,q,w){lb[a].Be.push({Ue:P(b),Ze:c,Xe:mc(e,f),Ye:k,\ngf:l,ff:mc(m,q),hf:w})},Qc:function(a,b){b=P(b);ub(a,{bf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},Pc:()=>!0,Oc:()=>{throw Infinity;},G:function(a,b,c){a=xc(a);b=zc(b,\"emval::as\");var e=[],f=ac(e);L[c>>2]=f;return b.toWireType(e,a)},N:function(a,b,c,e,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[e>>2]=ac(k);return a(b,c,k,f)},t:function(a,b,c,e){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,e)},c:wc,M:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},q:function(a,\nb){var c=Oc(a,b),e=c[0];b=e.name+\"_$\"+c.slice(1).map(function(l){return l.name}).join(\"_\")+\"$\";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,q,w)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(w+y),y+=c[B+1].argPackAdvance;l=l[m].apply(l,k);for(B=0;B<a-1;++B)c[B+1].Re&&c[B+1].Re(k[B]);if(!e.bf)return e.toWireType(q,l)});return Pc[b]=f},A:function(a,b){a=xc(a);b=xc(b);return ac(a[b])},m:function(a){4<a&&(vc.get(a).Fe+=1)},L:function(a,b,c,e){a=xc(a);var f=Rc[b];f||(f=\nQc(b),Rc[b]=f);return f(a,c,e)},I:function(){return ac([])},f:function(a){return ac(Kc(a))},F:function(){return ac({})},Nc:function(a){a=xc(a);return!a},z:function(a){var b=xc(a);mb(b);wc(a)},h:function(a,b,c){a=xc(a);b=xc(b);c=xc(c);a[b]=c},g:function(a,b){a=zc(a,\"_emval_take_value\");a=a.readValueFromPointer(b);return ac(a)},da:function(){return-52},ca:function(){},k:()=>{Ea(\"\")},Mc:()=>performance.now(),Lc: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);\ne=Math.min(e,a+100663296);var f=Math;e=Math.max(a,e);a:{f=f.min.call(f,2147483648,e+(65536-e%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},Kc:function(){return x?x.handle:0},Vc:(a,b)=>{var c=0;nd().forEach(function(e,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k<e.length;++k)Ha[f++>>0]=e.charCodeAt(k);Ha[f>>0]=0;c+=e.length+1});return 0},Uc:(a,b)=>{var c=nd();L[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});L[b>>\n2]=e;return 0},Jc:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,new db(a))},Z:()=>52,ga:function(){return 52},Tc:()=>52,fa:function(){return 70},Y:(a,b,c,e)=>{for(var f=0,k=0;k<c;k++){var l=L[b>>2],m=L[b+4>>2];b+=8;for(var q=0;q<m;q++){var w=C[l+q],y=od[a];0===w||10===w?((1===a?Aa:Ca)(kb(y,0)),y.length=0):y.push(w)}f+=m}L[e>>2]=f;return 0},Ic:function(a){S.activeTexture(a)},Hc:function(a,b){S.attachShader(Xc[a],$c[b])},Gc:function(a,b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):\"\")},Fc:function(a,\nb){35051==a?S.se=b:35052==a&&(S.Yd=b);S.bindBuffer(a,Wc[b])},V:function(a,b){S.bindFramebuffer(a,Yc[b])},Ec:function(a,b){S.bindRenderbuffer(a,Zc[b])},Dc:function(a,b){S.bindSampler(a,bd[b])},Cc:function(a,b){S.bindTexture(a,ea[b])},Bc:pd,Ac:pd,zc:function(a,b,c,e){S.blendColor(a,b,c,e)},yc:function(a){S.blendEquation(a)},xc:function(a,b){S.blendFunc(a,b)},wc:function(a,b,c,e,f,k,l,m,q,w){S.blitFramebuffer(a,b,c,e,f,k,l,m,q,w)},vc:function(a,b,c,e){2<=x.version?c&&b?S.bufferData(a,C,e,c,b):S.bufferData(a,\nb,e):S.bufferData(a,c?C.subarray(c,c+b):b,e)},uc:function(a,b,c,e){2<=x.version?c&&S.bufferSubData(a,b,C,e,c):S.bufferSubData(a,b,C.subarray(e,e+c))},tc:function(a){return S.checkFramebufferStatus(a)},U:function(a){S.clear(a)},T:function(a,b,c,e){S.clearColor(a,b,c,e)},S:function(a){S.clearStencil(a)},ba:function(a,b,c,e){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*e)},sc:function(a,b,c,e){S.colorMask(!!a,!!b,!!c,!!e)},rc:function(a){S.compileShader($c[a])},qc:function(a,b,c,e,f,k,l,m){2<=\nx.version?S.Yd||!l?S.compressedTexImage2D(a,b,c,e,f,k,l,m):S.compressedTexImage2D(a,b,c,e,f,k,C,m,l):S.compressedTexImage2D(a,b,c,e,f,k,m?C.subarray(m,m+l):null)},pc:function(a,b,c,e,f,k,l,m,q){2<=x.version?S.Yd||!m?S.compressedTexSubImage2D(a,b,c,e,f,k,l,m,q):S.compressedTexSubImage2D(a,b,c,e,f,k,l,C,q,m):S.compressedTexSubImage2D(a,b,c,e,f,k,l,q?C.subarray(q,q+m):null)},oc:function(a,b,c,e,f){S.copyBufferSubData(a,b,c,e,f)},nc:function(a,b,c,e,f,k,l,m){S.copyTexSubImage2D(a,b,c,e,f,k,l,m)},mc:function(){var a=\nda(Xc),b=S.createProgram();b.name=a;b.me=b.ke=b.le=0;b.xe=1;Xc[a]=b;return a},lc:function(a){var b=da($c);$c[b]=S.createShader(a);return b},kc:function(a){S.cullFace(a)},jc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=Wc[e];f&&(S.deleteBuffer(f),f.name=0,Wc[e]=null,e==S.se&&(S.se=0),e==S.Yd&&(S.Yd=0))}},ic:function(a,b){for(var c=0;c<a;++c){var e=K[b+4*c>>2],f=Yc[e];f&&(S.deleteFramebuffer(f),f.name=0,Yc[e]=null)}},hc:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),b.name=0,Xc[a]=null):\nR(1281)}},gc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=Zc[e];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[e]=null)}},fc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=bd[e];f&&(S.deleteSampler(f),f.name=0,bd[e]=null)}},ec:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},dc:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},cc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=ea[e];f&&(S.deleteTexture(f),f.name=0,ea[e]=null)}},\nbc:qd,ac:qd,$b:function(a){S.depthMask(!!a)},_b:function(a){S.disable(a)},Zb:function(a){S.disableVertexAttribArray(a)},Yb:function(a,b,c){S.drawArrays(a,b,c)},Xb:function(a,b,c,e){S.drawArraysInstanced(a,b,c,e)},Wb:function(a,b,c,e,f){S.ze.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},Vb:function(a,b){for(var c=rd[a],e=0;e<a;e++)c[e]=K[b+4*e>>2];S.drawBuffers(c)},Ub:sd,Tb:function(a,b,c,e,f){S.drawElementsInstanced(a,b,c,e,f)},Sb:function(a,b,c,e,f,k,l){S.ze.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,\nb,c,e,f,k,l)},Rb:function(a,b,c,e,f,k){sd(a,e,f,k)},Qb:function(a){S.enable(a)},Pb:function(a){S.enableVertexAttribArray(a)},Ob:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},Nb:function(){S.finish()},Mb:function(){S.flush()},Lb:function(a,b,c,e){S.framebufferRenderbuffer(a,b,c,Zc[e])},Kb:function(a,b,c,e,f){S.framebufferTexture2D(a,b,c,ea[e],f)},Jb:function(a){S.frontFace(a)},Ib:function(a,b){td(a,b,\"createBuffer\",Wc)},Hb:function(a,b){td(a,b,\"createFramebuffer\",Yc)},Gb:function(a,\nb){td(a,b,\"createRenderbuffer\",Zc)},Fb:function(a,b){td(a,b,\"createSampler\",bd)},Eb:function(a,b){td(a,b,\"createTexture\",ea)},Db:ud,Cb:ud,Bb:function(a){S.generateMipmap(a)},Ab:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},zb:function(){var a=S.getError()||hd;hd=0;return a},yb:function(a,b){vd(a,b,2)},xb:function(a,b,c,e){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[e>>2]=a},K:function(a,b){vd(a,b,0)},wb:function(a,\nb,c,e){a=S.getProgramInfoLog(Xc[a]);null===a&&(a=\"(unknown error)\");b=0<b&&e?ka(a,C,e,b):0;c&&(K[c>>2]=b)},vb:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a=\"(unknown error)\"),K[c>>2]=a.length+1;else if(35719==b){if(!a.me)for(b=0;b<S.getProgramParameter(a,35718);++b)a.me=Math.max(a.me,S.getActiveUniform(a,b).name.length+1);K[c>>2]=a.me}else if(35722==b){if(!a.ke)for(b=0;b<S.getProgramParameter(a,35721);++b)a.ke=Math.max(a.ke,S.getActiveAttrib(a,\nb).name.length+1);K[c>>2]=a.ke}else if(35381==b){if(!a.le)for(b=0;b<S.getProgramParameter(a,35382);++b)a.le=Math.max(a.le,S.getActiveUniformBlockName(a,b).length+1);K[c>>2]=a.le}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},ub:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},tb:function(a,b,c,e){a=S.getShaderInfoLog($c[a]);null===a&&(a=\"(unknown error)\");b=0<b&&e?ka(a,C,e,b):0;c&&(K[c>>2]=b)},sb:function(a,b,c,e){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>>\n2]=a.rangeMax;K[e>>2]=a.precision},rb:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a=\"(unknown error)\"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},R:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return\"GL_\"+e}));b=xd(b.join(\" \"));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&xd(b);break;\ncase 7938:b=S.getParameter(7938);b=2<=x.version?\"OpenGL ES 3.0 (\"+b+\")\":\"OpenGL ES 2.0 (\"+b+\")\";b=xd(b);break;case 35724:b=S.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=xd(b);break;default:R(1280)}dd[a]=b}return b},qb:function(a,b){if(2>x.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[],\nc=c.concat(c.map(function(e){return\"GL_\"+e})),c=c.map(function(e){return xd(e)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},pb:function(a,b){b=b?kb(C,b):\"\";if(a=Xc[a]){var c=a,e=c.de,f=c.He,k;if(!e)for(c.de=e={},c.Ge={},k=0;k<S.getProgramParameter(c,35718);++k){var l=S.getActiveUniform(c,k);var m=l.name;l=l.size;var q=yd(m);q=0<q?m.slice(0,q):m;var w=c.xe;c.xe+=l;f[q]=[l,w];for(m=0;m<l;++m)e[w]=m,c.Ge[w++]=q}c=a.de;e=0;f=b;k=yd(b);0<k&&(e=parseInt(b.slice(k+1))>>>0,f=b.slice(0,\nk));if((f=a.He[f])&&e<f[0]&&(e+=f[1],c[e]=c[e]||S.getUniformLocation(a,b)))return e}else R(1281);return-1},ob:function(a,b,c){for(var e=rd[b],f=0;f<b;f++)e[f]=K[c+4*f>>2];S.invalidateFramebuffer(a,e)},nb:function(a,b,c,e,f,k,l){for(var m=rd[b],q=0;q<b;q++)m[q]=K[c+4*q>>2];S.invalidateSubFramebuffer(a,m,e,f,k,l)},mb:function(a){return S.isSync(cd[a])},lb:function(a){return(a=ea[a])?S.isTexture(a):0},kb:function(a){S.lineWidth(a)},jb:function(a){a=Xc[a];S.linkProgram(a);a.de=0;a.He={}},ib:function(a,\nb,c,e,f,k){S.De.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,e>>2,L,f>>2,k)},hb:function(a,b,c,e,f,k,l,m){S.De.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,e>>2,K,f>>2,K,k>>2,L,l>>2,m)},gb:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},fb:function(a){S.readBuffer(a)},eb:function(a,b,c,e,f,k,l){if(2<=x.version)if(S.se)S.readPixels(a,b,c,e,f,k,l);else{var m=zd(k);S.readPixels(a,b,c,e,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=Ad(k,f,c,e,l))?S.readPixels(a,\nb,c,e,f,k,l):R(1280)},db:function(a,b,c,e){S.renderbufferStorage(a,b,c,e)},cb:function(a,b,c,e,f){S.renderbufferStorageMultisample(a,b,c,e,f)},bb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},ab:function(a,b,c){S.samplerParameteri(bd[a],b,c)},$a:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},_a:function(a,b,c,e){S.scissor(a,b,c,e)},Za:function(a,b,c,e){for(var f=\"\",k=0;k<b;++k){var l=e?K[e+4*k>>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):\"\";f+=l}S.shaderSource($c[a],f)},Ya:function(a,b,\nc){S.stencilFunc(a,b,c)},Xa:function(a,b,c,e){S.stencilFuncSeparate(a,b,c,e)},Wa:function(a){S.stencilMask(a)},Va:function(a,b){S.stencilMaskSeparate(a,b)},Ua:function(a,b,c){S.stencilOp(a,b,c)},Ta:function(a,b,c,e){S.stencilOpSeparate(a,b,c,e)},Sa:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Yd)S.texImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=zd(m);S.texImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,e,f,k,l,m,null);else S.texImage2D(a,b,c,e,f,k,l,m,q?\nAd(m,l,e,f,q):null)},Ra:function(a,b,c){S.texParameterf(a,b,c)},Qa:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Pa:function(a,b,c){S.texParameteri(a,b,c)},Oa:function(a,b,c){S.texParameteri(a,b,K[c>>2])},Na:function(a,b,c,e,f){S.texStorage2D(a,b,c,e,f)},Ma:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Yd)S.texSubImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=zd(m);S.texSubImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,e,f,k,l,m,null);else w=null,q&&(w=\nAd(m,l,f,k,q)),S.texSubImage2D(a,b,c,e,f,k,l,m,w)},La:function(a,b){S.uniform1f(W(a),b)},Ka:function(a,b,c){if(2<=x.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var e=Bd[b-1],f=0;f<b;++f)e[f]=N[c+4*f>>2];else e=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),e)}},Ja:function(a,b){S.uniform1i(W(a),b)},Ia:function(a,b,c){if(2<=x.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var e=Cd[b-1],f=0;f<b;++f)e[f]=K[c+4*f>>2];else e=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),e)}},Ha:function(a,\nb,c){S.uniform2f(W(a),b,c)},Ga:function(a,b,c){if(2<=x.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var e=Bd[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);S.uniform2fv(W(a),e)}},Fa:function(a,b,c){S.uniform2i(W(a),b,c)},Ea:function(a,b,c){if(2<=x.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var e=Cd[2*b-1],f=0;f<2*b;f+=2)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2];else e=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),e)}},Da:function(a,\nb,c,e){S.uniform3f(W(a),b,c,e)},Ca:function(a,b,c){if(2<=x.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var e=Bd[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);S.uniform3fv(W(a),e)}},Ba:function(a,b,c,e){S.uniform3i(W(a),b,c,e)},Aa:function(a,b,c){if(2<=x.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var e=Cd[3*b-1],f=0;f<3*b;f+=3)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2];else e=\nK.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),e)}},za:function(a,b,c,e,f){S.uniform4f(W(a),b,c,e,f)},ya:function(a,b,c){if(2<=x.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var e=Bd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;e[k]=f[l];e[k+1]=f[l+1];e[k+2]=f[l+2];e[k+3]=f[l+3]}}else e=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),e)}},xa:function(a,b,c,e,f){S.uniform4i(W(a),b,c,e,f)},wa:function(a,b,c){if(2<=x.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var e=Cd[4*b-\n1],f=0;f<4*b;f+=4)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2],e[f+3]=K[c+(4*f+12)>>2];else e=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),e)}},va:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix2fv(W(a),!!c,N,e>>2,4*b);else{if(72>=b)for(var f=Bd[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);S.uniformMatrix2fv(W(a),!!c,f)}},ua:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix3fv(W(a),\n!!c,N,e>>2,9*b);else{if(32>=b)for(var f=Bd[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);S.uniformMatrix3fv(W(a),!!c,f)}},ta:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix4fv(W(a),!!c,N,e>>2,16*b);else{if(18>=b){var f=Bd[16*b-1],k=N;e>>=2;for(var l=0;l<16*b;l+=16){var m=e+l;f[l]=\nk[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(e>>2,e+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},sa:function(a){a=Xc[a];S.useProgram(a);S.Qe=a},ra:function(a,b){S.vertexAttrib1f(a,b)},qa:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},pa:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},\noa:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},na:function(a,b){S.vertexAttribDivisor(a,b)},ma:function(a,b,c,e,f){S.vertexAttribIPointer(a,b,c,e,f)},la:function(a,b,c,e,f,k){S.vertexAttribPointer(a,b,c,!!e,f,k)},ka:function(a,b,c,e){S.viewport(a,b,c,e)},aa:function(a,b,c,e){S.waitSync(cd[a],b,(c>>>0)+4294967296*e)},n:Nd,u:Od,j:Pd,J:Qd,Q:Rd,P:Sd,x:Td,y:Ud,o:Vd,w:Wd,ja:Xd,ia:Yd,ha:Zd,$:(a,b,c,e)=>Hd(a,b,c,e)};\n(function(){function a(c){G=c=c.exports;Fa=G.$c;La();Na=G.cd;Pa.unshift(G.ad);Ua--;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(0==Ua&&(null!==Va&&(clearInterval(Va),Va=null),Wa)){var e=Wa;Wa=null;e()}return c}var b={a:$d};Ua++;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca(\"Module.instantiateWasm callback failed with error: \"+c),ba(c)}cb(b,function(c){a(c.instance)}).catch(ba);return{}})();\nvar wd=r._malloc=a=>(wd=r._malloc=G.bd)(a),qc=r._free=a=>(qc=r._free=G.dd)(a),pc=a=>(pc=G.ed)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.fd)();var ae=(a,b)=>(ae=G.gd)(a,b),be=()=>(be=G.hd)(),ce=a=>(ce=G.id)(a);r.dynCall_viji=(a,b,c,e,f)=>(r.dynCall_viji=G.kd)(a,b,c,e,f);r.dynCall_vijiii=(a,b,c,e,f,k,l)=>(r.dynCall_vijiii=G.ld)(a,b,c,e,f,k,l);r.dynCall_viiiiij=(a,b,c,e,f,k,l,m)=>(r.dynCall_viiiiij=G.md)(a,b,c,e,f,k,l,m);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.nd)(a,b,c);\nr.dynCall_vij=(a,b,c,e)=>(r.dynCall_vij=G.od)(a,b,c,e);r.dynCall_iiij=(a,b,c,e,f)=>(r.dynCall_iiij=G.pd)(a,b,c,e,f);r.dynCall_iiiij=(a,b,c,e,f,k)=>(r.dynCall_iiiij=G.qd)(a,b,c,e,f,k);r.dynCall_viij=(a,b,c,e,f)=>(r.dynCall_viij=G.rd)(a,b,c,e,f);r.dynCall_viiij=(a,b,c,e,f,k)=>(r.dynCall_viiij=G.sd)(a,b,c,e,f,k);r.dynCall_jiiiiii=(a,b,c,e,f,k,l)=>(r.dynCall_jiiiiii=G.td)(a,b,c,e,f,k,l);r.dynCall_jiiiiji=(a,b,c,e,f,k,l,m)=>(r.dynCall_jiiiiji=G.ud)(a,b,c,e,f,k,l,m);\nr.dynCall_ji=(a,b)=>(r.dynCall_ji=G.vd)(a,b);r.dynCall_iijj=(a,b,c,e,f,k)=>(r.dynCall_iijj=G.wd)(a,b,c,e,f,k);r.dynCall_jiji=(a,b,c,e,f)=>(r.dynCall_jiji=G.xd)(a,b,c,e,f);r.dynCall_viijii=(a,b,c,e,f,k,l)=>(r.dynCall_viijii=G.yd)(a,b,c,e,f,k,l);r.dynCall_iiiiij=(a,b,c,e,f,k,l)=>(r.dynCall_iiiiij=G.zd)(a,b,c,e,f,k,l);r.dynCall_iiiiijj=(a,b,c,e,f,k,l,m,q)=>(r.dynCall_iiiiijj=G.Ad)(a,b,c,e,f,k,l,m,q);r.dynCall_iiiiiijj=(a,b,c,e,f,k,l,m,q,w)=>(r.dynCall_iiiiiijj=G.Bd)(a,b,c,e,f,k,l,m,q,w);\nfunction Wd(a,b,c,e,f){var k=be();try{Na.get(a)(b,c,e,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Od(a,b,c){var e=be();try{return Na.get(a)(b,c)}catch(f){ce(e);if(f!==f+0)throw f;ae(1,0)}}function Ud(a,b,c){var e=be();try{Na.get(a)(b,c)}catch(f){ce(e);if(f!==f+0)throw f;ae(1,0)}}function Nd(a,b){var c=be();try{return Na.get(a)(b)}catch(e){ce(c);if(e!==e+0)throw e;ae(1,0)}}function Td(a,b){var c=be();try{Na.get(a)(b)}catch(e){ce(c);if(e!==e+0)throw e;ae(1,0)}}\nfunction Pd(a,b,c,e){var f=be();try{return Na.get(a)(b,c,e)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Zd(a,b,c,e,f,k,l,m,q,w){var y=be();try{Na.get(a)(b,c,e,f,k,l,m,q,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}function Vd(a,b,c,e){var f=be();try{Na.get(a)(b,c,e)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Yd(a,b,c,e,f,k,l){var m=be();try{Na.get(a)(b,c,e,f,k,l)}catch(q){ce(m);if(q!==q+0)throw q;ae(1,0)}}\nfunction Qd(a,b,c,e,f){var k=be();try{return Na.get(a)(b,c,e,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Rd(a,b,c,e,f,k,l){var m=be();try{return Na.get(a)(b,c,e,f,k,l)}catch(q){ce(m);if(q!==q+0)throw q;ae(1,0)}}function Xd(a,b,c,e,f,k){var l=be();try{Na.get(a)(b,c,e,f,k)}catch(m){ce(l);if(m!==m+0)throw m;ae(1,0)}}function Sd(a,b,c,e,f,k,l,m,q,w){var y=be();try{return Na.get(a)(b,c,e,f,k,l,m,q,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}var de;Wa=function ee(){de||fe();de||(Wa=ee)};\nfunction fe(){function a(){if(!de&&(de=!0,r.calledRun=!0,!Ga)){eb(Pa);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();Qa.unshift(b)}eb(Qa)}}if(!(0<Ua)){if(r.preRun)for(\"function\"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)Ra();eb(Oa);0<Ua||(r.setStatus?(r.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){r.setStatus(\"\")},1);a()},1)):a())}}\nif(r.preInit)for(\"function\"==typeof r.preInit&&(r.preInit=[r.preInit]);0<r.preInit.length;)r.preInit.pop()();fe();\n\n\n  return moduleArg.ready\n}\n\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n  module.exports = CanvasKitInit;\nelse if (typeof define === 'function' && define['amd'])\n  define([], () => CanvasKitInit);\n"
  },
  {
    "path": "legacy/dist/canvaskit/chromium/canvaskit.js.symbols",
    "content": "0:_embind_register_class_function\n1:_embind_register_enum_value\n2:_emval_decref\n3:_embind_register_value_object_field\n4:_embind_register_class_class_function\n5:_emval_new_cstring\n6:_emval_take_value\n7:_emval_set_property\n8:_embind_register_enum\n9:invoke_iiii\n10:abort\n11:_embind_register_class\n12:_emval_incref\n13:invoke_ii\n14:invoke_viii\n15:_embind_register_smart_ptr\n16:_emval_get_method_caller\n17:_embind_register_memory_view\n18:_embind_register_constant\n19:_emval_call_void_method\n20:invoke_iii\n21:_embind_register_function\n22:invoke_viiii\n23:invoke_vi\n24:invoke_vii\n25:_emval_run_destructors\n26:_emval_get_property\n27:_embind_register_class_constructor\n28:_embind_register_value_object\n29:_embind_finalize_value_object\n30:_embind_register_integer\n31:_emval_new_object\n32:_emval_as\n33:__cxa_throw\n34:_emval_new_array\n35:invoke_iiiii\n36:glGetIntegerv\n37:_emval_new\n38:_emval_get_global\n39:_emval_call_method\n40:_embind_register_std_wstring\n41:invoke_iiiiiiiiii\n42:invoke_iiiiiii\n43:glGetString\n44:glClearStencil\n45:glClearColor\n46:glClear\n47:glBindFramebuffer\n48:_embind_register_std_string\n49:_embind_register_float\n50:__wasi_fd_write\n51:__wasi_fd_close\n52:__syscall_fcntl64\n53:strftime_l\n54:legalimport$glWaitSync\n55:legalimport$glClientWaitSync\n56:legalimport$_munmap_js\n57:legalimport$_mmap_js\n58:legalimport$_embind_register_bigint\n59:legalimport$__wasi_fd_seek\n60:legalimport$__wasi_fd_pread\n61:invoke_viiiiiiiii\n62:invoke_viiiiii\n63:invoke_viiiii\n64:glViewport\n65:glVertexAttribPointer\n66:glVertexAttribIPointer\n67:glVertexAttribDivisor\n68:glVertexAttrib4fv\n69:glVertexAttrib3fv\n70:glVertexAttrib2fv\n71:glVertexAttrib1f\n72:glUseProgram\n73:glUniformMatrix4fv\n74:glUniformMatrix3fv\n75:glUniformMatrix2fv\n76:glUniform4iv\n77:glUniform4i\n78:glUniform4fv\n79:glUniform4f\n80:glUniform3iv\n81:glUniform3i\n82:glUniform3fv\n83:glUniform3f\n84:glUniform2iv\n85:glUniform2i\n86:glUniform2fv\n87:glUniform2f\n88:glUniform1iv\n89:glUniform1i\n90:glUniform1fv\n91:glUniform1f\n92:glTexSubImage2D\n93:glTexStorage2D\n94:glTexParameteriv\n95:glTexParameteri\n96:glTexParameterfv\n97:glTexParameterf\n98:glTexImage2D\n99:glStencilOpSeparate\n100:glStencilOp\n101:glStencilMaskSeparate\n102:glStencilMask\n103:glStencilFuncSeparate\n104:glStencilFunc\n105:glShaderSource\n106:glScissor\n107:glSamplerParameteriv\n108:glSamplerParameteri\n109:glSamplerParameterf\n110:glRenderbufferStorageMultisample\n111:glRenderbufferStorage\n112:glReadPixels\n113:glReadBuffer\n114:glPixelStorei\n115:glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL\n116:glMultiDrawArraysInstancedBaseInstanceWEBGL\n117:glLinkProgram\n118:glLineWidth\n119:glIsTexture\n120:glIsSync\n121:glInvalidateSubFramebuffer\n122:glInvalidateFramebuffer\n123:glGetUniformLocation\n124:glGetStringi\n125:glGetShaderiv\n126:glGetShaderPrecisionFormat\n127:glGetShaderInfoLog\n128:glGetRenderbufferParameteriv\n129:glGetProgramiv\n130:glGetProgramInfoLog\n131:glGetFramebufferAttachmentParameteriv\n132:glGetFloatv\n133:glGetError\n134:glGetBufferParameteriv\n135:glGenerateMipmap\n136:glGenVertexArraysOES\n137:glGenVertexArrays\n138:glGenTextures\n139:glGenSamplers\n140:glGenRenderbuffers\n141:glGenFramebuffers\n142:glGenBuffers\n143:glFrontFace\n144:glFramebufferTexture2D\n145:glFramebufferRenderbuffer\n146:glFlush\n147:glFinish\n148:glFenceSync\n149:glEnableVertexAttribArray\n150:glEnable\n151:glDrawRangeElements\n152:glDrawElementsInstancedBaseVertexBaseInstanceWEBGL\n153:glDrawElementsInstanced\n154:glDrawElements\n155:glDrawBuffers\n156:glDrawArraysInstancedBaseInstanceWEBGL\n157:glDrawArraysInstanced\n158:glDrawArrays\n159:glDisableVertexAttribArray\n160:glDisable\n161:glDepthMask\n162:glDeleteVertexArraysOES\n163:glDeleteVertexArrays\n164:glDeleteTextures\n165:glDeleteSync\n166:glDeleteShader\n167:glDeleteSamplers\n168:glDeleteRenderbuffers\n169:glDeleteProgram\n170:glDeleteFramebuffers\n171:glDeleteBuffers\n172:glCullFace\n173:glCreateShader\n174:glCreateProgram\n175:glCopyTexSubImage2D\n176:glCopyBufferSubData\n177:glCompressedTexSubImage2D\n178:glCompressedTexImage2D\n179:glCompileShader\n180:glColorMask\n181:glCheckFramebufferStatus\n182:glBufferSubData\n183:glBufferData\n184:glBlitFramebuffer\n185:glBlendFunc\n186:glBlendEquation\n187:glBlendColor\n188:glBindVertexArrayOES\n189:glBindVertexArray\n190:glBindTexture\n191:glBindSampler\n192:glBindRenderbuffer\n193:glBindBuffer\n194:glBindAttribLocation\n195:glAttachShader\n196:glActiveTexture\n197:exit\n198:emscripten_webgl_get_current_context\n199:emscripten_resize_heap\n200:emscripten_get_now\n201:_emval_not\n202:_emscripten_throw_longjmp\n203:_emscripten_get_now_is_monotonic\n204:_embind_register_void\n205:_embind_register_emval\n206:_embind_register_bool\n207:__wasi_fd_read\n208:__wasi_environ_sizes_get\n209:__wasi_environ_get\n210:__syscall_stat64\n211:__syscall_openat\n212:__syscall_newfstatat\n213:__syscall_ioctl\n214:__syscall_fstat64\n215:dlfree\n216:operator\\20new\\28unsigned\\20long\\29\n217:void\\20emscripten::internal::raw_destructor<SkColorSpace>\\28SkColorSpace*\\29\n218:__memcpy\n219:SkString::~SkString\\28\\29\n220:__memset\n221:GrGLSLShaderBuilder::codeAppendf\\28char\\20const*\\2c\\20...\\29\n222:SkColorInfo::~SkColorInfo\\28\\29\n223:SkContainerAllocator::allocate\\28int\\2c\\20double\\29\n224:SkDebugf\\28char\\20const*\\2c\\20...\\29\n225:SkString::SkString\\28\\29\n226:SkData::~SkData\\28\\29\n227:SkString::insert\\28unsigned\\20long\\2c\\20char\\20const*\\29\n228:memcmp\n229:memmove\n230:hb_blob_destroy\n231:sk_report_container_overflow_and_die\\28\\29\n232:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\28char\\20const*\\29\n233:SkPath::~SkPath\\28\\29\n234:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::~__func\\28\\29\n235:SkArenaAlloc::ensureSpace\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n236:SkSL::ErrorReporter::error\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n237:SkRasterPipeline::append\\28SkRasterPipelineOp\\2c\\20void*\\29\n238:ft_mem_free\n239:SkString::SkString\\28char\\20const*\\29\n240:FT_MulFix\n241:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::share\\28void*\\29\n242:SkTDStorage::append\\28\\29\n243:SkMatrix::computeTypeMask\\28\\29\\20const\n244:GrGpuResource::notifyARefCntIsZero\\28GrIORef<GrGpuResource>::LastRemovedRef\\29\\20const\n245:SkWriter32::growToAtLeast\\28unsigned\\20long\\29\n246:testSetjmp\n247:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\28char\\20const*\\2c\\20unsigned\\20long\\29\n248:fmaxf\n249:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::size\\5babi:v160004\\5d\\28\\29\\20const\n250:SkString::SkString\\28SkString&&\\29\n251:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n252:SkSL::Pool::AllocMemory\\28unsigned\\20long\\29\n253:GrColorInfo::~GrColorInfo\\28\\29\n254:strlen\n255:SkIRect::intersect\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n256:GrBackendFormat::~GrBackendFormat\\28\\29\n257:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::insert\\28unsigned\\20long\\2c\\20char\\20const*\\29\n258:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n259:GrContext_Base::caps\\28\\29\\20const\n260:SkPaint::~SkPaint\\28\\29\n261:SkTDStorage::~SkTDStorage\\28\\29\n262:SkSL::RP::Generator::pushExpression\\28SkSL::Expression\\20const&\\2c\\20bool\\29\n263:sk_malloc_throw\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n264:SkTDStorage::SkTDStorage\\28int\\29\n265:SkStrokeRec::getStyle\\28\\29\\20const\n266:strncmp\n267:SkString::SkString\\28SkString\\20const&\\29\n268:hb_ot_map_builder_t::add_feature\\28unsigned\\20int\\2c\\20hb_ot_map_feature_flags_t\\2c\\20unsigned\\20int\\29\n269:void\\20emscripten::internal::raw_destructor<SkContourMeasure>\\28SkContourMeasure*\\29\n270:SkMatrix::mapRect\\28SkRect*\\2c\\20SkRect\\20const&\\2c\\20SkApplyPerspectiveClip\\29\\20const\n271:SkBitmap::~SkBitmap\\28\\29\n272:hb_buffer_t::make_room_for\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n273:SkArenaAlloc::installFooter\\28char*\\20\\28*\\29\\28char*\\29\\2c\\20unsigned\\20int\\29\n274:SkArenaAlloc::allocObjectWithFooter\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n275:fminf\n276:strcmp\n277:skia_private::TArray<SkPoint\\2c\\20true>::push_back\\28SkPoint\\20const&\\29\n278:SkString::operator=\\28SkString&&\\29\n279:SkSemaphore::osSignal\\28int\\29\n280:SkPath::SkPath\\28\\29\n281:std::__2::__shared_weak_count::__release_weak\\28\\29\n282:skia_png_error\n283:hb_buffer_t::message\\28hb_font_t*\\2c\\20char\\20const*\\2c\\20...\\29\n284:SkSL::Parser::nextRawToken\\28\\29\n285:SkArenaAlloc::~SkArenaAlloc\\28\\29\n286:SkMatrix::computePerspectiveTypeMask\\28\\29\\20const\n287:SkColorInfo::SkColorInfo\\28SkColorInfo\\20const&\\29\n288:SkFontMgr*\\20emscripten::base<SkFontMgr>::convertPointer<skia::textlayout::TypefaceFontProvider\\2c\\20SkFontMgr>\\28skia::textlayout::TypefaceFontProvider*\\29\n289:SkSemaphore::osWait\\28\\29\n290:SkIntersections::insert\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\n291:dlmalloc\n292:std::__throw_bad_array_new_length\\5babi:v160004\\5d\\28\\29\n293:FT_DivFix\n294:SkString::appendf\\28char\\20const*\\2c\\20...\\29\n295:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_string\\28\\29\n296:skia_png_free\n297:SkPath::lineTo\\28float\\2c\\20float\\29\n298:skia_png_crc_finish\n299:skia_png_chunk_benign_error\n300:SkChecksum::Hash32\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n301:SkMatrix::mapPoints\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n302:dlrealloc\n303:SkMatrix::setTranslate\\28float\\2c\\20float\\29\n304:skia_png_warning\n305:OT::VarData::get_delta\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20OT::VarRegionList\\20const&\\2c\\20float*\\29\\20const\n306:ft_mem_qrealloc\n307:SkColorInfo::bytesPerPixel\\28\\29\\20const\n308:SkPaint::SkPaint\\28SkPaint\\20const&\\29\n309:GrVertexChunkBuilder::allocChunk\\28int\\29\n310:skia_private::TArray<unsigned\\20long\\2c\\20true>::push_back\\28unsigned\\20long\\20const&\\29\n311:OT::DeltaSetIndexMap::map\\28unsigned\\20int\\29\\20const\n312:ft_mem_realloc\n313:SkReadBuffer::readUInt\\28\\29\n314:SkMatrix::reset\\28\\29\n315:SkImageInfo::MakeUnknown\\28int\\2c\\20int\\29\n316:GrSurfaceProxyView::asRenderTargetProxy\\28\\29\\20const\n317:skia_private::TArray<unsigned\\20char\\2c\\20true>::push_back\\28unsigned\\20char&&\\29\n318:SkPath::SkPath\\28SkPath\\20const&\\29\n319:SkPaint::SkPaint\\28\\29\n320:ft_validator_error\n321:SkSL::RP::Builder::appendInstruction\\28SkSL::RP::BuilderOp\\2c\\20SkSL::RP::Builder::SlotList\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n322:SkBlitter::~SkBlitter\\28\\29\n323:SkBitmap::SkBitmap\\28\\29\n324:strstr\n325:SkOpPtT::segment\\28\\29\\20const\n326:sk_malloc_flags\\28unsigned\\20long\\2c\\20unsigned\\20int\\29\n327:SkSL::Parser::expect\\28SkSL::Token::Kind\\2c\\20char\\20const*\\2c\\20SkSL::Token*\\29\n328:SkJSONWriter::appendName\\28char\\20const*\\29\n329:SkImageGenerator::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n330:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_pointer\\5babi:v160004\\5d\\28\\29\n331:skia_private::TArray<sk_sp<SkIDChangeListener>\\2c\\20true>::push_back\\28sk_sp<SkIDChangeListener>&&\\29\n332:SkMatrix::invertNonIdentity\\28SkMatrix*\\29\\20const\n333:SkJSONWriter::beginValue\\28bool\\29\n334:GrTextureGenerator::isTextureGenerator\\28\\29\\20const\n335:dlcalloc\n336:skia_png_get_uint_32\n337:skia_png_calculate_crc\n338:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::resize\\5babi:v160004\\5d\\28unsigned\\20long\\29\n339:skgpu::Swizzle::Swizzle\\28char\\20const*\\29\n340:SkSL::GLSLCodeGenerator::writeExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n341:SkPoint::Length\\28float\\2c\\20float\\29\n342:GrImageInfo::GrImageInfo\\28GrImageInfo\\20const&\\29\n343:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n344:std::__2::locale::~locale\\28\\29\n345:SkPath::getBounds\\28\\29\\20const\n346:skia_private::TArray<SkString\\2c\\20true>::push_back\\28SkString&&\\29\n347:SkRect::intersect\\28SkRect\\20const&\\29\n348:FT_Stream_Seek\n349:skia_private::TArray<SkSL::RP::Instruction\\2c\\20true>::push_back\\28SkSL::RP::Instruction&&\\29\n350:SkRect::join\\28SkRect\\20const&\\29\n351:SkPathRef::Editor::Editor\\28sk_sp<SkPathRef>*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n352:hb_blob_reference\n353:cf2_stack_popFixed\n354:SkRect::setBoundsCheck\\28SkPoint\\20const*\\2c\\20int\\29\n355:GrGLExtensions::has\\28char\\20const*\\29\\20const\n356:SkCachedData::internalUnref\\28bool\\29\\20const\n357:GrProcessor::operator\\20new\\28unsigned\\20long\\29\n358:FT_MulDiv\n359:std::__2::to_string\\28int\\29\n360:std::__2::__throw_bad_function_call\\5babi:v160004\\5d\\28\\29\n361:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>::operator=\\28skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>&&\\29\n362:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\29\n363:SkRasterPipeline::uncheckedAppend\\28SkRasterPipelineOp\\2c\\20void*\\29\n364:std::__2::ios_base::getloc\\28\\29\\20const\n365:SkRegion::~SkRegion\\28\\29\n366:skia_png_read_push_finish_row\n367:skia::textlayout::TextStyle::~TextStyle\\28\\29\n368:hb_blob_make_immutable\n369:SkString::operator=\\28char\\20const*\\29\n370:SkReadBuffer::setInvalid\\28\\29\n371:hb_ot_map_builder_t::add_pause\\28unsigned\\20int\\2c\\20bool\\20\\28*\\29\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\\29\n372:cff1_path_procs_extents_t::curve\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n373:VP8GetValue\n374:SkSemaphore::~SkSemaphore\\28\\29\n375:SkColorInfo::operator=\\28SkColorInfo&&\\29\n376:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28\\29\n377:skgpu::ganesh::SurfaceContext::caps\\28\\29\\20const\n378:SkSL::Type::matches\\28SkSL::Type\\20const&\\29\\20const\n379:SkSL::String::printf\\28char\\20const*\\2c\\20...\\29\n380:SkPoint::normalize\\28\\29\n381:SkColorInfo::operator=\\28SkColorInfo\\20const&\\29\n382:SkArenaAlloc::SkArenaAlloc\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n383:FT_Stream_ReadUShort\n384:jdiv_round_up\n385:SkSL::RP::Builder::binary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n386:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n387:jzero_far\n388:hb_blob_get_data_writable\n389:SkPathRef::growForVerb\\28int\\2c\\20float\\29\n390:SkColorInfo::SkColorInfo\\28SkColorInfo&&\\29\n391:skia_png_write_data\n392:bool\\20std::__2::operator==\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20const&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n393:SkRuntimeEffect::uniformSize\\28\\29\\20const\n394:SkImageGenerator::onQueryYUVAInfo\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\2c\\20SkYUVAPixmapInfo*\\29\\20const\n395:FT_Stream_ExitFrame\n396:subtag_matches\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n397:skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::push_back_raw\\28int\\29\n398:__shgetc\n399:SkBlitter::~SkBlitter\\28\\29.1\n400:FT_Stream_GetUShort\n401:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator=\\5babi:v160004\\5d\\28wchar_t\\20const*\\29\n402:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\5babi:v160004\\5d\\28char\\20const*\\29\n403:bool\\20std::__2::operator==\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20const&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20const&\\29\n404:SkPoint::scale\\28float\\2c\\20SkPoint*\\29\\20const\n405:SkNullBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n406:GrFragmentProcessor::ProgramImpl::invokeChild\\28int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrFragmentProcessor::ProgramImpl::EmitArgs&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n407:sktext::gpu::BagOfBytes::~BagOfBytes\\28\\29\n408:skia_png_chunk_error\n409:hb_face_reference_table\n410:SkMatrix::setConcat\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n411:GrSurfaceProxyView::asTextureProxy\\28\\29\\20const\n412:RoughlyEqualUlps\\28float\\2c\\20float\\29\n413:GrGLSLVaryingHandler::addVarying\\28char\\20const*\\2c\\20GrGLSLVarying*\\2c\\20GrGLSLVaryingHandler::Interpolation\\29\n414:SkTDStorage::reserve\\28int\\29\n415:SkStringPrintf\\28char\\20const*\\2c\\20...\\29\n416:SkSL::SymbolTable::addWithoutOwnershipOrDie\\28SkSL::Symbol*\\29\n417:SkPath::Iter::next\\28SkPoint*\\29\n418:OT::Layout::Common::Coverage::get_coverage\\28unsigned\\20int\\29\\20const\n419:GrQuad::MakeFromRect\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n420:round\n421:SkRecord::grow\\28\\29\n422:SkRGBA4f<\\28SkAlphaType\\293>::toBytes_RGBA\\28\\29\\20const\n423:GrProcessor::operator\\20new\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n424:std::__2::default_delete<SkSL::SymbolTable>::operator\\28\\29\\5babi:v160004\\5d\\28SkSL::SymbolTable*\\29\\20const\n425:skgpu::ganesh::SurfaceDrawContext::addDrawOp\\28GrClip\\20const*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20std::__2::function<void\\20\\28GrOp*\\2c\\20unsigned\\20int\\29>\\20const&\\29\n426:skgpu::ResourceKeyHash\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20long\\29\n427:VP8LoadFinalBytes\n428:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitStatement\\28SkSL::Statement\\20const&\\29\n429:SkSL::RP::Builder::discard_stack\\28int\\2c\\20int\\29\n430:SkPath::moveTo\\28float\\2c\\20float\\29\n431:SkPath::conicTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n432:SkCanvas::predrawNotify\\28bool\\29\n433:std::__2::__cloc\\28\\29\n434:sscanf\n435:SkSurfaceProps::SkSurfaceProps\\28\\29\n436:SkStrikeSpec::~SkStrikeSpec\\28\\29\n437:GrSkSLFP::GrSkSLFP\\28sk_sp<SkRuntimeEffect>\\2c\\20char\\20const*\\2c\\20GrSkSLFP::OptFlags\\29\n438:GrBackendFormat::GrBackendFormat\\28\\29\n439:__multf3\n440:VP8LReadBits\n441:SkTDStorage::append\\28int\\29\n442:SkPath::isFinite\\28\\29\\20const\n443:SkMatrix::setScale\\28float\\2c\\20float\\29\n444:SkIRect\\20skif::Mapping::map<SkIRect>\\28SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n445:GrOpsRenderPass::setScissorRect\\28SkIRect\\20const&\\29\n446:GrOpsRenderPass::bindPipeline\\28GrProgramInfo\\20const&\\2c\\20SkRect\\20const&\\29\n447:hb_draw_funcs_t::start_path\\28void*\\2c\\20hb_draw_state_t&\\29\n448:SkPath::operator=\\28SkPath\\20const&\\29\n449:SkColorSpaceXformSteps::SkColorSpaceXformSteps\\28SkColorSpace\\20const*\\2c\\20SkAlphaType\\2c\\20SkColorSpace\\20const*\\2c\\20SkAlphaType\\29\n450:GrSimpleMeshDrawOpHelper::~GrSimpleMeshDrawOpHelper\\28\\29\n451:GrProcessorSet::GrProcessorSet\\28GrPaint&&\\29\n452:GrCaps::getDefaultBackendFormat\\28GrColorType\\2c\\20skgpu::Renderable\\29\\20const\n453:GrBackendFormats::AsGLFormat\\28GrBackendFormat\\20const&\\29\n454:std::__2::locale::id::__get\\28\\29\n455:std::__2::locale::facet::facet\\5babi:v160004\\5d\\28unsigned\\20long\\29\n456:skia_private::TArray<SkPoint\\2c\\20true>::push_back_raw\\28int\\29\n457:hb_buffer_t::_infos_set_glyph_flags\\28hb_glyph_info_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n458:SkSL::PipelineStage::PipelineStageCodeGenerator::writeExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n459:SkSL::Inliner::inlineExpression\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::Expression\\20const&\\29\n460:SkSL::GLSLCodeGenerator::writeIdentifier\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n461:SkPath::reset\\28\\29\n462:SkPath::isEmpty\\28\\29\\20const\n463:SkPaint::setStyle\\28SkPaint::Style\\29\n464:GrGeometryProcessor::AttributeSet::initImplicit\\28GrGeometryProcessor::Attribute\\20const*\\2c\\20int\\29\n465:GrContext_Base::contextID\\28\\29\\20const\n466:FT_Stream_EnterFrame\n467:AlmostEqualUlps\\28float\\2c\\20float\\29\n468:std::__2::locale::__imp::install\\28std::__2::locale::facet*\\2c\\20long\\29\n469:skia_png_read_data\n470:SkSpinlock::contendedAcquire\\28\\29\n471:SkSL::evaluate_n_way_intrinsic\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\\20\\28.18\\29\n472:SkSL::FunctionDeclaration::description\\28\\29\\20const\n473:SkRuntimeEffect::MakeForShader\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n474:SkDPoint::approximatelyEqual\\28SkDPoint\\20const&\\29\\20const\n475:GrSurfaceProxy::backingStoreDimensions\\28\\29\\20const\n476:GrOpsRenderPass::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29\n477:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::~basic_string\\28\\29\n478:skgpu::ganesh::SurfaceContext::drawingManager\\28\\29\n479:skgpu::UniqueKey::GenerateDomain\\28\\29\n480:hb_buffer_t::_set_glyph_flags\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n481:emscripten_longjmp\n482:SkDynamicMemoryWStream::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n483:GrMeshDrawOp::GrMeshDrawOp\\28unsigned\\20int\\29\n484:FT_RoundFix\n485:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n486:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::unique_ptr\\5babi:v160004\\5d<true\\2c\\20void>\\28unsigned\\20char*\\2c\\20std::__2::__dependent_type<std::__2::__unique_ptr_deleter_sfinae<void\\20\\28*\\29\\28void*\\29>\\2c\\20true>::__good_rval_ref_type\\29\n487:hb_face_get_glyph_count\n488:cf2_stack_pushFixed\n489:__multi3\n490:SkSL::RP::Builder::push_duplicates\\28int\\29\n491:SkSL::ConstructorCompound::MakeFromConstants\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20const*\\29\n492:SkMatrix::postTranslate\\28float\\2c\\20float\\29\n493:SkBlockAllocator::reset\\28\\29\n494:SkBitmapDevice::drawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n495:GrTextureEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\29\n496:GrGLSLVaryingHandler::addPassThroughAttribute\\28GrShaderVar\\20const&\\2c\\20char\\20const*\\2c\\20GrGLSLVaryingHandler::Interpolation\\29\n497:GrFragmentProcessor::registerChild\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSL::SampleUsage\\29\n498:FT_Stream_ReleaseFrame\n499:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n500:skia::textlayout::TextStyle::TextStyle\\28skia::textlayout::TextStyle\\20const&\\29\n501:hb_buffer_t::merge_clusters_impl\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n502:decltype\\28fp.sanitize\\28this\\29\\29\\20hb_sanitize_context_t::_dispatch<OT::Layout::Common::Coverage>\\28OT::Layout::Common::Coverage\\20const&\\2c\\20hb_priority<1u>\\29\n503:byn$mgfn-shared$decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkNullBlitter*\\20SkArenaAlloc::make<SkNullBlitter>\\28\\29::'lambda'\\28void*\\29>\\28SkNullBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n504:SkWStream::writePackedUInt\\28unsigned\\20long\\29\n505:SkSurface_Base::aboutToDraw\\28SkSurface::ContentChangeMode\\29\n506:SkSL::RP::Builder::push_constant_i\\28int\\2c\\20int\\29\n507:SkSL::BreakStatement::~BreakStatement\\28\\29\n508:SkNullBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n509:SkColorInfo::refColorSpace\\28\\29\\20const\n510:GrPipeline::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n511:GrGeometryProcessor::GrGeometryProcessor\\28GrProcessor::ClassID\\29\n512:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n513:SkSL::fold_expression\\28SkSL::Position\\2c\\20double\\2c\\20SkSL::Type\\20const*\\29\n514:SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0::operator\\28\\29\\28SkSL::FunctionDefinition\\20const*\\2c\\20SkSL::FunctionDefinition\\20const*\\29\\20const\n515:SkSL::RP::Generator::binaryOp\\28SkSL::Type\\20const&\\2c\\20SkSL::RP::Generator::TypedOps\\20const&\\29\n516:SkJSONWriter::appendf\\28char\\20const*\\2c\\20...\\29\n517:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\\28\\29\n518:SkBitmap::setImmutable\\28\\29\n519:GrGeometryProcessor::Attribute&\\20skia_private::TArray<GrGeometryProcessor::Attribute\\2c\\20true>::emplace_back<char\\20const\\20\\28&\\29\\20\\5b10\\5d\\2c\\20GrVertexAttribType\\2c\\20SkSLType>\\28char\\20const\\20\\28&\\29\\20\\5b10\\5d\\2c\\20GrVertexAttribType&&\\2c\\20SkSLType&&\\29\n520:Cr_z_crc32\n521:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::push_back\\28char\\29\n522:skia_png_push_save_buffer\n523:cosf\n524:SkShaderBase::SkShaderBase\\28\\29\n525:SkSL::RP::SlotManager::getVariableSlots\\28SkSL::Variable\\20const&\\29\n526:SkSL::RP::Builder::unary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n527:SkSL::Pool::FreeMemory\\28void*\\29\n528:SkReadBuffer::readScalar\\28\\29\n529:SkPaint::setShader\\28sk_sp<SkShader>\\29\n530:GrProcessorSet::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n531:GrGLTexture::target\\28\\29\\20const\n532:sk_srgb_singleton\\28\\29\n533:fma\n534:SkPaint::SkPaint\\28SkPaint&&\\29\n535:SkDPoint::ApproximatelyEqual\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n536:SkBitmap::SkBitmap\\28SkBitmap\\20const&\\29\n537:void\\20std::__2::vector<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>>>::__push_back_slow_path<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>>\\28std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>&&\\29\n538:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__init_copy_ctor_external\\28char\\20const*\\2c\\20unsigned\\20long\\29\n539:skip_spaces\n540:sk_realloc_throw\\28void*\\2c\\20unsigned\\20long\\29\n541:emscripten::smart_ptr_trait<sk_sp<GrDirectContext>>::get\\28sk_sp<GrDirectContext>\\20const&\\29\n542:cff2_path_param_t::cubic_to\\28CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n543:cff1_path_param_t::cubic_to\\28CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n544:bool\\20OT::Layout::Common::Coverage::collect_coverage<hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>>\\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>*\\29\\20const\n545:SkString::operator=\\28SkString\\20const&\\29\n546:SkSL::Type::toCompound\\28SkSL::Context\\20const&\\2c\\20int\\2c\\20int\\29\\20const\n547:SkPath::transform\\28SkMatrix\\20const&\\2c\\20SkPath*\\2c\\20SkApplyPerspectiveClip\\29\\20const\n548:SkPath::quadTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n549:SkBlockAllocator::addBlock\\28int\\2c\\20int\\29\n550:SkAAClipBlitter::~SkAAClipBlitter\\28\\29\n551:OT::hb_ot_apply_context_t::match_properties_mark\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n552:GrThreadSafeCache::VertexData::~VertexData\\28\\29\n553:GrShape::asPath\\28SkPath*\\2c\\20bool\\29\\20const\n554:GrShaderVar::appendDecl\\28GrShaderCaps\\20const*\\2c\\20SkString*\\29\\20const\n555:GrPixmapBase<void\\2c\\20GrPixmap>::~GrPixmapBase\\28\\29\n556:GrGLSLVaryingHandler::emitAttributes\\28GrGeometryProcessor\\20const&\\29\n557:void\\20emscripten::internal::raw_destructor<GrDirectContext>\\28GrDirectContext*\\29\n558:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::reset\\5babi:v160004\\5d\\28unsigned\\20char*\\29\n559:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator++\\5babi:v160004\\5d\\28\\29\n560:skia_private::TArray<SkPaint\\2c\\20true>::push_back\\28SkPaint\\20const&\\29\n561:skcms_Transform\n562:png_icc_profile_error\n563:SkString::equals\\28SkString\\20const&\\29\\20const\n564:SkSL::evaluate_pairwise_intrinsic\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n565:SkSL::Type::MakeAliasType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Type\\20const&\\29\n566:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitExpression\\28SkSL::Expression\\20const&\\29\n567:SkRasterClip::~SkRasterClip\\28\\29\n568:SkPixmap::reset\\28SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n569:SkPath::countPoints\\28\\29\\20const\n570:SkPaint::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n571:SkPaint::canComputeFastBounds\\28\\29\\20const\n572:SkOpPtT::contains\\28SkOpPtT\\20const*\\29\\20const\n573:SkOpAngle::segment\\28\\29\\20const\n574:SkMatrix::preConcat\\28SkMatrix\\20const&\\29\n575:SkMatrix::mapVectors\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n576:SkMasks::getRed\\28unsigned\\20int\\29\\20const\n577:SkMasks::getGreen\\28unsigned\\20int\\29\\20const\n578:SkMasks::getBlue\\28unsigned\\20int\\29\\20const\n579:SkColorInfo::shiftPerPixel\\28\\29\\20const\n580:SkBitmap::tryAllocPixels\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n581:GrProcessorSet::~GrProcessorSet\\28\\29\n582:GrMeshDrawOp::createProgramInfo\\28GrMeshDrawTarget*\\29\n583:FT_Stream_ReadFields\n584:AutoLayerForImageFilter::~AutoLayerForImageFilter\\28\\29\n585:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator++\\5babi:v160004\\5d\\28\\29\n586:saveSetjmp\n587:operator==\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n588:hb_face_t::load_num_glyphs\\28\\29\\20const\n589:fmodf\n590:emscripten::internal::MethodInvoker<int\\20\\28SkAnimatedImage::*\\29\\28\\29\\2c\\20int\\2c\\20SkAnimatedImage*>::invoke\\28int\\20\\28SkAnimatedImage::*\\20const&\\29\\28\\29\\2c\\20SkAnimatedImage*\\29\n591:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::construct_null\\28\\29\n592:VP8GetSignedValue\n593:SkSafeMath::Mul\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n594:SkSL::Type::MakeVectorType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20int\\29\n595:SkRasterPipeline::SkRasterPipeline\\28SkArenaAlloc*\\29\n596:SkPoint::setLength\\28float\\29\n597:SkMatrix::postConcat\\28SkMatrix\\20const&\\29\n598:OT::GDEF::accelerator_t::mark_set_covers\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n599:GrTextureProxy::mipmapped\\28\\29\\20const\n600:GrGpuResource::~GrGpuResource\\28\\29\n601:FT_Stream_GetULong\n602:FT_Get_Char_Index\n603:Cr_z__tr_flush_bits\n604:void\\20emscripten::internal::raw_destructor<sk_sp<GrDirectContext>>\\28sk_sp<GrDirectContext>*\\29\n605:void\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20int>::setWire<RuntimeEffectUniform>\\28int\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform&\\2c\\20int\\29\n606:std::__2::ctype<char>::widen\\5babi:v160004\\5d\\28char\\29\\20const\n607:std::__2::__throw_overflow_error\\5babi:v160004\\5d\\28char\\20const*\\29\n608:skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::set\\28char\\20const*\\2c\\20unsigned\\20int\\29\n609:skia_png_chunk_report\n610:skgpu::UniqueKey::operator=\\28skgpu::UniqueKey\\20const&\\29\n611:sk_double_nearly_zero\\28double\\29\n612:int\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20int>::getWire<RuntimeEffectUniform>\\28int\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform\\20const&\\29\n613:hb_font_get_glyph\n614:ft_mem_qalloc\n615:fit_linear\\28skcms_Curve\\20const*\\2c\\20int\\2c\\20float\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n616:_output_with_dotted_circle\\28hb_buffer_t*\\29\n617:WebPSafeMalloc\n618:SkStream::readS32\\28int*\\29\n619:SkSL::GLSLCodeGenerator::getTypeName\\28SkSL::Type\\20const&\\29\n620:SkRGBA4f<\\28SkAlphaType\\293>::FromColor\\28unsigned\\20int\\29\n621:SkPathRef::~SkPathRef\\28\\29\n622:SkPath::Iter::Iter\\28SkPath\\20const&\\2c\\20bool\\29\n623:SkPaint::setPathEffect\\28sk_sp<SkPathEffect>\\29\n624:SkMatrix::setRectToRect\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix::ScaleToFit\\29\n625:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_3::operator\\28\\29\\28\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n626:SkImageFilter::getInput\\28int\\29\\20const\n627:SkGlyph::rowBytes\\28\\29\\20const\n628:SkDrawable::getFlattenableType\\28\\29\\20const\n629:SkDrawable::getBounds\\28\\29\n630:SkDCubic::ptAtT\\28double\\29\\20const\n631:SkColorSpace::MakeSRGB\\28\\29\n632:SkColorInfo::SkColorInfo\\28\\29\n633:GrOpFlushState::drawMesh\\28GrSimpleMesh\\20const&\\29\n634:GrImageInfo::GrImageInfo\\28SkImageInfo\\20const&\\29\n635:DefaultGeoProc::Impl::~Impl\\28\\29\n636:out\n637:jpeg_fill_bit_buffer\n638:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\n639:SkString::data\\28\\29\n640:SkSL::Type::coerceExpression\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Context\\20const&\\29\\20const\n641:SkSL::Type::MakeGenericType\\28char\\20const*\\2c\\20SkSpan<SkSL::Type\\20const*\\20const>\\2c\\20SkSL::Type\\20const*\\29\n642:SkSL::ConstantFolder::GetConstantValueForVariable\\28SkSL::Expression\\20const&\\29\n643:SkSL::Analysis::HasSideEffects\\28SkSL::Expression\\20const&\\29\n644:SkRegion::setRect\\28SkIRect\\20const&\\29\n645:SkRegion::SkRegion\\28\\29\n646:SkRecords::FillBounds::adjustForSaveLayerPaints\\28SkRect*\\2c\\20int\\29\\20const\n647:SkPathStroker::lineTo\\28SkPoint\\20const&\\2c\\20SkPath::Iter\\20const*\\29\n648:SkPaint::setMaskFilter\\28sk_sp<SkMaskFilter>\\29\n649:SkPaint::setColor\\28unsigned\\20int\\29\n650:SkOpContourBuilder::flush\\28\\29\n651:SkCanvas::restoreToCount\\28int\\29\n652:SkCanvas::internalQuickReject\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\29\n653:SkAutoPixmapStorage::~SkAutoPixmapStorage\\28\\29\n654:GrMatrixEffect::Make\\28SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n655:std::__2::char_traits<char>::assign\\28char&\\2c\\20char\\20const&\\29\n656:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\5babi:v160004\\5d\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\29\n657:std::__2::__check_grouping\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int&\\29\n658:skia_png_malloc\n659:skia::textlayout::Cluster::run\\28\\29\\20const\n660:skgpu::ganesh::SurfaceDrawContext::drawFilledQuad\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\29\n661:sk_sp<SkData>::~sk_sp\\28\\29\n662:png_write_complete_chunk\n663:pad\n664:hb_lockable_set_t<hb_user_data_array_t::hb_user_data_item_t\\2c\\20hb_mutex_t>::fini\\28hb_mutex_t&\\29\n665:ft_mem_alloc\n666:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\n667:byn$mgfn-shared$std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28\\29\\20const\n668:__ashlti3\n669:SkWBuffer::writeNoSizeCheck\\28void\\20const*\\2c\\20unsigned\\20long\\29\n670:SkTCoincident::setPerp\\28SkTCurve\\20const&\\2c\\20double\\2c\\20SkDPoint\\20const&\\2c\\20SkTCurve\\20const&\\29\n671:SkStrokeRec::SkStrokeRec\\28SkStrokeRec::InitStyle\\29\n672:SkString::printf\\28char\\20const*\\2c\\20...\\29\n673:SkSL::Type::MakeMatrixType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20int\\2c\\20signed\\20char\\29\n674:SkSL::Operator::tightOperatorName\\28\\29\\20const\n675:SkReadBuffer::readColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\n676:SkPixmap::reset\\28\\29\n677:SkPictureData::requiredPaint\\28SkReadBuffer*\\29\\20const\n678:SkPath::cubicTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n679:SkPath::close\\28\\29\n680:SkPaintToGrPaint\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n681:SkPaint::setColor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkColorSpace*\\29\n682:SkMatrix::preTranslate\\28float\\2c\\20float\\29\n683:SkMatrix::mapXY\\28float\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n684:SkFindUnitQuadRoots\\28float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n685:SkDeque::push_back\\28\\29\n686:SkData::MakeWithCopy\\28void\\20const*\\2c\\20unsigned\\20long\\29\n687:SkCanvas::~SkCanvas\\28\\29.1\n688:SkCanvas::concat\\28SkMatrix\\20const&\\29\n689:SkBinaryWriteBuffer::writeBool\\28bool\\29\n690:OT::hb_paint_context_t::return_t\\20OT::Paint::dispatch<OT::hb_paint_context_t>\\28OT::hb_paint_context_t*\\29\\20const\n691:GrProgramInfo::GrProgramInfo\\28GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrGeometryProcessor\\20const*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n692:GrPixmapBase<void\\2c\\20GrPixmap>::GrPixmapBase\\28GrImageInfo\\2c\\20void*\\2c\\20unsigned\\20long\\29\n693:GrColorInfo::GrColorInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n694:FT_Outline_Translate\n695:FT_Load_Glyph\n696:FT_GlyphLoader_CheckPoints\n697:DefaultGeoProc::~DefaultGeoProc\\28\\29\n698:uprv_malloc_skia\n699:std::__2::ctype<char>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::ctype<char>>\\28std::__2::locale\\20const&\\29\n700:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_short_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n701:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_long_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n702:skcms_TransferFunction_eval\n703:sinf\n704:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28GrDirectContext&\\2c\\20unsigned\\20long\\29\\2c\\20void\\2c\\20GrDirectContext&\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28**\\29\\28GrDirectContext&\\2c\\20unsigned\\20long\\29\\2c\\20GrDirectContext*\\2c\\20unsigned\\20long\\29\n705:cbrtf\n706:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28\\29\\20const\n707:SkTextBlob::~SkTextBlob\\28\\29\n708:SkRasterPipeline::extend\\28SkRasterPipeline\\20const&\\29\n709:SkPaint::setBlendMode\\28SkBlendMode\\29\n710:SkMatrix::mapRadius\\28float\\29\\20const\n711:SkImageGenerator::onIsValid\\28GrRecordingContext*\\29\\20const\n712:SkIRect::join\\28SkIRect\\20const&\\29\n713:SkData::MakeUninitialized\\28unsigned\\20long\\29\n714:SkDQuad::RootsValidT\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n715:SkDLine::nearPoint\\28SkDPoint\\20const&\\2c\\20bool*\\29\\20const\n716:SkConic::chopIntoQuadsPOW2\\28SkPoint*\\2c\\20int\\29\\20const\n717:SkColorSpaceXformSteps::apply\\28float*\\29\\20const\n718:SkCodec::applyColorXform\\28void*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n719:SkCachedData::internalRef\\28bool\\29\\20const\n720:SkBitmap::installPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29\n721:GrSurface::RefCntedReleaseProc::~RefCntedReleaseProc\\28\\29\n722:GrStyle::initPathEffect\\28sk_sp<SkPathEffect>\\29\n723:GrShape::bounds\\28\\29\\20const\n724:GrProcessor::operator\\20delete\\28void*\\29\n725:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::~Impl\\28\\29\n726:GrBufferAllocPool::~GrBufferAllocPool\\28\\29.1\n727:AutoLayerForImageFilter::AutoLayerForImageFilter\\28SkCanvas*\\2c\\20SkPaint\\20const&\\2c\\20SkRect\\20const*\\2c\\20bool\\29\n728:std::__2::numpunct<char>::thousands_sep\\5babi:v160004\\5d\\28\\29\\20const\n729:std::__2::numpunct<char>::grouping\\5babi:v160004\\5d\\28\\29\\20const\n730:std::__2::ctype<wchar_t>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::ctype<wchar_t>>\\28std::__2::locale\\20const&\\29\n731:skia_png_malloc_warn\n732:rewind\\28GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n733:cf2_stack_popInt\n734:SkSL::Analysis::IsCompileTimeConstant\\28SkSL::Expression\\20const&\\29\n735:SkPaint::setColorFilter\\28sk_sp<SkColorFilter>\\29\n736:SkMatrixPriv::MapRect\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\29\n737:SkImageGenerator::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageGenerator::Options\\20const&\\29\n738:SkDevice::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n739:SkData::MakeEmpty\\28\\29\n740:SkConic::computeQuadPOW2\\28float\\29\\20const\n741:SkColorInfo::makeColorType\\28SkColorType\\29\\20const\n742:SkCodec::~SkCodec\\28\\29\n743:SkAAClip::quickContains\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n744:SkAAClip::isRect\\28\\29\\20const\n745:GrSurface::ComputeSize\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20bool\\29\n746:GrSimpleMeshDrawOpHelper::GrSimpleMeshDrawOpHelper\\28GrProcessorSet*\\2c\\20GrAAType\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n747:GrGeometryProcessor::ProgramImpl::SetTransform\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix*\\29\n748:GrDrawingManager::flushIfNecessary\\28\\29\n749:GrBlendFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkBlendMode\\2c\\20bool\\29\n750:FT_Stream_ExtractFrame\n751:AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n752:std::__2::ctype<wchar_t>::widen\\5babi:v160004\\5d\\28char\\29\\20const\n753:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__is_long\\5babi:v160004\\5d\\28\\29\\20const\n754:std::__2::__throw_bad_optional_access\\5babi:v160004\\5d\\28\\29\n755:snprintf\n756:skia_png_malloc_base\n757:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\\28\\29\n758:skgpu::ganesh::AsView\\28GrRecordingContext*\\2c\\20SkImage\\20const*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n759:hb_ot_face_t::init0\\28hb_face_t*\\29\n760:hb_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\2025u>\\2c\\20hb_face_t\\2c\\2025u\\2c\\20OT::GSUB_accelerator_t>::get\\28\\29\\20const\n761:__addtf3\n762:SkUTF::NextUTF8\\28char\\20const**\\2c\\20char\\20const*\\29\n763:SkTDStorage::reset\\28\\29\n764:SkScan::AntiHairLineRgn\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n765:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n766:SkSL::RP::Builder::label\\28int\\29\n767:SkSL::BinaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n768:SkRuntimeEffect::MakeForColorFilter\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n769:SkReadBuffer::skip\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n770:SkPath::countVerbs\\28\\29\\20const\n771:SkMatrix::set9\\28float\\20const*\\29\n772:SkMatrix::getMaxScale\\28\\29\\20const\n773:SkImageInfo::computeByteSize\\28unsigned\\20long\\29\\20const\n774:SkImageInfo::Make\\28int\\2c\\20int\\2c\\20SkColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n775:SkImageInfo::MakeA8\\28int\\2c\\20int\\29\n776:SkImageFilter_Base::SkImageFilter_Base\\28sk_sp<SkImageFilter>\\20const*\\2c\\20int\\2c\\20std::__2::optional<bool>\\29\n777:SkDrawBase::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\2c\\20bool\\2c\\20SkBlitter*\\29\\20const\n778:SkData::MakeWithProc\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20void\\20\\28*\\29\\28void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n779:SkColorTypeIsAlwaysOpaque\\28SkColorType\\29\n780:SkBlockAllocator::SkBlockAllocator\\28SkBlockAllocator::GrowthPolicy\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n781:SkBlender::Mode\\28SkBlendMode\\29\n782:ReadHuffmanCode\n783:GrSurfaceProxy::~GrSurfaceProxy\\28\\29\n784:GrRenderTask::makeClosed\\28GrRecordingContext*\\29\n785:GrGpuBuffer::unmap\\28\\29\n786:GrContext_Base::options\\28\\29\\20const\n787:GrCaps::getReadSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n788:GrBufferAllocPool::reset\\28\\29\n789:FT_Stream_ReadByte\n790:std::__2::char_traits<wchar_t>::assign\\28wchar_t&\\2c\\20wchar_t\\20const&\\29\n791:std::__2::char_traits<char>::copy\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n792:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::begin\\5babi:v160004\\5d\\28\\29\n793:std::__2::__next_prime\\28unsigned\\20long\\29\n794:std::__2::__libcpp_snprintf_l\\28char*\\2c\\20unsigned\\20long\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n795:skif::LayerSpace<SkMatrix>::mapRect\\28skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n796:is_equal\\28std::type_info\\20const*\\2c\\20std::type_info\\20const*\\2c\\20bool\\29\n797:hb_buffer_t::sync\\28\\29\n798:__floatsitf\n799:WebPSafeCalloc\n800:StreamRemainingLengthIsBelow\\28SkStream*\\2c\\20unsigned\\20long\\29\n801:SkSL::RP::Builder::swizzle\\28int\\2c\\20SkSpan<signed\\20char\\20const>\\29\n802:SkSL::Parser::expression\\28\\29\n803:SkRGBA4f<\\28SkAlphaType\\293>::toSkColor\\28\\29\\20const\n804:SkPath::isConvex\\28\\29\\20const\n805:SkPaint::asBlendMode\\28\\29\\20const\n806:SkImageFilter_Base::getFlattenableType\\28\\29\\20const\n807:SkImageFilter_Base::getChildOutputLayerBounds\\28int\\2c\\20skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n808:SkImageFilter_Base::getChildInputLayerBounds\\28int\\2c\\20skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n809:SkIDChangeListener::List::~List\\28\\29\n810:SkFontMgr::countFamilies\\28\\29\\20const\n811:SkDQuad::ptAtT\\28double\\29\\20const\n812:SkDLine::exactPoint\\28SkDPoint\\20const&\\29\\20const\n813:SkDConic::ptAtT\\28double\\29\\20const\n814:SkColorInfo::makeAlphaType\\28SkAlphaType\\29\\20const\n815:SkCanvas::save\\28\\29\n816:SkCanvas::drawImage\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n817:SkBitmap::setInfo\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n818:SkAAClip::Builder::addRun\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n819:GrSkSLFP::addChild\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20bool\\29\n820:GrGpuResource::hasRef\\28\\29\\20const\n821:GrGLSLShaderBuilder::appendTextureLookup\\28SkString*\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\29\\20const\n822:GrFragmentProcessor::cloneAndRegisterAllChildProcessors\\28GrFragmentProcessor\\20const&\\29\n823:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::~SwizzleFragmentProcessor\\28\\29\n824:GrDrawOpAtlas::~GrDrawOpAtlas\\28\\29\n825:GrBackendFormat::GrBackendFormat\\28GrBackendFormat\\20const&\\29\n826:AutoFTAccess::AutoFTAccess\\28SkTypeface_FreeType\\20const*\\29\n827:AlmostPequalUlps\\28float\\2c\\20float\\29\n828:void\\20std::__2::vector<std::__2::pair<unsigned\\20int\\2c\\20sk_sp<SkData>>\\2c\\20std::__2::allocator<std::__2::pair<unsigned\\20int\\2c\\20sk_sp<SkData>>>>::__emplace_back_slow_path<unsigned\\20int\\20const&\\2c\\20sk_sp<SkData>>\\28unsigned\\20int\\20const&\\2c\\20sk_sp<SkData>&&\\29\n829:strchr\n830:std::__2::ctype<char>::is\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20char\\29\\20const\n831:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<std::nullptr_t>\\28char\\20const*\\29\n832:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_long_cap\\5babi:v160004\\5d\\28unsigned\\20long\\29\n833:skia_private::TArray<unsigned\\20char\\2c\\20true>::operator=\\28skia_private::TArray<unsigned\\20char\\2c\\20true>&&\\29\n834:skia_png_reset_crc\n835:memchr\n836:hb_buffer_t::sync_so_far\\28\\29\n837:hb_buffer_t::move_to\\28unsigned\\20int\\29\n838:VP8ExitCritical\n839:SkTDStorage::resize\\28int\\29\n840:SkSwizzler::swizzle\\28void*\\2c\\20unsigned\\20char\\20const*\\29\n841:SkStream::readPackedUInt\\28unsigned\\20long*\\29\n842:SkSL::Type::coercionCost\\28SkSL::Type\\20const&\\29\\20const\n843:SkSL::Type::clone\\28SkSL::Context\\20const&\\2c\\20SkSL::SymbolTable*\\29\\20const\n844:SkSL::RP::Generator::writeStatement\\28SkSL::Statement\\20const&\\29\n845:SkSL::Parser::operatorRight\\28SkSL::Parser::AutoDepth&\\2c\\20SkSL::OperatorKind\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20\\28SkSL::Parser::*\\29\\28\\29\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&\\29\n846:SkResourceCache::Key::init\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20unsigned\\20long\\29\n847:SkReadBuffer::skip\\28unsigned\\20long\\29\n848:SkReadBuffer::readFlattenable\\28SkFlattenable::Type\\29\n849:SkRBuffer::read\\28void*\\2c\\20unsigned\\20long\\29\n850:SkIDChangeListener::List::List\\28\\29\n851:SkGlyph::path\\28\\29\\20const\n852:GrStyledShape::GrStyledShape\\28GrStyledShape\\20const&\\29\n853:GrRenderTargetProxy::arenas\\28\\29\n854:GrOpFlushState::caps\\28\\29\\20const\n855:GrGpuResource::hasNoCommandBufferUsages\\28\\29\\20const\n856:GrGeometryProcessor::ProgramImpl::WriteLocalCoord\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20GrShaderVar\\2c\\20SkMatrix\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n857:GrGLTextureParameters::SamplerOverriddenState::SamplerOverriddenState\\28\\29\n858:GrGLGpu::deleteFramebuffer\\28unsigned\\20int\\29\n859:GrFragmentProcessors::Make\\28SkShader\\20const*\\2c\\20GrFPArgs\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\n860:FT_Stream_ReadULong\n861:FT_Get_Module\n862:Cr_z__tr_flush_block\n863:AlmostBequalUlps\\28float\\2c\\20float\\29\n864:uprv_realloc_skia\n865:std::__2::numpunct<char>::truename\\5babi:v160004\\5d\\28\\29\\20const\n866:std::__2::moneypunct<char\\2c\\20false>::do_grouping\\28\\29\\20const\n867:std::__2::locale::use_facet\\28std::__2::locale::id&\\29\\20const\n868:std::__2::ctype<wchar_t>::is\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20wchar_t\\29\\20const\n869:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::empty\\5babi:v160004\\5d\\28\\29\\20const\n870:sktext::gpu::BagOfBytes::needMoreBytes\\28int\\2c\\20int\\29\n871:skia_png_save_int_32\n872:skia_png_safecat\n873:skia_png_gamma_significant\n874:skgpu::ganesh::SurfaceContext::readPixels\\28GrDirectContext*\\2c\\20GrPixmap\\2c\\20SkIPoint\\29\n875:hb_lazy_loader_t<OT::GPOS_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GPOS_accelerator_t\\2c\\2026u>\\2c\\20hb_face_t\\2c\\2026u\\2c\\20OT::GPOS_accelerator_t>::get\\28\\29\\20const\n876:hb_font_get_nominal_glyph\n877:hb_buffer_t::clear_output\\28\\29\n878:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20SkPaint*\\29\n879:cff_parse_num\n880:SkTSect::SkTSect\\28SkTCurve\\20const&\\29\n881:SkStrokeRec::SkStrokeRec\\28SkPaint\\20const&\\2c\\20float\\29\n882:SkString::set\\28char\\20const*\\2c\\20unsigned\\20long\\29\n883:SkSize\\20skif::Mapping::map<SkSize>\\28SkSize\\20const&\\2c\\20SkMatrix\\20const&\\29\n884:SkSL::SymbolTable::addWithoutOwnership\\28SkSL::Context\\20const&\\2c\\20SkSL::Symbol*\\29\n885:SkSL::Swizzle::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29\n886:SkSL::String::appendf\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20char\\20const*\\2c\\20...\\29\n887:SkSL::Parser::layoutInt\\28\\29\n888:SkSL::Parser::expectIdentifier\\28SkSL::Token*\\29\n889:SkRegion::Cliperator::next\\28\\29\n890:SkRegion::Cliperator::Cliperator\\28SkRegion\\20const&\\2c\\20SkIRect\\20const&\\29\n891:SkRRect::initializeRect\\28SkRect\\20const&\\29\n892:SkPictureRecorder::~SkPictureRecorder\\28\\29\n893:SkPathRef::CreateEmpty\\28\\29\n894:SkPath::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n895:SkPaint::setImageFilter\\28sk_sp<SkImageFilter>\\29\n896:SkMasks::getAlpha\\28unsigned\\20int\\29\\20const\n897:SkM44::setConcat\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\29\n898:SkImageFilters::Crop\\28SkRect\\20const&\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\n899:SkImageFilter_Base::getChildOutput\\28int\\2c\\20skif::Context\\20const&\\29\\20const\n900:SkData::MakeFromMalloc\\28void\\20const*\\2c\\20unsigned\\20long\\29\n901:SkDRect::setBounds\\28SkTCurve\\20const&\\29\n902:SkColorFilter::isAlphaUnchanged\\28\\29\\20const\n903:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\29\n904:SkCanvas::translate\\28float\\2c\\20float\\29\n905:SkBitmapCache::Rec::getKey\\28\\29\\20const\n906:PS_Conv_ToFixed\n907:OT::hb_ot_apply_context_t::hb_ot_apply_context_t\\28unsigned\\20int\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20hb_blob_t*\\29\n908:GrTriangulator::Line::intersect\\28GrTriangulator::Line\\20const&\\2c\\20SkPoint*\\29\\20const\n909:GrSimpleMeshDrawOpHelper::isCompatible\\28GrSimpleMeshDrawOpHelper\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\29\\20const\n910:GrQuad::MakeFromSkQuad\\28SkPoint\\20const*\\2c\\20SkMatrix\\20const&\\29\n911:GrOpsRenderPass::bindBuffers\\28sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20GrPrimitiveRestart\\29\n912:GrImageInfo::GrImageInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkISize\\20const&\\29\n913:GrColorInfo::GrColorInfo\\28SkColorInfo\\20const&\\29\n914:AlmostDequalUlps\\28double\\2c\\20double\\29\n915:tt_face_get_name\n916:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::size\\5babi:v160004\\5d\\28\\29\\20const\n917:std::__2::to_string\\28long\\20long\\29\n918:std::__2::__libcpp_locale_guard::~__libcpp_locale_guard\\5babi:v160004\\5d\\28\\29\n919:std::__2::__libcpp_locale_guard::__libcpp_locale_guard\\5babi:v160004\\5d\\28__locale_struct*&\\29\n920:skia_png_benign_error\n921:skia_png_app_error\n922:skgpu::ganesh::SurfaceFillContext::getOpsTask\\28\\29\n923:isdigit\n924:hb_sanitize_context_t::return_t\\20OT::Paint::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n925:hb_ot_layout_lookup_would_substitute\n926:hb_buffer_t::unsafe_to_break\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n927:ft_module_get_service\n928:expf\n929:emscripten::internal::FunctionInvoker<unsigned\\20long\\20\\28*\\29\\28GrDirectContext&\\29\\2c\\20unsigned\\20long\\2c\\20GrDirectContext&>::invoke\\28unsigned\\20long\\20\\28**\\29\\28GrDirectContext&\\29\\2c\\20GrDirectContext*\\29\n930:cf2_hintmap_map\n931:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>*\\29\\20const\n932:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28\\29\\20const\n933:blit_trapezoid_row\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n934:__sindf\n935:__shlim\n936:__cosdf\n937:SkTiffImageFileDirectory::getEntryValuesGeneric\\28unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20int\\2c\\20void*\\29\\20const\n938:SkSurface::getCanvas\\28\\29\n939:SkSL::cast_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n940:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitType\\28SkSL::Type\\20const&\\29\n941:SkSL::Variable::initialValue\\28\\29\\20const\n942:SkSL::SymbolTable::addArrayDimension\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20int\\29\n943:SkSL::StringStream::str\\28\\29\\20const\n944:SkSL::RP::Program::appendCopy\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20std::byte*\\2c\\20SkSL::RP::ProgramOp\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\\20const\n945:SkSL::RP::Generator::makeLValue\\28SkSL::Expression\\20const&\\2c\\20bool\\29\n946:SkSL::RP::DynamicIndexLValue::dynamicSlotRange\\28\\29\n947:SkSL::GLSLCodeGenerator::writeStatement\\28SkSL::Statement\\20const&\\29\n948:SkSL::Expression::description\\28\\29\\20const\n949:SkSL::Analysis::UpdateVariableRefKind\\28SkSL::Expression*\\2c\\20SkSL::VariableRefKind\\2c\\20SkSL::ErrorReporter*\\29\n950:SkRegion::setEmpty\\28\\29\n951:SkRasterPipeline::appendLoadDst\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n952:SkRRect::setRectRadii\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\29\n953:SkRRect::setOval\\28SkRect\\20const&\\29\n954:SkPointPriv::DistanceToLineSegmentBetweenSqd\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n955:SkPath::arcTo\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n956:SkPath::addPath\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath::AddPathMode\\29\n957:SkPaint::operator=\\28SkPaint&&\\29\n958:SkOpSpanBase::contains\\28SkOpSegment\\20const*\\29\\20const\n959:SkMipmap::ComputeLevelCount\\28int\\2c\\20int\\29\n960:SkMatrix::mapHomogeneousPoints\\28SkPoint3*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n961:SkIDChangeListener::List::changed\\28\\29\n962:SkDynamicMemoryWStream::detachAsData\\28\\29\n963:SkDevice::makeSpecial\\28SkBitmap\\20const&\\29\n964:SkColorFilter::filterColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkColorSpace*\\2c\\20SkColorSpace*\\29\\20const\n965:SkCanvas::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n966:SkAutoPixmapStorage::SkAutoPixmapStorage\\28\\29\n967:SkAAClipBlitterWrapper::init\\28SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n968:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\\28\\29\n969:RunBasedAdditiveBlitter::flush\\28\\29\n970:GrSurface::onRelease\\28\\29\n971:GrStyledShape::unstyledKeySize\\28\\29\\20const\n972:GrShape::convex\\28bool\\29\\20const\n973:GrRecordingContext::threadSafeCache\\28\\29\n974:GrProxyProvider::caps\\28\\29\\20const\n975:GrOp::GrOp\\28unsigned\\20int\\29\n976:GrMakeUncachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29\n977:GrGLSLShaderBuilder::getMangledFunctionName\\28char\\20const*\\29\n978:GrGLGpu::bindBuffer\\28GrGpuBufferType\\2c\\20GrBuffer\\20const*\\29\n979:GrGLAttribArrayState::set\\28GrGLGpu*\\2c\\20int\\2c\\20GrBuffer\\20const*\\2c\\20GrVertexAttribType\\2c\\20SkSLType\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n980:GrAAConvexTessellator::Ring::computeNormals\\28GrAAConvexTessellator\\20const&\\29\n981:GrAAConvexTessellator::Ring::computeBisectors\\28GrAAConvexTessellator\\20const&\\29\n982:FT_Activate_Size\n983:Cr_z_adler32\n984:vsnprintf\n985:void\\20extend_pts<\\28SkPaint::Cap\\292>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n986:void\\20extend_pts<\\28SkPaint::Cap\\291>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n987:top12\n988:toSkImageInfo\\28SimpleImageInfo\\20const&\\29\n989:std::__2::pair<std::__2::__unwrap_ref_decay<char\\20const*>::type\\2c\\20std::__2::__unwrap_ref_decay<char*>::type>\\20std::__2::make_pair\\5babi:v160004\\5d<char\\20const*\\2c\\20char*>\\28char\\20const*&&\\2c\\20char*&&\\29\n990:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator=\\5babi:v160004\\5d\\28std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&&\\29\n991:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n992:std::__2::__tree<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::__map_value_compare<unsigned\\20long\\2c\\20std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::less<unsigned\\20long>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>>>::destroy\\28std::__2::__tree_node<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20void*>*\\29\n993:std::__2::__num_put_base::__identify_padding\\28char*\\2c\\20char*\\2c\\20std::__2::ios_base\\20const&\\29\n994:std::__2::__num_get_base::__get_base\\28std::__2::ios_base&\\29\n995:std::__2::__libcpp_asprintf_l\\28char**\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n996:skif::RoundOut\\28SkRect\\29\n997:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::removeSlot\\28int\\29\n998:skia_png_zstream_error\n999:skia::textlayout::TextLine::iterateThroughVisualRuns\\28bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>\\20const&\\29\\20const\n1000:skia::textlayout::ParagraphImpl::cluster\\28unsigned\\20long\\29\n1001:skia::textlayout::Cluster::runOrNull\\28\\29\\20const\n1002:skgpu::ganesh::SurfaceFillContext::replaceOpsTask\\28\\29\n1003:skcms_TransferFunction_getType\n1004:skcms_GetTagBySignature\n1005:read_curve\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20int\\2c\\20skcms_Curve*\\2c\\20unsigned\\20int*\\29\n1006:pow\n1007:int\\20std::__2::__get_up_to_n_digits\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20int\\29\n1008:int\\20std::__2::__get_up_to_n_digits\\5babi:v160004\\5d<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20int\\29\n1009:hb_serialize_context_t::pop_pack\\28bool\\29\n1010:hb_lazy_loader_t<OT::OS2\\2c\\20hb_table_lazy_loader_t<OT::OS2\\2c\\206u\\2c\\20true>\\2c\\20hb_face_t\\2c\\206u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1011:bool\\20std::__2::operator!=\\5babi:v160004\\5d<char*>\\28std::__2::__wrap_iter<char*>\\20const&\\2c\\20std::__2::__wrap_iter<char*>\\20const&\\29\n1012:afm_parser_read_vals\n1013:__extenddftf2\n1014:\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n1015:\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n1016:\\28anonymous\\20namespace\\29::colrv1_transform\\28FT_FaceRec_*\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkCanvas*\\2c\\20SkMatrix*\\29\n1017:WebPRescalerImport\n1018:SkTDStorage::removeShuffle\\28int\\29\n1019:SkString::SkString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1020:SkScan::HairLineRgn\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n1021:SkSL::VariableReference::VariableReference\\28SkSL::Position\\2c\\20SkSL::Variable\\20const*\\2c\\20SkSL::VariableRefKind\\29\n1022:SkSL::SymbolTable::lookup\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n1023:SkSL::ProgramUsage::get\\28SkSL::Variable\\20const&\\29\\20const\n1024:SkSL::Inliner::inlineStatement\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Analysis::ReturnComplexity\\2c\\20SkSL::Statement\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20bool\\29\n1025:SkSL::InlineCandidateAnalyzer::visitExpression\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\29\n1026:SkSL::GLSLCodeGenerator::getTypePrecision\\28SkSL::Type\\20const&\\29\n1027:SkRuntimeEffect::Uniform::sizeInBytes\\28\\29\\20const\n1028:SkReadBuffer::readByteArray\\28void*\\2c\\20unsigned\\20long\\29\n1029:SkRasterPipeline::run\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n1030:SkPictureData::optionalPaint\\28SkReadBuffer*\\29\\20const\n1031:SkPathWriter::isClosed\\28\\29\\20const\n1032:SkPath::isRect\\28SkRect*\\2c\\20bool*\\2c\\20SkPathDirection*\\29\\20const\n1033:SkPaint::setStrokeWidth\\28float\\29\n1034:SkOpSegment::nextChase\\28SkOpSpanBase**\\2c\\20int*\\2c\\20SkOpSpan**\\2c\\20SkOpSpanBase**\\29\\20const\n1035:SkOpSegment::addCurveTo\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\2c\\20SkPathWriter*\\29\\20const\n1036:SkMemoryStream::Make\\28sk_sp<SkData>\\29\n1037:SkMatrix::preScale\\28float\\2c\\20float\\29\n1038:SkMatrix::postScale\\28float\\2c\\20float\\29\n1039:SkMatrix::isSimilarity\\28float\\29\\20const\n1040:SkMask::computeImageSize\\28\\29\\20const\n1041:SkIntersections::removeOne\\28int\\29\n1042:SkImageInfo::Make\\28int\\2c\\20int\\2c\\20SkColorType\\2c\\20SkAlphaType\\29\n1043:SkDLine::ptAtT\\28double\\29\\20const\n1044:SkColorSpace::Equals\\28SkColorSpace\\20const*\\2c\\20SkColorSpace\\20const*\\29\n1045:SkColorFilter::makeComposed\\28sk_sp<SkColorFilter>\\29\\20const\n1046:SkBulkGlyphMetrics::~SkBulkGlyphMetrics\\28\\29\n1047:SkBitmap::peekPixels\\28SkPixmap*\\29\\20const\n1048:SkAAClip::setEmpty\\28\\29\n1049:PS_Conv_Strtol\n1050:OT::Layout::GSUB_impl::SubstLookup*\\20hb_serialize_context_t::push<OT::Layout::GSUB_impl::SubstLookup>\\28\\29\n1051:GrTriangulator::makeConnectingEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeType\\2c\\20GrTriangulator::Comparator\\20const&\\2c\\20int\\29\n1052:GrTextureProxy::~GrTextureProxy\\28\\29\n1053:GrSimpleMeshDrawOpHelper::createProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n1054:GrResourceAllocator::addInterval\\28GrSurfaceProxy*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20GrResourceAllocator::ActualUse\\2c\\20GrResourceAllocator::AllowRecycling\\29\n1055:GrRecordingContextPriv::makeSFCWithFallback\\28GrImageInfo\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1056:GrGpuBuffer::updateData\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n1057:GrGLTextureParameters::NonsamplerState::NonsamplerState\\28\\29\n1058:GrGLSLShaderBuilder::~GrGLSLShaderBuilder\\28\\29\n1059:GrGLSLProgramBuilder::nameVariable\\28char\\2c\\20char\\20const*\\2c\\20bool\\29\n1060:GrGLGpu::prepareToDraw\\28GrPrimitiveType\\29\n1061:GrGLFormatFromGLEnum\\28unsigned\\20int\\29\n1062:GrBackendTexture::getBackendFormat\\28\\29\\20const\n1063:GrBackendFormats::MakeGL\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1064:GrBackendFormatToCompressionType\\28GrBackendFormat\\20const&\\29\n1065:FilterLoop24_C\n1066:FT_Stream_Skip\n1067:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::operator\\5b\\5d\\28unsigned\\20int\\29\\20const\n1068:AAT::Lookup<OT::HBGlyphID16>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1069:write_trc_tag\\28skcms_Curve\\20const&\\29\n1070:uprv_free_skia\n1071:strcpy\n1072:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n1073:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n1074:std::__2::enable_if<true\\2c\\20void>::type\\20skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::AddTrianglesWhenChopping\\2c\\20skgpu::tess::DiscardFlatCurves>::writeTriangleStack<void>\\28skgpu::tess::MiddleOutPolygonTriangulator::PoppedTriangleStack&&\\29\n1075:std::__2::ctype<wchar_t>::widen\\5babi:v160004\\5d\\28char\\20const*\\2c\\20char\\20const*\\2c\\20wchar_t*\\29\\20const\n1076:std::__2::char_traits<char>::eq_int_type\\28int\\2c\\20int\\29\n1077:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_long_cap\\5babi:v160004\\5d\\28\\29\\20const\n1078:skif::LayerSpace<SkSize>::ceil\\28\\29\\20const\n1079:skia_private::TArray<float\\2c\\20true>::push_back\\28float\\20const&\\29\n1080:skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>\\20const&\\29\n1081:skia_png_write_finish_row\n1082:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\\28\\29\n1083:scalbn\n1084:hb_lazy_loader_t<OT::MVAR\\2c\\20hb_table_lazy_loader_t<OT::MVAR\\2c\\2022u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2022u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1085:hb_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\2024u>\\2c\\20hb_face_t\\2c\\2024u\\2c\\20OT::GDEF_accelerator_t>::get\\28\\29\\20const\n1086:hb_buffer_get_glyph_infos\n1087:hb_buffer_destroy\n1088:cff2_path_param_t::line_to\\28CFF::point_t\\20const&\\29\n1089:cff1_path_param_t::line_to\\28CFF::point_t\\20const&\\29\n1090:cf2_stack_getReal\n1091:byn$mgfn-shared$GrGLProgramDataManager::set1iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n1092:antifilldot8\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkBlitter*\\2c\\20bool\\29\n1093:afm_stream_skip_spaces\n1094:WebPRescalerInit\n1095:WebPRescalerExportRow\n1096:SkWStream::writeDecAsText\\28int\\29\n1097:SkTextBlobBuilder::allocInternal\\28SkFont\\20const&\\2c\\20SkTextBlob::GlyphPositioning\\2c\\20int\\2c\\20int\\2c\\20SkPoint\\2c\\20SkRect\\20const*\\29\n1098:SkTDStorage::append\\28void\\20const*\\2c\\20int\\29\n1099:SkString::Rec::Make\\28char\\20const*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28\\29\\20const\n1100:SkStrike::digestFor\\28skglyph::ActionType\\2c\\20SkPackedGlyphID\\29\n1101:SkShaders::Color\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20sk_sp<SkColorSpace>\\29\n1102:SkSafeMath::Add\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n1103:SkSL::Parser::assignmentExpression\\28\\29\n1104:SkSL::GLSLCodeGenerator::write\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1105:SkSL::ConstructorSplat::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1106:SkSL::ConstructorScalarCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1107:SkRuntimeEffectBuilder::writableUniformData\\28\\29\n1108:SkRuntimeEffect::findUniform\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1109:SkResourceCache::Find\\28SkResourceCache::Key\\20const&\\2c\\20bool\\20\\28*\\29\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\\2c\\20void*\\29\n1110:SkRegion::SkRegion\\28SkIRect\\20const&\\29\n1111:SkRect::toQuad\\28SkPoint*\\29\\20const\n1112:SkRasterPipeline::appendTransferFunction\\28skcms_TransferFunction\\20const&\\29\n1113:SkRasterPipeline::appendStore\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n1114:SkRasterPipeline::appendConstantColor\\28SkArenaAlloc*\\2c\\20float\\20const*\\29\n1115:SkRasterClip::SkRasterClip\\28\\29\n1116:SkRRect::checkCornerContainment\\28float\\2c\\20float\\29\\20const\n1117:SkPictureData::getImage\\28SkReadBuffer*\\29\\20const\n1118:SkPathMeasure::getLength\\28\\29\n1119:SkPathBuilder::~SkPathBuilder\\28\\29\n1120:SkPathBuilder::detach\\28\\29\n1121:SkPathBuilder::SkPathBuilder\\28\\29\n1122:SkPath::getGenerationID\\28\\29\\20const\n1123:SkPath::addPoly\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\29\n1124:SkParse::FindScalars\\28char\\20const*\\2c\\20float*\\2c\\20int\\29\n1125:SkPaint::refPathEffect\\28\\29\\20const\n1126:SkPaint::operator=\\28SkPaint\\20const&\\29\n1127:SkMipmap::getLevel\\28int\\2c\\20SkMipmap::Level*\\29\\20const\n1128:SkKnownRuntimeEffects::GetKnownRuntimeEffect\\28SkKnownRuntimeEffects::StableKey\\29\n1129:SkJSONWriter::endArray\\28\\29\n1130:SkJSONWriter::appendCString\\28char\\20const*\\2c\\20char\\20const*\\29\n1131:SkIntersections::setCoincident\\28int\\29\n1132:SkImageInfo::computeOffset\\28int\\2c\\20int\\2c\\20unsigned\\20long\\29\\20const\n1133:SkImageFilter_Base::flatten\\28SkWriteBuffer&\\29\\20const\n1134:SkImageFilter::countInputs\\28\\29\\20const\n1135:SkDrawBase::SkDrawBase\\28\\29\n1136:SkDLine::NearPointV\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1137:SkDLine::NearPointH\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1138:SkDLine::ExactPointV\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1139:SkDLine::ExactPointH\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n1140:SkColorSpaceXformSteps::apply\\28SkRasterPipeline*\\29\\20const\n1141:SkColorFilter::asAColorMode\\28unsigned\\20int*\\2c\\20SkBlendMode*\\29\\20const\n1142:SkCodec::SkCodec\\28SkEncodedInfo&&\\2c\\20skcms_PixelFormat\\2c\\20std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkEncodedOrigin\\29\n1143:SkCanvas::drawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n1144:SkCanvas::drawColor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n1145:SkBulkGlyphMetrics::SkBulkGlyphMetrics\\28SkStrikeSpec\\20const&\\29\n1146:SkBlockMemoryStream::getLength\\28\\29\\20const\n1147:SkBlockAllocator::releaseBlock\\28SkBlockAllocator::Block*\\29\n1148:SkBitmap::asImage\\28\\29\\20const\n1149:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\\28SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1150:OT::MVAR::get_var\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1151:GrXferProcessor::GrXferProcessor\\28GrProcessor::ClassID\\2c\\20bool\\2c\\20GrProcessorAnalysisCoverage\\29\n1152:GrTextureEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\29\n1153:GrTextureEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\29\n1154:GrSimpleMeshDrawOpHelper::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20bool*\\29\n1155:GrResourceProvider::findResourceByUniqueKey\\28skgpu::UniqueKey\\20const&\\29\n1156:GrRecordingContext::OwnedArenas::get\\28\\29\n1157:GrProxyProvider::createProxy\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\29\n1158:GrProxyProvider::assignUniqueKeyToProxy\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\29\n1159:GrProcessorSet::finalize\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrAppliedClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\29\n1160:GrOpFlushState::allocator\\28\\29\n1161:GrOp::cutChain\\28\\29\n1162:GrMeshDrawTarget::makeVertexWriter\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n1163:GrGpuResource::GrGpuResource\\28GrGpu*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1164:GrGeometryProcessor::TextureSampler::reset\\28GrSamplerState\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n1165:GrGeometryProcessor::AttributeSet::end\\28\\29\\20const\n1166:GrGeometryProcessor::AttributeSet::Iter::operator++\\28\\29\n1167:GrGeometryProcessor::AttributeSet::Iter::operator*\\28\\29\\20const\n1168:GrGLTextureParameters::set\\28GrGLTextureParameters::SamplerOverriddenState\\20const*\\2c\\20GrGLTextureParameters::NonsamplerState\\20const&\\2c\\20unsigned\\20long\\20long\\29\n1169:GrGLSLShaderBuilder::appendTextureLookup\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n1170:GrClip::GetPixelIBounds\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20GrClip::BoundsType\\29\n1171:GrBackendTexture::~GrBackendTexture\\28\\29\n1172:FT_Outline_Get_CBox\n1173:FT_Get_Sfnt_Table\n1174:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__destroy_vector::__destroy_vector\\28std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>&\\29\n1175:std::__2::moneypunct<char\\2c\\20true>::negative_sign\\5babi:v160004\\5d\\28\\29\\20const\n1176:std::__2::moneypunct<char\\2c\\20true>::neg_format\\5babi:v160004\\5d\\28\\29\\20const\n1177:std::__2::moneypunct<char\\2c\\20true>::frac_digits\\5babi:v160004\\5d\\28\\29\\20const\n1178:std::__2::moneypunct<char\\2c\\20false>::do_pos_format\\28\\29\\20const\n1179:std::__2::ctype<char>::widen\\5babi:v160004\\5d\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n1180:std::__2::char_traits<wchar_t>::copy\\28wchar_t*\\2c\\20wchar_t\\20const*\\2c\\20unsigned\\20long\\29\n1181:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::end\\5babi:v160004\\5d\\28\\29\n1182:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::end\\5babi:v160004\\5d\\28\\29\n1183:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1184:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_external\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1185:std::__2::__itoa::__append2\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1186:sktext::gpu::GlyphVector::glyphs\\28\\29\\20const\n1187:sktext::SkStrikePromise::SkStrikePromise\\28sktext::SkStrikePromise&&\\29\n1188:skif::FilterResult::resolve\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20bool\\29\\20const\n1189:skia_png_read_finish_row\n1190:skia_png_handle_unknown\n1191:skia_png_gamma_correct\n1192:skia_png_colorspace_sync\n1193:skia_png_app_warning\n1194:skia::textlayout::TextStyle::operator=\\28skia::textlayout::TextStyle\\20const&\\29\n1195:skia::textlayout::TextLine::offset\\28\\29\\20const\n1196:skia::textlayout::Run::placeholderStyle\\28\\29\\20const\n1197:skia::textlayout::Cluster::Cluster\\28skia::textlayout::ParagraphImpl*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkSpan<char\\20const>\\2c\\20float\\2c\\20float\\29\n1198:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\\28SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1199:skgpu::ganesh::SurfaceDrawContext::Make\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\2c\\20SkISize\\2c\\20SkSurfaceProps\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1200:skgpu::ganesh::SurfaceContext::PixelTransferResult::~PixelTransferResult\\28\\29\n1201:skgpu::ganesh::ClipStack::SaveRecord::state\\28\\29\\20const\n1202:skcms_Matrix3x3_invert\n1203:sk_doubles_nearly_equal_ulps\\28double\\2c\\20double\\2c\\20unsigned\\20char\\29\n1204:ps_parser_to_token\n1205:isspace\n1206:hb_face_t::load_upem\\28\\29\\20const\n1207:hb_buffer_t::merge_out_clusters\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1208:hb_buffer_t::enlarge\\28unsigned\\20int\\29\n1209:hb_buffer_reverse\n1210:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&\\29\\2c\\20SkCanvas*\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint*\\29\n1211:cff_index_init\n1212:cf2_glyphpath_curveTo\n1213:atan2f\n1214:WebPCopyPlane\n1215:SkTMaskGamma_build_correcting_lut\\28unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20SkColorSpaceLuminance\\20const&\\2c\\20float\\2c\\20SkColorSpaceLuminance\\20const&\\2c\\20float\\29\n1216:SkSurface_Raster::type\\28\\29\\20const\n1217:SkString::swap\\28SkString&\\29\n1218:SkString::reset\\28\\29\n1219:SkSampler::Fill\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::ZeroInitialized\\29\n1220:SkSL::Type::MakeTextureType\\28char\\20const*\\2c\\20SpvDim_\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkSL::Type::TextureAccess\\29\n1221:SkSL::Type::MakeSpecialType\\28char\\20const*\\2c\\20char\\20const*\\2c\\20SkSL::Type::TypeKind\\29\n1222:SkSL::RP::Builder::push_slots_or_immutable\\28SkSL::RP::SlotRange\\2c\\20SkSL::RP::BuilderOp\\29\n1223:SkSL::RP::Builder::push_clone_from_stack\\28SkSL::RP::SlotRange\\2c\\20int\\2c\\20int\\29\n1224:SkSL::Program::~Program\\28\\29\n1225:SkSL::PipelineStage::PipelineStageCodeGenerator::writeStatement\\28SkSL::Statement\\20const&\\29\n1226:SkSL::Operator::isAssignment\\28\\29\\20const\n1227:SkSL::InlineCandidateAnalyzer::visitStatement\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20bool\\29\n1228:SkSL::GLSLCodeGenerator::writeModifiers\\28SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20bool\\29\n1229:SkSL::ExpressionStatement::Make\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1230:SkSL::ConstructorCompound::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n1231:SkSL::Analysis::GetReturnComplexity\\28SkSL::FunctionDefinition\\20const&\\29\n1232:SkSL::AliasType::resolve\\28\\29\\20const\n1233:SkResourceCache::Add\\28SkResourceCache::Rec*\\2c\\20void*\\29\n1234:SkRegion::writeToMemory\\28void*\\29\\20const\n1235:SkRect\\20skif::Mapping::map<SkRect>\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n1236:SkReadBuffer::readMatrix\\28SkMatrix*\\29\n1237:SkReadBuffer::readBool\\28\\29\n1238:SkRasterClip::setRect\\28SkIRect\\20const&\\29\n1239:SkRasterClip::SkRasterClip\\28SkRasterClip\\20const&\\29\n1240:SkPathMeasure::~SkPathMeasure\\28\\29\n1241:SkPathMeasure::SkPathMeasure\\28SkPath\\20const&\\2c\\20bool\\2c\\20float\\29\n1242:SkPath::swap\\28SkPath&\\29\n1243:SkPaint::setAlphaf\\28float\\29\n1244:SkOpSpan::computeWindSum\\28\\29\n1245:SkOpSegment::existing\\28double\\2c\\20SkOpSegment\\20const*\\29\\20const\n1246:SkOpPtT::find\\28SkOpSegment\\20const*\\29\\20const\n1247:SkOpCoincidence::addEndMovedSpans\\28SkOpSpan\\20const*\\2c\\20SkOpSpanBase\\20const*\\29\n1248:SkNoDrawCanvas::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n1249:SkMakeImageFromRasterBitmap\\28SkBitmap\\20const&\\2c\\20SkCopyPixelsMode\\29\n1250:SkImage_Ganesh::SkImage_Ganesh\\28sk_sp<GrImageContext>\\2c\\20unsigned\\20int\\2c\\20GrSurfaceProxyView\\2c\\20SkColorInfo\\29\n1251:SkImageInfo::makeColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n1252:SkImage::refColorSpace\\28\\29\\20const\n1253:SkGlyph::imageSize\\28\\29\\20const\n1254:SkFont::textToGlyphs\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkTextEncoding\\2c\\20unsigned\\20short*\\2c\\20int\\29\\20const\n1255:SkFont::setSubpixel\\28bool\\29\n1256:SkDraw::SkDraw\\28\\29\n1257:SkColorTypeBytesPerPixel\\28SkColorType\\29\n1258:SkChopQuadAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\29\n1259:SkCanvas::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n1260:SkBmpCodec::getDstRow\\28int\\2c\\20int\\29\\20const\n1261:SkAutoDescriptor::SkAutoDescriptor\\28\\29\n1262:OT::DeltaSetIndexMap::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1263:OT::ClassDef::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1264:GrTriangulator::Comparator::sweep_lt\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\\20const\n1265:GrTextureProxy::textureType\\28\\29\\20const\n1266:GrSurfaceProxy::createSurfaceImpl\\28GrResourceProvider*\\2c\\20int\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\29\\20const\n1267:GrStyledShape::writeUnstyledKey\\28unsigned\\20int*\\29\\20const\n1268:GrStyledShape::simplify\\28\\29\n1269:GrSkSLFP::setInput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1270:GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil\\28GrProcessorSet*\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n1271:GrShape::operator=\\28GrShape\\20const&\\29\n1272:GrResourceProvider::createPatternedIndexBuffer\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::UniqueKey\\20const*\\29\n1273:GrRenderTarget::~GrRenderTarget\\28\\29\n1274:GrRecordingContextPriv::makeSC\\28GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n1275:GrOpFlushState::detachAppliedClip\\28\\29\n1276:GrGpuBuffer::map\\28\\29\n1277:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\\28GrGLSLVertexBuilder*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20char\\20const*\\29\n1278:GrGLSLShaderBuilder::declAppend\\28GrShaderVar\\20const&\\29\n1279:GrGLGpu::didDrawTo\\28GrRenderTarget*\\29\n1280:GrFragmentProcessors::Make\\28GrRecordingContext*\\2c\\20SkColorFilter\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1281:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrColorInfo\\20const&\\2c\\20GrColorInfo\\20const&\\29\n1282:GrCaps::validateSurfaceParams\\28SkISize\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrTextureType\\29\\20const\n1283:GrBufferAllocPool::putBack\\28unsigned\\20long\\29\n1284:GrBlurUtils::GaussianBlur\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20SkBackingFit\\29::$_0::operator\\28\\29\\28SkIRect\\2c\\20SkIRect\\29\\20const\n1285:GrAAConvexTessellator::createInsetRing\\28GrAAConvexTessellator::Ring\\20const&\\2c\\20GrAAConvexTessellator::Ring*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n1286:FT_Stream_GetByte\n1287:FT_Set_Transform\n1288:FT_Add_Module\n1289:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1290:AlmostLessOrEqualUlps\\28float\\2c\\20float\\29\n1291:ActiveEdge::intersect\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\\20const\n1292:wrapper_cmp\n1293:void\\20std::__2::reverse\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\29\n1294:void\\20std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::__do_rehash<true>\\28unsigned\\20long\\29\n1295:ubidi_getParaLevelAtIndex_skia\n1296:tanf\n1297:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1298:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n1299:std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20std::__2::__pad_and_output\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\29\n1300:std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20std::__2::__pad_and_output\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>>\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::ios_base&\\2c\\20char\\29\n1301:std::__2::char_traits<char>::to_int_type\\28char\\29\n1302:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1303:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::~basic_ios\\28\\29\n1304:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::setstate\\5babi:v160004\\5d\\28unsigned\\20int\\29\n1305:std::__2::__compressed_pair_elem<void\\20\\28*\\29\\28void*\\29\\2c\\201\\2c\\20false>::__compressed_pair_elem\\5babi:v160004\\5d<void\\20\\28*\\29\\28void*\\29\\2c\\20void>\\28void\\20\\28*&&\\29\\28void*\\29\\29\n1306:sktext::gpu::GlyphVector::~GlyphVector\\28\\29\n1307:sktext::StrikeMutationMonitor::~StrikeMutationMonitor\\28\\29\n1308:sktext::StrikeMutationMonitor::StrikeMutationMonitor\\28sktext::StrikeForGPU*\\29\n1309:skif::LayerSpace<SkIRect>::contains\\28skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n1310:skif::Backend::~Backend\\28\\29.1\n1311:skia_private::TArray<skif::FilterResult::Builder::SampledFilterResult\\2c\\20false>::push_back\\28skif::FilterResult::Builder::SampledFilterResult&&\\29\n1312:skia_private::TArray<float\\2c\\20true>::operator=\\28skia_private::TArray<float\\2c\\20true>&&\\29\n1313:skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>::~STArray\\28\\29\n1314:skia_png_chunk_unknown_handling\n1315:skia::textlayout::TextStyle::TextStyle\\28\\29\n1316:skia::textlayout::TextLine::iterateThroughSingleRunByStyles\\28skia::textlayout::TextLine::TextAdjustment\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::StyleType\\2c\\20std::__2::function<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\20const&\\29\\20const\n1317:skgpu::ganesh::SurfaceFillContext::internalClear\\28SkIRect\\20const*\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20bool\\29\n1318:skgpu::ganesh::SurfaceDrawContext::fillRectToRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n1319:skgpu::SkSLToBackend\\28SkSL::ShaderCaps\\20const*\\2c\\20bool\\20\\28*\\29\\28SkSL::Program&\\2c\\20SkSL::ShaderCaps\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\29\\2c\\20char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20SkSL::ProgramKind\\2c\\20SkSL::ProgramSettings\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20SkSL::ProgramInterface*\\2c\\20skgpu::ShaderErrorHandler*\\29\n1320:skgpu::GetApproxSize\\28SkISize\\29\n1321:powf\n1322:non-virtual\\20thunk\\20to\\20GrOpFlushState::allocator\\28\\29\n1323:hb_lazy_loader_t<OT::vhea\\2c\\20hb_table_lazy_loader_t<OT::vhea\\2c\\2011u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2011u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1324:hb_lazy_loader_t<OT::maxp\\2c\\20hb_table_lazy_loader_t<OT::maxp\\2c\\202u\\2c\\20true>\\2c\\20hb_face_t\\2c\\202u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1325:hb_lazy_loader_t<OT::hhea\\2c\\20hb_table_lazy_loader_t<OT::hhea\\2c\\204u\\2c\\20true>\\2c\\20hb_face_t\\2c\\204u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1326:hb_font_t::scale_glyph_extents\\28hb_glyph_extents_t*\\29\n1327:hb_font_t::get_glyph_h_origin_with_fallback\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n1328:hb_buffer_append\n1329:emscripten::internal::MethodInvoker<void\\20\\28SkFont::*\\29\\28sk_sp<SkTypeface>\\29\\2c\\20void\\2c\\20SkFont*\\2c\\20sk_sp<SkTypeface>>::invoke\\28void\\20\\28SkFont::*\\20const&\\29\\28sk_sp<SkTypeface>\\29\\2c\\20SkFont*\\2c\\20sk_sp<SkTypeface>*\\29\n1330:emscripten::internal::Invoker<unsigned\\20long>::invoke\\28unsigned\\20long\\20\\28*\\29\\28\\29\\29\n1331:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n1332:cos\n1333:cf2_glyphpath_lineTo\n1334:byn$mgfn-shared$SkTDStorage::calculateSizeOrDie\\28int\\29::$_0::operator\\28\\29\\28\\29\\20const\n1335:alloc_small\n1336:af_latin_hints_compute_segments\n1337:_hb_glyph_info_set_unicode_props\\28hb_glyph_info_t*\\2c\\20hb_buffer_t*\\29\n1338:__lshrti3\n1339:__letf2\n1340:__cxx_global_array_dtor.3\n1341:\\28anonymous\\20namespace\\29::SkBlurImageFilter::~SkBlurImageFilter\\28\\29\n1342:SkUTF::ToUTF16\\28int\\2c\\20unsigned\\20short*\\29\n1343:SkTextBlobBuilder::~SkTextBlobBuilder\\28\\29\n1344:SkTextBlobBuilder::make\\28\\29\n1345:SkSurface::makeImageSnapshot\\28\\29\n1346:SkString::insert\\28unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1347:SkString::insertUnichar\\28unsigned\\20long\\2c\\20int\\29\n1348:SkStrikeSpec::findOrCreateScopedStrike\\28sktext::StrikeForGPUCacheInterface*\\29\\20const\n1349:SkStrikeCache::GlobalStrikeCache\\28\\29\n1350:SkSpecialImages::MakeDeferredFromGpu\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20unsigned\\20int\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1351:SkShader::isAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n1352:SkSL::is_constant_value\\28SkSL::Expression\\20const&\\2c\\20double\\29\n1353:SkSL::compile_and_shrink\\28SkSL::Compiler*\\2c\\20SkSL::ProgramKind\\2c\\20char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::Module\\20const*\\29\n1354:SkSL::\\28anonymous\\20namespace\\29::ReturnsOnAllPathsVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n1355:SkSL::Type::MakeScalarType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type::NumberKind\\2c\\20signed\\20char\\2c\\20signed\\20char\\29\n1356:SkSL::RP::Generator::pushBinaryExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n1357:SkSL::RP::Builder::push_clone\\28int\\2c\\20int\\29\n1358:SkSL::ProgramUsage::remove\\28SkSL::Statement\\20const*\\29\n1359:SkSL::Parser::statement\\28bool\\29\n1360:SkSL::Operator::determineBinaryType\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const**\\2c\\20SkSL::Type\\20const**\\2c\\20SkSL::Type\\20const**\\29\\20const\n1361:SkSL::ModifierFlags::description\\28\\29\\20const\n1362:SkSL::Layout::paddedDescription\\28\\29\\20const\n1363:SkSL::FieldAccess::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20int\\2c\\20SkSL::FieldAccessOwnerKind\\29\n1364:SkSL::ConstructorCompoundCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1365:SkSL::Compiler::~Compiler\\28\\29\n1366:SkSL::Analysis::IsSameExpressionTree\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n1367:SkRectPriv::Subtract\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect*\\29\n1368:SkPictureRecorder::SkPictureRecorder\\28\\29\n1369:SkPictureData::~SkPictureData\\28\\29\n1370:SkPathMeasure::nextContour\\28\\29\n1371:SkPathMeasure::getSegment\\28float\\2c\\20float\\2c\\20SkPath*\\2c\\20bool\\29\n1372:SkPathMeasure::getPosTan\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n1373:SkPathBuilder::lineTo\\28SkPoint\\29\n1374:SkPath::getPoint\\28int\\29\\20const\n1375:SkPath::getLastPt\\28SkPoint*\\29\\20const\n1376:SkPaint::setBlender\\28sk_sp<SkBlender>\\29\n1377:SkOpSegment::addT\\28double\\29\n1378:SkNoPixelsDevice::ClipState&\\20skia_private::TArray<SkNoPixelsDevice::ClipState\\2c\\20true>::emplace_back<SkIRect\\2c\\20bool\\2c\\20bool>\\28SkIRect&&\\2c\\20bool&&\\2c\\20bool&&\\29\n1379:SkNextID::ImageID\\28\\29\n1380:SkMessageBus<SkResourceCache::PurgeSharedIDMessage\\2c\\20unsigned\\20int\\2c\\20true>::Inbox::Inbox\\28unsigned\\20int\\29\n1381:SkJSONWriter::endObject\\28\\29\n1382:SkImage_Lazy::generator\\28\\29\\20const\n1383:SkImage_Base::~SkImage_Base\\28\\29\n1384:SkImage_Base::SkImage_Base\\28SkImageInfo\\20const&\\2c\\20unsigned\\20int\\29\n1385:SkFont::getWidthsBounds\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20float*\\2c\\20SkRect*\\2c\\20SkPaint\\20const*\\29\\20const\n1386:SkFont::getMetrics\\28SkFontMetrics*\\29\\20const\n1387:SkFont::SkFont\\28sk_sp<SkTypeface>\\2c\\20float\\29\n1388:SkFont::SkFont\\28\\29\n1389:SkDrawBase::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkRect\\20const*\\29\\20const\n1390:SkDevice::setGlobalCTM\\28SkM44\\20const&\\29\n1391:SkDevice::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n1392:SkDescriptor::operator==\\28SkDescriptor\\20const&\\29\\20const\n1393:SkConvertPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n1394:SkConic::chopAt\\28float\\2c\\20SkConic*\\29\\20const\n1395:SkColorSpace::gammaIsLinear\\28\\29\\20const\n1396:SkColorSpace::MakeRGB\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n1397:SkCodec::fillIncompleteImage\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::ZeroInitialized\\2c\\20int\\2c\\20int\\29\n1398:SkCanvas::saveLayer\\28SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n1399:SkCanvas::drawPaint\\28SkPaint\\20const&\\29\n1400:SkCanvas::ImageSetEntry::~ImageSetEntry\\28\\29\n1401:SkBulkGlyphMetrics::glyphs\\28SkSpan<unsigned\\20short\\20const>\\29\n1402:SkBlendMode_AsCoeff\\28SkBlendMode\\2c\\20SkBlendModeCoeff*\\2c\\20SkBlendModeCoeff*\\29\n1403:SkBitmap::getGenerationID\\28\\29\\20const\n1404:SkArenaAllocWithReset::reset\\28\\29\n1405:OT::Layout::GPOS_impl::AnchorFormat3::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1406:OT::GDEF::get_glyph_props\\28unsigned\\20int\\29\\20const\n1407:OT::CmapSubtable::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n1408:Ins_UNKNOWN\n1409:GrTextureEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\2c\\20bool\\29\n1410:GrSurfaceProxyView::mipmapped\\28\\29\\20const\n1411:GrSurfaceProxy::instantiateImpl\\28GrResourceProvider*\\2c\\20int\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::UniqueKey\\20const*\\29\n1412:GrSimpleMeshDrawOpHelperWithStencil::isCompatible\\28GrSimpleMeshDrawOpHelperWithStencil\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\29\\20const\n1413:GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20bool*\\29\n1414:GrShape::simplifyRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n1415:GrQuad::projectedBounds\\28\\29\\20const\n1416:GrProcessorSet::MakeEmptySet\\28\\29\n1417:GrPorterDuffXPFactory::SimpleSrcOverXP\\28\\29\n1418:GrPixmap::Allocate\\28GrImageInfo\\20const&\\29\n1419:GrPathTessellationShader::MakeSimpleTriangleShader\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n1420:GrMakeCachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skgpu::Mipmapped\\29\n1421:GrImageInfo::operator=\\28GrImageInfo&&\\29\n1422:GrImageInfo::makeColorType\\28GrColorType\\29\\20const\n1423:GrGpuResource::setUniqueKey\\28skgpu::UniqueKey\\20const&\\29\n1424:GrGpuResource::release\\28\\29\n1425:GrGpuResource::isPurgeable\\28\\29\\20const\n1426:GrGeometryProcessor::textureSampler\\28int\\29\\20const\n1427:GrGeometryProcessor::AttributeSet::begin\\28\\29\\20const\n1428:GrGLSLShaderBuilder::addFeature\\28unsigned\\20int\\2c\\20char\\20const*\\29\n1429:GrGLGpu::clearErrorsAndCheckForOOM\\28\\29\n1430:GrGLGpu::bindSurfaceFBOForPixelOps\\28GrSurface*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20GrGLGpu::TempFBOTarget\\29\n1431:GrGLCompileAndAttachShader\\28GrGLContext\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20bool\\2c\\20GrThreadSafePipelineBuilder::Stats*\\2c\\20skgpu::ShaderErrorHandler*\\29\n1432:GrFragmentProcessor::MakeColor\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n1433:GrDirectContextPriv::flushSurfaces\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n1434:GrDefaultGeoProcFactory::Make\\28SkArenaAlloc*\\2c\\20GrDefaultGeoProcFactory::Color\\20const&\\2c\\20GrDefaultGeoProcFactory::Coverage\\20const&\\2c\\20GrDefaultGeoProcFactory::LocalCoords\\20const&\\2c\\20SkMatrix\\20const&\\29\n1435:GrConvertPixels\\28GrPixmap\\20const&\\2c\\20GrCPixmap\\20const&\\2c\\20bool\\29\n1436:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\29\n1437:GrColorInfo::GrColorInfo\\28\\29\n1438:GrBlurUtils::convolve_gaussian_1d\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\2c\\20SkIRect\\20const&\\2c\\20SkAlphaType\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\29\n1439:GrBackendTexture::GrBackendTexture\\28\\29\n1440:GrBackendFormat::operator=\\28GrBackendFormat\\20const&\\29\n1441:FT_Stream_Read\n1442:FT_GlyphLoader_Rewind\n1443:FT_Done_Face\n1444:Cr_z_inflate\n1445:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::operator\\5b\\5d\\28unsigned\\20int\\29\\20const\n1446:void\\20std::__2::__stable_sort<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\2c\\20long\\29\n1447:void\\20std::__2::__double_or_nothing\\5babi:v160004\\5d<unsigned\\20int>\\28std::__2::unique_ptr<unsigned\\20int\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int*&\\29\n1448:void\\20hb_serialize_context_t::add_link<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>>\\28OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>&\\2c\\20unsigned\\20int\\2c\\20hb_serialize_context_t::whence_t\\2c\\20unsigned\\20int\\29\n1449:void\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20bool>::setWire<RuntimeEffectUniform>\\28bool\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform&\\2c\\20bool\\29\n1450:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n1451:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n1452:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n1453:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n1454:toupper\n1455:top12.2\n1456:std::__2::numpunct<wchar_t>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::numpunct<wchar_t>>\\28std::__2::locale\\20const&\\29\n1457:std::__2::numpunct<char>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::numpunct<char>>\\28std::__2::locale\\20const&\\29\n1458:std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot>\\28skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot*\\29\\20const\n1459:std::__2::ctype<char>::narrow\\5babi:v160004\\5d\\28char\\2c\\20char\\29\\20const\n1460:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d<std::nullptr_t>\\28wchar_t\\20const*\\29\n1461:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1462:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::~basic_streambuf\\28\\29\n1463:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setg\\5babi:v160004\\5d\\28char*\\2c\\20char*\\2c\\20char*\\29\n1464:std::__2::__num_get<wchar_t>::__stage2_int_loop\\28wchar_t\\2c\\20int\\2c\\20char*\\2c\\20char*&\\2c\\20unsigned\\20int&\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20wchar_t\\20const*\\29\n1465:std::__2::__num_get<char>::__stage2_int_loop\\28char\\2c\\20int\\2c\\20char*\\2c\\20char*&\\2c\\20unsigned\\20int&\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20char\\20const*\\29\n1466:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<wchar_t>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::allocator<wchar_t>>\\28std::__2::allocator<wchar_t>&\\2c\\20unsigned\\20long\\29\n1467:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<char>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::allocator<char>>\\28std::__2::allocator<char>&\\2c\\20unsigned\\20long\\29\n1468:src_p\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\n1469:skif::FilterResult::analyzeBounds\\28SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20skif::FilterResult::BoundsScope\\29\\20const\n1470:skif::FilterResult::AutoSurface::snap\\28\\29\n1471:skif::FilterResult::AutoSurface::AutoSurface\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::FilterResult::PixelBoundary\\2c\\20bool\\2c\\20SkSurfaceProps\\20const*\\29\n1472:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::operator\\5b\\5d\\28SkSL::Variable\\20const*\\20const&\\29\n1473:skia_private::TArray<float\\2c\\20true>::operator=\\28skia_private::TArray<float\\2c\\20true>\\20const&\\29\n1474:skia_private::TArray<SkPoint\\2c\\20true>::resize_back\\28int\\29\n1475:skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>&&\\29\n1476:skia_png_get_valid\n1477:skia_png_gamma_8bit_correct\n1478:skia_png_free_data\n1479:skia_png_chunk_warning\n1480:skia::textlayout::TextLine::measureTextInsideOneRun\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20skia::textlayout::TextLine::TextAdjustment\\29\\20const\n1481:skia::textlayout::Run::positionX\\28unsigned\\20long\\29\\20const\n1482:skia::textlayout::Run::Run\\28skia::textlayout::ParagraphImpl*\\2c\\20SkShaper::RunHandler::RunInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20bool\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20float\\29\n1483:skia::textlayout::ParagraphCacheKey::operator==\\28skia::textlayout::ParagraphCacheKey\\20const&\\29\\20const\n1484:skia::textlayout::FontCollection::enableFontFallback\\28\\29\n1485:skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Required<\\28skgpu::tess::PatchAttribs\\291>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\294>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::ReplicateLineEndPoints\\2c\\20skgpu::tess::TrackJoinControlPoints>::chopAndWriteCubics\\28skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20int\\29\n1486:skgpu::ganesh::SmallPathAtlasMgr::reset\\28\\29\n1487:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::vertexSize\\28\\29\\20const\n1488:skgpu::ganesh::Device::readSurfaceView\\28\\29\n1489:skgpu::ganesh::ClipStack::clip\\28skgpu::ganesh::ClipStack::RawElement&&\\29\n1490:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::RawElement\\20const&\\29\\20const\n1491:skgpu::ganesh::ClipStack::RawElement::RawElement\\28SkMatrix\\20const&\\2c\\20GrShape\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n1492:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane&\\20skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\\2c\\20false>::emplace_back<sk_sp<SkData>\\2c\\20unsigned\\20long&>\\28sk_sp<SkData>&&\\2c\\20unsigned\\20long&\\29\n1493:skgpu::Swizzle::asString\\28\\29\\20const\n1494:skgpu::ScratchKey::GenerateResourceType\\28\\29\n1495:skgpu::GetBlendFormula\\28bool\\2c\\20bool\\2c\\20SkBlendMode\\29\n1496:select_curve_ops\\28skcms_Curve\\20const*\\2c\\20int\\2c\\20OpAndArg*\\29\n1497:sbrk\n1498:ps_tofixedarray\n1499:processPropertySeq\\28UBiDi*\\2c\\20LevState*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20int\\29\n1500:png_format_buffer\n1501:png_check_keyword\n1502:nextafterf\n1503:jpeg_huff_decode\n1504:hb_unicode_funcs_destroy\n1505:hb_serialize_context_t::pop_discard\\28\\29\n1506:hb_buffer_set_flags\n1507:hb_blob_create_sub_blob\n1508:hb_array_t<char\\20const>::hash\\28\\29\\20const\n1509:hairquad\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n1510:haircubic\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n1511:fmt_u\n1512:flush_pending\n1513:emscripten::internal::Invoker<sk_sp<GrDirectContext>>::invoke\\28sk_sp<GrDirectContext>\\20\\28*\\29\\28\\29\\29\n1514:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\29\\2c\\20void\\2c\\20SkPath&>::invoke\\28void\\20\\28**\\29\\28SkPath&\\29\\2c\\20SkPath*\\29\n1515:do_fixed\n1516:destroy_face\n1517:decltype\\28fp\\28\\28SkRecords::NoOp*\\29\\28nullptr\\29\\29\\29\\20SkRecord::Record::mutate<SkRecord::Destroyer&>\\28SkRecord::Destroyer&\\29\n1518:char*\\20const&\\20std::__2::max\\5babi:v160004\\5d<char*>\\28char*\\20const&\\2c\\20char*\\20const&\\29\n1519:cf2_stack_pushInt\n1520:cf2_interpT2CharString\n1521:cf2_glyphpath_moveTo\n1522:byn$mgfn-shared$SkSL::ConstructorArrayCast::clone\\28SkSL::Position\\29\\20const\n1523:byn$mgfn-shared$GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n1524:bool\\20hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::set_with_hash<unsigned\\20int\\20const&\\2c\\20unsigned\\20int\\20const&>\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const&\\2c\\20bool\\29\n1525:bool\\20emscripten::internal::MemberAccess<RuntimeEffectUniform\\2c\\20bool>::getWire<RuntimeEffectUniform>\\28bool\\20RuntimeEffectUniform::*\\20const&\\2c\\20RuntimeEffectUniform\\20const&\\29\n1526:_hb_ot_metrics_get_position_common\\28hb_font_t*\\2c\\20hb_ot_metrics_tag_t\\2c\\20int*\\29\n1527:__tandf\n1528:__floatunsitf\n1529:__cxa_allocate_exception\n1530:\\28anonymous\\20namespace\\29::PathGeoBuilder::createMeshAndPutBackReserve\\28\\29\n1531:\\28anonymous\\20namespace\\29::MeshOp::fixedFunctionFlags\\28\\29\\20const\n1532:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::fixedFunctionFlags\\28\\29\\20const\n1533:WebPDemuxGetI\n1534:VP8LDoFillBitWindow\n1535:VP8LClear\n1536:TT_Get_MM_Var\n1537:SkWStream::writeScalar\\28float\\29\n1538:SkUTF::UTF8ToUTF16\\28unsigned\\20short*\\2c\\20int\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1539:SkTypeface::MakeEmpty\\28\\29\n1540:SkTSect::BinarySearch\\28SkTSect*\\2c\\20SkTSect*\\2c\\20SkIntersections*\\29\n1541:SkTConic::operator\\5b\\5d\\28int\\29\\20const\n1542:SkTBlockList<GrShaderVar\\2c\\201>::reset\\28\\29\n1543:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::reset\\28\\29\n1544:SkSurfaces::RenderTarget\\28GrRecordingContext*\\2c\\20skgpu::Budgeted\\2c\\20SkImageInfo\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const*\\2c\\20bool\\2c\\20bool\\29\n1545:SkString::insertU32\\28unsigned\\20long\\2c\\20unsigned\\20int\\29\n1546:SkShaders::MatrixRec::applyForFragmentProcessor\\28SkMatrix\\20const&\\29\\20const\n1547:SkScan::FillRect\\28SkRect\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1548:SkScan::FillIRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n1549:SkSL::optimize_comparison\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20bool\\20\\28*\\29\\28double\\2c\\20double\\29\\29\n1550:SkSL::Type::convertArraySize\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20long\\20long\\29\\20const\n1551:SkSL::RP::Builder::dot_floats\\28int\\29\n1552:SkSL::ProgramUsage::get\\28SkSL::FunctionDeclaration\\20const&\\29\\20const\n1553:SkSL::Parser::type\\28SkSL::Modifiers*\\29\n1554:SkSL::Parser::modifiers\\28\\29\n1555:SkSL::ConstructorDiagonalMatrix::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1556:SkSL::ConstructorArrayCast::~ConstructorArrayCast\\28\\29\n1557:SkSL::ConstantFolder::MakeConstantValueForVariable\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1558:SkSL::Compiler::Compiler\\28\\29\n1559:SkSL::Analysis::IsTrivialExpression\\28SkSL::Expression\\20const&\\29\n1560:SkRuntimeEffectPriv::CanDraw\\28SkCapabilities\\20const*\\2c\\20SkRuntimeEffect\\20const*\\29\n1561:SkRegion::setPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\29\n1562:SkRegion::operator=\\28SkRegion\\20const&\\29\n1563:SkRegion::op\\28SkRegion\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkRegion::Op\\29\n1564:SkRegion::Iterator::next\\28\\29\n1565:SkRasterPipeline::compile\\28\\29\\20const\n1566:SkRasterPipeline::appendClampIfNormalized\\28SkImageInfo\\20const&\\29\n1567:SkRRect::transform\\28SkMatrix\\20const&\\2c\\20SkRRect*\\29\\20const\n1568:SkPictureRecorder::beginRecording\\28SkRect\\20const&\\2c\\20SkBBHFactory*\\29\n1569:SkPathWriter::finishContour\\28\\29\n1570:SkPathStroker::cubicPerpRay\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n1571:SkPath::getSegmentMasks\\28\\29\\20const\n1572:SkPath::addRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\29\n1573:SkPaintPriv::ComputeLuminanceColor\\28SkPaint\\20const&\\29\n1574:SkPaint::nothingToDraw\\28\\29\\20const\n1575:SkPaint::isSrcOver\\28\\29\\20const\n1576:SkOpAngle::linesOnOriginalSide\\28SkOpAngle\\20const*\\29\n1577:SkNotifyBitmapGenIDIsStale\\28unsigned\\20int\\29\n1578:SkNoDrawCanvas::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n1579:SkMipmap::Build\\28SkPixmap\\20const&\\2c\\20SkDiscardableMemory*\\20\\28*\\29\\28unsigned\\20long\\29\\2c\\20bool\\29\n1580:SkMeshSpecification::~SkMeshSpecification\\28\\29\n1581:SkMatrix::setSinCos\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n1582:SkMatrix::setRSXform\\28SkRSXform\\20const&\\29\n1583:SkMatrix::mapHomogeneousPoints\\28SkPoint3*\\2c\\20SkPoint3\\20const*\\2c\\20int\\29\\20const\n1584:SkMaskBuilder::AllocImage\\28unsigned\\20long\\2c\\20SkMaskBuilder::AllocType\\29\n1585:SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_2D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n1586:SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_1D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n1587:SkJSONWriter::appendString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1588:SkIntersections::insertNear\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\2c\\20SkDPoint\\20const&\\29\n1589:SkIntersections::flip\\28\\29\n1590:SkImageInfo::Make\\28SkISize\\2c\\20SkColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n1591:SkImageFilters::Empty\\28\\29\n1592:SkImageFilter_Base::~SkImageFilter_Base\\28\\29\n1593:SkImage::isAlphaOnly\\28\\29\\20const\n1594:SkGlyph::drawable\\28\\29\\20const\n1595:SkFont::unicharToGlyph\\28int\\29\\20const\n1596:SkFont::setTypeface\\28sk_sp<SkTypeface>\\29\n1597:SkFont::setHinting\\28SkFontHinting\\29\n1598:SkFindQuadMaxCurvature\\28SkPoint\\20const*\\29\n1599:SkEvalCubicAt\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n1600:SkDrawTiler::stepAndSetupTileDraw\\28\\29\n1601:SkDrawTiler::SkDrawTiler\\28SkBitmapDevice*\\2c\\20SkRect\\20const*\\29\n1602:SkDevice::accessPixels\\28SkPixmap*\\29\n1603:SkDeque::SkDeque\\28unsigned\\20long\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\29\n1604:SkDCubic::FindExtrema\\28double\\20const*\\2c\\20double*\\29\n1605:SkColorFilters::Blend\\28unsigned\\20int\\2c\\20SkBlendMode\\29\n1606:SkCodec::getPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const*\\29\n1607:SkCanvas::internalRestore\\28\\29\n1608:SkCanvas::init\\28sk_sp<SkDevice>\\29\n1609:SkCanvas::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n1610:SkCanvas::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n1611:SkCanvas::aboutToDraw\\28SkPaint\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkEnumBitMask<SkCanvas::PredrawFlags>\\29\n1612:SkBitmap::operator=\\28SkBitmap&&\\29\n1613:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\\28\\29\n1614:SkAutoPixmapStorage::tryAlloc\\28SkImageInfo\\20const&\\29\n1615:SkAAClip::SkAAClip\\28\\29\n1616:OT::glyf_accelerator_t::glyf_accelerator_t\\28hb_face_t*\\29\n1617:OT::VariationStore::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1618:OT::Layout::GPOS_impl::ValueFormat::sanitize_value_devices\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\29\\20const\n1619:OT::Layout::GPOS_impl::ValueFormat::apply_value\\28OT::hb_ot_apply_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20hb_glyph_position_t&\\29\\20const\n1620:OT::HVARVVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1621:GrTriangulator::VertexList::insert\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\29\n1622:GrTriangulator::Poly::addEdge\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Side\\2c\\20GrTriangulator*\\29\n1623:GrTriangulator::EdgeList::remove\\28GrTriangulator::Edge*\\29\n1624:GrStyledShape::operator=\\28GrStyledShape\\20const&\\29\n1625:GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n1626:GrResourceCache::purgeAsNeeded\\28\\29\n1627:GrRenderTask::addDependency\\28GrDrawingManager*\\2c\\20GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n1628:GrRenderTask::GrRenderTask\\28\\29\n1629:GrRenderTarget::onRelease\\28\\29\n1630:GrProxyProvider::findOrCreateProxyByUniqueKey\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxy::UseAllocator\\29\n1631:GrProcessorSet::operator==\\28GrProcessorSet\\20const&\\29\\20const\n1632:GrPathUtils::generateQuadraticPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint**\\2c\\20unsigned\\20int\\29\n1633:GrMeshDrawOp::QuadHelper::QuadHelper\\28GrMeshDrawTarget*\\2c\\20unsigned\\20long\\2c\\20int\\29\n1634:GrIsStrokeHairlineOrEquivalent\\28GrStyle\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n1635:GrImageContext::abandoned\\28\\29\n1636:GrGpuResource::registerWithCache\\28skgpu::Budgeted\\29\n1637:GrGpuBuffer::isMapped\\28\\29\\20const\n1638:GrGpu::submitToGpu\\28GrSyncCpu\\29\n1639:GrGpu::didWriteToSurface\\28GrSurface*\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1640:GrGeometryProcessor::ProgramImpl::setupUniformColor\\28GrGLSLFPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n1641:GrGLGpu::flushRenderTarget\\28GrGLRenderTarget*\\2c\\20bool\\29\n1642:GrFragmentProcessor::visitTextureEffects\\28std::__2::function<void\\20\\28GrTextureEffect\\20const&\\29>\\20const&\\29\\20const\n1643:GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n1644:GrCpuBuffer::ref\\28\\29\\20const\n1645:GrBufferAllocPool::makeSpace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n1646:GrBackendTextures::GetGLTextureInfo\\28GrBackendTexture\\20const&\\2c\\20GrGLTextureInfo*\\29\n1647:FilterLoop26_C\n1648:FT_Vector_Transform\n1649:FT_Vector_NormLen\n1650:FT_Outline_Transform\n1651:CFF::dict_opset_t::process_op\\28unsigned\\20int\\2c\\20CFF::interp_env_t<CFF::number_t>&\\29\n1652:AlmostBetweenUlps\\28float\\2c\\20float\\2c\\20float\\29\n1653:void\\20std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__emplace_back_slow_path<skia::textlayout::OneLineShaper::RunBlock&>\\28skia::textlayout::OneLineShaper::RunBlock&\\29\n1654:ubidi_getMemory_skia\n1655:transform\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\29\n1656:strcspn\n1657:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__append\\28unsigned\\20long\\29\n1658:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::coalesce_pairwise_vectors<float>\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n1659:std::__2::locale::locale\\28std::__2::locale\\20const&\\29\n1660:std::__2::locale::classic\\28\\29\n1661:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_unshift\\28__mbstate_t&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n1662:std::__2::chrono::__libcpp_steady_clock_now\\28\\29\n1663:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__grow_by_and_replace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20char\\20const*\\29\n1664:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__fits_in_sso\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1665:std::__2::__wrap_iter<wchar_t*>::operator++\\5babi:v160004\\5d\\28\\29\n1666:std::__2::__wrap_iter<float*>\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>::insert<float\\20const*\\2c\\200>\\28std::__2::__wrap_iter<float\\20const*>\\2c\\20float\\20const*\\2c\\20float\\20const*\\29\n1667:std::__2::__wrap_iter<char*>::operator++\\5babi:v160004\\5d\\28\\29\n1668:std::__2::__throw_bad_variant_access\\5babi:v160004\\5d\\28\\29\n1669:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_front\\28skia::textlayout::OneLineShaper::RunBlock*&&\\29\n1670:std::__2::__shared_count::__release_shared\\5babi:v160004\\5d\\28\\29\n1671:std::__2::__num_get<wchar_t>::__stage2_int_prep\\28std::__2::ios_base&\\2c\\20wchar_t&\\29\n1672:std::__2::__num_get<wchar_t>::__do_widen\\28std::__2::ios_base&\\2c\\20wchar_t*\\29\\20const\n1673:std::__2::__num_get<char>::__stage2_int_prep\\28std::__2::ios_base&\\2c\\20char&\\29\n1674:std::__2::__itoa::__append1\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1675:sktext::gpu::VertexFiller::vertexStride\\28SkMatrix\\20const&\\29\\20const\n1676:skif::Mapping::adjustLayerSpace\\28SkMatrix\\20const&\\29\n1677:skif::LayerSpace<SkSize>::round\\28\\29\\20const\n1678:skif::FilterResult::Builder::~Builder\\28\\29\n1679:skif::FilterResult::Builder::Builder\\28skif::Context\\20const&\\29\n1680:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair&&\\29\n1681:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::removeIfExists\\28skgpu::UniqueKey\\20const&\\29\n1682:skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\\2c\\20true>::operator=\\28skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\\2c\\20true>&&\\29\n1683:skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::resize_back\\28int\\29\n1684:skia_private::TArray<SkCanvas::Lattice::RectType\\2c\\20true>::push_back_raw\\28int\\29\n1685:skia_png_sig_cmp\n1686:skia_png_set_progressive_read_fn\n1687:skia_png_set_longjmp_fn\n1688:skia_png_set_interlace_handling\n1689:skia_png_reciprocal\n1690:skia_png_read_chunk_header\n1691:skia_png_get_io_ptr\n1692:skia_png_calloc\n1693:skia::textlayout::TextLine::~TextLine\\28\\29\n1694:skia::textlayout::ParagraphStyle::ParagraphStyle\\28skia::textlayout::ParagraphStyle\\20const&\\29\n1695:skia::textlayout::ParagraphCacheKey::~ParagraphCacheKey\\28\\29\n1696:skia::textlayout::FontCollection::findTypefaces\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\2c\\20SkFontStyle\\2c\\20std::__2::optional<skia::textlayout::FontArguments>\\20const&\\29\n1697:skia::textlayout::Cluster::trimmedWidth\\28unsigned\\20long\\29\\20const\n1698:skgpu::ganesh::TextureOp::BatchSizeLimiter::createOp\\28GrTextureSetEntry*\\2c\\20int\\2c\\20GrAAType\\29\n1699:skgpu::ganesh::SurfaceFillContext::fillWithFP\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1700:skgpu::ganesh::SurfaceDrawContext::drawShapeUsingPathRenderer\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape&&\\2c\\20bool\\29\n1701:skgpu::ganesh::SurfaceDrawContext::drawRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const*\\29\n1702:skgpu::ganesh::SurfaceDrawContext::drawRRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20GrStyle\\20const&\\29\n1703:skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29\n1704:skgpu::ganesh::QuadPerEdgeAA::CalcIndexBufferOption\\28GrAAType\\2c\\20int\\29\n1705:skgpu::ganesh::LockTextureProxyView\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20GrImageTexGenPolicy\\2c\\20skgpu::Mipmapped\\29::$_0::operator\\28\\29\\28GrSurfaceProxyView\\20const&\\29\\20const\n1706:skgpu::ganesh::Device::targetProxy\\28\\29\n1707:skgpu::ganesh::ClipStack::getConservativeBounds\\28\\29\\20const\n1708:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::addTransferResult\\28skgpu::ganesh::SurfaceContext::PixelTransferResult\\20const&\\2c\\20SkISize\\2c\\20unsigned\\20long\\2c\\20skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>*\\29\n1709:skgpu::Plot::resetRects\\28\\29\n1710:skcms_TransferFunction_isPQish\n1711:skcms_TransferFunction_invert\n1712:skcms_Matrix3x3_concat\n1713:ps_dimension_add_t1stem\n1714:log2f\n1715:log\n1716:jcopy_sample_rows\n1717:hb_font_t::has_func\\28unsigned\\20int\\29\n1718:hb_buffer_create_similar\n1719:getenv\n1720:ft_service_list_lookup\n1721:fseek\n1722:fiprintf\n1723:fflush\n1724:expm1\n1725:emscripten::internal::MethodInvoker<void\\20\\28GrDirectContext::*\\29\\28\\29\\2c\\20void\\2c\\20GrDirectContext*>::invoke\\28void\\20\\28GrDirectContext::*\\20const&\\29\\28\\29\\2c\\20GrDirectContext*\\29\n1726:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n1727:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28SkFont&\\29\\2c\\20emscripten::val\\2c\\20SkFont&>::invoke\\28emscripten::val\\20\\28**\\29\\28SkFont&\\29\\2c\\20SkFont*\\29\n1728:do_putc\n1729:crc32_z\n1730:cf2_hintmap_insertHint\n1731:cf2_hintmap_build\n1732:cf2_glyphpath_pushPrevElem\n1733:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n1734:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n1735:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n1736:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n1737:byn$mgfn-shared$skif::\\28anonymous\\20namespace\\29::RasterBackend::~RasterBackend\\28\\29\n1738:byn$mgfn-shared$skif::Backend::~Backend\\28\\29.1\n1739:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n1740:append_multitexture_lookup\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20int\\2c\\20GrGLSLVarying\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n1741:afm_stream_read_one\n1742:af_latin_hints_link_segments\n1743:af_latin_compute_stem_width\n1744:af_glyph_hints_reload\n1745:acosf\n1746:__wasi_syscall_ret\n1747:__syscall_ret\n1748:__sin\n1749:__cos\n1750:VP8LHuffmanTablesDeallocate\n1751:SkWriter32::writeSampling\\28SkSamplingOptions\\20const&\\29\n1752:SkVertices::Builder::detach\\28\\29\n1753:SkUTF::NextUTF8WithReplacement\\28char\\20const**\\2c\\20char\\20const*\\29\n1754:SkTypeface_FreeType::~SkTypeface_FreeType\\28\\29\n1755:SkTypeface_FreeType::FaceRec::~FaceRec\\28\\29\n1756:SkTypeface::SkTypeface\\28SkFontStyle\\20const&\\2c\\20bool\\29\n1757:SkTreatAsSprite\\28SkMatrix\\20const&\\2c\\20SkISize\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20bool\\29\n1758:SkTextBlobBuilder::TightRunBounds\\28SkTextBlob::RunRecord\\20const&\\29\n1759:SkTextBlob::RunRecord::textSizePtr\\28\\29\\20const\n1760:SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::remove\\28skgpu::ScratchKey\\20const&\\2c\\20GrGpuResource\\20const*\\29\n1761:SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::insert\\28skgpu::ScratchKey\\20const&\\2c\\20GrGpuResource*\\29\n1762:SkTDStorage::insert\\28int\\2c\\20int\\2c\\20void\\20const*\\29\n1763:SkTDPQueue<\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\2c\\20&\\28anonymous\\20namespace\\29::RunIteratorQueue::CompareEntry\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\\2c\\20\\28int*\\20\\28*\\29\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\\290>::insert\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\29\n1764:SkSwizzler::Make\\28SkEncodedInfo\\20const&\\2c\\20unsigned\\20int\\20const*\\2c\\20SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\2c\\20SkIRect\\20const*\\29\n1765:SkSurface_Base::~SkSurface_Base\\28\\29\n1766:SkSurface::recordingContext\\28\\29\\20const\n1767:SkString::resize\\28unsigned\\20long\\29\n1768:SkStrikeSpec::SkStrikeSpec\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n1769:SkStrikeSpec::MakeMask\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n1770:SkStrikeSpec::MakeCanonicalized\\28SkFont\\20const&\\2c\\20SkPaint\\20const*\\29\n1771:SkStrikeCache::findOrCreateStrike\\28SkStrikeSpec\\20const&\\29\n1772:SkSpecialImages::MakeFromRaster\\28SkIRect\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1773:SkShaders::MatrixRec::apply\\28SkStageRec\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n1774:SkShaders::MatrixRec::MatrixRec\\28SkMatrix\\20const&\\29\n1775:SkShaders::Blend\\28SkBlendMode\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkShader>\\29\n1776:SkScan::FillPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkBlitter*\\29\n1777:SkScalerContext_FreeType::emboldenIfNeeded\\28FT_FaceRec_*\\2c\\20FT_GlyphSlotRec_*\\2c\\20unsigned\\20short\\29\n1778:SkSL::Type::displayName\\28\\29\\20const\n1779:SkSL::Type::checkForOutOfRangeLiteral\\28SkSL::Context\\20const&\\2c\\20double\\2c\\20SkSL::Position\\29\\20const\n1780:SkSL::SymbolTable::find\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1781:SkSL::String::Separator\\28\\29::Output::~Output\\28\\29\n1782:SkSL::RP::SlotManager::addSlotDebugInfoForGroup\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20int*\\2c\\20bool\\29\n1783:SkSL::RP::Generator::foldComparisonOp\\28SkSL::Operator\\2c\\20int\\29\n1784:SkSL::RP::Builder::branch_if_no_lanes_active\\28int\\29\n1785:SkSL::PrefixExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1786:SkSL::PipelineStage::PipelineStageCodeGenerator::typedVariable\\28SkSL::Type\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1787:SkSL::Parser::parseArrayDimensions\\28SkSL::Position\\2c\\20SkSL::Type\\20const**\\29\n1788:SkSL::Parser::arraySize\\28long\\20long*\\29\n1789:SkSL::Operator::operatorName\\28\\29\\20const\n1790:SkSL::ModifierFlags::paddedDescription\\28\\29\\20const\n1791:SkSL::ConstantFolder::GetConstantValue\\28SkSL::Expression\\20const&\\2c\\20double*\\29\n1792:SkSL::ConstantFolder::GetConstantInt\\28SkSL::Expression\\20const&\\2c\\20long\\20long*\\29\n1793:SkSL::Compiler::convertProgram\\28SkSL::ProgramKind\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::ProgramSettings\\20const&\\29\n1794:SkRuntimeEffect::findChild\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1795:SkResourceCache::remove\\28SkResourceCache::Rec*\\29\n1796:SkRegion::op\\28SkRegion\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkRegion::Op\\29\n1797:SkRegion::Iterator::Iterator\\28SkRegion\\20const&\\29\n1798:SkRecords::FillBounds::bounds\\28SkRecords::DrawArc\\20const&\\29\\20const\n1799:SkReadBuffer::setMemory\\28void\\20const*\\2c\\20unsigned\\20long\\29\n1800:SkRasterClip::SkRasterClip\\28SkIRect\\20const&\\29\n1801:SkRRect::writeToMemory\\28void*\\29\\20const\n1802:SkRRect::setRectXY\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n1803:SkPointPriv::DistanceToLineBetweenSqd\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPointPriv::Side*\\29\n1804:SkPoint::setNormalize\\28float\\2c\\20float\\29\n1805:SkPixmapUtils::SwapWidthHeight\\28SkImageInfo\\20const&\\29\n1806:SkPictureRecorder::finishRecordingAsPicture\\28\\29\n1807:SkPathPriv::ComputeFirstDirection\\28SkPath\\20const&\\29\n1808:SkPathEffect::asADash\\28SkPathEffect::DashInfo*\\29\\20const\n1809:SkPathEdgeIter::SkPathEdgeIter\\28SkPath\\20const&\\29\n1810:SkPath::rewind\\28\\29\n1811:SkPath::isLine\\28SkPoint*\\29\\20const\n1812:SkPath::incReserve\\28int\\2c\\20int\\2c\\20int\\29\n1813:SkPath::addOval\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n1814:SkPaint::setStrokeCap\\28SkPaint::Cap\\29\n1815:SkPaint::refShader\\28\\29\\20const\n1816:SkOpSpan::setWindSum\\28int\\29\n1817:SkOpSegment::markAndChaseWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int\\2c\\20int\\2c\\20SkOpSpanBase**\\29\n1818:SkOpContourBuilder::addCurve\\28SkPath::Verb\\2c\\20SkPoint\\20const*\\2c\\20float\\29\n1819:SkOpAngle::starter\\28\\29\n1820:SkOpAngle::insert\\28SkOpAngle*\\29\n1821:SkNoDestructor<SkSL::String::Separator\\28\\29::Output>::SkNoDestructor\\28SkSL::String::Separator\\28\\29::Output&&\\29\n1822:SkMatrix::setSinCos\\28float\\2c\\20float\\29\n1823:SkMatrix::decomposeScale\\28SkSize*\\2c\\20SkMatrix*\\29\\20const\n1824:SkMaskFilterBase::getFlattenableType\\28\\29\\20const\n1825:SkMaskFilter::MakeBlur\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n1826:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n1827:SkMD5::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n1828:SkLineClipper::IntersectLine\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkPoint*\\29\n1829:SkImage_GaneshBase::SkImage_GaneshBase\\28sk_sp<GrImageContext>\\2c\\20SkImageInfo\\2c\\20unsigned\\20int\\29\n1830:SkImageGenerator::onRefEncodedData\\28\\29\n1831:SkImage::makeShader\\28SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n1832:SkImage::makeRasterImage\\28GrDirectContext*\\2c\\20SkImage::CachingHint\\29\\20const\n1833:SkIDChangeListener::SkIDChangeListener\\28\\29\n1834:SkIDChangeListener::List::reset\\28\\29\n1835:SkGradientBaseShader::flatten\\28SkWriteBuffer&\\29\\20const\n1836:SkFontMgr::RefEmpty\\28\\29\n1837:SkFont::setEdging\\28SkFont::Edging\\29\n1838:SkEvalQuadAt\\28SkPoint\\20const*\\2c\\20float\\29\n1839:SkEncodedInfo::makeImageInfo\\28\\29\\20const\n1840:SkEdgeClipper::next\\28SkPoint*\\29\n1841:SkDevice::scalerContextFlags\\28\\29\\20const\n1842:SkConic::evalAt\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n1843:SkColorInfo::SkColorInfo\\28SkColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n1844:SkCodec::skipScanlines\\28int\\29\n1845:SkChopCubicAtHalf\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n1846:SkCapabilities::RasterBackend\\28\\29\n1847:SkCanvas::topDevice\\28\\29\\20const\n1848:SkCanvas::saveLayer\\28SkCanvas::SaveLayerRec\\20const&\\29\n1849:SkCanvas::restore\\28\\29\n1850:SkCanvas::imageInfo\\28\\29\\20const\n1851:SkCanvas::drawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n1852:SkCanvas::drawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n1853:SkCanvas::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n1854:SkBmpBaseCodec::~SkBmpBaseCodec\\28\\29\n1855:SkBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n1856:SkBlendMode\\20SkReadBuffer::read32LE<SkBlendMode>\\28SkBlendMode\\29\n1857:SkBitmap::operator=\\28SkBitmap\\20const&\\29\n1858:SkBitmap::extractSubset\\28SkBitmap*\\2c\\20SkIRect\\20const&\\29\\20const\n1859:SkBinaryWriteBuffer::writeByteArray\\28void\\20const*\\2c\\20unsigned\\20long\\29\n1860:SkBinaryWriteBuffer::SkBinaryWriteBuffer\\28SkSerialProcs\\20const&\\29\n1861:SkBaseShadowTessellator::handleLine\\28SkPoint\\20const&\\29\n1862:SkAAClip::setRegion\\28SkRegion\\20const&\\29\n1863:R\n1864:OT::hb_ot_apply_context_t::_set_glyph_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n1865:OT::cmap::find_subtable\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n1866:GrXPFactory::FromBlendMode\\28SkBlendMode\\29\n1867:GrTriangulator::setBottom\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n1868:GrTriangulator::mergeCollinearEdges\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n1869:GrTriangulator::Edge::disconnect\\28\\29\n1870:GrThreadSafeCache::find\\28skgpu::UniqueKey\\20const&\\29\n1871:GrThreadSafeCache::add\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29\n1872:GrThreadSafeCache::Entry::makeEmpty\\28\\29\n1873:GrSurfaceProxyView::operator==\\28GrSurfaceProxyView\\20const&\\29\\20const\n1874:GrSurfaceProxyView::Copy\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Mipmapped\\2c\\20SkIRect\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1875:GrSurfaceProxyPriv::doLazyInstantiation\\28GrResourceProvider*\\29\n1876:GrSurfaceProxy::isFunctionallyExact\\28\\29\\20const\n1877:GrSurfaceProxy::Copy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20sk_sp<GrRenderTask>*\\29\n1878:GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags\\28\\29\\20const\n1879:GrSimpleMeshDrawOpHelper::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrProcessorAnalysisColor*\\29\n1880:GrSimpleMeshDrawOpHelper::CreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrProcessorSet&&\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\2c\\20GrPipeline::InputFlags\\2c\\20GrUserStencilSettings\\20const*\\29\n1881:GrSimpleMeshDrawOpHelper::CreatePipeline\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20skgpu::Swizzle\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrProcessorSet&&\\2c\\20GrPipeline::InputFlags\\29\n1882:GrResourceProvider::findOrMakeStaticBuffer\\28GrGpuBufferType\\2c\\20unsigned\\20long\\2c\\20void\\20const*\\2c\\20skgpu::UniqueKey\\20const&\\29\n1883:GrResourceProvider::findOrMakeStaticBuffer\\28GrGpuBufferType\\2c\\20unsigned\\20long\\2c\\20skgpu::UniqueKey\\20const&\\2c\\20void\\20\\28*\\29\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\\29\n1884:GrResourceCache::findAndRefScratchResource\\28skgpu::ScratchKey\\20const&\\29\n1885:GrRecordingContextPriv::makeSFC\\28GrImageInfo\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1886:GrQuadUtils::TessellationHelper::Vertices::moveAlong\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1887:GrQuad::asRect\\28SkRect*\\29\\20const\n1888:GrProcessorSet::GrProcessorSet\\28GrProcessorSet&&\\29\n1889:GrPathUtils::generateCubicPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint**\\2c\\20unsigned\\20int\\29\n1890:GrGpu::createBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n1891:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20char\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n1892:GrGLTexture::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n1893:GrGLSLShaderBuilder::appendColorGamutXform\\28SkString*\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n1894:GrGLSLColorSpaceXformHelper::emitCode\\28GrGLSLUniformHandler*\\2c\\20GrColorSpaceXform\\20const*\\2c\\20unsigned\\20int\\29\n1895:GrGLRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n1896:GrGLRenderTarget::bindInternal\\28unsigned\\20int\\2c\\20bool\\29\n1897:GrGLGpu::getErrorAndCheckForOOM\\28\\29\n1898:GrGLGpu::bindTexture\\28int\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20GrGLTexture*\\29\n1899:GrFragmentProcessors::Make\\28SkShader\\20const*\\2c\\20GrFPArgs\\20const&\\2c\\20SkMatrix\\20const&\\29\n1900:GrFragmentProcessor::visitWithImpls\\28std::__2::function<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\20const\n1901:GrFragmentProcessor::ColorMatrix\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20float\\20const*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n1902:GrDrawingManager::appendTask\\28sk_sp<GrRenderTask>\\29\n1903:GrColorInfo::GrColorInfo\\28GrColorInfo\\20const&\\29\n1904:GrCaps::isFormatCompressed\\28GrBackendFormat\\20const&\\29\\20const\n1905:GrAAConvexTessellator::lineTo\\28SkPoint\\20const&\\2c\\20GrAAConvexTessellator::CurveState\\29\n1906:FT_Select_Metrics\n1907:FT_Select_Charmap\n1908:FT_Get_Next_Char\n1909:FT_Get_Module_Interface\n1910:FT_Done_Size\n1911:DecodeImageStream\n1912:CFF::opset_t<CFF::number_t>::process_op\\28unsigned\\20int\\2c\\20CFF::interp_env_t<CFF::number_t>&\\29\n1913:CFF::Charset::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n1914:wuffs_gif__decoder__num_decoded_frames\n1915:void\\20std::__2::vector<sk_sp<SkFontMgr>\\2c\\20std::__2::allocator<sk_sp<SkFontMgr>>>::__push_back_slow_path<sk_sp<SkFontMgr>\\20const&>\\28sk_sp<SkFontMgr>\\20const&\\29\n1916:void\\20std::__2::reverse\\5babi:v160004\\5d<wchar_t*>\\28wchar_t*\\2c\\20wchar_t*\\29\n1917:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29.2\n1918:void\\20merge_sort<&sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\29\n1919:void\\20merge_sort<&sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\29\n1920:void\\20emscripten::internal::MemberAccess<StrokeOpts\\2c\\20float>::setWire<StrokeOpts>\\28float\\20StrokeOpts::*\\20const&\\2c\\20StrokeOpts&\\2c\\20float\\29\n1921:validate_offsetToRestore\\28SkReadBuffer*\\2c\\20unsigned\\20long\\29\n1922:ubidi_setPara_skia\n1923:ubidi_getVisualRun_skia\n1924:ubidi_getRuns_skia\n1925:ubidi_getClass_skia\n1926:tt_set_mm_blend\n1927:tt_face_get_ps_name\n1928:trinkle\n1929:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::release\\5babi:v160004\\5d\\28\\29\n1930:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20void*>*>\\2c\\20bool>\\20std::__2::__hash_table<std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20std::__2::__unordered_map_hasher<GrTriangulator::Vertex*\\2c\\20std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20std::__2::hash<GrTriangulator::Vertex*>\\2c\\20std::__2::equal_to<GrTriangulator::Vertex*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrTriangulator::Vertex*\\2c\\20std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>\\2c\\20std::__2::equal_to<GrTriangulator::Vertex*>\\2c\\20std::__2::hash<GrTriangulator::Vertex*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrTriangulator::Vertex*\\2c\\20SSVertex*>>>::__emplace_unique_key_args<GrTriangulator::Vertex*\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrTriangulator::Vertex*\\20const&>\\2c\\20std::__2::tuple<>>\\28GrTriangulator::Vertex*\\20const&\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrTriangulator::Vertex*\\20const&>&&\\2c\\20std::__2::tuple<>&&\\29\n1931:std::__2::pair<char\\20const*\\2c\\20char*>::pair\\5babi:v160004\\5d<char\\20const*\\2c\\20char*\\2c\\20\\28void*\\290>\\28char\\20const*&&\\2c\\20char*&&\\29\n1932:std::__2::moneypunct<wchar_t\\2c\\20false>::do_decimal_point\\28\\29\\20const\n1933:std::__2::moneypunct<char\\2c\\20false>::do_decimal_point\\28\\29\\20const\n1934:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::istreambuf_iterator\\5babi:v160004\\5d\\28std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>&\\29\n1935:std::__2::ios_base::good\\5babi:v160004\\5d\\28\\29\\20const\n1936:std::__2::ctype<char>::toupper\\5babi:v160004\\5d\\28char\\29\\20const\n1937:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n1938:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\20std::__2::__scan_keyword\\5babi:v160004\\5d<std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::ctype<wchar_t>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n1939:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n1940:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__fits_in_sso\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1941:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\20std::__2::__scan_keyword\\5babi:v160004\\5d<std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::ctype<char>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n1942:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<char\\20const*\\2c\\20void>\\28char\\20const*\\2c\\20char\\20const*\\29\n1943:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n1944:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_short_size\\5babi:v160004\\5d\\28\\29\\20const\n1945:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_no_alias<true>\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1946:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::__pbump\\5babi:v160004\\5d\\28long\\29\n1947:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n1948:std::__2::allocator_traits<std::__2::allocator<wchar_t>>::deallocate\\5babi:v160004\\5d\\28std::__2::allocator<wchar_t>&\\2c\\20wchar_t*\\2c\\20unsigned\\20long\\29\n1949:std::__2::allocator_traits<std::__2::allocator<char>>::deallocate\\5babi:v160004\\5d\\28std::__2::allocator<char>&\\2c\\20char*\\2c\\20unsigned\\20long\\29\n1950:std::__2::__num_put_base::__format_int\\28char*\\2c\\20char\\20const*\\2c\\20bool\\2c\\20unsigned\\20int\\29\n1951:std::__2::__num_put_base::__format_float\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n1952:std::__2::__itoa::__append8\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1953:sktext::gpu::VertexFiller::deviceRectAndCheckTransform\\28SkMatrix\\20const&\\29\\20const\n1954:sktext::gpu::TextBlob::Key::operator==\\28sktext::gpu::TextBlob::Key\\20const&\\29\\20const\n1955:sktext::gpu::GlyphVector::packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\n1956:sktext::SkStrikePromise::strike\\28\\29\n1957:skif::RoundIn\\28SkRect\\29\n1958:skif::LayerSpace<SkMatrix>::inverseMapRect\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::LayerSpace<SkIRect>*\\29\\20const\n1959:skif::FilterResult::applyTransform\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkMatrix>\\20const&\\2c\\20SkSamplingOptions\\20const&\\29\\20const\n1960:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n1961:skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n1962:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n1963:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair&&\\29\n1964:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::resize\\28int\\29\n1965:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n1966:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::move\\28void*\\29\n1967:skia_private::TArray<SkRasterPipeline_MemoryCtxInfo\\2c\\20true>::push_back\\28SkRasterPipeline_MemoryCtxInfo&&\\29\n1968:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20true>::push_back\\28SkRGBA4f<\\28SkAlphaType\\293>&&\\29\n1969:skia_png_set_text_2\n1970:skia_png_set_palette_to_rgb\n1971:skia_png_handle_IHDR\n1972:skia_png_handle_IEND\n1973:skia_png_destroy_write_struct\n1974:skia::textlayout::operator==\\28skia::textlayout::FontArguments\\20const&\\2c\\20skia::textlayout::FontArguments\\20const&\\29\n1975:skia::textlayout::TextWrapper::TextStretch::extend\\28skia::textlayout::Cluster*\\29\n1976:skia::textlayout::FontCollection::getFontManagerOrder\\28\\29\\20const\n1977:skia::textlayout::FontArguments::FontArguments\\28skia::textlayout::FontArguments\\20const&\\29\n1978:skia::textlayout::Decorations::calculateGaps\\28skia::textlayout::TextLine::ClipContext\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n1979:skia::textlayout::Block&\\20skia_private::TArray<skia::textlayout::Block\\2c\\20true>::emplace_back<unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20skia::textlayout::TextStyle\\20const&>\\28unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20skia::textlayout::TextStyle\\20const&\\29\n1980:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::fixedFunctionFlags\\28\\29\\20const\n1981:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\\28SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1982:skgpu::ganesh::SurfaceFillContext::SurfaceFillContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n1983:skgpu::ganesh::SurfaceDrawContext::drawShape\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape&&\\29\n1984:skgpu::ganesh::SurfaceDrawContext::drawPaint\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\29\n1985:skgpu::ganesh::SurfaceDrawContext::MakeWithFallback\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\2c\\20SkISize\\2c\\20SkSurfaceProps\\20const&\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1986:skgpu::ganesh::SurfaceContext::rescaleInto\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29\n1987:skgpu::ganesh::SurfaceContext::PixelTransferResult::operator=\\28skgpu::ganesh::SurfaceContext::PixelTransferResult&&\\29\n1988:skgpu::ganesh::SmallPathAtlasMgr::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n1989:skgpu::ganesh::OpsTask::~OpsTask\\28\\29\n1990:skgpu::ganesh::OpsTask::setColorLoadOp\\28GrLoadOp\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n1991:skgpu::ganesh::OpsTask::deleteOps\\28\\29\n1992:skgpu::ganesh::FillRectOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n1993:skgpu::ganesh::Device::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29::$_0::operator\\28\\29\\28int\\29\\20const\n1994:skgpu::ganesh::ClipStack::~ClipStack\\28\\29\n1995:skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::~TClientMappedBufferManager\\28\\29\n1996:skgpu::Swizzle::apply\\28SkRasterPipeline*\\29\\20const\n1997:skgpu::Plot::addSubImage\\28int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n1998:skgpu::GetLCDBlendFormula\\28SkBlendMode\\29\n1999:skcms_TransferFunction_isHLGish\n2000:sk_srgb_linear_singleton\\28\\29\n2001:shr\n2002:shl\n2003:setRegionCheck\\28SkRegion*\\2c\\20SkRegion\\20const&\\29\n2004:read_header\\28SkStream*\\2c\\20SkPngChunkReader*\\2c\\20SkCodec**\\2c\\20png_struct_def**\\2c\\20png_info_def**\\29\n2005:ps_dimension_set_mask_bits\n2006:operator==\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n2007:mbrtowc\n2008:jround_up\n2009:jpeg_make_d_derived_tbl\n2010:ilogbf\n2011:hb_ucd_get_unicode_funcs\n2012:hb_syllabic_insert_dotted_circles\\28hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\n2013:hb_shape_full\n2014:hb_serialize_context_t::~hb_serialize_context_t\\28\\29\n2015:hb_serialize_context_t::resolve_links\\28\\29\n2016:hb_serialize_context_t::reset\\28\\29\n2017:hb_lazy_loader_t<OT::cff1_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cff1_accelerator_t\\2c\\2016u>\\2c\\20hb_face_t\\2c\\2016u\\2c\\20OT::cff1_accelerator_t>::get\\28\\29\\20const\n2018:hb_lazy_loader_t<AAT::feat\\2c\\20hb_table_lazy_loader_t<AAT::feat\\2c\\2034u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2034u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2019:hb_language_from_string\n2020:hb_font_t::mults_changed\\28\\29\n2021:hb_font_destroy\n2022:hb_buffer_t::next_glyph\\28\\29\n2023:get_sof\n2024:ftell\n2025:ft_var_readpackedpoints\n2026:ft_mem_strdup\n2027:float\\20emscripten::internal::MemberAccess<StrokeOpts\\2c\\20float>::getWire<StrokeOpts>\\28float\\20StrokeOpts::*\\20const&\\2c\\20StrokeOpts\\20const&\\29\n2028:fill_window\n2029:exp\n2030:encodeImage\\28GrDirectContext*\\2c\\20sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\n2031:emscripten::val\\20MakeTypedArray<float>\\28int\\2c\\20float\\20const*\\29\n2032:emscripten::internal::MethodInvoker<float\\20\\28SkContourMeasure::*\\29\\28\\29\\20const\\2c\\20float\\2c\\20SkContourMeasure\\20const*>::invoke\\28float\\20\\28SkContourMeasure::*\\20const&\\29\\28\\29\\20const\\2c\\20SkContourMeasure\\20const*\\29\n2033:emscripten::internal::Invoker<sk_sp<SkAnimatedImage>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkAnimatedImage>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2034:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\\2c\\20bool\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&>::invoke\\28bool\\20\\28**\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\\2c\\20SkPath*\\2c\\20SkPath*\\29\n2035:dquad_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2036:do_clip_op\\28SkReadBuffer*\\2c\\20SkCanvas*\\2c\\20SkRegion::Op\\2c\\20SkClipOp*\\29\n2037:do_anti_hairline\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkIRect\\20const*\\2c\\20SkBlitter*\\29\n2038:doWriteReverse\\28char16_t\\20const*\\2c\\20int\\2c\\20char16_t*\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20UErrorCode*\\29\n2039:doWriteForward\\28char16_t\\20const*\\2c\\20int\\2c\\20char16_t*\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20UErrorCode*\\29\n2040:dline_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2041:dispose_chunk\n2042:direct_blur_y\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n2043:decltype\\28fp\\28\\28SkRecords::NoOp\\29\\28\\29\\29\\29\\20SkRecord::Record::visit<SkRecords::Draw&>\\28SkRecords::Draw&\\29\\20const\n2044:dcubic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2045:dconic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2046:crop_rect_edge\\28SkRect\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n2047:char*\\20std::__2::__rewrap_iter\\5babi:v160004\\5d<char*\\2c\\20char*\\2c\\20std::__2::__unwrap_iter_impl<char*\\2c\\20true>>\\28char*\\2c\\20char*\\29\n2048:cff_slot_load\n2049:cff_parse_real\n2050:cff_index_get_sid_string\n2051:cff_index_access_element\n2052:cf2_doStems\n2053:cf2_doFlex\n2054:byn$mgfn-shared$tt_cmap8_get_info\n2055:byn$mgfn-shared$tt_cmap0_get_info\n2056:byn$mgfn-shared$skia_png_set_strip_16\n2057:byn$mgfn-shared$SkSL::Tracer::line\\28int\\29\n2058:byn$mgfn-shared$AlmostBequalUlps\\28float\\2c\\20float\\29\n2059:buffer_verify_error\\28hb_buffer_t*\\2c\\20hb_font_t*\\2c\\20char\\20const*\\2c\\20...\\29\n2060:blur_y_rect\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n2061:blur_column\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28unsigned\\20char*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\\20const\n2062:af_sort_and_quantize_widths\n2063:af_glyph_hints_align_weak_points\n2064:af_glyph_hints_align_strong_points\n2065:af_face_globals_new\n2066:af_cjk_compute_stem_width\n2067:add_huff_table\n2068:addPoint\\28UBiDi*\\2c\\20int\\2c\\20int\\29\n2069:__uselocale\n2070:__math_xflow\n2071:__cxxabiv1::__base_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n2072:\\28anonymous\\20namespace\\29::make_vertices_spec\\28bool\\2c\\20bool\\29\n2073:\\28anonymous\\20namespace\\29::gather_lines_and_quads\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<int\\2c\\20true>*\\2c\\20skia_private::TArray<float\\2c\\20true>*\\29::$_1::operator\\28\\29\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20bool\\29\\20const\n2074:\\28anonymous\\20namespace\\29::draw_stencil_rect\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrHardClip\\20const&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\29\n2075:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n2076:\\28anonymous\\20namespace\\29::PathSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n2077:\\28anonymous\\20namespace\\29::GaussPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n2078:\\28anonymous\\20namespace\\29::CacheImpl::removeInternal\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*\\29\n2079:WebPRescalerExport\n2080:WebPInitAlphaProcessing\n2081:WebPFreeDecBuffer\n2082:WebPDemuxDelete\n2083:VP8SetError\n2084:VP8LInverseTransform\n2085:VP8LDelete\n2086:VP8LColorCacheClear\n2087:TT_Load_Context\n2088:StringBuffer\\20apply_format_string<1024>\\28char\\20const*\\2c\\20void*\\2c\\20char\\20\\28&\\29\\20\\5b1024\\5d\\2c\\20SkString*\\29\n2089:SkYUVAPixmaps::operator=\\28SkYUVAPixmaps\\20const&\\29\n2090:SkYUVAPixmapInfo::SupportedDataTypes::enableDataType\\28SkYUVAPixmapInfo::DataType\\2c\\20int\\29\n2091:SkWriter32::writeMatrix\\28SkMatrix\\20const&\\29\n2092:SkWriter32::snapshotAsData\\28\\29\\20const\n2093:SkVertices::uniqueID\\28\\29\\20const\n2094:SkVertices::approximateSize\\28\\29\\20const\n2095:SkTypefaceCache::NewTypefaceID\\28\\29\n2096:SkTextBlobRunIterator::next\\28\\29\n2097:SkTextBlobRunIterator::SkTextBlobRunIterator\\28SkTextBlob\\20const*\\29\n2098:SkTextBlobBuilder::SkTextBlobBuilder\\28\\29\n2099:SkTextBlobBuilder::ConservativeRunBounds\\28SkTextBlob::RunRecord\\20const&\\29\n2100:SkTSpan::closestBoundedT\\28SkDPoint\\20const&\\29\\20const\n2101:SkTSect::updateBounded\\28SkTSpan*\\2c\\20SkTSpan*\\2c\\20SkTSpan*\\29\n2102:SkTSect::trim\\28SkTSpan*\\2c\\20SkTSect*\\29\n2103:SkTDStorage::erase\\28int\\2c\\20int\\29\n2104:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::percolateUpIfNecessary\\28int\\29\n2105:SkSurfaces::Raster\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20SkSurfaceProps\\20const*\\29\n2106:SkSurfaceProps::SkSurfaceProps\\28unsigned\\20int\\2c\\20SkPixelGeometry\\2c\\20float\\2c\\20float\\29\n2107:SkStrokerPriv::JoinFactory\\28SkPaint::Join\\29\n2108:SkStrokeRec::setStrokeStyle\\28float\\2c\\20bool\\29\n2109:SkStrokeRec::setFillStyle\\28\\29\n2110:SkStrokeRec::applyToPath\\28SkPath*\\2c\\20SkPath\\20const&\\29\\20const\n2111:SkString::set\\28char\\20const*\\29\n2112:SkStrikeSpec::findOrCreateStrike\\28\\29\\20const\n2113:SkStrikeSpec::MakeWithNoDevice\\28SkFont\\20const&\\2c\\20SkPaint\\20const*\\29\n2114:SkStrike::unlock\\28\\29\n2115:SkStrike::lock\\28\\29\n2116:SkSharedMutex::SkSharedMutex\\28\\29\n2117:SkShadowTessellator::MakeSpot\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n2118:SkShaders::Empty\\28\\29\n2119:SkShaders::Color\\28unsigned\\20int\\29\n2120:SkShaderBase::appendRootStages\\28SkStageRec\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n2121:SkScalerContext::~SkScalerContext\\28\\29.1\n2122:SkSL::write_stringstream\\28SkSL::StringStream\\20const&\\2c\\20SkSL::OutputStream&\\29\n2123:SkSL::evaluate_3_way_intrinsic\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n2124:SkSL::VarDeclaration::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::VariableStorage\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2125:SkSL::Type::priority\\28\\29\\20const\n2126:SkSL::Type::checkIfUsableInArray\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\\20const\n2127:SkSL::SymbolTable::takeOwnershipOfString\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n2128:SkSL::SymbolTable::isBuiltinType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n2129:SkSL::StructType::slotCount\\28\\29\\20const\n2130:SkSL::RP::SlotManager::mapVariableToSlots\\28SkSL::Variable\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n2131:SkSL::RP::Program::appendStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkSL::RP::Callbacks*\\2c\\20SkSpan<float\\20const>\\29\\20const\n2132:SkSL::RP::Generator::pushVectorizedExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n2133:SkSL::RP::Builder::ternary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n2134:SkSL::RP::Builder::simplifyPopSlotsUnmasked\\28SkSL::RP::SlotRange*\\29\n2135:SkSL::RP::Builder::pop_slots_unmasked\\28SkSL::RP::SlotRange\\29\n2136:SkSL::RP::Builder::pad_stack\\28int\\29\n2137:SkSL::RP::Builder::exchange_src\\28\\29\n2138:SkSL::ProgramUsage::remove\\28SkSL::ProgramElement\\20const&\\29\n2139:SkSL::ProgramUsage::isDead\\28SkSL::Variable\\20const&\\29\\20const\n2140:SkSL::Pool::~Pool\\28\\29\n2141:SkSL::PipelineStage::PipelineStageCodeGenerator::typeName\\28SkSL::Type\\20const&\\29\n2142:SkSL::LiteralType::priority\\28\\29\\20const\n2143:SkSL::IndexExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2144:SkSL::GLSLCodeGenerator::writeAnyConstructor\\28SkSL::AnyConstructor\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n2145:SkSL::ExpressionArray::clone\\28\\29\\20const\n2146:SkSL::Compiler::errorText\\28bool\\29\n2147:SkSL::Block::Make\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2148:SkSL::Block::MakeBlock\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2149:SkSL::Analysis::DetectVarDeclarationWithoutScope\\28SkSL::Statement\\20const&\\2c\\20SkSL::ErrorReporter*\\29\n2150:SkRuntimeShaderBuilder::~SkRuntimeShaderBuilder\\28\\29\n2151:SkRuntimeShaderBuilder::makeShader\\28SkMatrix\\20const*\\29\\20const\n2152:SkRuntimeShaderBuilder::SkRuntimeShaderBuilder\\28sk_sp<SkRuntimeEffect>\\29\n2153:SkRuntimeEffectPriv::TransformUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkColorSpace\\20const*\\29\n2154:SkRuntimeEffect::getRPProgram\\28SkSL::DebugTracePriv*\\29\\20const\n2155:SkRegion::getBoundaryPath\\28SkPath*\\29\\20const\n2156:SkRegion::Spanerator::next\\28int*\\2c\\20int*\\29\n2157:SkRegion::SkRegion\\28SkRegion\\20const&\\29\n2158:SkReduceOrder::Quad\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2159:SkReadBuffer::skipByteArray\\28unsigned\\20long*\\29\n2160:SkReadBuffer::readSampling\\28\\29\n2161:SkReadBuffer::readRRect\\28SkRRect*\\29\n2162:SkReadBuffer::checkInt\\28int\\2c\\20int\\29\n2163:SkRasterPipeline::appendMatrix\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\29\n2164:SkQuads::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2165:SkQuadraticEdge::updateQuadratic\\28\\29\n2166:SkPngCodec::~SkPngCodec\\28\\29.1\n2167:SkPngCodec::processData\\28\\29\n2168:SkPixmap::readPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\20const\n2169:SkPictureRecord::~SkPictureRecord\\28\\29\n2170:SkPicture::~SkPicture\\28\\29.1\n2171:SkPathStroker::quadStroke\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n2172:SkPathStroker::preJoinTo\\28SkPoint\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20bool\\29\n2173:SkPathStroker::intersectRay\\28SkQuadConstruct*\\2c\\20SkPathStroker::IntersectRayType\\29\\20const\n2174:SkPathStroker::cubicStroke\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n2175:SkPathStroker::conicStroke\\28SkConic\\20const&\\2c\\20SkQuadConstruct*\\29\n2176:SkPathMeasure::isClosed\\28\\29\n2177:SkPathEffectBase::getFlattenableType\\28\\29\\20const\n2178:SkPathBuilder::moveTo\\28SkPoint\\29\n2179:SkPathBuilder::incReserve\\28int\\2c\\20int\\29\n2180:SkPathBuilder::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2181:SkPath::isLastContourClosed\\28\\29\\20const\n2182:SkPath::addRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2183:SkPaintToGrPaintReplaceShader\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n2184:SkPaint::setStrokeMiter\\28float\\29\n2185:SkPaint::setStrokeJoin\\28SkPaint::Join\\29\n2186:SkOpSpanBase::mergeMatches\\28SkOpSpanBase*\\29\n2187:SkOpSpanBase::addOpp\\28SkOpSpanBase*\\29\n2188:SkOpSegment::subDivide\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\2c\\20SkDCurve*\\29\\20const\n2189:SkOpSegment::release\\28SkOpSpan\\20const*\\29\n2190:SkOpSegment::operand\\28\\29\\20const\n2191:SkOpSegment::moveNearby\\28\\29\n2192:SkOpSegment::markDone\\28SkOpSpan*\\29\n2193:SkOpSegment::markAndChaseDone\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkOpSpanBase**\\29\n2194:SkOpSegment::isClose\\28double\\2c\\20SkOpSegment\\20const*\\29\\20const\n2195:SkOpSegment::init\\28SkPoint*\\2c\\20float\\2c\\20SkOpContour*\\2c\\20SkPath::Verb\\29\n2196:SkOpSegment::addT\\28double\\2c\\20SkPoint\\20const&\\29\n2197:SkOpCoincidence::fixUp\\28SkOpPtT*\\2c\\20SkOpPtT\\20const*\\29\n2198:SkOpCoincidence::add\\28SkOpPtT*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT*\\29\n2199:SkOpCoincidence::addMissing\\28bool*\\29\n2200:SkOpCoincidence::addIfMissing\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20double\\2c\\20double\\2c\\20SkOpSegment*\\2c\\20SkOpSegment*\\2c\\20bool*\\29\n2201:SkOpCoincidence::addExpanded\\28\\29\n2202:SkOpAngle::set\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n2203:SkOpAngle::lineOnOneSide\\28SkDPoint\\20const&\\2c\\20SkDVector\\20const&\\2c\\20SkOpAngle\\20const*\\2c\\20bool\\29\\20const\n2204:SkNoPixelsDevice::ClipState::op\\28SkClipOp\\2c\\20SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20bool\\29\n2205:SkMatrix\\20skif::Mapping::map<SkMatrix>\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n2206:SkMatrixPriv::DifferentialAreaScale\\28SkMatrix\\20const&\\2c\\20SkPoint\\20const&\\29\n2207:SkMatrix::writeToMemory\\28void*\\29\\20const\n2208:SkMatrix::preservesRightAngles\\28float\\29\\20const\n2209:SkM44::normalizePerspective\\28\\29\n2210:SkLatticeIter::~SkLatticeIter\\28\\29\n2211:SkLatticeIter::next\\28SkIRect*\\2c\\20SkRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\n2212:SkImages::RasterFromBitmap\\28SkBitmap\\20const&\\29\n2213:SkImage_Lazy::Validator::Validator\\28sk_sp<SharedGenerator>\\2c\\20SkColorType\\20const*\\2c\\20sk_sp<SkColorSpace>\\29\n2214:SkImageShader::MakeSubset\\28sk_sp<SkImage>\\2c\\20SkRect\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\n2215:SkImageFilters::Image\\28sk_sp<SkImage>\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\29\n2216:SkImageFilters::Blend\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n2217:SkImage::readPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n2218:SkHalfToFloat\\28unsigned\\20short\\29\n2219:SkGradientShader::MakeSweep\\28float\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n2220:SkGradientShader::MakeRadial\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n2221:SkGradientBaseShader::commonAsAGradient\\28SkShaderBase::GradientInfo*\\29\\20const\n2222:SkGradientBaseShader::ValidGradient\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\29\n2223:SkGradientBaseShader::SkGradientBaseShader\\28SkGradientBaseShader::Descriptor\\20const&\\2c\\20SkMatrix\\20const&\\29\n2224:SkGradientBaseShader::MakeDegenerateGradient\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkTileMode\\29\n2225:SkGradientBaseShader::Descriptor::~Descriptor\\28\\29\n2226:SkGradientBaseShader::Descriptor::Descriptor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\29\n2227:SkGlyph::setPath\\28SkArenaAlloc*\\2c\\20SkPath\\20const*\\2c\\20bool\\29\n2228:SkFontMgr::matchFamilyStyleCharacter\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\2c\\20char\\20const**\\2c\\20int\\2c\\20int\\29\\20const\n2229:SkFont::setSize\\28float\\29\n2230:SkEvalQuadAt\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n2231:SkEncodedInfo::~SkEncodedInfo\\28\\29\n2232:SkEmptyFontMgr::onMakeFromStreamIndex\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n2233:SkDrawableList::~SkDrawableList\\28\\29\n2234:SkDrawable::draw\\28SkCanvas*\\2c\\20SkMatrix\\20const*\\29\n2235:SkDevice::setDeviceCoordinateSystem\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\2c\\20SkM44\\20const&\\2c\\20int\\2c\\20int\\29\n2236:SkData::PrivateNewWithCopy\\28void\\20const*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28\\29\\20const\n2237:SkDashPathEffect::Make\\28float\\20const*\\2c\\20int\\2c\\20float\\29\n2238:SkDQuad::monotonicInX\\28\\29\\20const\n2239:SkDCubic::dxdyAtT\\28double\\29\\20const\n2240:SkDCubic::RootsValidT\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2241:SkCubicEdge::updateCubic\\28\\29\n2242:SkConicalGradient::~SkConicalGradient\\28\\29\n2243:SkColorSpace::serialize\\28\\29\\20const\n2244:SkColorSpace::MakeSRGBLinear\\28\\29\n2245:SkColorFilterPriv::MakeGaussian\\28\\29\n2246:SkColorConverter::SkColorConverter\\28unsigned\\20int\\20const*\\2c\\20int\\29\n2247:SkCodec::startScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const*\\29\n2248:SkCodec::handleFrameIndex\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20std::__2::function<SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>\\29\n2249:SkCodec::getScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n2250:SkChopQuadAtYExtrema\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2251:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\20const*\\2c\\20int\\29\n2252:SkChopCubicAtYExtrema\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2253:SkCharToGlyphCache::SkCharToGlyphCache\\28\\29\n2254:SkCanvas::peekPixels\\28SkPixmap*\\29\n2255:SkCanvas::getTotalMatrix\\28\\29\\20const\n2256:SkCanvas::getLocalToDevice\\28\\29\\20const\n2257:SkCanvas::getLocalClipBounds\\28\\29\\20const\n2258:SkCanvas::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n2259:SkCanvas::drawAtlas\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n2260:SkCanvas::concat\\28SkM44\\20const&\\29\n2261:SkCanvas::SkCanvas\\28SkBitmap\\20const&\\29\n2262:SkCanvas::ImageSetEntry::ImageSetEntry\\28SkCanvas::ImageSetEntry\\20const&\\29\n2263:SkBmpCodec::ReadHeader\\28SkStream*\\2c\\20bool\\2c\\20std::__2::unique_ptr<SkCodec\\2c\\20std::__2::default_delete<SkCodec>>*\\29\n2264:SkBlitter::blitRectRegion\\28SkIRect\\20const&\\2c\\20SkRegion\\20const&\\29\n2265:SkBlendMode_ShouldPreScaleCoverage\\28SkBlendMode\\2c\\20bool\\29\n2266:SkBlendMode_AppendStages\\28SkBlendMode\\2c\\20SkRasterPipeline*\\29\n2267:SkBitmap::tryAllocPixels\\28SkBitmap::Allocator*\\29\n2268:SkBitmap::readPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\\20const\n2269:SkBitmap::readPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\20const\n2270:SkBitmap::installPixels\\28SkPixmap\\20const&\\29\n2271:SkBitmap::allocPixels\\28SkImageInfo\\20const&\\29\n2272:SkBitmap::SkBitmap\\28SkBitmap&&\\29\n2273:SkBaseShadowTessellator::handleQuad\\28SkPoint\\20const*\\29\n2274:SkAutoDescriptor::~SkAutoDescriptor\\28\\29\n2275:SkAnimatedImage::getFrameCount\\28\\29\\20const\n2276:SkAAClip::~SkAAClip\\28\\29\n2277:SkAAClip::setPath\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n2278:SkAAClip::op\\28SkAAClip\\20const&\\2c\\20SkClipOp\\29\n2279:OT::hb_ot_layout_lookup_accelerator_t*\\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GSUB_impl::SubstLookup>\\28OT::Layout::GSUB_impl::SubstLookup\\20const&\\29\n2280:OT::hb_ot_apply_context_t::replace_glyph\\28unsigned\\20int\\29\n2281:OT::apply_lookup\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20OT::LookupRecord\\20const*\\2c\\20unsigned\\20int\\29\n2282:OT::Layout::GPOS_impl::ValueFormat::get_device\\28OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool*\\2c\\20void\\20const*\\2c\\20hb_sanitize_context_t&\\29\n2283:OT::Layout::GPOS_impl::AnchorFormat3::get_anchor\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20float*\\2c\\20float*\\29\\20const\n2284:OT::Layout::GPOS_impl::AnchorFormat2::get_anchor\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20float*\\2c\\20float*\\29\\20const\n2285:OT::ClassDef::get_class\\28unsigned\\20int\\29\\20const\n2286:JpegDecoderMgr::~JpegDecoderMgr\\28\\29\n2287:GrTriangulator::simplify\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n2288:GrTriangulator::setTop\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2289:GrTriangulator::mergeCoincidentVertices\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2290:GrTriangulator::Vertex*\\20SkArenaAlloc::make<GrTriangulator::Vertex\\2c\\20SkPoint&\\2c\\20int>\\28SkPoint&\\2c\\20int&&\\29\n2291:GrThreadSafeCache::remove\\28skgpu::UniqueKey\\20const&\\29\n2292:GrThreadSafeCache::internalFind\\28skgpu::UniqueKey\\20const&\\29\n2293:GrThreadSafeCache::internalAdd\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29\n2294:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29\n2295:GrTexture::markMipmapsClean\\28\\29\n2296:GrTessellationShader::MakePipeline\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAAType\\2c\\20GrAppliedClip&&\\2c\\20GrProcessorSet&&\\29\n2297:GrSurfaceProxyView::concatSwizzle\\28skgpu::Swizzle\\29\n2298:GrSurfaceProxy::LazyCallbackResult::LazyCallbackResult\\28sk_sp<GrTexture>\\29\n2299:GrSurfaceProxy::Copy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Mipmapped\\2c\\20SkIRect\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20GrSurfaceProxy::RectsMustMatch\\2c\\20sk_sp<GrRenderTask>*\\29\n2300:GrStyledShape::GrStyledShape\\28SkPath\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n2301:GrStyledShape::GrStyledShape\\28GrStyledShape\\20const&\\2c\\20GrStyle::Apply\\2c\\20float\\29\n2302:GrSimpleMeshDrawOpHelper::CreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrPipeline\\20const*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\2c\\20GrUserStencilSettings\\20const*\\29\n2303:GrShape::simplifyLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\29\n2304:GrShape::reset\\28\\29\n2305:GrShape::conservativeContains\\28SkPoint\\20const&\\29\\20const\n2306:GrSWMaskHelper::init\\28SkIRect\\20const&\\29\n2307:GrResourceProvider::createNonAAQuadIndexBuffer\\28\\29\n2308:GrResourceProvider::createBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\2c\\20GrResourceProvider::ZeroInit\\29\n2309:GrResourceCache::refAndMakeResourceMRU\\28GrGpuResource*\\29\n2310:GrResourceCache::findAndRefUniqueResource\\28skgpu::UniqueKey\\20const&\\29\n2311:GrRenderTask::addTarget\\28GrDrawingManager*\\2c\\20sk_sp<GrSurfaceProxy>\\29\n2312:GrRenderTarget::~GrRenderTarget\\28\\29.1\n2313:GrQuadUtils::WillUseHairline\\28GrQuad\\20const&\\2c\\20GrAAType\\2c\\20GrQuadAAFlags\\29\n2314:GrQuadUtils::CropToRect\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20DrawQuad*\\2c\\20bool\\29\n2315:GrProxyProvider::processInvalidUniqueKey\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\2c\\20GrProxyProvider::InvalidateGPUResource\\29\n2316:GrPorterDuffXPFactory::Get\\28SkBlendMode\\29\n2317:GrPixmap::operator=\\28GrPixmap&&\\29\n2318:GrPathUtils::scaleToleranceToSrc\\28float\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\29\n2319:GrPathUtils::quadraticPointCount\\28SkPoint\\20const*\\2c\\20float\\29\n2320:GrPathUtils::cubicPointCount\\28SkPoint\\20const*\\2c\\20float\\29\n2321:GrPaint::setPorterDuffXPFactory\\28SkBlendMode\\29\n2322:GrPaint::GrPaint\\28GrPaint\\20const&\\29\n2323:GrOpsRenderPass::draw\\28int\\2c\\20int\\29\n2324:GrOpsRenderPass::drawInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n2325:GrMeshDrawOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n2326:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29\n2327:GrGradientShader::MakeGradientFP\\28SkGradientBaseShader\\20const&\\2c\\20GrFPArgs\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkMatrix\\20const*\\29\n2328:GrGpuResource::getContext\\28\\29\n2329:GrGpu::writePixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20bool\\29\n2330:GrGLTexture::onSetLabel\\28\\29\n2331:GrGLTexture::onRelease\\28\\29\n2332:GrGLTexture::onAbandon\\28\\29\n2333:GrGLTexture::backendFormat\\28\\29\\20const\n2334:GrGLSLShaderBuilder::appendFunctionDecl\\28SkSLType\\2c\\20char\\20const*\\2c\\20SkSpan<GrShaderVar\\20const>\\29\n2335:GrGLSLProgramBuilder::fragmentProcessorHasCoordsParam\\28GrFragmentProcessor\\20const*\\29\\20const\n2336:GrGLRenderTarget::onRelease\\28\\29\n2337:GrGLRenderTarget::onAbandon\\28\\29\n2338:GrGLGpu::resolveRenderFBOs\\28GrGLRenderTarget*\\2c\\20SkIRect\\20const&\\2c\\20GrGLRenderTarget::ResolveDirection\\2c\\20bool\\29\n2339:GrGLGpu::flushBlendAndColorWrite\\28skgpu::BlendInfo\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n2340:GrGLGetVersionFromString\\28char\\20const*\\29\n2341:GrGLCheckLinkStatus\\28GrGLGpu\\20const*\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20skgpu::ShaderErrorHandler*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const**\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\29\n2342:GrGLCaps::maxRenderTargetSampleCount\\28GrGLFormat\\29\\20const\n2343:GrFragmentProcessors::Make\\28SkBlenderBase\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrFPArgs\\20const&\\29\n2344:GrFragmentProcessor::isEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n2345:GrFragmentProcessor::asTextureEffect\\28\\29\\20const\n2346:GrFragmentProcessor::Rect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRect\\29\n2347:GrFragmentProcessor::ModulateRGBA\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n2348:GrDrawingManager::~GrDrawingManager\\28\\29\n2349:GrDrawingManager::removeRenderTasks\\28\\29\n2350:GrDrawingManager::getPathRenderer\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\2c\\20bool\\2c\\20skgpu::ganesh::PathRendererChain::DrawType\\2c\\20skgpu::ganesh::PathRenderer::StencilSupport*\\29\n2351:GrDrawOpAtlas::compact\\28skgpu::AtlasToken\\29\n2352:GrContext_Base::~GrContext_Base\\28\\29\n2353:GrContext_Base::defaultBackendFormat\\28SkColorType\\2c\\20skgpu::Renderable\\29\\20const\n2354:GrColorSpaceXform::XformKey\\28GrColorSpaceXform\\20const*\\29\n2355:GrColorSpaceXform::Make\\28SkColorSpace*\\2c\\20SkAlphaType\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\29\n2356:GrColorSpaceXform::Make\\28GrColorInfo\\20const&\\2c\\20GrColorInfo\\20const&\\29\n2357:GrColorInfo::operator=\\28GrColorInfo\\20const&\\29\n2358:GrCaps::supportedReadPixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n2359:GrCaps::getFallbackColorTypeAndFormat\\28GrColorType\\2c\\20int\\29\\20const\n2360:GrCaps::areColorTypeAndFormatCompatible\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\29\\20const\n2361:GrBufferAllocPool::~GrBufferAllocPool\\28\\29\n2362:GrBlurUtils::GaussianBlur\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20SkBackingFit\\29\n2363:GrBlurUtils::DrawShapeWithMaskFilter\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\29\n2364:GrBaseContextPriv::getShaderErrorHandler\\28\\29\\20const\n2365:GrBackendTexture::GrBackendTexture\\28GrBackendTexture\\20const&\\29\n2366:GrBackendRenderTarget::getBackendFormat\\28\\29\\20const\n2367:GrBackendFormat::operator==\\28GrBackendFormat\\20const&\\29\\20const\n2368:GrAAConvexTessellator::createOuterRing\\28GrAAConvexTessellator::Ring\\20const&\\2c\\20float\\2c\\20float\\2c\\20GrAAConvexTessellator::Ring*\\29\n2369:GrAAConvexTessellator::createInsetRings\\28GrAAConvexTessellator::Ring&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20GrAAConvexTessellator::Ring**\\29\n2370:FindSortableTop\\28SkOpContourHead*\\29\n2371:FT_Set_Charmap\n2372:FT_Outline_Decompose\n2373:FT_Open_Face\n2374:FT_New_Size\n2375:FT_Load_Sfnt_Table\n2376:FT_GlyphLoader_Add\n2377:FT_Get_Color_Glyph_Paint\n2378:FT_Get_Color_Glyph_Layer\n2379:FT_Get_Advance\n2380:FT_Done_Library\n2381:FT_CMap_New\n2382:DecodeImageData\\28sk_sp<SkData>\\29\n2383:Current_Ratio\n2384:Cr_z__tr_stored_block\n2385:ClipParams_unpackRegionOp\\28SkReadBuffer*\\2c\\20unsigned\\20int\\29\n2386:CircleOp::Circle&\\20skia_private::TArray<CircleOp::Circle\\2c\\20true>::emplace_back<CircleOp::Circle>\\28CircleOp::Circle&&\\29\n2387:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n2388:AlmostEqualUlps_Pin\\28float\\2c\\20float\\29\n2389:wuffs_lzw__decoder__workbuf_len\n2390:wuffs_gif__decoder__decode_image_config\n2391:wuffs_gif__decoder__decode_frame_config\n2392:winding_mono_quad\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20int*\\29\n2393:winding_mono_conic\\28SkConic\\20const&\\2c\\20float\\2c\\20float\\2c\\20int*\\29\n2394:wcrtomb\n2395:wchar_t\\20const*\\20std::__2::find\\5babi:v160004\\5d<wchar_t\\20const*\\2c\\20wchar_t>\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const&\\29\n2396:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20std::__2::iterator_traits<skia::textlayout::OneLineShaper::RunBlock*>::difference_type\\29\n2397:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20std::__2::iterator_traits<\\28anonymous\\20namespace\\29::Entry*>::difference_type\\29\n2398:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20std::__2::iterator_traits<SkSL::ProgramElement\\20const**>::difference_type\\29\n2399:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20std::__2::iterator_traits<SkSL::FunctionDefinition\\20const**>::difference_type\\29\n2400:void\\20std::__2::__inplace_merge<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\2c\\20long\\29\n2401:void\\20sort_r_simple<void*>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n2402:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29.3\n2403:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29\n2404:void\\20SkTIntroSort<double\\2c\\20void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29::'lambda'\\28double\\20const&\\2c\\20double\\20const&\\29>\\28int\\2c\\20double*\\2c\\20int\\2c\\20void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29::'lambda'\\28double\\20const&\\2c\\20double\\20const&\\29\\20const&\\29\n2405:void\\20SkTIntroSort<SkEdge*\\2c\\20void\\20SkTQSort<SkEdge>\\28SkEdge**\\2c\\20SkEdge**\\29::'lambda'\\28SkEdge\\20const*\\2c\\20SkEdge\\20const*\\29>\\28int\\2c\\20SkEdge*\\2c\\20int\\2c\\20void\\20SkTQSort<SkEdge>\\28SkEdge**\\2c\\20SkEdge**\\29::'lambda'\\28SkEdge\\20const*\\2c\\20SkEdge\\20const*\\29\\20const&\\29\n2406:vfprintf\n2407:valid_args\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long*\\29\n2408:update_offset_to_base\\28char\\20const*\\2c\\20long\\29\n2409:update_box\n2410:unsigned\\20long\\20const&\\20std::__2::min\\5babi:v160004\\5d<unsigned\\20long>\\28unsigned\\20long\\20const&\\2c\\20unsigned\\20long\\20const&\\29\n2411:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n2412:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n2413:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n2414:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n2415:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n2416:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n2417:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n2418:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n2419:u_charMirror_skia\n2420:tt_size_reset\n2421:tt_sbit_decoder_load_metrics\n2422:tt_face_get_location\n2423:tt_face_find_bdf_prop\n2424:tolower\n2425:toTextStyle\\28SimpleTextStyle\\20const&\\29\n2426:t1_cmap_unicode_done\n2427:subdivide_cubic_to\\28SkPath*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n2428:subdivide\\28SkConic\\20const&\\2c\\20SkPoint*\\2c\\20int\\29\n2429:strtox\n2430:strtoull_l\n2431:strtod\n2432:std::logic_error::~logic_error\\28\\29.1\n2433:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::push_back\\5babi:v160004\\5d\\28float&&\\29\n2434:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::__append\\28unsigned\\20long\\29\n2435:std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n2436:std::__2::vector<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>>::reserve\\28unsigned\\20long\\29\n2437:std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>::push_back\\5babi:v160004\\5d\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n2438:std::__2::unique_ptr<\\28anonymous\\20namespace\\29::SoftwarePathData\\2c\\20std::__2::default_delete<\\28anonymous\\20namespace\\29::SoftwarePathData>>::reset\\5babi:v160004\\5d\\28\\28anonymous\\20namespace\\29::SoftwarePathData*\\29\n2439:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::~time_put\\28\\29.1\n2440:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>::~pair\\28\\29\n2441:std::__2::pair<char\\20const*\\2c\\20char*>\\20std::__2::__copy_trivial::operator\\28\\29\\5babi:v160004\\5d<char\\20const\\2c\\20char\\2c\\200>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n2442:std::__2::locale::operator=\\28std::__2::locale\\20const&\\29\n2443:std::__2::locale::locale\\28\\29\n2444:std::__2::iterator_traits<unsigned\\20int\\20const*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<unsigned\\20int\\20const*>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n2445:std::__2::ios_base::~ios_base\\28\\29\n2446:std::__2::ios_base::init\\28void*\\29\n2447:std::__2::ios_base::clear\\28unsigned\\20int\\29\n2448:std::__2::fpos<__mbstate_t>::fpos\\5babi:v160004\\5d\\28long\\20long\\29\n2449:std::__2::enable_if<is_move_constructible<SkAnimatedImage::Frame>::value\\20&&\\20is_move_assignable<SkAnimatedImage::Frame>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<SkAnimatedImage::Frame>\\28SkAnimatedImage::Frame&\\2c\\20SkAnimatedImage::Frame&\\29\n2450:std::__2::default_delete<SkSL::ProgramUsage>::operator\\28\\29\\5babi:v160004\\5d\\28SkSL::ProgramUsage*\\29\\20const\n2451:std::__2::decay<decltype\\28__to_address_helper<std::__2::__wrap_iter<char\\20const*>>::__call\\28std::declval<std::__2::__wrap_iter<char\\20const*>\\20const&>\\28\\29\\29\\29>::type\\20std::__2::__to_address\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20void>\\28std::__2::__wrap_iter<char\\20const*>\\20const&\\29\n2452:std::__2::chrono::duration<long\\20long\\2c\\20std::__2::ratio<1ll\\2c\\201ll>>::duration\\5babi:v160004\\5d<long\\20long>\\28long\\20long\\20const&\\2c\\20std::__2::enable_if<is_convertible<long\\20long\\20const&\\2c\\20long\\20long>::value\\20&&\\20\\28std::__2::integral_constant<bool\\2c\\20false>::value\\20||\\20!treat_as_floating_point<long\\20long>::value\\29\\2c\\20void>::type*\\29\n2453:std::__2::char_traits<char>::move\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n2454:std::__2::char_traits<char>::assign\\28char*\\2c\\20unsigned\\20long\\2c\\20char\\29\n2455:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.2\n2456:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringbuf\\28\\29\n2457:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::str\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n2458:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::push_back\\28wchar_t\\29\n2459:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n2460:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<char*\\2c\\20void>\\28char*\\2c\\20char*\\2c\\20std::__2::allocator<char>\\20const&\\29\n2461:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__make_iterator\\5babi:v160004\\5d\\28char*\\29\n2462:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__grow_by\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2463:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setp\\5babi:v160004\\5d\\28char*\\2c\\20char*\\29\n2464:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::basic_streambuf\\28\\29\n2465:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29.1\n2466:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.1\n2467:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::sentry::sentry\\28std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20bool\\29\n2468:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.2\n2469:std::__2::__wrap_iter<wchar_t*>::operator+\\5babi:v160004\\5d\\28long\\29\\20const\n2470:std::__2::__wrap_iter<char*>::operator+\\5babi:v160004\\5d\\28long\\29\\20const\n2471:std::__2::__unique_if<SkSL::ConstructorStruct>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorStruct\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n2472:std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArray\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n2473:std::__2::__throw_out_of_range\\5babi:v160004\\5d\\28char\\20const*\\29\n2474:std::__2::__throw_length_error\\5babi:v160004\\5d\\28char\\20const*\\29\n2475:std::__2::__optional_destruct_base<GrStyledShape\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n2476:std::__2::__num_get<wchar_t>::__stage2_float_prep\\28std::__2::ios_base&\\2c\\20wchar_t*\\2c\\20wchar_t&\\2c\\20wchar_t&\\29\n2477:std::__2::__num_get<wchar_t>::__stage2_float_loop\\28wchar_t\\2c\\20bool&\\2c\\20char&\\2c\\20char*\\2c\\20char*&\\2c\\20wchar_t\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int&\\2c\\20wchar_t*\\29\n2478:std::__2::__num_get<char>::__stage2_float_prep\\28std::__2::ios_base&\\2c\\20char*\\2c\\20char&\\2c\\20char&\\29\n2479:std::__2::__num_get<char>::__stage2_float_loop\\28char\\2c\\20bool&\\2c\\20char&\\2c\\20char*\\2c\\20char*&\\2c\\20char\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int&\\2c\\20char*\\29\n2480:std::__2::__libcpp_wcrtomb_l\\5babi:v160004\\5d\\28char*\\2c\\20wchar_t\\2c\\20__mbstate_t*\\2c\\20__locale_struct*\\29\n2481:std::__2::__less<unsigned\\20int\\2c\\20unsigned\\20long>::operator\\28\\29\\5babi:v160004\\5d\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20long\\20const&\\29\\20const\n2482:std::__2::__itoa::__base_10_u32\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2483:std::__2::__itoa::__append6\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2484:std::__2::__itoa::__append4\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2485:sktext::gpu::VertexFiller::flatten\\28SkWriteBuffer&\\29\\20const\n2486:sktext::gpu::VertexFiller::Make\\28skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\2c\\20SkSpan<SkPoint\\20const>\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::FillerType\\29\n2487:sktext::gpu::SubRunContainer::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20SkRefCnt\\20const*\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n2488:sktext::gpu::SubRunAllocator::SubRunAllocator\\28int\\29\n2489:sktext::gpu::GlyphVector::flatten\\28SkWriteBuffer&\\29\\20const\n2490:sktext::gpu::GlyphVector::Make\\28sktext::SkStrikePromise&&\\2c\\20SkSpan<SkPackedGlyphID\\20const>\\2c\\20sktext::gpu::SubRunAllocator*\\29\n2491:sktext::SkStrikePromise::flatten\\28SkWriteBuffer&\\29\\20const\n2492:sktext::GlyphRunBuilder::makeGlyphRunList\\28sktext::GlyphRun\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPoint\\29\n2493:sktext::GlyphRun::GlyphRun\\28SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>\\2c\\20SkSpan<unsigned\\20short\\20const>\\2c\\20SkSpan<char\\20const>\\2c\\20SkSpan<unsigned\\20int\\20const>\\2c\\20SkSpan<SkPoint\\20const>\\29\n2494:skpaint_to_grpaint_impl\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\2c\\20SkBlender*\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n2495:skip_literal_string\n2496:skif::FilterResult::getAnalyzedShaderView\\28skif::Context\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkEnumBitMask<skif::FilterResult::BoundsAnalysis>\\29\\20const\n2497:skif::FilterResult::draw\\28skif::Context\\20const&\\2c\\20SkDevice*\\2c\\20bool\\2c\\20SkBlender\\20const*\\29\\20const\n2498:skif::FilterResult::Builder::outputBounds\\28std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n2499:skif::FilterResult::Builder::drawShader\\28sk_sp<SkShader>\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\\20const\n2500:skif::FilterResult::Builder::createInputShaders\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\n2501:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2502:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair>::removeSlot\\28int\\29\n2503:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::resize\\28int\\29\n2504:skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2505:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::IRNode\\20const*\\2c\\20skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n2506:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::removeIfExists\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n2507:skia_private::THashTable<int\\2c\\20int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n2508:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::find\\28GrProgramDesc\\20const&\\29\\20const\n2509:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::uncheckedSet\\28GrThreadSafeCache::Entry*&&\\29\n2510:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::resize\\28int\\29\n2511:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::removeIfExists\\28skgpu::UniqueKey\\20const&\\29\n2512:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::uncheckedSet\\28GrTextureProxy*&&\\29\n2513:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::resize\\28int\\29\n2514:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::uncheckedSet\\28FT_Opaque_Paint_&&\\29\n2515:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::resize\\28int\\29\n2516:skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::~THashMap\\28\\29\n2517:skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::find\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\\20const\n2518:skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::THashMap\\28std::initializer_list<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>\\29\n2519:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::set\\28SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2520:skia_private::TArray<unsigned\\20short\\2c\\20true>::resize_back\\28int\\29\n2521:skia_private::TArray<SkPath\\2c\\20true>::push_back_raw\\28int\\29\n2522:skia_private::TArray<GrGLAttribArrayState::AttribArrayState\\2c\\20true>::resize_back\\28int\\29\n2523:skia_png_write_chunk\n2524:skia_png_set_sBIT\n2525:skia_png_set_read_fn\n2526:skia_png_set_packing\n2527:skia_png_set_bKGD\n2528:skia_png_save_uint_32\n2529:skia_png_reciprocal2\n2530:skia_png_realloc_array\n2531:skia_png_read_start_row\n2532:skia_png_read_IDAT_data\n2533:skia_png_handle_zTXt\n2534:skia_png_handle_tRNS\n2535:skia_png_handle_tIME\n2536:skia_png_handle_tEXt\n2537:skia_png_handle_sRGB\n2538:skia_png_handle_sPLT\n2539:skia_png_handle_sCAL\n2540:skia_png_handle_sBIT\n2541:skia_png_handle_pHYs\n2542:skia_png_handle_pCAL\n2543:skia_png_handle_oFFs\n2544:skia_png_handle_iTXt\n2545:skia_png_handle_iCCP\n2546:skia_png_handle_hIST\n2547:skia_png_handle_gAMA\n2548:skia_png_handle_cHRM\n2549:skia_png_handle_bKGD\n2550:skia_png_handle_as_unknown\n2551:skia_png_handle_PLTE\n2552:skia_png_do_strip_channel\n2553:skia_png_destroy_read_struct\n2554:skia_png_destroy_info_struct\n2555:skia_png_compress_IDAT\n2556:skia_png_combine_row\n2557:skia_png_colorspace_set_sRGB\n2558:skia_png_check_fp_string\n2559:skia_png_check_fp_number\n2560:skia::textlayout::TypefaceFontStyleSet::createTypeface\\28int\\29\n2561:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::$_0::operator\\28\\29\\28sk_sp<SkTypeface>\\2c\\20sk_sp<SkFontMgr>\\29\\20const\n2562:skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const\n2563:skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29\n2564:skia::textlayout::Run::isResolved\\28\\29\\20const\n2565:skia::textlayout::Run::copyTo\\28SkTextBlobBuilder&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n2566:skia::textlayout::ParagraphImpl::buildClusterTable\\28\\29\n2567:skia::textlayout::ParagraphBuilderImpl::ensureUTF16Mapping\\28\\29\n2568:skia::textlayout::OneLineShaper::~OneLineShaper\\28\\29\n2569:skia::textlayout::FontCollection::setDefaultFontManager\\28sk_sp<SkFontMgr>\\29\n2570:skia::textlayout::FontCollection::FontCollection\\28\\29\n2571:skia::textlayout::Cluster::isSoftBreak\\28\\29\\20const\n2572:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::flush\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::FlushInfo*\\29\\20const\n2573:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::~Impl\\28\\29\n2574:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::programInfo\\28\\29\n2575:skgpu::ganesh::SurfaceFillContext::discard\\28\\29\n2576:skgpu::ganesh::SurfaceDrawContext::internalStencilClear\\28SkIRect\\20const*\\2c\\20bool\\29\n2577:skgpu::ganesh::SurfaceDrawContext::drawPath\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrStyle\\20const&\\29\n2578:skgpu::ganesh::SurfaceDrawContext::attemptQuadOptimization\\28GrClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20DrawQuad*\\2c\\20GrPaint*\\29\n2579:skgpu::ganesh::SurfaceDrawContext::Make\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\29\n2580:skgpu::ganesh::SurfaceContext::rescaleInto\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29::$_0::operator\\28\\29\\28GrSurfaceProxyView\\2c\\20SkIRect\\29\\20const\n2581:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29\n2582:skgpu::ganesh::QuadPerEdgeAA::MinColorType\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n2583:skgpu::ganesh::PathRendererChain::PathRendererChain\\28GrRecordingContext*\\2c\\20skgpu::ganesh::PathRendererChain::Options\\20const&\\29\n2584:skgpu::ganesh::PathCurveTessellator::draw\\28GrOpFlushState*\\29\\20const\n2585:skgpu::ganesh::OpsTask::recordOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const*\\2c\\20GrCaps\\20const&\\29\n2586:skgpu::ganesh::FilterAndMipmapHaveNoEffect\\28GrQuad\\20const&\\2c\\20GrQuad\\20const&\\29\n2587:skgpu::ganesh::FillRectOp::MakeNonAARect\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n2588:skgpu::ganesh::FillRRectOp::Make\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\29\n2589:skgpu::ganesh::Device::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n2590:skgpu::ganesh::Device::drawImageQuadDirect\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n2591:skgpu::ganesh::Device::Make\\28std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\\2c\\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>\\2c\\20SkAlphaType\\2c\\20skgpu::ganesh::Device::InitContents\\29\n2592:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::setup_dashed_rect\\28SkRect\\20const&\\2c\\20skgpu::VertexWriter&\\2c\\20SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashCap\\29\n2593:skgpu::ganesh::ClipStack::SaveRecord::invalidateMasks\\28GrProxyProvider*\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>*\\29\n2594:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::SaveRecord\\20const&\\29\\20const\n2595:skgpu::ganesh::AtlasTextOp::operator\\20new\\28unsigned\\20long\\29\n2596:skgpu::ganesh::AtlasTextOp::Geometry::Make\\28sktext::gpu::AtlasSubRun\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkArenaAlloc*\\29\n2597:skgpu::ganesh::AtlasRenderTask::addAtlasDrawOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrCaps\\20const&\\29\n2598:skcms_Transform::$_2::operator\\28\\29\\28skcms_Curve\\20const*\\2c\\20int\\29\\20const\n2599:skcms_MaxRoundtripError\n2600:sk_free_releaseproc\\28void\\20const*\\2c\\20void*\\29\n2601:siprintf\n2602:sift\n2603:rotate\\28SkDCubic\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkDCubic&\\29\n2604:read_header\\28SkStream*\\2c\\20SkISize*\\29\n2605:quad_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n2606:qsort\n2607:psh_globals_set_scale\n2608:ps_parser_skip_PS_token\n2609:ps_builder_done\n2610:portable::uniform_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n2611:png_text_compress\n2612:png_inflate_read\n2613:png_inflate_claim\n2614:png_image_size\n2615:png_colorspace_endpoints_match\n2616:png_build_16bit_table\n2617:normalize\n2618:next_marker\n2619:morphpoints\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkPathMeasure&\\2c\\20float\\29\n2620:make_unpremul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n2621:long\\20std::__2::__libcpp_atomic_refcount_decrement\\5babi:v160004\\5d<long>\\28long&\\29\n2622:long\\20const&\\20std::__2::min\\5babi:v160004\\5d<long>\\28long\\20const&\\2c\\20long\\20const&\\29\n2623:log1p\n2624:load_truetype_glyph\n2625:line_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n2626:lang_find_or_insert\\28char\\20const*\\29\n2627:jpeg_calc_output_dimensions\n2628:inner_scanline\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkBlitter*\\29\n2629:inflate_table\n2630:increment_simple_rowgroup_ctr\n2631:hb_tag_from_string\n2632:hb_shape_plan_destroy\n2633:hb_script_get_horizontal_direction\n2634:hb_paint_extents_context_t::push_clip\\28hb_extents_t\\29\n2635:hb_ot_color_palette_get_colors\n2636:hb_lazy_loader_t<OT::vmtx_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::vmtx_accelerator_t\\2c\\2012u>\\2c\\20hb_face_t\\2c\\2012u\\2c\\20OT::vmtx_accelerator_t>::get\\28\\29\\20const\n2637:hb_lazy_loader_t<OT::kern\\2c\\20hb_table_lazy_loader_t<OT::kern\\2c\\2023u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2023u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2638:hb_lazy_loader_t<OT::head\\2c\\20hb_table_lazy_loader_t<OT::head\\2c\\201u\\2c\\20true>\\2c\\20hb_face_t\\2c\\201u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2639:hb_lazy_loader_t<OT::fvar\\2c\\20hb_table_lazy_loader_t<OT::fvar\\2c\\2018u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2018u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2640:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::alloc\\28unsigned\\20int\\29\n2641:hb_font_funcs_destroy\n2642:hb_face_get_upem\n2643:hb_face_destroy\n2644:hb_draw_cubic_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n2645:hb_buffer_set_segment_properties\n2646:hb_blob_create\n2647:gray_render_line\n2648:get_vendor\\28char\\20const*\\29\n2649:get_renderer\\28char\\20const*\\2c\\20GrGLExtensions\\20const&\\29\n2650:get_joining_type\\28unsigned\\20int\\2c\\20hb_unicode_general_category_t\\29\n2651:generate_distance_field_from_image\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n2652:ft_var_readpackeddeltas\n2653:ft_var_get_item_delta\n2654:ft_var_done_item_variation_store\n2655:ft_glyphslot_done\n2656:ft_glyphslot_alloc_bitmap\n2657:freelocale\n2658:free_pool\n2659:fquad_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2660:fp_barrierf\n2661:fline_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2662:fixN0c\\28BracketData*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n2663:fcubic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2664:fconic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n2665:fclose\n2666:exp2f\n2667:emscripten::internal::MethodInvoker<void\\20\\28SkFont::*\\29\\28float\\29\\2c\\20void\\2c\\20SkFont*\\2c\\20float>::invoke\\28void\\20\\28SkFont::*\\20const&\\29\\28float\\29\\2c\\20SkFont*\\2c\\20float\\29\n2668:emscripten::internal::MethodInvoker<sk_sp<SkImage>\\20\\28SkAnimatedImage::*\\29\\28\\29\\2c\\20sk_sp<SkImage>\\2c\\20SkAnimatedImage*>::invoke\\28sk_sp<SkImage>\\20\\28SkAnimatedImage::*\\20const&\\29\\28\\29\\2c\\20SkAnimatedImage*\\29\n2669:emscripten::internal::Invoker<std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\\2c\\20SimpleParagraphStyle\\2c\\20sk_sp<SkFontMgr>>::invoke\\28std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\\20\\28*\\29\\28SimpleParagraphStyle\\2c\\20sk_sp<SkFontMgr>\\29\\2c\\20SimpleParagraphStyle*\\2c\\20sk_sp<SkFontMgr>*\\29\n2670:emscripten::internal::FunctionInvoker<int\\20\\28*\\29\\28SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\\2c\\20int\\2c\\20SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int>::invoke\\28int\\20\\28**\\29\\28SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\\2c\\20SkCanvas*\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\n2671:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28SkFontMgr&\\2c\\20int\\29\\2c\\20emscripten::val\\2c\\20SkFontMgr&\\2c\\20int>::invoke\\28emscripten::val\\20\\28**\\29\\28SkFontMgr&\\2c\\20int\\29\\2c\\20SkFontMgr*\\2c\\20int\\29\n2672:do_scanline\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkBlitter*\\29\n2673:decompose\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20bool\\2c\\20unsigned\\20int\\29\n2674:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::DashOp::AAMode\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::$_0>\\28skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::DashOp::AAMode\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::$_0&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n2675:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrProgramInfo*\\20SkArenaAlloc::make<GrProgramInfo\\2c\\20GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool&\\2c\\20GrPipeline*&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20\\28anonymous\\20namespace\\29::DrawAtlasPathShader*&\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags&\\2c\\20GrLoadOp&>\\28GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool&\\2c\\20GrPipeline*&\\2c\\20GrUserStencilSettings\\20const*&&\\2c\\20\\28anonymous\\20namespace\\29::DrawAtlasPathShader*&\\2c\\20GrPrimitiveType&&\\2c\\20GrXferBarrierFlags&\\2c\\20GrLoadOp&\\29::'lambda'\\28void*\\29>\\28GrProgramInfo&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n2676:cubic_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n2677:conic_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n2678:char\\20const*\\20std::__2::find\\5babi:v160004\\5d<char\\20const*\\2c\\20char>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const&\\29\n2679:char\\20const*\\20std::__2::__rewrap_range\\5babi:v160004\\5d<char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*>\\28char\\20const*\\2c\\20char\\20const*\\29\n2680:cff_index_get_pointers\n2681:cff2_path_param_t::move_to\\28CFF::point_t\\20const&\\29\n2682:cff1_path_param_t::move_to\\28CFF::point_t\\20const&\\29\n2683:cf2_glyphpath_computeOffset\n2684:cached_mask_gamma\\28float\\2c\\20float\\2c\\20float\\29\n2685:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2686:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2687:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2688:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2689:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2690:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2691:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2692:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n2693:byn$mgfn-shared$void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n2694:byn$mgfn-shared$std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArray\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n2695:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n2696:byn$mgfn-shared$skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>\\20const&\\29\n2697:byn$mgfn-shared$skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>&&\\29\n2698:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n2699:byn$mgfn-shared$non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n2700:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n2701:byn$mgfn-shared$SkRuntimeEffect::MakeForColorFilter\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n2702:byn$mgfn-shared$SkImageInfo::MakeN32Premul\\28int\\2c\\20int\\29\n2703:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29.1\n2704:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29\n2705:byn$mgfn-shared$SkBinaryWriteBuffer::writeScalarArray\\28float\\20const*\\2c\\20unsigned\\20int\\29\n2706:byn$mgfn-shared$Round_To_Grid\n2707:byn$mgfn-shared$LineConicIntersections::addLineNearEndPoints\\28\\29\n2708:byn$mgfn-shared$GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const\n2709:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n2710:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n2711:byn$mgfn-shared$DefaultGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n2712:build_tree\n2713:bracketAddOpening\\28BracketData*\\2c\\20char16_t\\2c\\20int\\29\n2714:bool\\20OT::glyf_impl::Glyph::get_points<OT::glyf_accelerator_t>\\28hb_font_t*\\2c\\20OT::glyf_accelerator_t\\20const&\\2c\\20contour_point_vector_t&\\2c\\20contour_point_vector_t*\\2c\\20head_maxp_info_t*\\2c\\20unsigned\\20int*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20hb_array_t<int>\\2c\\20hb_map_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n2715:bool\\20OT::glyf_accelerator_t::get_points<OT::glyf_accelerator_t::points_aggregator_t>\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20OT::glyf_accelerator_t::points_aggregator_t\\29\\20const\n2716:bool\\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GSUB_impl::SubstLookup>\\28hb_sanitize_context_t*\\29\\20const\n2717:bool\\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GPOS_impl::PosLookup>\\28hb_sanitize_context_t*\\29\\20const\n2718:blit_aaa_trapezoid_row\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n2719:auto\\20std::__2::__unwrap_range\\5babi:v160004\\5d<char\\20const*\\2c\\20char\\20const*>\\28char\\20const*\\2c\\20char\\20const*\\29\n2720:atan\n2721:alloc_large\n2722:af_glyph_hints_done\n2723:add_quad\\28SkPoint\\20const*\\2c\\20skia_private::TArray<PathSegment\\2c\\20true>*\\29\n2724:acos\n2725:aaa_fill_path\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n2726:_get_path\\28OT::cff1::accelerator_t\\20const*\\2c\\20hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_draw_session_t&\\2c\\20bool\\2c\\20CFF::point_t*\\29\n2727:_get_bounds\\28OT::cff1::accelerator_t\\20const*\\2c\\20unsigned\\20int\\2c\\20bounds_t&\\2c\\20bool\\29\n2728:_embind_register_bindings\n2729:__trunctfdf2\n2730:__towrite\n2731:__toread\n2732:__subtf3\n2733:__strchrnul\n2734:__rem_pio2f\n2735:__rem_pio2\n2736:__math_uflowf\n2737:__math_oflowf\n2738:__fwritex\n2739:__cxxabiv1::__class_type_info::process_static_type_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n2740:__cxxabiv1::__class_type_info::process_static_type_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n2741:__cxxabiv1::__class_type_info::process_found_base_class\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n2742:__cxxabiv1::__base_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n2743:\\28anonymous\\20namespace\\29::shape_contains_rect\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\n2744:\\28anonymous\\20namespace\\29::generateFacePathCOLRv1\\28FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20SkPath*\\29\n2745:\\28anonymous\\20namespace\\29::convert_noninflect_cubic_to_quads_with_constraint\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPathFirstDirection\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20int\\29\n2746:\\28anonymous\\20namespace\\29::convert_noninflect_cubic_to_quads\\28SkPoint\\20const*\\2c\\20float\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n2747:\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const\n2748:\\28anonymous\\20namespace\\29::bloat_quad\\28SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20\\28anonymous\\20namespace\\29::BezierVertex*\\29\n2749:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onMakeClone\\28SkFontArguments\\20const&\\29\\20const\n2750:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\\28\\29.1\n2751:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\\28\\29\n2752:\\28anonymous\\20namespace\\29::SkBlurImageFilter::mapSigma\\28skif::Mapping\\20const&\\2c\\20bool\\29\\20const\n2753:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n2754:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::programInfo\\28\\29\n2755:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n2756:\\28anonymous\\20namespace\\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n2757:\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphs\\28\\29\\20const\n2758:WebPRescaleNeededLines\n2759:WebPInitDecBufferInternal\n2760:WebPInitCustomIo\n2761:WebPGetFeaturesInternal\n2762:WebPDemuxGetFrame\n2763:VP8LInitBitReader\n2764:VP8LColorIndexInverseTransformAlpha\n2765:VP8InitIoInternal\n2766:VP8InitBitReader\n2767:TT_Vary_Apply_Glyph_Deltas\n2768:TT_Set_Var_Design\n2769:SkWuffsCodec::decodeFrame\\28\\29\n2770:SkVertices::MakeCopy\\28SkVertices::VertexMode\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20short\\20const*\\29\n2771:SkVertices::Builder::texCoords\\28\\29\n2772:SkVertices::Builder::positions\\28\\29\n2773:SkVertices::Builder::init\\28SkVertices::Desc\\20const&\\29\n2774:SkVertices::Builder::colors\\28\\29\n2775:SkVertices::Builder::Builder\\28SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n2776:SkTypeface_FreeType::MakeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\n2777:SkTypeface::getTableSize\\28unsigned\\20int\\29\\20const\n2778:SkTextBlobRunIterator::positioning\\28\\29\\20const\n2779:SkTSpan::splitAt\\28SkTSpan*\\2c\\20double\\2c\\20SkArenaAlloc*\\29\n2780:SkTSect::computePerpendiculars\\28SkTSect*\\2c\\20SkTSpan*\\2c\\20SkTSpan*\\29\n2781:SkTDStorage::insert\\28int\\29\n2782:SkTDStorage::calculateSizeOrDie\\28int\\29::$_0::operator\\28\\29\\28\\29\\20const\n2783:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::percolateDownIfNecessary\\28int\\29\n2784:SkTConic::hullIntersects\\28SkDConic\\20const&\\2c\\20bool*\\29\\20const\n2785:SkSurface_Base::SkSurface_Base\\28int\\2c\\20int\\2c\\20SkSurfaceProps\\20const*\\29\n2786:SkStrokerPriv::CapFactory\\28SkPaint::Cap\\29\n2787:SkStrokeRec::getInflationRadius\\28\\29\\20const\n2788:SkString::equals\\28char\\20const*\\29\\20const\n2789:SkStrikeSpec::MakeTransformMask\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n2790:SkStrikeSpec::MakePath\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\29\n2791:SkStrike::glyph\\28SkGlyphDigest\\29\n2792:SkSpecialImages::AsView\\28GrRecordingContext*\\2c\\20SkSpecialImage\\20const*\\29\n2793:SkShapers::HB::ShapeDontWrapOrReorder\\28sk_sp<SkUnicode>\\2c\\20sk_sp<SkFontMgr>\\29\n2794:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::endOfCurrentRun\\28\\29\\20const\n2795:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::atEnd\\28\\29\\20const\n2796:SkShaper::MakeFontMgrRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20sk_sp<SkFontMgr>\\29\n2797:SkShadowTessellator::MakeAmbient\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20bool\\29\n2798:SkScan::FillTriangle\\28SkPoint\\20const*\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n2799:SkScan::FillPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n2800:SkScan::FillIRect\\28SkIRect\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n2801:SkScan::AntiHairLine\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n2802:SkScan::AntiFillPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkBlitter*\\2c\\20bool\\29\n2803:SkScalerContextFTUtils::drawSVGGlyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n2804:SkScalarInterpFunc\\28float\\2c\\20float\\20const*\\2c\\20float\\20const*\\2c\\20int\\29\n2805:SkSLTypeString\\28SkSLType\\29\n2806:SkSL::simplify_negation\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\29\n2807:SkSL::simplify_matrix_multiplication\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n2808:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n2809:SkSL::build_argument_type_list\\28SkSpan<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const>\\29\n2810:SkSL::\\28anonymous\\20namespace\\29::SwitchCaseContainsExit::visitStatement\\28SkSL::Statement\\20const&\\29\n2811:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::returnsInputAlpha\\28SkSL::Expression\\20const&\\29\n2812:SkSL::\\28anonymous\\20namespace\\29::ConstantExpressionVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n2813:SkSL::Variable::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::VariableStorage\\29\n2814:SkSL::Type::checkForOutOfRangeLiteral\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\29\\20const\n2815:SkSL::Type::MakeSamplerType\\28char\\20const*\\2c\\20SkSL::Type\\20const&\\29\n2816:SkSL::SymbolTable::moveSymbolTo\\28SkSL::SymbolTable*\\2c\\20SkSL::Symbol*\\2c\\20SkSL::Context\\20const&\\29\n2817:SkSL::SymbolTable::isType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n2818:SkSL::Symbol::instantiate\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\\20const\n2819:SkSL::SampleUsage::merge\\28SkSL::SampleUsage\\20const&\\29\n2820:SkSL::ReturnStatement::~ReturnStatement\\28\\29.1\n2821:SkSL::ReturnStatement::~ReturnStatement\\28\\29\n2822:SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\\28\\29\n2823:SkSL::RP::Generator::pushTernaryExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n2824:SkSL::RP::Generator::pushStructuredComparison\\28SkSL::RP::LValue*\\2c\\20SkSL::Operator\\2c\\20SkSL::RP::LValue*\\2c\\20SkSL::Type\\20const&\\29\n2825:SkSL::RP::Generator::pushMatrixMultiply\\28SkSL::RP::LValue*\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n2826:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\\28\\29\n2827:SkSL::RP::Builder::push_uniform\\28SkSL::RP::SlotRange\\29\n2828:SkSL::RP::Builder::merge_condition_mask\\28\\29\n2829:SkSL::RP::Builder::jump\\28int\\29\n2830:SkSL::RP::Builder::branch_if_no_active_lanes_on_stack_top_equal\\28int\\2c\\20int\\29\n2831:SkSL::ProgramUsage::add\\28SkSL::ProgramElement\\20const&\\29\n2832:SkSL::Pool::detachFromThread\\28\\29\n2833:SkSL::PipelineStage::ConvertProgram\\28SkSL::Program\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20SkSL::PipelineStage::Callbacks*\\29\n2834:SkSL::Parser::unaryExpression\\28\\29\n2835:SkSL::Parser::swizzle\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n2836:SkSL::Parser::block\\28bool\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>*\\29\n2837:SkSL::Operator::getBinaryPrecedence\\28\\29\\20const\n2838:SkSL::ModuleLoader::loadGPUModule\\28SkSL::Compiler*\\29\n2839:SkSL::ModifierFlags::checkPermittedFlags\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\29\\20const\n2840:SkSL::Mangler::uniqueName\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::SymbolTable*\\29\n2841:SkSL::LiteralType::slotType\\28unsigned\\20long\\29\\20const\n2842:SkSL::Layout::operator==\\28SkSL::Layout\\20const&\\29\\20const\n2843:SkSL::Layout::checkPermittedLayout\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkEnumBitMask<SkSL::LayoutFlag>\\29\\20const\n2844:SkSL::Inliner::analyze\\28std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::ProgramUsage*\\29\n2845:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\\28\\29\n2846:SkSL::GLSLCodeGenerator::writeLiteral\\28SkSL::Literal\\20const&\\29\n2847:SkSL::GLSLCodeGenerator::writeFunctionDeclaration\\28SkSL::FunctionDeclaration\\20const&\\29\n2848:SkSL::ForStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::LoopUnrollInfo\\2c\\20std::__2::default_delete<SkSL::LoopUnrollInfo>>\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2849:SkSL::FieldAccess::description\\28SkSL::OperatorPrecedence\\29\\20const\n2850:SkSL::Expression::isIncomplete\\28SkSL::Context\\20const&\\29\\20const\n2851:SkSL::Expression::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n2852:SkSL::DebugTracePriv::~DebugTracePriv\\28\\29\n2853:SkSL::Context::Context\\28SkSL::BuiltinTypes\\20const&\\2c\\20SkSL::ErrorReporter&\\29\n2854:SkSL::ConstructorArrayCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2855:SkSL::ConstructorArray::~ConstructorArray\\28\\29\n2856:SkSL::ConstructorArray::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n2857:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n2858:SkSL::Analysis::CallsColorTransformIntrinsics\\28SkSL::Program\\20const&\\29\n2859:SkSL::AliasType::bitWidth\\28\\29\\20const\n2860:SkRuntimeEffectPriv::VarAsUniform\\28SkSL::Variable\\20const&\\2c\\20SkSL::Context\\20const&\\2c\\20unsigned\\20long*\\29\n2861:SkRuntimeEffectPriv::UniformsAsSpan\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20bool\\2c\\20SkColorSpace\\20const*\\2c\\20SkArenaAlloc*\\29\n2862:SkRuntimeEffect::source\\28\\29\\20const\n2863:SkRuntimeEffect::makeShader\\28sk_sp<SkData\\20const>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\2c\\20SkMatrix\\20const*\\29\\20const\n2864:SkRuntimeEffect::MakeForBlender\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n2865:SkResourceCache::checkMessages\\28\\29\n2866:SkResourceCache::NewCachedData\\28unsigned\\20long\\29\n2867:SkRegion::translate\\28int\\2c\\20int\\2c\\20SkRegion*\\29\\20const\n2868:SkReduceOrder::Cubic\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2869:SkRectPriv::QuadContainsRectMask\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\29\n2870:SkRectPriv::ClosestDisjointEdge\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n2871:SkRecords::PreCachedPath::PreCachedPath\\28SkPath\\20const&\\29\n2872:SkRecords::FillBounds::pushSaveBlock\\28SkPaint\\20const*\\29\n2873:SkRecordDraw\\28SkRecord\\20const&\\2c\\20SkCanvas*\\2c\\20SkPicture\\20const*\\20const*\\2c\\20SkDrawable*\\20const*\\2c\\20int\\2c\\20SkBBoxHierarchy\\20const*\\2c\\20SkPicture::AbortCallback*\\29\n2874:SkReadBuffer::readPoint\\28SkPoint*\\29\n2875:SkReadBuffer::readPath\\28SkPath*\\29\n2876:SkReadBuffer::readByteArrayAsData\\28\\29\n2877:SkReadBuffer::readArray\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2878:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\\28\\29\n2879:SkRasterPipelineBlitter::blitRectWithTrace\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20bool\\29\n2880:SkRasterPipelineBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n2881:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29\n2882:SkRasterPipeline::appendLoad\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n2883:SkRasterClip::op\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n2884:SkRRectPriv::ConservativeIntersect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29\n2885:SkRRect::scaleRadii\\28\\29\n2886:SkRRect::AreRectAndRadiiValid\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\29\n2887:SkRBuffer::skip\\28unsigned\\20long\\29\n2888:SkPngCodec::IsPng\\28void\\20const*\\2c\\20unsigned\\20long\\29\n2889:SkPixmap::setColorSpace\\28sk_sp<SkColorSpace>\\29\n2890:SkPixelRef::~SkPixelRef\\28\\29\n2891:SkPixelRef::notifyPixelsChanged\\28\\29\n2892:SkPictureRecorder::beginRecording\\28SkRect\\20const&\\2c\\20sk_sp<SkBBoxHierarchy>\\29\n2893:SkPictureRecord::addPathToHeap\\28SkPath\\20const&\\29\n2894:SkPictureData::getPath\\28SkReadBuffer*\\29\\20const\n2895:SkPicture::serialize\\28SkWStream*\\2c\\20SkSerialProcs\\20const*\\2c\\20SkRefCntSet*\\2c\\20bool\\29\\20const\n2896:SkPathWriter::update\\28SkOpPtT\\20const*\\29\n2897:SkPathStroker::strokeCloseEnough\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\\20const\n2898:SkPathStroker::finishContour\\28bool\\2c\\20bool\\29\n2899:SkPathRef::reset\\28\\29\n2900:SkPathRef::isRRect\\28SkRRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\\20const\n2901:SkPathRef::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\n2902:SkPathPriv::IsRectContour\\28SkPath\\20const&\\2c\\20bool\\2c\\20int*\\2c\\20SkPoint\\20const**\\2c\\20bool*\\2c\\20SkPathDirection*\\2c\\20SkRect*\\29\n2903:SkPathEffectBase::onAsPoints\\28SkPathEffectBase::PointData*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\29\\20const\n2904:SkPathEffect::filterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\29\\20const\n2905:SkPathBuilder::quadTo\\28SkPoint\\2c\\20SkPoint\\29\n2906:SkPathBuilder::cubicTo\\28SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\29\n2907:SkPath::writeToMemory\\28void*\\29\\20const\n2908:SkPath::reversePathTo\\28SkPath\\20const&\\29\n2909:SkPath::rQuadTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n2910:SkPath::contains\\28float\\2c\\20float\\29\\20const\n2911:SkPath::arcTo\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPath::ArcSize\\2c\\20SkPathDirection\\2c\\20float\\2c\\20float\\29\n2912:SkPath::approximateBytesUsed\\28\\29\\20const\n2913:SkPath::addCircle\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPathDirection\\29\n2914:SkPath::Rect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2915:SkParsePath::ToSVGString\\28SkPath\\20const&\\2c\\20SkParsePath::PathEncoding\\29::$_0::operator\\28\\29\\28char\\2c\\20SkPoint\\20const*\\2c\\20unsigned\\20long\\29\\20const\n2916:SkParse::FindScalar\\28char\\20const*\\2c\\20float*\\29\n2917:SkPairPathEffect::flatten\\28SkWriteBuffer&\\29\\20const\n2918:SkPaintToGrPaintWithBlend\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkBlender*\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n2919:SkPaint::refImageFilter\\28\\29\\20const\n2920:SkPaint::refBlender\\28\\29\\20const\n2921:SkPaint::getBlendMode_or\\28SkBlendMode\\29\\20const\n2922:SkPackARGB_as_RGBA\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n2923:SkPackARGB_as_BGRA\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n2924:SkOpSpan::setOppSum\\28int\\29\n2925:SkOpSegment::markAndChaseWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int\\2c\\20SkOpSpanBase**\\29\n2926:SkOpSegment::markAllDone\\28\\29\n2927:SkOpSegment::activeWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n2928:SkOpPtT::contains\\28SkOpSegment\\20const*\\29\\20const\n2929:SkOpEdgeBuilder::closeContour\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n2930:SkOpCoincidence::releaseDeleted\\28\\29\n2931:SkOpCoincidence::markCollapsed\\28SkOpPtT*\\29\n2932:SkOpCoincidence::findOverlaps\\28SkOpCoincidence*\\29\\20const\n2933:SkOpCoincidence::expand\\28\\29\n2934:SkOpCoincidence::apply\\28\\29\n2935:SkOpAngle::orderable\\28SkOpAngle*\\29\n2936:SkOpAngle::computeSector\\28\\29\n2937:SkNullBlitter::~SkNullBlitter\\28\\29\n2938:SkNoPixelsDevice::SkNoPixelsDevice\\28SkIRect\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20sk_sp<SkColorSpace>\\29\n2939:SkNoPixelsDevice::SkNoPixelsDevice\\28SkIRect\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n2940:SkNoDestructor<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>>::SkNoDestructor\\28skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>&&\\29\n2941:SkMessageBus<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20GrDirectContext::DirectContextID\\2c\\20false>::Get\\28\\29\n2942:SkMemoryStream::SkMemoryStream\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n2943:SkMemoryStream::SkMemoryStream\\28sk_sp<SkData>\\29\n2944:SkMatrixPriv::InverseMapRect\\28SkMatrix\\20const&\\2c\\20SkRect*\\2c\\20SkRect\\20const&\\29\n2945:SkMatrix::setRotate\\28float\\29\n2946:SkMatrix::setPolyToPoly\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n2947:SkMatrix::postSkew\\28float\\2c\\20float\\29\n2948:SkMatrix::invert\\28SkMatrix*\\29\\20const\n2949:SkMatrix::getMinScale\\28\\29\\20const\n2950:SkMatrix::getMinMaxScales\\28float*\\29\\20const\n2951:SkMaskBuilder::PrepareDestination\\28int\\2c\\20int\\2c\\20SkMask\\20const&\\29\n2952:SkMakeBitmapShaderForPaint\\28SkPaint\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkCopyPixelsMode\\29\n2953:SkLineClipper::ClipLine\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkPoint*\\2c\\20bool\\29\n2954:SkJpegCodec::ReadHeader\\28SkStream*\\2c\\20SkCodec**\\2c\\20JpegDecoderMgr**\\2c\\20std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>\\29\n2955:SkJSONWriter::separator\\28bool\\29\n2956:SkIntersections::intersectRay\\28SkDQuad\\20const&\\2c\\20SkDLine\\20const&\\29\n2957:SkIntersections::intersectRay\\28SkDLine\\20const&\\2c\\20SkDLine\\20const&\\29\n2958:SkIntersections::intersectRay\\28SkDCubic\\20const&\\2c\\20SkDLine\\20const&\\29\n2959:SkIntersections::intersectRay\\28SkDConic\\20const&\\2c\\20SkDLine\\20const&\\29\n2960:SkIntersections::cleanUpParallelLines\\28bool\\29\n2961:SkImage_Raster::SkImage_Raster\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n2962:SkImage_Ganesh::~SkImage_Ganesh\\28\\29\n2963:SkImageShader::Make\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\n2964:SkImageInfo::Make\\28SkISize\\2c\\20SkColorType\\2c\\20SkAlphaType\\29\n2965:SkImageInfo::MakeN32Premul\\28SkISize\\29\n2966:SkImageGenerator::getPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\29\n2967:SkImageGenerator::SkImageGenerator\\28SkImageInfo\\20const&\\2c\\20unsigned\\20int\\29\n2968:SkImageFilters::MatrixTransform\\28SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20sk_sp<SkImageFilter>\\29\n2969:SkImageFilters::Blur\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n2970:SkImageFilter_Base::getInputBounds\\28skif::Mapping\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\29\\20const\n2971:SkImageFilter_Base::affectsTransparentBlack\\28\\29\\20const\n2972:SkImage::width\\28\\29\\20const\n2973:SkImage::readPixels\\28GrDirectContext*\\2c\\20SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n2974:SkImage::hasMipmaps\\28\\29\\20const\n2975:SkIDChangeListener::List::add\\28sk_sp<SkIDChangeListener>\\29\n2976:SkGradientShader::MakeTwoPointConical\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n2977:SkGradientShader::MakeLinear\\28SkPoint\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n2978:SkGradientBaseShader::AppendInterpolatedToDstStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkColorSpace\\20const*\\2c\\20SkColorSpace\\20const*\\29\n2979:SkGlyph::setPath\\28SkArenaAlloc*\\2c\\20SkScalerContext*\\29\n2980:SkGlyph::mask\\28\\29\\20const\n2981:SkFontScanner_FreeType::GetAxes\\28FT_FaceRec_*\\2c\\20skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>*\\29\n2982:SkFontPriv::ApproximateTransformedTextSize\\28SkFont\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const&\\29\n2983:SkFontMgr::matchFamily\\28char\\20const*\\29\\20const\n2984:SkFindCubicMaxCurvature\\28SkPoint\\20const*\\2c\\20float*\\29\n2985:SkEncodedInfo::ICCProfile::Make\\28sk_sp<SkData>\\29\n2986:SkEmptyFontMgr::onMatchFamilyStyleCharacter\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\2c\\20char\\20const**\\2c\\20int\\2c\\20int\\29\\20const\n2987:SkEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkIRect\\20const*\\2c\\20int\\29\n2988:SkDynamicMemoryWStream::padToAlign4\\28\\29\n2989:SkDrawable::SkDrawable\\28\\29\n2990:SkDrawBase::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n2991:SkDrawBase::drawDevicePoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\2c\\20SkDevice*\\29\\20const\n2992:SkDraw::drawBitmap\\28SkBitmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n2993:SkDevice::simplifyGlyphRunRSXFormAndRedraw\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n2994:SkDevice::drawFilteredImage\\28skif::Mapping\\20const&\\2c\\20SkSpecialImage*\\2c\\20SkColorType\\2c\\20SkImageFilter\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n2995:SkDevice::SkDevice\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n2996:SkDataTable::at\\28int\\2c\\20unsigned\\20long*\\29\\20const\n2997:SkData::MakeZeroInitialized\\28unsigned\\20long\\29\n2998:SkData::MakeFromStream\\28SkStream*\\2c\\20unsigned\\20long\\29\n2999:SkDQuad::dxdyAtT\\28double\\29\\20const\n3000:SkDQuad::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n3001:SkDQuad::FindExtrema\\28double\\20const*\\2c\\20double*\\29\n3002:SkDCubic::subDivide\\28double\\2c\\20double\\29\\20const\n3003:SkDCubic::searchRoots\\28double*\\2c\\20int\\2c\\20double\\2c\\20SkDCubic::SearchAxis\\2c\\20double*\\29\\20const\n3004:SkDCubic::Coefficients\\28double\\20const*\\2c\\20double*\\2c\\20double*\\2c\\20double*\\2c\\20double*\\29\n3005:SkDConic::dxdyAtT\\28double\\29\\20const\n3006:SkDConic::FindExtrema\\28double\\20const*\\2c\\20float\\2c\\20double*\\29\n3007:SkCopyStreamToData\\28SkStream*\\29\n3008:SkContourMeasure_segTo\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20float\\2c\\20SkPath*\\29\n3009:SkContourMeasureIter::next\\28\\29\n3010:SkContourMeasureIter::Impl::compute_quad_segs\\28SkPoint\\20const*\\2c\\20float\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n3011:SkContourMeasureIter::Impl::compute_cubic_segs\\28SkPoint\\20const*\\2c\\20float\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n3012:SkContourMeasureIter::Impl::compute_conic_segs\\28SkConic\\20const&\\2c\\20float\\2c\\20int\\2c\\20SkPoint\\20const&\\2c\\20int\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20int\\29\n3013:SkContourMeasure::getPosTan\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n3014:SkConic::evalAt\\28float\\29\\20const\n3015:SkConic::TransformW\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkMatrix\\20const&\\29\n3016:SkColorToPMColor4f\\28unsigned\\20int\\2c\\20GrColorInfo\\20const&\\29\n3017:SkColorSpaceLuminance::Fetch\\28float\\29\n3018:SkColorSpace::transferFn\\28skcms_TransferFunction*\\29\\20const\n3019:SkColorSpace::toXYZD50\\28skcms_Matrix3x3*\\29\\20const\n3020:SkColorPalette::SkColorPalette\\28unsigned\\20int\\20const*\\2c\\20int\\29\n3021:SkColorFilters::Blend\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBlendMode\\29\n3022:SkColor4fPrepForDst\\28SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20GrColorInfo\\20const&\\29\n3023:SkCodec::startIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const*\\29\n3024:SkChopMonoCubicAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\29\n3025:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\2c\\20float\\29\n3026:SkCanvas::setMatrix\\28SkM44\\20const&\\29\n3027:SkCanvas::scale\\28float\\2c\\20float\\29\n3028:SkCanvas::private_draw_shadow_rec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n3029:SkCanvas::onResetClip\\28\\29\n3030:SkCanvas::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n3031:SkCanvas::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n3032:SkCanvas::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3033:SkCanvas::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3034:SkCanvas::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3035:SkCanvas::internal_private_resetClip\\28\\29\n3036:SkCanvas::internalSaveLayer\\28SkCanvas::SaveLayerRec\\20const&\\2c\\20SkCanvas::SaveLayerStrategy\\2c\\20bool\\29\n3037:SkCanvas::experimental_DrawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n3038:SkCanvas::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3039:SkCanvas::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n3040:SkCanvas::drawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n3041:SkCanvas::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3042:SkCanvas::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3043:SkCanvas::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n3044:SkCanvas::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n3045:SkCanvas::SkCanvas\\28SkIRect\\20const&\\29\n3046:SkCachedData::~SkCachedData\\28\\29\n3047:SkCTMShader::~SkCTMShader\\28\\29.1\n3048:SkBmpRLECodec::setPixel\\28void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\29\n3049:SkBmpCodec::prepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n3050:SkBlurMaskFilterImpl::computeXformedSigma\\28SkMatrix\\20const&\\29\\20const\n3051:SkBlitterClipper::apply\\28SkBlitter*\\2c\\20SkRegion\\20const*\\2c\\20SkIRect\\20const*\\29\n3052:SkBlitter::blitRegion\\28SkRegion\\20const&\\29\n3053:SkBitmapDevice::BDDraw::~BDDraw\\28\\29\n3054:SkBitmapCacheDesc::Make\\28SkImage\\20const*\\29\n3055:SkBitmap::writePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n3056:SkBitmap::setPixels\\28void*\\29\n3057:SkBitmap::pixelRefOrigin\\28\\29\\20const\n3058:SkBitmap::notifyPixelsChanged\\28\\29\\20const\n3059:SkBitmap::isImmutable\\28\\29\\20const\n3060:SkBitmap::allocPixels\\28\\29\n3061:SkBinaryWriteBuffer::writeScalarArray\\28float\\20const*\\2c\\20unsigned\\20int\\29\n3062:SkBaseShadowTessellator::~SkBaseShadowTessellator\\28\\29.1\n3063:SkBaseShadowTessellator::handleCubic\\28SkMatrix\\20const&\\2c\\20SkPoint*\\29\n3064:SkBaseShadowTessellator::handleConic\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20float\\29\n3065:SkAutoPathBoundsUpdate::SkAutoPathBoundsUpdate\\28SkPath*\\2c\\20SkRect\\20const&\\29\n3066:SkAutoDescriptor::SkAutoDescriptor\\28SkAutoDescriptor&&\\29\n3067:SkArenaAllocWithReset::SkArenaAllocWithReset\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3068:SkAnimatedImage::decodeNextFrame\\28\\29\n3069:SkAnimatedImage::Frame::copyTo\\28SkAnimatedImage::Frame*\\29\\20const\n3070:SkAnalyticQuadraticEdge::updateQuadratic\\28\\29\n3071:SkAnalyticCubicEdge::updateCubic\\28bool\\29\n3072:SkAlphaRuns::reset\\28int\\29\n3073:SkAAClip::setRect\\28SkIRect\\20const&\\29\n3074:Simplify\\28SkPath\\20const&\\2c\\20SkPath*\\29\n3075:ReconstructRow\n3076:R.1\n3077:OpAsWinding::nextEdge\\28Contour&\\2c\\20OpAsWinding::Edge\\29\n3078:OT::sbix::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3079:OT::post::accelerator_t::cmp_gids\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void*\\29\n3080:OT::gvar::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n3081:OT::fvar::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3082:OT::cmap::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3083:OT::cmap::accelerator_t::accelerator_t\\28hb_face_t*\\29\n3084:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\\28\\29\n3085:OT::avar::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3086:OT::VarRegionList::evaluate\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20float*\\29\\20const\n3087:OT::Rule<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ContextApplyLookupContext\\20const&\\29\\20const\n3088:OT::OpenTypeFontFile::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3089:OT::MVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3090:OT::Layout::GSUB_impl::SubstLookup::serialize_ligature\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20hb_sorted_array_t<OT::HBGlyphID16\\20const>\\2c\\20hb_array_t<unsigned\\20int\\20const>\\2c\\20hb_array_t<OT::HBGlyphID16\\20const>\\2c\\20hb_array_t<unsigned\\20int\\20const>\\2c\\20hb_array_t<OT::HBGlyphID16\\20const>\\29\n3091:OT::Layout::GPOS_impl::MarkArray::apply\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20OT::Layout::GPOS_impl::AnchorMatrix\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n3092:OT::GDEFVersion1_2<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3093:OT::Device::get_y_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n3094:OT::Device::get_x_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n3095:OT::ClipList::get_extents\\28unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n3096:OT::ChainRule<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n3097:OT::CPAL::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3098:OT::COLR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3099:OT::COLR::paint_glyph\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n3100:MakeRasterCopyPriv\\28SkPixmap\\20const&\\2c\\20unsigned\\20int\\29\n3101:LineQuadraticIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineQuadraticIntersections::PinTPoint\\29\n3102:LineQuadraticIntersections::checkCoincident\\28\\29\n3103:LineQuadraticIntersections::addLineNearEndPoints\\28\\29\n3104:LineCubicIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineCubicIntersections::PinTPoint\\29\n3105:LineCubicIntersections::checkCoincident\\28\\29\n3106:LineCubicIntersections::addLineNearEndPoints\\28\\29\n3107:LineConicIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineConicIntersections::PinTPoint\\29\n3108:LineConicIntersections::checkCoincident\\28\\29\n3109:LineConicIntersections::addLineNearEndPoints\\28\\29\n3110:GrXferProcessor::GrXferProcessor\\28GrProcessor::ClassID\\29\n3111:GrVertexChunkBuilder::~GrVertexChunkBuilder\\28\\29\n3112:GrTriangulator::tessellate\\28GrTriangulator::VertexList\\20const&\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3113:GrTriangulator::splitEdge\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3114:GrTriangulator::pathToPolys\\28float\\2c\\20SkRect\\20const&\\2c\\20bool*\\29\n3115:GrTriangulator::generateCubicPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20GrTriangulator::VertexList*\\2c\\20int\\29\\20const\n3116:GrTriangulator::emitTriangle\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20int\\2c\\20skgpu::VertexWriter\\29\\20const\n3117:GrTriangulator::checkForIntersection\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3118:GrTriangulator::applyFillType\\28int\\29\\20const\n3119:GrTriangulator::EdgeList::insert\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\29\n3120:GrTriangulator::Edge::insertBelow\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3121:GrTriangulator::Edge::insertAbove\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3122:GrToGLStencilFunc\\28GrStencilTest\\29\n3123:GrThreadSafeCache::dropAllRefs\\28\\29\n3124:GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n3125:GrTexture::GrTexture\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20skgpu::Protected\\2c\\20GrTextureType\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3126:GrTexture::ComputeScratchKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20skgpu::ScratchKey*\\29\n3127:GrSurfaceProxyView::asTextureProxyRef\\28\\29\\20const\n3128:GrSurfaceProxy::GrSurfaceProxy\\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3129:GrSurfaceProxy::GrSurfaceProxy\\28sk_sp<GrSurface>\\2c\\20SkBackingFit\\2c\\20GrSurfaceProxy::UseAllocator\\29\n3130:GrSurface::setRelease\\28sk_sp<skgpu::RefCntedCallback>\\29\n3131:GrStyledShape::styledBounds\\28\\29\\20const\n3132:GrStyledShape::asLine\\28SkPoint*\\2c\\20bool*\\29\\20const\n3133:GrStyledShape::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\\20const\n3134:GrSimpleMeshDrawOpHelper::fixedFunctionFlags\\28\\29\\20const\n3135:GrShape::setRect\\28SkRect\\20const&\\29\n3136:GrShape::setRRect\\28SkRRect\\20const&\\29\n3137:GrResourceProvider::assignUniqueKeyToResource\\28skgpu::UniqueKey\\20const&\\2c\\20GrGpuResource*\\29\n3138:GrResourceCache::releaseAll\\28\\29\n3139:GrResourceCache::getNextTimestamp\\28\\29\n3140:GrRenderTask::addDependency\\28GrRenderTask*\\29\n3141:GrRenderTargetProxy::canUseStencil\\28GrCaps\\20const&\\29\\20const\n3142:GrRecordingContextPriv::addOnFlushCallbackObject\\28GrOnFlushCallbackObject*\\29\n3143:GrRecordingContext::~GrRecordingContext\\28\\29\n3144:GrRecordingContext::abandonContext\\28\\29\n3145:GrQuadUtils::TessellationHelper::Vertices::moveTo\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20int>\\20const&\\29\n3146:GrQuadUtils::TessellationHelper::EdgeEquations::reset\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\29\n3147:GrQuadUtils::ResolveAAType\\28GrAAType\\2c\\20GrQuadAAFlags\\2c\\20GrQuad\\20const&\\2c\\20GrAAType*\\2c\\20GrQuadAAFlags*\\29\n3148:GrQuadBuffer<\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA>::append\\28GrQuad\\20const&\\2c\\20\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA&&\\2c\\20GrQuad\\20const*\\29\n3149:GrPixmap::GrPixmap\\28GrImageInfo\\2c\\20void*\\2c\\20unsigned\\20long\\29\n3150:GrPipeline::GrPipeline\\28GrPipeline::InitArgs\\20const&\\2c\\20GrProcessorSet&&\\2c\\20GrAppliedClip&&\\29\n3151:GrPersistentCacheUtils::UnpackCachedShaders\\28SkReadBuffer*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20SkSL::ProgramInterface*\\2c\\20int\\2c\\20GrPersistentCacheUtils::ShaderMetadata*\\29\n3152:GrPathUtils::convertCubicToQuads\\28SkPoint\\20const*\\2c\\20float\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\29\n3153:GrPathTessellationShader::Make\\28GrShaderCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::tess::PatchAttribs\\29\n3154:GrOp::chainConcat\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n3155:GrOp::GenOpClassID\\28\\29\n3156:GrMeshDrawOp::PatternHelper::PatternHelper\\28GrMeshDrawTarget*\\2c\\20GrPrimitiveType\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3157:GrMemoryPool::Make\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n3158:GrMakeKeyFromImageID\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\2c\\20SkIRect\\20const&\\29\n3159:GrImageInfo::GrImageInfo\\28GrColorInfo\\20const&\\2c\\20SkISize\\20const&\\29\n3160:GrGpuResource::removeScratchKey\\28\\29\n3161:GrGpuResource::registerWithCacheWrapped\\28GrWrapCacheable\\29\n3162:GrGpuResource::dumpMemoryStatisticsPriv\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3163:GrGpuBuffer::onGpuMemorySize\\28\\29\\20const\n3164:GrGpu::resolveRenderTarget\\28GrRenderTarget*\\2c\\20SkIRect\\20const&\\29\n3165:GrGpu::executeFlushInfo\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n3166:GrGeometryProcessor::TextureSampler::TextureSampler\\28GrSamplerState\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n3167:GrGeometryProcessor::ProgramImpl::ComputeMatrixKeys\\28GrShaderCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n3168:GrGLUniformHandler::getUniformVariable\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n3169:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n3170:GrGLSemaphore::GrGLSemaphore\\28GrGLGpu*\\2c\\20bool\\29\n3171:GrGLSLVaryingHandler::~GrGLSLVaryingHandler\\28\\29\n3172:GrGLSLUniformHandler::addInputSampler\\28skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\29\n3173:GrGLSLShaderBuilder::emitFunction\\28SkSLType\\2c\\20char\\20const*\\2c\\20SkSpan<GrShaderVar\\20const>\\2c\\20char\\20const*\\29\n3174:GrGLSLProgramDataManager::setSkMatrix\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20SkMatrix\\20const&\\29\\20const\n3175:GrGLSLProgramBuilder::writeFPFunction\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n3176:GrGLSLProgramBuilder::invokeFP\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n3177:GrGLSLProgramBuilder::addRTFlipUniform\\28char\\20const*\\29\n3178:GrGLSLFragmentShaderBuilder::dstColor\\28\\29\n3179:GrGLSLBlend::BlendKey\\28SkBlendMode\\29\n3180:GrGLProgramBuilder::~GrGLProgramBuilder\\28\\29\n3181:GrGLProgramBuilder::computeCountsAndStrides\\28unsigned\\20int\\2c\\20GrGeometryProcessor\\20const&\\2c\\20bool\\29\n3182:GrGLGpu::flushScissor\\28GrScissorState\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\29\n3183:GrGLGpu::flushClearColor\\28std::__2::array<float\\2c\\204ul>\\29\n3184:GrGLGpu::deleteFence\\28__GLsync*\\29\n3185:GrGLGpu::createTexture\\28SkISize\\2c\\20GrGLFormat\\2c\\20unsigned\\20int\\2c\\20skgpu::Renderable\\2c\\20GrGLTextureParameters::SamplerOverriddenState*\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3186:GrGLGpu::copySurfaceAsDraw\\28GrSurface*\\2c\\20bool\\2c\\20GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkFilterMode\\29\n3187:GrGLGpu::SamplerObjectCache::~SamplerObjectCache\\28\\29\n3188:GrGLGpu::HWVertexArrayState::bindInternalVertexArray\\28GrGLGpu*\\2c\\20GrBuffer\\20const*\\29\n3189:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3190:GrGLFinishCallbacks::callAll\\28bool\\29\n3191:GrGLBuffer::Make\\28GrGLGpu*\\2c\\20unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n3192:GrGLAttribArrayState::enableVertexArrays\\28GrGLGpu\\20const*\\2c\\20int\\2c\\20GrPrimitiveRestart\\29\n3193:GrFragmentProcessors::make_effect_fp\\28sk_sp<SkRuntimeEffect>\\2c\\20char\\20const*\\2c\\20sk_sp<SkData\\20const>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\2c\\20GrFPArgs\\20const&\\29\n3194:GrFragmentProcessors::MakeChildFP\\28SkRuntimeEffect::ChildPtr\\20const&\\2c\\20GrFPArgs\\20const&\\29\n3195:GrFragmentProcessors::IsSupported\\28SkMaskFilter\\20const*\\29\n3196:GrFragmentProcessor::makeProgramImpl\\28\\29\\20const\n3197:GrFragmentProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n3198:GrFragmentProcessor::MulInputByChildAlpha\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3199:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n3200:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3201:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3202:GrDynamicAtlas::makeNode\\28GrDynamicAtlas::Node*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3203:GrDrawingManager::setLastRenderTask\\28GrSurfaceProxy\\20const*\\2c\\20GrRenderTask*\\29\n3204:GrDrawingManager::flushSurfaces\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n3205:GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29\n3206:GrDirectContext::resetContext\\28unsigned\\20int\\29\n3207:GrDirectContext::getResourceCacheLimit\\28\\29\\20const\n3208:GrDefaultGeoProcFactory::MakeForDeviceSpace\\28SkArenaAlloc*\\2c\\20GrDefaultGeoProcFactory::Color\\20const&\\2c\\20GrDefaultGeoProcFactory::Coverage\\20const&\\2c\\20GrDefaultGeoProcFactory::LocalCoords\\20const&\\2c\\20SkMatrix\\20const&\\29\n3209:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20sk_sp<GrColorSpaceXform>\\29\n3210:GrColorSpaceXform::apply\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n3211:GrColorSpaceXform::Equals\\28GrColorSpaceXform\\20const*\\2c\\20GrColorSpaceXform\\20const*\\29\n3212:GrBufferAllocPool::unmap\\28\\29\n3213:GrBlurUtils::can_filter_mask\\28SkMaskFilterBase\\20const*\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect*\\29\n3214:GrBicubicEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkRect\\20const&\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n3215:GrBackendTextures::MakeGL\\28int\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrGLTextureInfo\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3216:GrBackendFormatStencilBits\\28GrBackendFormat\\20const&\\29\n3217:GrBackendFormat::asMockCompressionType\\28\\29\\20const\n3218:GrAATriangulator::~GrAATriangulator\\28\\29\n3219:GrAATriangulator::makeEvent\\28GrAATriangulator::SSEdge*\\2c\\20GrAATriangulator::EventList*\\29\\20const\n3220:GrAAConvexTessellator::fanRing\\28GrAAConvexTessellator::Ring\\20const&\\29\n3221:GrAAConvexTessellator::computePtAlongBisector\\28int\\2c\\20SkPoint\\20const&\\2c\\20int\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n3222:FT_Stream_ReadAt\n3223:FT_Stream_OpenMemory\n3224:FT_Set_Char_Size\n3225:FT_Request_Metrics\n3226:FT_Hypot\n3227:FT_Get_Var_Design_Coordinates\n3228:FT_Get_Paint\n3229:FT_Get_MM_Var\n3230:DecodeImageData\n3231:Cr_z_inflate_table\n3232:Cr_z_inflateReset\n3233:Cr_z_deflateEnd\n3234:Cr_z_copy_with_crc\n3235:Compute_Point_Displacement\n3236:AAT::trak::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3237:AAT::ltag::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3238:AAT::feat::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3239:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20void>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n3240:AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20false>>::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n3241:AAT::KerxTable<OT::KernOT>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3242:AAT::KerxTable<OT::KernAAT>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3243:AAT::KerxTable<AAT::kerx>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3244:zeroinfnan\n3245:xyz_almost_equal\\28skcms_Matrix3x3\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n3246:wuffs_lzw__decoder__transform_io\n3247:wuffs_gif__decoder__set_quirk_enabled\n3248:wuffs_gif__decoder__restart_frame\n3249:wuffs_gif__decoder__num_animation_loops\n3250:wuffs_gif__decoder__frame_dirty_rect\n3251:wuffs_gif__decoder__decode_up_to_id_part1\n3252:wuffs_gif__decoder__decode_frame\n3253:write_vertex_position\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20char\\20const*\\2c\\20GrShaderVar*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n3254:write_text_tag\\28char\\20const*\\29\n3255:write_passthrough_vertex_position\\28GrGLSLVertexBuilder*\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar*\\29\n3256:write_mAB_or_mBA_tag\\28unsigned\\20int\\2c\\20skcms_Curve\\20const*\\2c\\20skcms_Curve\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20skcms_Curve\\20const*\\2c\\20skcms_Matrix3x4\\20const*\\29\n3257:wctomb\n3258:wchar_t*\\20std::__2::copy\\5babi:v160004\\5d<std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20wchar_t*>\\28std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20wchar_t*\\29\n3259:walk_simple_edges\\28SkEdge*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20int\\29\n3260:vsscanf\n3261:void\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::assign<unsigned\\20long*\\2c\\200>\\28unsigned\\20long*\\2c\\20unsigned\\20long*\\29\n3262:void\\20std::__2::vector<sktext::GlyphRun\\2c\\20std::__2::allocator<sktext::GlyphRun>>::__emplace_back_slow_path<SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>&\\2c\\20SkSpan<unsigned\\20short\\20const>&\\2c\\20SkSpan<char\\20const>&\\2c\\20SkSpan<unsigned\\20int\\20const>&\\2c\\20SkSpan<SkPoint\\20const>&>\\28SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>&\\2c\\20SkSpan<unsigned\\20short\\20const>&\\2c\\20SkSpan<char\\20const>&\\2c\\20SkSpan<unsigned\\20int\\20const>&\\2c\\20SkSpan<SkPoint\\20const>&\\29\n3263:void\\20std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::assign<skia::textlayout::FontFeature*\\2c\\200>\\28skia::textlayout::FontFeature*\\2c\\20skia::textlayout::FontFeature*\\29\n3264:void\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>::__emplace_back_slow_path<sk_sp<SkTypeface>>\\28sk_sp<SkTypeface>&&\\29\n3265:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::assign<SkString*\\2c\\200>\\28SkString*\\2c\\20SkString*\\29\n3266:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\\20const*&>\\28char\\20const*&\\29\n3267:void\\20std::__2::vector<SkSL::FunctionDebugInfo\\2c\\20std::__2::allocator<SkSL::FunctionDebugInfo>>::__push_back_slow_path<SkSL::FunctionDebugInfo>\\28SkSL::FunctionDebugInfo&&\\29\n3268:void\\20std::__2::vector<SkMeshSpecification::Varying\\2c\\20std::__2::allocator<SkMeshSpecification::Varying>>::__push_back_slow_path<SkMeshSpecification::Varying>\\28SkMeshSpecification::Varying&&\\29\n3269:void\\20std::__2::vector<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>>::__push_back_slow_path<SkMeshSpecification::Attribute>\\28SkMeshSpecification::Attribute&&\\29\n3270:void\\20std::__2::vector<SkFontArguments::VariationPosition::Coordinate\\2c\\20std::__2::allocator<SkFontArguments::VariationPosition::Coordinate>>::assign<SkFontArguments::VariationPosition::Coordinate*\\2c\\200>\\28SkFontArguments::VariationPosition::Coordinate*\\2c\\20SkFontArguments::VariationPosition::Coordinate*\\29\n3271:void\\20std::__2::vector<Contour\\2c\\20std::__2::allocator<Contour>>::__emplace_back_slow_path<SkRect&\\2c\\20int&\\2c\\20int&>\\28SkRect&\\2c\\20int&\\2c\\20int&\\29\n3272:void\\20std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::construct\\5babi:v160004\\5d<std::__2::locale::facet*\\2c\\20void\\2c\\20void>\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20std::__2::locale::facet**\\29\n3273:void\\20std::__2::__tree_balance_after_insert\\5babi:v160004\\5d<std::__2::__tree_node_base<void*>*>\\28std::__2::__tree_node_base<void*>*\\2c\\20std::__2::__tree_node_base<void*>*\\29\n3274:void\\20std::__2::__stable_sort_move<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\29\n3275:void\\20std::__2::__sift_up\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20GrGeometryProcessor::ProgramImpl::emitTransformCode\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\29::$_0&\\2c\\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>\\28std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\\2c\\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\\2c\\20GrGeometryProcessor::ProgramImpl::emitTransformCode\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\29::$_0&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>::difference_type\\29\n3276:void\\20std::__2::__optional_storage_base<skia::textlayout::FontArguments\\2c\\20false>::__assign_from\\5babi:v160004\\5d<std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&>\\28std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&\\29\n3277:void\\20std::__2::__double_or_nothing\\5babi:v160004\\5d<char>\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20char*&\\2c\\20char*&\\29\n3278:void\\20std::__2::__call_once_proxy\\5babi:v160004\\5d<std::__2::tuple<std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&>>\\28void*\\29\n3279:void\\20sorted_merge<&sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\29\n3280:void\\20sorted_merge<&sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\29\n3281:void\\20sort_r_simple<>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29.1\n3282:void\\20skgpu::ganesh::SurfaceFillContext::clear<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n3283:void\\20emscripten::internal::raw_destructor<sk_sp<SkColorSpace>>\\28sk_sp<SkColorSpace>*\\29\n3284:void\\20emscripten::internal::MemberAccess<SkRuntimeEffect::TracedShader\\2c\\20sk_sp<SkShader>>::setWire<SkRuntimeEffect::TracedShader>\\28sk_sp<SkShader>\\20SkRuntimeEffect::TracedShader::*\\20const&\\2c\\20SkRuntimeEffect::TracedShader&\\2c\\20sk_sp<SkShader>*\\29\n3285:void\\20emscripten::internal::MemberAccess<SimpleStrutStyle\\2c\\20SimpleFontStyle>::setWire<SimpleStrutStyle>\\28SimpleFontStyle\\20SimpleStrutStyle::*\\20const&\\2c\\20SimpleStrutStyle&\\2c\\20SimpleFontStyle*\\29\n3286:void\\20\\28anonymous\\20namespace\\29::copyFT2LCD16<false>\\28FT_Bitmap_\\20const&\\2c\\20SkMaskBuilder*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\29\n3287:void\\20SkTIntroSort<int\\2c\\20DistanceLessThan>\\28int\\2c\\20int*\\2c\\20int\\2c\\20DistanceLessThan\\20const&\\29\n3288:void\\20SkTIntroSort<float\\2c\\20void\\20SkTQSort<float>\\28float*\\2c\\20float*\\29::'lambda'\\28float\\20const&\\2c\\20float\\20const&\\29>\\28int\\2c\\20float*\\2c\\20int\\2c\\20void\\20SkTQSort<float>\\28float*\\2c\\20float*\\29::'lambda'\\28float\\20const&\\2c\\20float\\20const&\\29\\20const&\\29\n3289:void\\20SkTIntroSort<SkString\\2c\\20bool\\20\\28SkString\\20const&\\2c\\20SkString\\20const&\\29>\\28int\\2c\\20SkString*\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\\29\n3290:void\\20SkTIntroSort<SkOpRayHit*\\2c\\20bool\\20\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29>\\28int\\2c\\20SkOpRayHit**\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\\29\n3291:void\\20SkTIntroSort<SkOpContour*\\2c\\20void\\20SkTQSort<SkOpContour>\\28SkOpContour**\\2c\\20SkOpContour**\\29::'lambda'\\28SkOpContour\\20const*\\2c\\20SkOpContour\\20const*\\29>\\28int\\2c\\20SkOpContour*\\2c\\20int\\2c\\20void\\20SkTQSort<SkOpContour>\\28SkOpContour**\\2c\\20SkOpContour**\\29::'lambda'\\28SkOpContour\\20const*\\2c\\20SkOpContour\\20const*\\29\\20const&\\29\n3292:void\\20SkTIntroSort<SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::Entry\\2c\\20SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::EntryLessThan>\\28int\\2c\\20SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::Entry*\\2c\\20int\\2c\\20SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29::EntryLessThan\\20const&\\29\n3293:void\\20SkTIntroSort<SkClosestRecord\\20const*\\2c\\20void\\20SkTQSort<SkClosestRecord\\20const>\\28SkClosestRecord\\20const**\\2c\\20SkClosestRecord\\20const**\\29::'lambda'\\28SkClosestRecord\\20const*\\2c\\20SkClosestRecord\\20const*\\29>\\28int\\2c\\20SkClosestRecord\\20const*\\2c\\20int\\2c\\20void\\20SkTQSort<SkClosestRecord\\20const>\\28SkClosestRecord\\20const**\\2c\\20SkClosestRecord\\20const**\\29::'lambda'\\28SkClosestRecord\\20const*\\2c\\20SkClosestRecord\\20const*\\29\\20const&\\29\n3294:void\\20SkTIntroSort<SkAnalyticEdge*\\2c\\20void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29>\\28int\\2c\\20SkAnalyticEdge*\\2c\\20int\\2c\\20void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29\\20const&\\29\n3295:void\\20SkTIntroSort<GrGpuResource*\\2c\\20bool\\20\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29>\\28int\\2c\\20GrGpuResource**\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\29\n3296:void\\20SkTIntroSort<GrGpuResource*\\2c\\20bool\\20\\28*\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29>\\28int\\2c\\20GrGpuResource**\\2c\\20int\\2c\\20bool\\20\\28*\\20const&\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\29\n3297:void\\20SkTIntroSort<Edge\\2c\\20EdgeLT>\\28int\\2c\\20Edge*\\2c\\20int\\2c\\20EdgeLT\\20const&\\29\n3298:void\\20GrGeometryProcessor::ProgramImpl::collectTransforms\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderType\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20GrPipeline\\20const&\\29::$_0::operator\\28\\29<$_0>\\28$_0&\\2c\\20GrFragmentProcessor\\20const&\\2c\\20bool\\2c\\20GrFragmentProcessor\\20const*\\2c\\20int\\2c\\20GrGeometryProcessor::ProgramImpl::collectTransforms\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderType\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20GrPipeline\\20const&\\29::BaseCoord\\29\n3299:void\\20AAT::StateTableDriver<AAT::ObsoleteTypes\\2c\\20void>::drive<AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t>\\28AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t*\\2c\\20AAT::hb_aat_apply_context_t*\\29::'lambda0'\\28\\29::operator\\28\\29\\28\\29\\20const\n3300:virtual\\20thunk\\20to\\20GrGLTexture::onSetLabel\\28\\29\n3301:virtual\\20thunk\\20to\\20GrGLTexture::backendFormat\\28\\29\\20const\n3302:vfiprintf\n3303:validate_texel_levels\\28SkISize\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20GrCaps\\20const*\\29\n3304:unsigned\\20short\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20short>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3305:unsigned\\20long\\20long\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20long\\20long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3306:unsigned\\20int\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20int>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3307:unsigned\\20int\\20const*\\20std::__2::lower_bound\\5babi:v160004\\5d<unsigned\\20int\\20const*\\2c\\20unsigned\\20long>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20long\\20const&\\29\n3308:unsigned\\20int\\20const&\\20std::__2::__identity::operator\\28\\29<unsigned\\20int\\20const&>\\28unsigned\\20int\\20const&\\29\\20const\n3309:ubidi_close_skia\n3310:u_terminateUChars_skia\n3311:u_charType_skia\n3312:tt_size_run_prep\n3313:tt_size_done_bytecode\n3314:tt_sbit_decoder_load_image\n3315:tt_face_vary_cvt\n3316:tt_face_palette_set\n3317:tt_face_load_cvt\n3318:tt_face_get_metrics\n3319:tt_done_blend\n3320:tt_delta_interpolate\n3321:tt_cmap4_set_range\n3322:tt_cmap4_next\n3323:tt_cmap4_char_map_linear\n3324:tt_cmap4_char_map_binary\n3325:tt_cmap14_get_def_chars\n3326:tt_cmap13_next\n3327:tt_cmap12_next\n3328:tt_cmap12_init\n3329:tt_cmap12_char_map_binary\n3330:tt_apply_mvar\n3331:toParagraphStyle\\28SimpleParagraphStyle\\20const&\\29\n3332:t1_lookup_glyph_by_stdcharcode_ps\n3333:t1_builder_close_contour\n3334:t1_builder_check_points\n3335:strtox.1\n3336:strtoull\n3337:strtoll_l\n3338:strspn\n3339:strncpy\n3340:store_int\n3341:std::logic_error::~logic_error\\28\\29\n3342:std::logic_error::logic_error\\28char\\20const*\\29\n3343:std::exception::exception\\5babi:v160004\\5d\\28\\29\n3344:std::__2::vector<unsigned\\20char\\2c\\20std::__2::allocator<unsigned\\20char>>::__append\\28unsigned\\20long\\29\n3345:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::max_size\\28\\29\\20const\n3346:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__construct_at_end\\28unsigned\\20long\\29\n3347:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__clear\\5babi:v160004\\5d\\28\\29\n3348:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__base_destruct_at_end\\5babi:v160004\\5d\\28std::__2::locale::facet**\\29\n3349:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__annotate_shrink\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n3350:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__annotate_new\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n3351:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__annotate_delete\\5babi:v160004\\5d\\28\\29\\20const\n3352:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::insert\\28std::__2::__wrap_iter<float\\20const*>\\2c\\20float&&\\29\n3353:std::__2::vector<SkCustomTypefaceBuilder::GlyphRec\\2c\\20std::__2::allocator<SkCustomTypefaceBuilder::GlyphRec>>::__append\\28unsigned\\20long\\29\n3354:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::operator=\\5babi:v160004\\5d\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&&\\29\n3355:std::__2::unique_ptr<SkSL::Program\\2c\\20std::__2::default_delete<SkSL::Program>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3356:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::coalesce_vector<bool>\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n3357:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\\5babi:v160004\\5d\\28std::nullptr_t\\29\n3358:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\\2c\\20int\\2c\\20sktext::gpu::SubRunAllocator>\\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\\28int\\29::'lambda0'\\28\\29::operator\\28\\29\\28\\29\\20const\n3359:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\\2c\\20int\\2c\\20sktext::gpu::SubRunAllocator>\\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\\28int\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n3360:std::__2::to_string\\28unsigned\\20long\\29\n3361:std::__2::to_chars_result\\20std::__2::__to_chars_itoa\\5babi:v160004\\5d<unsigned\\20int>\\28char*\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20std::__2::integral_constant<bool\\2c\\20false>\\29\n3362:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::~time_put\\28\\29\n3363:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_year\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n3364:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_weekdayname\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n3365:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_monthname\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n3366:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_year\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n3367:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_weekdayname\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n3368:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_monthname\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n3369:std::__2::reverse_iterator<std::__2::locale::facet**>::operator++\\5babi:v160004\\5d\\28\\29\n3370:std::__2::reverse_iterator<std::__2::locale::facet**>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n3371:std::__2::priority_queue<GrAATriangulator::Event*\\2c\\20std::__2::vector<GrAATriangulator::Event*\\2c\\20std::__2::allocator<GrAATriangulator::Event*>>\\2c\\20GrAATriangulator::EventComparator>::push\\28GrAATriangulator::Event*\\20const&\\29\n3372:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20void*>*>\\2c\\20bool>\\20std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::__unordered_map_hasher<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>>>::__emplace_unique_key_args<GrFragmentProcessor\\20const*\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrFragmentProcessor\\20const*&&>\\2c\\20std::__2::tuple<>>\\28GrFragmentProcessor\\20const*\\20const&\\2c\\20std::__2::piecewise_construct_t\\20const&\\2c\\20std::__2::tuple<GrFragmentProcessor\\20const*&&>&&\\2c\\20std::__2::tuple<>&&\\29\n3373:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<int\\2c\\20void*>*>\\2c\\20bool>\\20std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::__emplace_unique_key_args<int\\2c\\20int\\20const&>\\28int\\20const&\\2c\\20int\\20const&\\29\n3374:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>::pair\\28std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>&&\\29\n3375:std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator=\\5babi:v160004\\5d\\28wchar_t\\29\n3376:std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator=\\5babi:v160004\\5d\\28char\\29\n3377:std::__2::optional<SkPath>&\\20std::__2::optional<SkPath>::operator=\\5babi:v160004\\5d<SkPath\\20const&\\2c\\20void>\\28SkPath\\20const&\\29\n3378:std::__2::numpunct<wchar_t>::~numpunct\\28\\29\n3379:std::__2::numpunct<char>::~numpunct\\28\\29\n3380:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20int&\\29\\20const\n3381:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>>\\28std::__2::locale\\20const&\\29\n3382:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20int&\\29\\20const\n3383:std::__2::moneypunct<wchar_t\\2c\\20true>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<wchar_t\\2c\\20true>>\\28std::__2::locale\\20const&\\29\n3384:std::__2::moneypunct<wchar_t\\2c\\20false>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<wchar_t\\2c\\20false>>\\28std::__2::locale\\20const&\\29\n3385:std::__2::moneypunct<wchar_t\\2c\\20false>::do_negative_sign\\28\\29\\20const\n3386:std::__2::moneypunct<char\\2c\\20true>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<char\\2c\\20true>>\\28std::__2::locale\\20const&\\29\n3387:std::__2::moneypunct<char\\2c\\20false>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<char\\2c\\20false>>\\28std::__2::locale\\20const&\\29\n3388:std::__2::moneypunct<char\\2c\\20false>::do_negative_sign\\28\\29\\20const\n3389:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20std::__2::unique_ptr<wchar_t\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20wchar_t*&\\2c\\20wchar_t*\\29\n3390:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool&\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20char*&\\2c\\20char*\\29\n3391:std::__2::locale::__imp::~__imp\\28\\29\n3392:std::__2::iterator_traits<unsigned\\20int\\20const*>::difference_type\\20std::__2::__distance\\5babi:v160004\\5d<unsigned\\20int\\20const*>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20std::__2::random_access_iterator_tag\\29\n3393:std::__2::iterator_traits<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\29\n3394:std::__2::iterator_traits<char*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\29\n3395:std::__2::iterator_traits<char*>::difference_type\\20std::__2::__distance\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\2c\\20std::__2::random_access_iterator_tag\\29\n3396:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator++\\5babi:v160004\\5d\\28int\\29\n3397:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::__test_for_eof\\5babi:v160004\\5d\\28\\29\\20const\n3398:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator++\\5babi:v160004\\5d\\28int\\29\n3399:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::__test_for_eof\\5babi:v160004\\5d\\28\\29\\20const\n3400:std::__2::ios_base::width\\5babi:v160004\\5d\\28long\\29\n3401:std::__2::ios_base::imbue\\28std::__2::locale\\20const&\\29\n3402:std::__2::ios_base::__call_callbacks\\28std::__2::ios_base::event\\29\n3403:std::__2::hash<skia::textlayout::FontArguments>::operator\\28\\29\\28skia::textlayout::FontArguments\\20const&\\29\\20const\n3404:std::__2::enable_if<std::is_base_of_v<SkShader\\2c\\20SkPictureShader>\\2c\\20sk_sp<SkShader>>::type\\20SkLocalMatrixShader::MakeWrapped<SkPictureShader\\2c\\20sk_sp<SkPicture>\\2c\\20SkTileMode&\\2c\\20SkTileMode&\\2c\\20SkFilterMode&\\2c\\20SkRect\\20const*&>\\28SkMatrix\\20const*\\2c\\20sk_sp<SkPicture>&&\\2c\\20SkTileMode&\\2c\\20SkTileMode&\\2c\\20SkFilterMode&\\2c\\20SkRect\\20const*&\\29\n3405:std::__2::enable_if<is_move_constructible<char>::value\\20&&\\20is_move_assignable<char>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<char>\\28char&\\2c\\20char&\\29\n3406:std::__2::enable_if<__is_cpp17_random_access_iterator<char\\20const*>::value\\2c\\20char*>::type\\20std::__2::copy_n\\5babi:v160004\\5d<char\\20const*\\2c\\20unsigned\\20long\\2c\\20char*>\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20char*\\29\n3407:std::__2::enable_if<__is_cpp17_forward_iterator<wchar_t\\20const*>::value\\2c\\20void>::type\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__init<wchar_t\\20const*>\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\n3408:std::__2::enable_if<__is_cpp17_forward_iterator<char*>::value\\2c\\20void>::type\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__init<char*>\\28char*\\2c\\20char*\\29\n3409:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__add_back_capacity\\28\\29\n3410:std::__2::default_delete<sktext::gpu::TextBlobRedrawCoordinator>::operator\\28\\29\\5babi:v160004\\5d\\28sktext::gpu::TextBlobRedrawCoordinator*\\29\\20const\n3411:std::__2::default_delete<sktext::GlyphRunBuilder>::operator\\28\\29\\5babi:v160004\\5d\\28sktext::GlyphRunBuilder*\\29\\20const\n3412:std::__2::ctype<char>::~ctype\\28\\29\n3413:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::~codecvt\\28\\29\n3414:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n3415:std::__2::codecvt<char32_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char32_t\\20const*\\2c\\20char32_t\\20const*\\2c\\20char32_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n3416:std::__2::codecvt<char32_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3417:std::__2::codecvt<char32_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char32_t*\\2c\\20char32_t*\\2c\\20char32_t*&\\29\\20const\n3418:std::__2::codecvt<char16_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20char16_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n3419:std::__2::codecvt<char16_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n3420:std::__2::codecvt<char16_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char16_t*\\2c\\20char16_t*\\2c\\20char16_t*&\\29\\20const\n3421:std::__2::char_traits<char>::not_eof\\28int\\29\n3422:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::str\\28\\29\\20const\n3423:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20wchar_t\\29\n3424:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__grow_by_and_replace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20wchar_t\\20const*\\29\n3425:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__grow_by\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3426:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::resize\\28unsigned\\20long\\2c\\20char\\29\n3427:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::insert\\28unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n3428:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20char\\29\n3429:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20void>\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n3430:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__throw_out_of_range\\5babi:v160004\\5d\\28\\29\\20const\n3431:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__null_terminate_at\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20long\\29\n3432:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_no_alias<false>\\28char\\20const*\\2c\\20unsigned\\20long\\29\n3433:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::emplace_back<char\\20const*>\\28char\\20const*&&\\29\n3434:std::__2::basic_streambuf<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::sgetc\\5babi:v160004\\5d\\28\\29\n3435:std::__2::basic_streambuf<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::sbumpc\\5babi:v160004\\5d\\28\\29\n3436:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sputc\\5babi:v160004\\5d\\28char\\29\n3437:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sgetc\\5babi:v160004\\5d\\28\\29\n3438:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sbumpc\\5babi:v160004\\5d\\28\\29\n3439:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29.2\n3440:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::~sentry\\28\\29\n3441:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::sentry\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\29\n3442:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::operator<<\\28float\\29\n3443:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::flush\\28\\29\n3444:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.2\n3445:std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::deallocate\\5babi:v160004\\5d\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20std::__2::locale::facet**\\2c\\20unsigned\\20long\\29\n3446:std::__2::allocator<wchar_t>::deallocate\\5babi:v160004\\5d\\28wchar_t*\\2c\\20unsigned\\20long\\29\n3447:std::__2::allocator<wchar_t>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3448:std::__2::allocator<char>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3449:std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\20std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>::insert<std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\2c\\200>\\28std::__2::__wrap_iter<SkSL::ProgramElement\\20const*\\20const*>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\29\n3450:std::__2::__unique_if<SkSL::ConstructorCompound>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorCompound\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n3451:std::__2::__time_put::__time_put\\5babi:v160004\\5d\\28\\29\n3452:std::__2::__time_put::__do_put\\28char*\\2c\\20char*&\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n3453:std::__2::__throw_system_error\\28int\\2c\\20char\\20const*\\29\n3454:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_back\\28skia::textlayout::OneLineShaper::RunBlock*&&\\29\n3455:std::__2::__optional_destruct_base<GrStyledShape\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n3456:std::__2::__num_put<wchar_t>::__widen_and_group_int\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20std::__2::locale\\20const&\\29\n3457:std::__2::__num_put<wchar_t>::__widen_and_group_float\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20std::__2::locale\\20const&\\29\n3458:std::__2::__num_put<char>::__widen_and_group_int\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\2c\\20char*&\\2c\\20std::__2::locale\\20const&\\29\n3459:std::__2::__num_put<char>::__widen_and_group_float\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\2c\\20char*&\\2c\\20std::__2::locale\\20const&\\29\n3460:std::__2::__money_put<wchar_t>::__gather_info\\28bool\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20std::__2::money_base::pattern&\\2c\\20wchar_t&\\2c\\20wchar_t&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\2c\\20int&\\29\n3461:std::__2::__money_put<wchar_t>::__format\\28wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20unsigned\\20int\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20bool\\2c\\20std::__2::money_base::pattern\\20const&\\2c\\20wchar_t\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\2c\\20int\\29\n3462:std::__2::__money_put<char>::__gather_info\\28bool\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20std::__2::money_base::pattern&\\2c\\20char&\\2c\\20char&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20int&\\29\n3463:std::__2::__money_put<char>::__format\\28char*\\2c\\20char*&\\2c\\20char*&\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20bool\\2c\\20std::__2::money_base::pattern\\20const&\\2c\\20char\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20int\\29\n3464:std::__2::__libcpp_sscanf_l\\28char\\20const*\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n3465:std::__2::__libcpp_mbrtowc_l\\5babi:v160004\\5d\\28wchar_t*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20__mbstate_t*\\2c\\20__locale_struct*\\29\n3466:std::__2::__libcpp_mb_cur_max_l\\5babi:v160004\\5d\\28__locale_struct*\\29\n3467:std::__2::__libcpp_deallocate\\5babi:v160004\\5d\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3468:std::__2::__libcpp_allocate\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n3469:std::__2::__is_overaligned_for_new\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3470:std::__2::__function::__value_func<void\\20\\28void*\\2c\\20void\\20const*\\29>::swap\\5babi:v160004\\5d\\28std::__2::__function::__value_func<void\\20\\28void*\\2c\\20void\\20const*\\29>&\\29\n3471:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n3472:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n3473:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::operator\\28\\29\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\n3474:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::destroy\\28\\29\n3475:std::__2::__constexpr_wcslen\\5babi:v160004\\5d\\28wchar_t\\20const*\\29\n3476:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20unsigned\\20long\\29\n3477:start_input_pass\n3478:sktext::gpu::can_use_direct\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n3479:sktext::gpu::build_distance_adjust_table\\28float\\2c\\20float\\29\n3480:sktext::gpu::VertexFiller::opMaskType\\28\\29\\20const\n3481:sktext::gpu::VertexFiller::fillVertexData\\28int\\2c\\20int\\2c\\20SkSpan<sktext::gpu::Glyph\\20const*>\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\2c\\20void*\\29\\20const\n3482:sktext::gpu::TextBlobRedrawCoordinator::internalRemove\\28sktext::gpu::TextBlob*\\29\n3483:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29::$_2::operator\\28\\29\\28SkZip<SkPackedGlyphID\\20const\\2c\\20SkPoint\\20const>\\2c\\20skgpu::MaskFormat\\29\\20const\n3484:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29::$_0::operator\\28\\29\\28SkZip<SkPackedGlyphID\\20const\\2c\\20SkPoint\\20const>\\2c\\20skgpu::MaskFormat\\29\\20const\n3485:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29\n3486:sktext::gpu::SubRunContainer::EstimateAllocSize\\28sktext::GlyphRunList\\20const&\\29\n3487:sktext::gpu::SubRunAllocator::SubRunAllocator\\28char*\\2c\\20int\\2c\\20int\\29\n3488:sktext::gpu::StrikeCache::~StrikeCache\\28\\29\n3489:sktext::gpu::SlugImpl::Make\\28SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\29\n3490:sktext::gpu::BagOfBytes::BagOfBytes\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29::$_1::operator\\28\\29\\28\\29\\20const\n3491:sktext::glyphrun_source_bounds\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkZip<unsigned\\20short\\20const\\2c\\20SkPoint\\20const>\\2c\\20SkSpan<SkPoint\\20const>\\29\n3492:sktext::SkStrikePromise::resetStrike\\28\\29\n3493:sktext::GlyphRunList::makeBlob\\28\\29\\20const\n3494:sktext::GlyphRunBuilder::blobToGlyphRunList\\28SkTextBlob\\20const&\\2c\\20SkPoint\\29\n3495:skstd::to_string\\28float\\29\n3496:skpathutils::FillPathWithPaint\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPath*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\n3497:skjpeg_err_exit\\28jpeg_common_struct*\\29\n3498:skip_string\n3499:skip_procedure\n3500:skif::\\28anonymous\\20namespace\\29::decompose_transform\\28SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkMatrix*\\2c\\20SkMatrix*\\29\n3501:skif::\\28anonymous\\20namespace\\29::are_axes_nearly_integer_aligned\\28skif::LayerSpace<SkMatrix>\\20const&\\2c\\20skif::LayerSpace<SkIPoint>*\\29\n3502:skif::\\28anonymous\\20namespace\\29::GaneshBackend::maxSigma\\28\\29\\20const\n3503:skif::\\28anonymous\\20namespace\\29::GaneshBackend::blur\\28SkSize\\2c\\20sk_sp<SkSpecialImage>\\2c\\20SkIRect\\20const&\\2c\\20SkTileMode\\2c\\20SkIRect\\20const&\\29\\20const\n3504:skif::Mapping::applyOrigin\\28skif::LayerSpace<SkIPoint>\\20const&\\29\n3505:skif::LayerSpace<SkIRect>::relevantSubset\\28skif::LayerSpace<SkIRect>\\2c\\20SkTileMode\\29\\20const\n3506:skif::FilterResult::subset\\28skif::LayerSpace<SkIPoint>\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\\20const\n3507:skif::FilterResult::applyCrop\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20SkTileMode\\29\\20const\n3508:skia_private::THashTable<unsigned\\20long\\20long\\2c\\20unsigned\\20long\\20long\\2c\\20skia_private::THashSet<unsigned\\20long\\20long\\2c\\20SkGoodHash>::Traits>::set\\28unsigned\\20long\\20long\\29\n3509:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair&&\\29\n3510:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n3511:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::removeIfExists\\28unsigned\\20int\\20const&\\29\n3512:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair&&\\29\n3513:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::uncheckedSet\\28skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair&&\\29\n3514:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::uncheckedSet\\28skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair&&\\29\n3515:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::uncheckedSet\\28skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair&&\\29\n3516:skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair&&\\29\n3517:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::find\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n3518:skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair&&\\29\n3519:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair&&\\29\n3520:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n3521:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::uncheckedSet\\28skgpu::ganesh::SmallPathShapeData*&&\\29\n3522:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::resize\\28int\\29\n3523:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::uncheckedSet\\28sk_sp<sktext::gpu::TextStrike>&&\\29\n3524:skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::resize\\28int\\29\n3525:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::uncheckedSet\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*&&\\29\n3526:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::resize\\28int\\29\n3527:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::uncheckedSet\\28SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*&&\\29\n3528:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::resize\\28int\\29\n3529:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::uncheckedSet\\28SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*&&\\29\n3530:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::resize\\28int\\29\n3531:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::uncheckedSet\\28SkResourceCache::Rec*&&\\29\n3532:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::resize\\28int\\29\n3533:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::set\\28SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\29\n3534:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n3535:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::removeIfExists\\28unsigned\\20int\\20const&\\29\n3536:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::resize\\28int\\29\n3537:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::uncheckedSet\\28SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*&&\\29\n3538:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::resize\\28int\\29\n3539:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::uncheckedSet\\28GrGpuResource*&&\\29\n3540:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::resize\\28int\\29\n3541:skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::set\\28unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\29\n3542:skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::remove\\28SkImageFilter\\20const*\\20const&\\29\n3543:skia_private::TArray<unsigned\\20short\\2c\\20true>::push_back_raw\\28int\\29\n3544:skia_private::TArray<unsigned\\20char\\2c\\20true>::resize_back\\28int\\29\n3545:skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::checkRealloc\\28int\\2c\\20double\\29\n3546:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::~TArray\\28\\29\n3547:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::Entry\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3548:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::operator=\\28skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>&&\\29\n3549:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3550:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::operator=\\28skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>&&\\29\n3551:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3552:skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\\2c\\20false>::move\\28void*\\29\n3553:skia_private::TArray<SkString\\2c\\20true>::operator=\\28skia_private::TArray<SkString\\2c\\20true>&&\\29\n3554:skia_private::TArray<SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument\\2c\\20false>::push_back\\28SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument&&\\29\n3555:skia_private::TArray<SkSL::Field\\2c\\20true>::TArray\\28skia_private::TArray<SkSL::Field\\2c\\20true>&&\\29\n3556:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>::swap\\28skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>&\\29\n3557:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::operator=\\28skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>&&\\29\n3558:skia_private::TArray<SkMatrix\\2c\\20true>::push_back_raw\\28int\\29\n3559:skia_private::TArray<SkFontScanner::AxisDefinition\\2c\\20true>::operator=\\28skia_private::TArray<SkFontScanner::AxisDefinition\\2c\\20true>\\20const&\\29\n3560:skia_private::TArray<SkClosestRecord\\2c\\20true>::push_back_raw\\28int\\29\n3561:skia_private::TArray<PathSegment\\2c\\20true>::push_back_raw\\28int\\29\n3562:skia_private::TArray<GrTextureProxy*\\2c\\20true>::move_back_n\\28int\\2c\\20GrTextureProxy**\\29\n3563:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::operator=\\28skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>&&\\29\n3564:skia_private::TArray<EllipticalRRectOp::RRect\\2c\\20true>::push_back_n\\28int\\2c\\20EllipticalRRectOp::RRect\\20const*\\29\n3565:skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\20const&\\29\n3566:skia_png_zfree\n3567:skia_png_write_zTXt\n3568:skia_png_write_tIME\n3569:skia_png_write_tEXt\n3570:skia_png_write_iTXt\n3571:skia_png_set_write_fn\n3572:skia_png_set_strip_16\n3573:skia_png_set_read_user_transform_fn\n3574:skia_png_set_read_user_chunk_fn\n3575:skia_png_set_option\n3576:skia_png_set_mem_fn\n3577:skia_png_set_expand_gray_1_2_4_to_8\n3578:skia_png_set_error_fn\n3579:skia_png_set_compression_level\n3580:skia_png_set_IHDR\n3581:skia_png_read_filter_row\n3582:skia_png_process_IDAT_data\n3583:skia_png_icc_set_sRGB\n3584:skia_png_icc_check_tag_table\n3585:skia_png_icc_check_header\n3586:skia_png_get_uint_31\n3587:skia_png_get_sBIT\n3588:skia_png_get_rowbytes\n3589:skia_png_get_error_ptr\n3590:skia_png_get_IHDR\n3591:skia_png_do_swap\n3592:skia_png_do_read_transformations\n3593:skia_png_do_read_interlace\n3594:skia_png_do_packswap\n3595:skia_png_do_invert\n3596:skia_png_do_gray_to_rgb\n3597:skia_png_do_expand\n3598:skia_png_do_check_palette_indexes\n3599:skia_png_do_bgr\n3600:skia_png_destroy_png_struct\n3601:skia_png_destroy_gamma_table\n3602:skia_png_create_png_struct\n3603:skia_png_create_info_struct\n3604:skia_png_crc_read\n3605:skia_png_colorspace_sync_info\n3606:skia_png_check_IHDR\n3607:skia::textlayout::TypefaceFontStyleSet::matchStyle\\28SkFontStyle\\20const&\\29\n3608:skia::textlayout::TextStyle::matchOneAttribute\\28skia::textlayout::StyleType\\2c\\20skia::textlayout::TextStyle\\20const&\\29\\20const\n3609:skia::textlayout::TextStyle::equals\\28skia::textlayout::TextStyle\\20const&\\29\\20const\n3610:skia::textlayout::TextShadow::operator!=\\28skia::textlayout::TextShadow\\20const&\\29\\20const\n3611:skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29\n3612:skia::textlayout::TextLine::iterateThroughClustersInGlyphsOrder\\28bool\\2c\\20bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>\\20const&\\29\\20const::$_0::operator\\28\\29\\28unsigned\\20long\\20const&\\29\\20const\n3613:skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const::'lambda'\\28SkRect\\29::operator\\28\\29\\28SkRect\\29\\20const\n3614:skia::textlayout::TextLine::getMetrics\\28\\29\\20const\n3615:skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29\n3616:skia::textlayout::TextLine::buildTextBlob\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n3617:skia::textlayout::TextLine::TextLine\\28skia::textlayout::ParagraphImpl*\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20skia::textlayout::InternalLineMetrics\\29\n3618:skia::textlayout::TextLine&\\20skia_private::TArray<skia::textlayout::TextLine\\2c\\20false>::emplace_back<skia::textlayout::ParagraphImpl*\\2c\\20SkPoint&\\2c\\20SkPoint&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20float&\\2c\\20skia::textlayout::InternalLineMetrics&>\\28skia::textlayout::ParagraphImpl*&&\\2c\\20SkPoint&\\2c\\20SkPoint&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20float&\\2c\\20skia::textlayout::InternalLineMetrics&\\29\n3619:skia::textlayout::Run::shift\\28skia::textlayout::Cluster\\20const*\\2c\\20float\\29\n3620:skia::textlayout::Run::newRunBuffer\\28\\29\n3621:skia::textlayout::Run::findLimitingGlyphClusters\\28skia::textlayout::SkRange<unsigned\\20long>\\29\\20const\n3622:skia::textlayout::Run::addSpacesAtTheEnd\\28float\\2c\\20skia::textlayout::Cluster*\\29\n3623:skia::textlayout::ParagraphStyle::effective_align\\28\\29\\20const\n3624:skia::textlayout::ParagraphStyle::ParagraphStyle\\28\\29\n3625:skia::textlayout::ParagraphPainter::DecorationStyle::DecorationStyle\\28unsigned\\20int\\2c\\20float\\2c\\20std::__2::optional<skia::textlayout::ParagraphPainter::DashPathEffect>\\29\n3626:skia::textlayout::ParagraphImpl::~ParagraphImpl\\28\\29\n3627:skia::textlayout::ParagraphImpl::text\\28skia::textlayout::SkRange<unsigned\\20long>\\29\n3628:skia::textlayout::ParagraphImpl::resolveStrut\\28\\29\n3629:skia::textlayout::ParagraphImpl::getGlyphInfoAtUTF16Offset\\28unsigned\\20long\\2c\\20skia::textlayout::Paragraph::GlyphInfo*\\29\n3630:skia::textlayout::ParagraphImpl::getGlyphClusterAt\\28unsigned\\20long\\2c\\20skia::textlayout::Paragraph::GlyphClusterInfo*\\29\n3631:skia::textlayout::ParagraphImpl::findPreviousGraphemeBoundary\\28unsigned\\20long\\29\\20const\n3632:skia::textlayout::ParagraphImpl::computeEmptyMetrics\\28\\29\n3633:skia::textlayout::ParagraphImpl::clusters\\28skia::textlayout::SkRange<unsigned\\20long>\\29\n3634:skia::textlayout::ParagraphImpl::block\\28unsigned\\20long\\29\n3635:skia::textlayout::ParagraphCacheValue::~ParagraphCacheValue\\28\\29\n3636:skia::textlayout::ParagraphCacheKey::ParagraphCacheKey\\28skia::textlayout::ParagraphImpl\\20const*\\29\n3637:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\\28\\29\n3638:skia::textlayout::ParagraphBuilderImpl::make\\28skia::textlayout::ParagraphStyle\\20const&\\2c\\20sk_sp<skia::textlayout::FontCollection>\\29\n3639:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\\28skia::textlayout::PlaceholderStyle\\20const&\\2c\\20bool\\29\n3640:skia::textlayout::ParagraphBuilderImpl::ParagraphBuilderImpl\\28skia::textlayout::ParagraphStyle\\20const&\\2c\\20sk_sp<skia::textlayout::FontCollection>\\2c\\20sk_sp<SkUnicode>\\29\n3641:skia::textlayout::Paragraph::~Paragraph\\28\\29\n3642:skia::textlayout::OneLineShaper::clusteredText\\28skia::textlayout::SkRange<unsigned\\20long>&\\29\n3643:skia::textlayout::FontCollection::~FontCollection\\28\\29\n3644:skia::textlayout::FontCollection::matchTypeface\\28SkString\\20const&\\2c\\20SkFontStyle\\29\n3645:skia::textlayout::FontCollection::defaultFallback\\28int\\2c\\20SkFontStyle\\2c\\20SkString\\20const&\\29\n3646:skia::textlayout::FontCollection::FamilyKey::Hasher::operator\\28\\29\\28skia::textlayout::FontCollection::FamilyKey\\20const&\\29\\20const\n3647:skgpu::tess::\\28anonymous\\20namespace\\29::write_curve_index_buffer_base_index\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\2c\\20unsigned\\20short\\29\n3648:skgpu::tess::StrokeIterator::next\\28\\29\n3649:skgpu::tess::StrokeIterator::finishOpenContour\\28\\29\n3650:skgpu::tess::PreChopPathCurves\\28float\\2c\\20SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\29\n3651:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::~SmallPathOp\\28\\29\n3652:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::SmallPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrUserStencilSettings\\20const*\\29\n3653:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::recordDraw\\28GrMeshDrawTarget*\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20int\\2c\\20unsigned\\20short*\\29\n3654:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::AAFlatteningConvexPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20SkStrokeRec::Style\\2c\\20SkPaint::Join\\2c\\20float\\2c\\20GrUserStencilSettings\\20const*\\29\n3655:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::AAConvexPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n3656:skgpu::ganesh::TextureOp::Make\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::TextureOp::Saturate\\2c\\20SkBlendMode\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20SkRect\\20const*\\29\n3657:skgpu::ganesh::TessellationPathRenderer::IsSupported\\28GrCaps\\20const&\\29\n3658:skgpu::ganesh::SurfaceFillContext::fillRectToRectWithFP\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3659:skgpu::ganesh::SurfaceFillContext::blitTexture\\28GrSurfaceProxyView\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\20const&\\29\n3660:skgpu::ganesh::SurfaceFillContext::addOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n3661:skgpu::ganesh::SurfaceFillContext::addDrawOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n3662:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\\28\\29.1\n3663:skgpu::ganesh::SurfaceDrawContext::drawVertices\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<SkVertices>\\2c\\20GrPrimitiveType*\\2c\\20bool\\29\n3664:skgpu::ganesh::SurfaceDrawContext::drawTexturedQuad\\28GrClip\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkBlendMode\\2c\\20DrawQuad*\\2c\\20SkRect\\20const*\\29\n3665:skgpu::ganesh::SurfaceDrawContext::drawTexture\\28GrClip\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkBlendMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrQuadAAFlags\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\29\n3666:skgpu::ganesh::SurfaceDrawContext::drawStrokedLine\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkStrokeRec\\20const&\\29\n3667:skgpu::ganesh::SurfaceDrawContext::drawRegion\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n3668:skgpu::ganesh::SurfaceDrawContext::drawOval\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const&\\29\n3669:skgpu::ganesh::SurfaceDrawContext::SurfaceDrawContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const&\\29\n3670:skgpu::ganesh::SurfaceContext::~SurfaceContext\\28\\29\n3671:skgpu::ganesh::SurfaceContext::writePixels\\28GrDirectContext*\\2c\\20GrCPixmap\\2c\\20SkIPoint\\29\n3672:skgpu::ganesh::SurfaceContext::copy\\28sk_sp<GrSurfaceProxy>\\2c\\20SkIRect\\2c\\20SkIPoint\\29\n3673:skgpu::ganesh::SurfaceContext::copyScaled\\28sk_sp<GrSurfaceProxy>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkFilterMode\\29\n3674:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n3675:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::FinishContext::~FinishContext\\28\\29\n3676:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n3677:skgpu::ganesh::SurfaceContext::SurfaceContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n3678:skgpu::ganesh::StrokeTessellator::draw\\28GrOpFlushState*\\29\\20const\n3679:skgpu::ganesh::StrokeTessellateOp::prePrepareTessellator\\28GrTessellationShader::ProgramArgs&&\\2c\\20GrAppliedClip&&\\29\n3680:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::NonAAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20GrAAType\\29\n3681:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::AAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::RectInfo\\20const&\\2c\\20bool\\29\n3682:skgpu::ganesh::StencilMaskHelper::drawShape\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion::Op\\2c\\20GrAA\\29\n3683:skgpu::ganesh::SoftwarePathRenderer::DrawAroundInvPath\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n3684:skgpu::ganesh::SmallPathAtlasMgr::findOrCreate\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n3685:skgpu::ganesh::SmallPathAtlasMgr::deleteCacheEntry\\28skgpu::ganesh::SmallPathShapeData*\\29\n3686:skgpu::ganesh::ShadowRRectOp::Make\\28GrRecordingContext*\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20float\\2c\\20float\\29\n3687:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::RegionOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion\\20const&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\29\n3688:skgpu::ganesh::RasterAsView\\28GrRecordingContext*\\2c\\20SkImage_Raster\\20const*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n3689:skgpu::ganesh::QuadPerEdgeAA::Tessellator::append\\28GrQuad*\\2c\\20GrQuad*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrQuadAAFlags\\29\n3690:skgpu::ganesh::QuadPerEdgeAA::Tessellator::Tessellator\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20char*\\29\n3691:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::initializeAttrs\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29\n3692:skgpu::ganesh::QuadPerEdgeAA::IssueDraw\\28GrCaps\\20const&\\2c\\20GrOpsRenderPass*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3693:skgpu::ganesh::QuadPerEdgeAA::GetIndexBuffer\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::IndexBufferOption\\29\n3694:skgpu::ganesh::PathTessellateOp::usesMSAA\\28\\29\\20const\n3695:skgpu::ganesh::PathTessellateOp::prepareTessellator\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n3696:skgpu::ganesh::PathTessellateOp::PathTessellateOp\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrPaint&&\\2c\\20SkRect\\20const&\\29\n3697:skgpu::ganesh::PathStencilCoverOp::prePreparePrograms\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n3698:skgpu::ganesh::PathRenderer::getStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n3699:skgpu::ganesh::PathInnerTriangulateOp::prePreparePrograms\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n3700:skgpu::ganesh::PathCurveTessellator::~PathCurveTessellator\\28\\29\n3701:skgpu::ganesh::PathCurveTessellator::prepareWithTriangles\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20GrTriangulator::BreadcrumbTriangleList*\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n3702:skgpu::ganesh::OpsTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n3703:skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29\n3704:skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n3705:skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n3706:skgpu::ganesh::OpsTask::OpsTask\\28GrDrawingManager*\\2c\\20GrSurfaceProxyView\\2c\\20GrAuditTrail*\\2c\\20sk_sp<GrArenas>\\29\n3707:skgpu::ganesh::OpsTask::OpChain::tryConcat\\28skgpu::ganesh::OpsTask::OpChain::List*\\2c\\20GrProcessorSet::Analysis\\2c\\20GrDstProxyView\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20GrAuditTrail*\\29\n3708:skgpu::ganesh::MakeFragmentProcessorFromView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\n3709:skgpu::ganesh::LockTextureProxyView\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20GrImageTexGenPolicy\\2c\\20skgpu::Mipmapped\\29\n3710:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::~NonAALatticeOp\\28\\29\n3711:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::NonAALatticeOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20std::__2::unique_ptr<SkLatticeIter\\2c\\20std::__2::default_delete<SkLatticeIter>>\\2c\\20SkRect\\20const&\\29\n3712:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Make\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::LocalCoords\\20const&\\2c\\20GrAA\\29\n3713:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::FillRRectOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::LocalCoords\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29\n3714:skgpu::ganesh::DrawAtlasPathOp::prepareProgram\\28GrCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n3715:skgpu::ganesh::Device::replaceBackingProxy\\28SkSurface::ContentChangeMode\\2c\\20sk_sp<GrRenderTargetProxy>\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\29\n3716:skgpu::ganesh::Device::makeSpecial\\28SkBitmap\\20const&\\29\n3717:skgpu::ganesh::Device::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n3718:skgpu::ganesh::Device::drawEdgeAAImage\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20SkTileMode\\29\n3719:skgpu::ganesh::Device::discard\\28\\29\n3720:skgpu::ganesh::Device::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n3721:skgpu::ganesh::DefaultPathRenderer::internalDrawPath\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20bool\\29\n3722:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n3723:skgpu::ganesh::CopyView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3724:skgpu::ganesh::ClipStack::clipPath\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n3725:skgpu::ganesh::ClipStack::SaveRecord::replaceWithElement\\28skgpu::ganesh::ClipStack::RawElement&&\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>*\\29\n3726:skgpu::ganesh::ClipStack::SaveRecord::addElement\\28skgpu::ganesh::ClipStack::RawElement&&\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>*\\29\n3727:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::Draw\\20const&\\29\\20const\n3728:skgpu::ganesh::AtlasTextOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n3729:skgpu::ganesh::AtlasTextOp::AtlasTextOp\\28skgpu::ganesh::AtlasTextOp::MaskType\\2c\\20bool\\2c\\20int\\2c\\20SkRect\\2c\\20skgpu::ganesh::AtlasTextOp::Geometry*\\2c\\20GrColorInfo\\20const&\\2c\\20GrPaint&&\\29\n3730:skgpu::ganesh::AtlasRenderTask::stencilAtlasRect\\28GrRecordingContext*\\2c\\20SkRect\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n3731:skgpu::ganesh::AtlasRenderTask::addPath\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkIPoint\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20SkIPoint16*\\29\n3732:skgpu::ganesh::AtlasPathRenderer::preFlush\\28GrOnFlushResourceProvider*\\29\n3733:skgpu::ganesh::AtlasPathRenderer::addPathToAtlas\\28GrRecordingContext*\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkIRect*\\2c\\20SkIPoint16*\\2c\\20bool*\\2c\\20std::__2::function<bool\\20\\28GrSurfaceProxy\\20const*\\29>\\20const&\\29\n3734:skgpu::ganesh::AsFragmentProcessor\\28GrRecordingContext*\\2c\\20SkImage\\20const*\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\n3735:skgpu::TiledTextureUtils::OptimizeSampleArea\\28SkISize\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkRect*\\2c\\20SkRect*\\2c\\20SkMatrix*\\29\n3736:skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::process\\28\\29\n3737:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\\28\\29\n3738:skgpu::RectanizerSkyline::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n3739:skgpu::Plot::Plot\\28int\\2c\\20int\\2c\\20skgpu::AtlasGenerationCounter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkColorType\\2c\\20unsigned\\20long\\29\n3740:skgpu::GetReducedBlendModeInfo\\28SkBlendMode\\29\n3741:skgpu::BlendFuncName\\28SkBlendMode\\29\n3742:skcms_private::baseline::exec_stages\\28skcms_private::Op\\20const*\\2c\\20void\\20const**\\2c\\20char\\20const*\\2c\\20char*\\2c\\20int\\29\n3743:skcms_private::baseline::clut\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20float\\20vector\\5b4\\5d*\\2c\\20float\\20vector\\5b4\\5d*\\2c\\20float\\20vector\\5b4\\5d*\\2c\\20float\\20vector\\5b4\\5d*\\29\n3744:skcms_ApproximatelyEqualProfiles\n3745:sk_sp<SkSurface_Raster>\\20sk_make_sp<SkSurface_Raster\\2c\\20SkImageInfo\\20const&\\2c\\20sk_sp<SkPixelRef>\\2c\\20SkSurfaceProps\\20const*&>\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkPixelRef>&&\\2c\\20SkSurfaceProps\\20const*&\\29\n3746:sk_sp<SkShader>*\\20emscripten::internal::MemberAccess<SkRuntimeEffect::TracedShader\\2c\\20sk_sp<SkShader>>::getWire<SkRuntimeEffect::TracedShader>\\28sk_sp<SkShader>\\20SkRuntimeEffect::TracedShader::*\\20const&\\2c\\20SkRuntimeEffect::TracedShader\\20const&\\29\n3747:sk_fopen\\28char\\20const*\\2c\\20SkFILE_Flags\\29\n3748:sk_fgetsize\\28_IO_FILE*\\29\n3749:sk_fclose\\28_IO_FILE*\\29\n3750:sk_error_fn\\28png_struct_def*\\2c\\20char\\20const*\\29\n3751:setup_masks_arabic_plan\\28arabic_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_script_t\\29\n3752:set_khr_debug_label\\28GrGLGpu*\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n3753:setThrew\n3754:serialize_image\\28SkImage\\20const*\\2c\\20SkSerialProcs\\29\n3755:send_tree\n3756:sect_with_vertical\\28SkPoint\\20const*\\2c\\20float\\29\n3757:sect_with_horizontal\\28SkPoint\\20const*\\2c\\20float\\29\n3758:scanexp\n3759:scalbnl\n3760:rewind_if_necessary\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\n3761:resolveImplicitLevels\\28UBiDi*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n3762:reset_and_decode_image_config\\28wuffs_gif__decoder__struct*\\2c\\20wuffs_base__image_config__struct*\\2c\\20wuffs_base__io_buffer__struct*\\2c\\20SkStream*\\29\n3763:renderbuffer_storage_msaa\\28GrGLGpu*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\n3764:recursive_edge_intersect\\28GrTriangulator::Line\\20const&\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20GrTriangulator::Line\\20const&\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20SkPoint*\\2c\\20double*\\2c\\20double*\\29\n3765:reclassify_vertex\\28TriangulationVertex*\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20ReflexHash*\\2c\\20SkTInternalLList<TriangulationVertex>*\\29\n3766:read_metadata\\28std::__2::vector<SkJpegMetadataDecoder::Segment\\2c\\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n3767:quad_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n3768:quad_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n3769:quad_in_line\\28SkPoint\\20const*\\29\n3770:psh_hint_table_init\n3771:psh_hint_table_find_strong_points\n3772:psh_hint_table_activate_mask\n3773:psh_hint_align\n3774:psh_glyph_interpolate_strong_points\n3775:psh_glyph_interpolate_other_points\n3776:psh_glyph_interpolate_normal_points\n3777:psh_blues_set_zones\n3778:ps_parser_load_field\n3779:ps_dimension_end\n3780:ps_dimension_done\n3781:ps_builder_start_point\n3782:printf_core\n3783:premultiply_argb_as_rgba\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3784:premultiply_argb_as_bgra\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3785:position_cluster\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\29\n3786:portable::uniform_color_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3787:portable::set_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3788:portable::scale_1_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3789:portable::memset64\\28unsigned\\20long\\20long*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n3790:portable::lerp_1_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3791:portable::copy_from_indirect_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3792:portable::copy_2_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3793:portable::check_decal_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3794:pop_arg\n3795:pntz\n3796:png_inflate\n3797:png_deflate_claim\n3798:png_decompress_chunk\n3799:png_cache_unknown_chunk\n3800:optimize_layer_filter\\28SkImageFilter\\20const*\\2c\\20SkPaint*\\29\n3801:operator==\\28SkPaint\\20const&\\2c\\20SkPaint\\20const&\\29\n3802:open_face\n3803:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n3804:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n3805:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n3806:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n3807:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphs\\28\\29\\20const\n3808:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphCount\\28\\29\\20const\n3809:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29.1\n3810:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29\n3811:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\\28\\29\\20const\n3812:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\\28GrDirectContext*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3813:nearly_equal\\28double\\2c\\20double\\29\n3814:mbsrtowcs\n3815:map_quad_general\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\29\n3816:make_tiled_gradient\\28GrFPArgs\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20bool\\2c\\20bool\\29\n3817:make_premul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3818:make_dual_interval_colorizer\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20float\\29\n3819:make_clamped_gradient\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool\\29\n3820:make_bmp_proxy\\28GrProxyProvider*\\2c\\20SkBitmap\\20const&\\2c\\20GrColorType\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29\n3821:longest_match\n3822:long\\20std::__2::__num_get_signed_integral\\5babi:v160004\\5d<long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3823:long\\20long\\20std::__2::__num_get_signed_integral\\5babi:v160004\\5d<long\\20long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n3824:long\\20double\\20std::__2::__num_get_float\\5babi:v160004\\5d<long\\20double>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n3825:load_post_names\n3826:line_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n3827:line_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n3828:legalfunc$_embind_register_bigint\n3829:jpeg_open_backing_store\n3830:jpeg_destroy\n3831:jpeg_alloc_huff_table\n3832:jinit_upsampler\n3833:initial_reordering_consonant_syllable\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_face_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3834:init_error_limit\n3835:init_block\n3836:image_filter_color_type\\28SkImageInfo\\29\n3837:hb_vector_t<hb_vector_t<hb_aat_map_t::range_flags_t\\2c\\20true>\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n3838:hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n3839:hb_utf8_t::next\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\29\n3840:hb_unicode_script\n3841:hb_unicode_mirroring_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n3842:hb_unicode_funcs_t::is_default_ignorable\\28unsigned\\20int\\29\n3843:hb_shape_plan_key_t::init\\28bool\\2c\\20hb_face_t*\\2c\\20hb_segment_properties_t\\20const*\\2c\\20hb_feature_t\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\20const*\\29\n3844:hb_shape_plan_create2\n3845:hb_serialize_context_t::fini\\28\\29\n3846:hb_sanitize_context_t::return_t\\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n3847:hb_sanitize_context_t::return_t\\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n3848:hb_paint_extents_paint_linear_gradient\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n3849:hb_paint_extents_get_funcs\\28\\29\n3850:hb_paint_extents_context_t::hb_paint_extents_context_t\\28\\29\n3851:hb_ot_map_t::fini\\28\\29\n3852:hb_ot_layout_table_select_script\n3853:hb_ot_layout_table_get_lookup_count\n3854:hb_ot_layout_table_find_feature_variations\n3855:hb_ot_layout_table_find_feature\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n3856:hb_ot_layout_script_select_language\n3857:hb_ot_layout_language_get_required_feature\n3858:hb_ot_layout_language_find_feature\n3859:hb_ot_layout_has_substitution\n3860:hb_ot_layout_feature_with_variations_get_lookups\n3861:hb_ot_layout_collect_features_map\n3862:hb_ot_font_set_funcs\n3863:hb_lazy_loader_t<OT::sbix_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::sbix_accelerator_t\\2c\\2038u>\\2c\\20hb_face_t\\2c\\2038u\\2c\\20OT::sbix_accelerator_t>::create\\28hb_face_t*\\29\n3864:hb_lazy_loader_t<OT::post_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::post_accelerator_t\\2c\\207u>\\2c\\20hb_face_t\\2c\\207u\\2c\\20OT::post_accelerator_t>::get\\28\\29\\20const\n3865:hb_lazy_loader_t<OT::avar\\2c\\20hb_table_lazy_loader_t<OT::avar\\2c\\2019u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2019u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3866:hb_lazy_loader_t<OT::COLR\\2c\\20hb_table_lazy_loader_t<OT::COLR\\2c\\2035u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2035u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3867:hb_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\2037u>\\2c\\20hb_face_t\\2c\\2037u\\2c\\20OT::CBDT_accelerator_t>::get\\28\\29\\20const\n3868:hb_lazy_loader_t<AAT::trak\\2c\\20hb_table_lazy_loader_t<AAT::trak\\2c\\2032u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2032u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3869:hb_lazy_loader_t<AAT::morx\\2c\\20hb_table_lazy_loader_t<AAT::morx\\2c\\2028u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2028u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3870:hb_lazy_loader_t<AAT::mort\\2c\\20hb_table_lazy_loader_t<AAT::mort\\2c\\2029u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2029u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3871:hb_language_matches\n3872:hb_indic_get_categories\\28unsigned\\20int\\29\n3873:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::fetch_item\\28hb_serialize_context_t::object_t\\20const*\\20const&\\2c\\20unsigned\\20int\\29\\20const\n3874:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::alloc\\28unsigned\\20int\\29\n3875:hb_font_t::get_glyph_v_origin_with_fallback\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n3876:hb_font_set_variations\n3877:hb_font_set_funcs\n3878:hb_font_get_variation_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n3879:hb_font_get_glyph_h_advance\n3880:hb_font_get_glyph_extents\n3881:hb_font_get_font_h_extents_nil\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n3882:hb_font_funcs_set_variation_glyph_func\n3883:hb_font_funcs_set_nominal_glyphs_func\n3884:hb_font_funcs_set_nominal_glyph_func\n3885:hb_font_funcs_set_glyph_h_advances_func\n3886:hb_font_funcs_set_glyph_extents_func\n3887:hb_font_funcs_create\n3888:hb_draw_move_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n3889:hb_draw_funcs_set_quadratic_to_func\n3890:hb_draw_funcs_set_move_to_func\n3891:hb_draw_funcs_set_line_to_func\n3892:hb_draw_funcs_set_cubic_to_func\n3893:hb_draw_funcs_destroy\n3894:hb_draw_funcs_create\n3895:hb_draw_extents_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n3896:hb_buffer_t::sort\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\20\\28*\\29\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\\29\n3897:hb_buffer_t::safe_to_insert_tatweel\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n3898:hb_buffer_t::output_info\\28hb_glyph_info_t\\20const&\\29\n3899:hb_buffer_t::message_impl\\28hb_font_t*\\2c\\20char\\20const*\\2c\\20void*\\29\n3900:hb_buffer_t::leave\\28\\29\n3901:hb_buffer_t::delete_glyphs_inplace\\28bool\\20\\28*\\29\\28hb_glyph_info_t\\20const*\\29\\29\n3902:hb_buffer_t::clear_positions\\28\\29\n3903:hb_buffer_set_length\n3904:hb_buffer_get_glyph_positions\n3905:hb_buffer_diff\n3906:hb_buffer_create\n3907:hb_buffer_clear_contents\n3908:hb_buffer_add_utf8\n3909:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::kern>\\28hb_blob_t*\\29\n3910:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>\\28hb_blob_t*\\29\n3911:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::morx>\\28hb_blob_t*\\29\n3912:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::mort>\\28hb_blob_t*\\29\n3913:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::ltag>\\28hb_blob_t*\\29\n3914:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<AAT::kerx>\\28hb_blob_t*\\29\n3915:hb_aat_layout_remove_deleted_glyphs\\28hb_buffer_t*\\29\n3916:hair_cubic\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n3917:getint\n3918:get_win_string\n3919:get_layer_mapping_and_bounds\\28SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkMatrix\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\2c\\20bool\\2c\\20float\\29\n3920:get_dst_swizzle_and_store\\28GrColorType\\2c\\20SkRasterPipelineOp*\\2c\\20LumMode*\\2c\\20bool*\\2c\\20bool*\\29\n3921:get_driver_and_version\\28GrGLStandard\\2c\\20GrGLVendor\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n3922:get_cicp_trfn\\28skcms_TransferFunction\\20const&\\29\n3923:get_cicp_primaries\\28skcms_Matrix3x3\\20const&\\29\n3924:gen_key\\28skgpu::KeyBuilder*\\2c\\20GrProgramInfo\\20const&\\2c\\20GrCaps\\20const&\\29\n3925:gen_fp_key\\28GrFragmentProcessor\\20const&\\2c\\20GrCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\n3926:gather_uniforms_and_check_for_main\\28SkSL::Program\\20const&\\2c\\20std::__2::vector<SkRuntimeEffect::Uniform\\2c\\20std::__2::allocator<SkRuntimeEffect::Uniform>>*\\2c\\20std::__2::vector<SkRuntimeEffect::Child\\2c\\20std::__2::allocator<SkRuntimeEffect::Child>>*\\2c\\20SkRuntimeEffect::Uniform::Flags\\2c\\20unsigned\\20long*\\29\n3927:fwrite\n3928:ft_var_to_normalized\n3929:ft_var_load_item_variation_store\n3930:ft_var_load_hvvar\n3931:ft_var_load_avar\n3932:ft_var_get_value_pointer\n3933:ft_var_apply_tuple\n3934:ft_validator_init\n3935:ft_mem_strcpyn\n3936:ft_hash_num_lookup\n3937:ft_glyphslot_set_bitmap\n3938:ft_glyphslot_preset_bitmap\n3939:ft_corner_orientation\n3940:ft_corner_is_flat\n3941:frexp\n3942:fread\n3943:fp_force_eval\n3944:fp_barrier.1\n3945:fopen\n3946:fold_opacity_layer_color_to_paint\\28SkPaint\\20const*\\2c\\20bool\\2c\\20SkPaint*\\29\n3947:fmodl\n3948:float\\20std::__2::__num_get_float\\5babi:v160004\\5d<float>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n3949:fill_shadow_rec\\28SkPath\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkDrawShadowRec*\\29\n3950:fill_inverse_cmap\n3951:fileno\n3952:examine_app0\n3953:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\\2c\\20SkCanvas*\\2c\\20SkPath*\\2c\\20SkClipOp\\2c\\20bool\\29\n3954:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20sk_sp<SkColorFilter>*\\2c\\20sk_sp<SkImageFilter>*\\29\n3955:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20SkBlendMode\\2c\\20sk_sp<SkImageFilter>*\\2c\\20sk_sp<SkImageFilter>*\\29\n3956:emscripten::internal::Invoker<sk_sp<SkFontMgr>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28sk_sp<SkFontMgr>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\29\n3957:emscripten::internal::Invoker<sk_sp<SkBlender>\\2c\\20SkBlendMode>::invoke\\28sk_sp<SkBlender>\\20\\28*\\29\\28SkBlendMode\\29\\2c\\20SkBlendMode\\29\n3958:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3959:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\29\n3960:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20void\\2c\\20SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28void\\20\\28**\\29\\28SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20SkPaint*\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n3961:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\\2c\\20SkCanvas*\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n3962:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n3963:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n3964:emscripten::internal::FunctionInvoker<sk_sp<SkSurface>\\20\\28*\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\29\\2c\\20sk_sp<SkSurface>\\2c\\20SkCanvas&\\2c\\20SimpleImageInfo>::invoke\\28sk_sp<SkSurface>\\20\\28**\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\29\\2c\\20SkCanvas*\\2c\\20SimpleImageInfo*\\29\n3965:emscripten::internal::FunctionInvoker<sk_sp<SkColorSpace>\\20\\28*\\29\\28sk_sp<SkImage>\\29\\2c\\20sk_sp<SkColorSpace>\\2c\\20sk_sp<SkImage>>::invoke\\28sk_sp<SkColorSpace>\\20\\28**\\29\\28sk_sp<SkImage>\\29\\2c\\20sk_sp<SkImage>*\\29\n3966:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20SkPathOp\\29\n3967:embind_init_builtin\\28\\29\n3968:embind_init_Skia\\28\\29\n3969:embind_init_Paragraph\\28\\29::$_0::__invoke\\28SimpleParagraphStyle\\2c\\20sk_sp<SkFontMgr>\\29\n3970:embind_init_Paragraph\\28\\29\n3971:embind_init_ParagraphGen\\28\\29\n3972:edge_line_needs_recursion\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n3973:draw_nine\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\20const&\\2c\\20bool\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3974:dquad_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3975:dquad_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3976:double\\20std::__2::__num_get_float\\5babi:v160004\\5d<double>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n3977:dline_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3978:dline_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3979:deserialize_image\\28sk_sp<SkData>\\2c\\20SkDeserialProcs\\2c\\20std::__2::optional<SkAlphaType>\\29\n3980:deflate_stored\n3981:decompose_current_character\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20bool\\29\n3982:decltype\\28std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\\20const*>\\2c\\20true>::__unwrap\\28std::declval<std::__2::__wrap_iter<char\\20const*>>\\28\\29\\29\\29\\20std::__2::__unwrap_iter\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\\20const*>\\2c\\20true>\\2c\\200>\\28std::__2::__wrap_iter<char\\20const*>\\29\n3983:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3984:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator*\\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator\\2c\\20bool&\\2c\\20skgpu::tess::PatchAttribs&>\\28bool&\\2c\\20skgpu::tess::PatchAttribs&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::PathCurveTessellator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3985:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::Make\\28SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::Make\\28SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3986:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::MeshGP::Make\\28SkArenaAlloc*\\2c\\20sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::MeshGP::Make\\28SkArenaAlloc*\\2c\\20sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3987:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker\\2c\\20int&>\\28int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3988:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTransformShader*\\20SkArenaAlloc::make<SkTransformShader\\2c\\20SkShaderBase\\20const&\\2c\\20bool\\20const&>\\28SkShaderBase\\20const&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTransformShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3989:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkA8_Blitter*\\20SkArenaAlloc::make<SkA8_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29::'lambda'\\28void*\\29>\\28SkA8_Blitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3990:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrThreadSafeCache::Entry*\\20SkArenaAlloc::make<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&>\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29::'lambda'\\28void*\\29>\\28GrThreadSafeCache::Entry&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3991:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrResourceAllocator::Register*\\20SkArenaAlloc::make<GrResourceAllocator::Register\\2c\\20GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceProvider*&>\\28GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey&&\\2c\\20GrResourceProvider*&\\29::'lambda'\\28void*\\29>\\28GrResourceAllocator::Register&&\\29\n3992:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrQuadEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28GrQuadEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3993:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrPipeline*\\20SkArenaAlloc::make<GrPipeline\\2c\\20GrPipeline::InitArgs&\\2c\\20GrProcessorSet\\2c\\20GrAppliedClip>\\28GrPipeline::InitArgs&\\2c\\20GrProcessorSet&&\\2c\\20GrAppliedClip&&\\29::'lambda'\\28void*\\29>\\28GrPipeline&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3994:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrDistanceFieldA8TextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28GrDistanceFieldA8TextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3995:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29\n3996:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3997:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29\n3998:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3999:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n4000:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>>&\\2c\\20std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&&>\\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&&\\29\n4001:dcubic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n4002:dcubic_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n4003:dconic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n4004:dconic_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n4005:data_destroy_arabic\\28void*\\29\n4006:data_create_arabic\\28hb_ot_shape_plan_t\\20const*\\29\n4007:cycle\n4008:cubic_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4009:cubic_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4010:create_colorindex\n4011:copysignl\n4012:copy_bitmap_subset\\28SkBitmap\\20const&\\2c\\20SkIRect\\20const&\\29\n4013:conic_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4014:conic_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n4015:compute_pos_tan\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n4016:compute_intersection\\28OffsetSegment\\20const&\\2c\\20OffsetSegment\\20const&\\2c\\20SkPoint*\\2c\\20float*\\2c\\20float*\\29\n4017:compress_block\n4018:compose_khmer\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n4019:clipHandlesSprite\\28SkRasterClip\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPixmap\\20const&\\29\n4020:clamp\\28SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4021:checkint\n4022:check_inverse_on_empty_return\\28SkRegion*\\2c\\20SkPath\\20const&\\2c\\20SkRegion\\20const&\\29\n4023:char*\\20std::__2::copy\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20char*>\\28std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>\\2c\\20char*\\29\n4024:char*\\20std::__2::copy\\5babi:v160004\\5d<char\\20const*\\2c\\20char*>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\n4025:cff_vstore_done\n4026:cff_subfont_load\n4027:cff_subfont_done\n4028:cff_size_select\n4029:cff_parser_run\n4030:cff_make_private_dict\n4031:cff_load_private_dict\n4032:cff_index_get_name\n4033:cff_get_kerning\n4034:cff_blend_build_vector\n4035:cf2_getSeacComponent\n4036:cf2_computeDarkening\n4037:cf2_arrstack_push\n4038:cbrt\n4039:byn$mgfn-shared$void\\20extend_pts<\\28SkPaint::Cap\\292>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n4040:byn$mgfn-shared$void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n4041:byn$mgfn-shared$virtual\\20thunk\\20to\\20GrRenderTarget::onRelease\\28\\29\n4042:byn$mgfn-shared$ubidi_getClass_skia\n4043:byn$mgfn-shared$t1_hints_open\n4044:byn$mgfn-shared$std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\29\\20const\n4045:byn$mgfn-shared$std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20long\\29\\20const\n4046:byn$mgfn-shared$std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\29\\20const\n4047:byn$mgfn-shared$std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20long\\29\\20const\n4048:byn$mgfn-shared$std::__2::ctype<wchar_t>::do_toupper\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n4049:byn$mgfn-shared$std::__2::ctype<char>::do_toupper\\28char*\\2c\\20char\\20const*\\29\\20const\n4050:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n4051:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n4052:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n4053:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n4054:byn$mgfn-shared$skia_private::TArray<SkPath\\2c\\20true>::push_back_raw\\28int\\29\n4055:byn$mgfn-shared$skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::push_back_raw\\28int\\29\n4056:byn$mgfn-shared$skia_private::TArray<SkClosestRecord\\2c\\20true>::push_back_raw\\28int\\29\n4057:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::~Impl\\28\\29\n4058:byn$mgfn-shared$skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n4059:byn$mgfn-shared$skgpu::ScratchKey::GenerateResourceType\\28\\29\n4060:byn$mgfn-shared$skcms_TransferFunction_isPQish\n4061:byn$mgfn-shared$setup_masks_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n4062:byn$mgfn-shared$portable::store_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4063:byn$mgfn-shared$portable::load_8888_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4064:byn$mgfn-shared$portable::load_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4065:byn$mgfn-shared$portable::gather_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n4066:byn$mgfn-shared$non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4067:byn$mgfn-shared$non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4068:byn$mgfn-shared$make_unpremul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n4069:byn$mgfn-shared$hb_outline_recording_pen_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n4070:byn$mgfn-shared$hb_lazy_loader_t<OT::hhea\\2c\\20hb_table_lazy_loader_t<OT::hhea\\2c\\204u\\2c\\20true>\\2c\\20hb_face_t\\2c\\204u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n4071:byn$mgfn-shared$embind_init_Skia\\28\\29::$_75::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\n4072:byn$mgfn-shared$embind_init_Skia\\28\\29::$_72::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n4073:byn$mgfn-shared$embind_init_Skia\\28\\29::$_11::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n4074:byn$mgfn-shared$decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20skgpu::AtlasToken>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\2c\\20skgpu::AtlasToken&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n4075:byn$mgfn-shared$decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n4076:byn$mgfn-shared$cf2_stack_pushInt\n4077:byn$mgfn-shared$__cxx_global_array_dtor.1\n4078:byn$mgfn-shared$\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n4079:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DrawAtlasPathShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n4080:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4081:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4082:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphCount\\28\\29\\20const\n4083:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DirectMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n4084:byn$mgfn-shared$SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n4085:byn$mgfn-shared$SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\\28\\29\n4086:byn$mgfn-shared$SkSL::RP::LValue::~LValue\\28\\29.1\n4087:byn$mgfn-shared$SkSL::ProgramUsage::add\\28SkSL::ProgramElement\\20const&\\29\n4088:byn$mgfn-shared$SkSL::ProgramUsage::add\\28SkSL::Expression\\20const*\\29\n4089:byn$mgfn-shared$SkSL::FunctionReference::clone\\28SkSL::Position\\29\\20const\n4090:byn$mgfn-shared$SkSL::EmptyExpression::clone\\28SkSL::Position\\29\\20const\n4091:byn$mgfn-shared$SkSL::ChildCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n4092:byn$mgfn-shared$SkSL::ChildCall::clone\\28SkSL::Position\\29\\20const\n4093:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\\28\\29.1\n4094:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\\28\\29\n4095:byn$mgfn-shared$SkRecorder::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n4096:byn$mgfn-shared$SkRecorder::onDrawPaint\\28SkPaint\\20const&\\29\n4097:byn$mgfn-shared$SkRecorder::didScale\\28float\\2c\\20float\\29\n4098:byn$mgfn-shared$SkRecorder::didConcat44\\28SkM44\\20const&\\29\n4099:byn$mgfn-shared$SkRasterPipelineBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4100:byn$mgfn-shared$SkPictureRecord::onDrawPaint\\28SkPaint\\20const&\\29\n4101:byn$mgfn-shared$SkPictureRecord::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n4102:byn$mgfn-shared$SkPictureRecord::didConcat44\\28SkM44\\20const&\\29\n4103:byn$mgfn-shared$SkPairPathEffect::~SkPairPathEffect\\28\\29.1\n4104:byn$mgfn-shared$SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_1D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n4105:byn$mgfn-shared$SkJSONWriter::endArray\\28\\29\n4106:byn$mgfn-shared$SkComposePathEffect::~SkComposePathEffect\\28\\29\n4107:byn$mgfn-shared$SkColorSpace::MakeSRGB\\28\\29\n4108:byn$mgfn-shared$SkChopMonoCubicAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\29\n4109:byn$mgfn-shared$OT::PaintLinearGradient<OT::NoVariable>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n4110:byn$mgfn-shared$GrRRectShadowGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n4111:byn$mgfn-shared$GrPathTessellationShader::Impl::~Impl\\28\\29\n4112:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29.1\n4113:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29\n4114:byn$mgfn-shared$GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::clone\\28\\29\\20const\n4115:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29.1\n4116:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29\n4117:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29.1\n4118:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29\n4119:byn$mgfn-shared$GrBicubicEffect::onMakeProgramImpl\\28\\29\\20const\n4120:byn$mgfn-shared$Cr_z_inflate_table\n4121:byn$mgfn-shared$BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n4122:byn$mgfn-shared$AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n4123:build_ycc_rgb_table\n4124:bracketProcessChar\\28BracketData*\\2c\\20int\\29\n4125:bracketInit\\28UBiDi*\\2c\\20BracketData*\\29\n4126:bool\\20std::__2::operator==\\5babi:v160004\\5d<char\\2c\\20void\\20\\28*\\29\\28void*\\29>\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>\\20const&\\2c\\20std::nullptr_t\\29\n4127:bool\\20std::__2::operator!=\\5babi:v160004\\5d<SkPaint\\2c\\20int>\\28std::__2::variant<SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n4128:bool\\20std::__2::__insertion_sort_incomplete<skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n4129:bool\\20std::__2::__insertion_sort_incomplete<\\28anonymous\\20namespace\\29::EntryComparator&\\2c\\20\\28anonymous\\20namespace\\29::Entry*>\\28\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::Entry*\\2c\\20\\28anonymous\\20namespace\\29::EntryComparator&\\29\n4130:bool\\20std::__2::__insertion_sort_incomplete<SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n4131:bool\\20std::__2::__insertion_sort_incomplete<SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n4132:bool\\20is_parallel<SkTCurve>\\28SkDLine\\20const&\\2c\\20SkTCurve\\20const&\\29\n4133:bool\\20hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::set_with_hash<hb_serialize_context_t::object_t*&\\2c\\20unsigned\\20int&>\\28hb_serialize_context_t::object_t*&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n4134:bool\\20apply_string<GSUBProxy>\\28OT::hb_ot_apply_context_t*\\2c\\20GSUBProxy::Lookup\\20const&\\2c\\20OT::hb_ot_layout_lookup_accelerator_t\\20const&\\29\n4135:bool\\20OT::hb_accelerate_subtables_context_t::cache_func_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\2c\\20bool\\29\n4136:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat2_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4137:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4138:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::ReverseChainSingleSubstFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4139:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4140:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::LigatureSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4141:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::AlternateSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4142:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat2>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4143:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4144:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4145:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4146:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4147:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4148:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4149:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::CursivePosFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4150:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat3>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4151:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat1_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4152:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat3>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4153:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat1_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n4154:bool\\20OT::OffsetTo<OT::Layout::Common::Coverage\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::serialize_serialize<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>&>\\28hb_serialize_context_t*\\2c\\20hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>&\\29\n4155:bool\\20GrTTopoSort_Visit<GrRenderTask\\2c\\20GrRenderTask::TopoSortTraits>\\28GrRenderTask*\\2c\\20unsigned\\20int*\\29\n4156:blur_column\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n4157:blit_saved_trapezoid\\28SkAnalyticEdge*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20AdditiveBlitter*\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20int\\2c\\20int\\29\n4158:blend_line\\28SkColorType\\2c\\20void*\\2c\\20SkColorType\\2c\\20void\\20const*\\2c\\20SkAlphaType\\2c\\20bool\\2c\\20int\\29\n4159:bits_to_runs\\28SkBlitter*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\2c\\20long\\2c\\20unsigned\\20char\\29\n4160:barycentric_coords\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\29\n4161:auto\\20std::__2::__unwrap_range\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>>\\28std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>\\29\n4162:atanf\n4163:apply_forward\\28OT::hb_ot_apply_context_t*\\2c\\20OT::hb_ot_layout_lookup_accelerator_t\\20const&\\2c\\20unsigned\\20int\\29\n4164:append_color_output\\28PorterDuffXferProcessor\\20const&\\2c\\20GrGLSLXPFragmentBuilder*\\2c\\20skgpu::BlendFormula::OutputType\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n4165:af_loader_compute_darkening\n4166:af_latin_metrics_scale_dim\n4167:af_latin_hints_detect_features\n4168:af_latin_hint_edges\n4169:af_hint_normal_stem\n4170:af_cjk_metrics_scale_dim\n4171:af_cjk_metrics_scale\n4172:af_cjk_metrics_init_widths\n4173:af_cjk_metrics_check_digits\n4174:af_cjk_hints_init\n4175:af_cjk_hints_detect_features\n4176:af_cjk_hints_compute_blue_edges\n4177:af_cjk_hints_apply\n4178:af_cjk_hint_edges\n4179:af_cjk_get_standard_widths\n4180:af_axis_hints_new_edge\n4181:adler32\n4182:a_ctz_32\n4183:_iup_worker_interpolate\n4184:_hb_preprocess_text_vowel_constraints\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n4185:_hb_ot_shape\n4186:_hb_options_init\\28\\29\n4187:_hb_grapheme_group_func\\28hb_glyph_info_t\\20const&\\2c\\20hb_glyph_info_t\\20const&\\29\n4188:_hb_font_create\\28hb_face_t*\\29\n4189:_hb_fallback_shape\n4190:_glyf_get_advance_with_var_unscaled\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\n4191:__vfprintf_internal\n4192:__trunctfsf2\n4193:__tan\n4194:__rem_pio2_large\n4195:__overflow\n4196:__newlocale\n4197:__math_xflowf\n4198:__math_invalidf\n4199:__loc_is_allocated\n4200:__isxdigit_l\n4201:__getf2\n4202:__get_locale\n4203:__ftello_unlocked\n4204:__fseeko_unlocked\n4205:__floatscan\n4206:__expo2\n4207:__dynamic_cast\n4208:__divtf3\n4209:__cxxabiv1::__base_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n4210:\\28anonymous\\20namespace\\29::set_uv_quad\\28SkPoint\\20const*\\2c\\20\\28anonymous\\20namespace\\29::BezierVertex*\\29\n4211:\\28anonymous\\20namespace\\29::safe_to_ignore_subset_rect\\28GrAAType\\2c\\20SkFilterMode\\2c\\20DrawQuad\\20const&\\2c\\20SkRect\\20const&\\29\n4212:\\28anonymous\\20namespace\\29::prepare_for_direct_mask_drawing\\28SkStrike*\\2c\\20SkMatrix\\20const&\\2c\\20SkZip<unsigned\\20short\\20const\\2c\\20SkPoint\\20const>\\2c\\20SkZip<SkGlyph\\20const*\\2c\\20SkPoint>\\2c\\20SkZip<unsigned\\20short\\2c\\20SkPoint>\\29\n4213:\\28anonymous\\20namespace\\29::morphology_pass\\28skif::Context\\20const&\\2c\\20skif::FilterResult\\20const&\\2c\\20\\28anonymous\\20namespace\\29::MorphType\\2c\\20\\28anonymous\\20namespace\\29::MorphDirection\\2c\\20int\\29\n4214:\\28anonymous\\20namespace\\29::make_non_convex_fill_op\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20skgpu::ganesh::FillPathFlags\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrPaint&&\\29\n4215:\\28anonymous\\20namespace\\29::is_newer_better\\28SkData*\\2c\\20SkData*\\29\n4216:\\28anonymous\\20namespace\\29::get_glyph_run_intercepts\\28sktext::GlyphRun\\20const&\\2c\\20SkPaint\\20const&\\2c\\20float\\20const*\\2c\\20float*\\2c\\20int*\\29\n4217:\\28anonymous\\20namespace\\29::draw_to_sw_mask\\28GrSWMaskHelper*\\2c\\20skgpu::ganesh::ClipStack::Element\\20const&\\2c\\20bool\\29\n4218:\\28anonymous\\20namespace\\29::determine_clipped_src_rect\\28SkIRect\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkISize\\20const&\\2c\\20SkRect\\20const*\\29\n4219:\\28anonymous\\20namespace\\29::create_hb_face\\28SkTypeface\\20const&\\29::$_0::__invoke\\28void*\\29\n4220:\\28anonymous\\20namespace\\29::cpu_blur\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkSize>\\2c\\20sk_sp<SkSpecialImage>\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20skif::LayerSpace<SkIRect>\\29::$_0::operator\\28\\29\\28double\\29\\20const\n4221:\\28anonymous\\20namespace\\29::copyFTBitmap\\28FT_Bitmap_\\20const&\\2c\\20SkMaskBuilder*\\29\n4222:\\28anonymous\\20namespace\\29::colrv1_start_glyph\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20FT_Color_Root_Transform_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n4223:\\28anonymous\\20namespace\\29::colrv1_draw_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_COLR_Paint_\\20const&\\29\n4224:\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29\n4225:\\28anonymous\\20namespace\\29::YUVPlanesRec::~YUVPlanesRec\\28\\29\n4226:\\28anonymous\\20namespace\\29::TriangulatingPathOp::~TriangulatingPathOp\\28\\29\n4227:\\28anonymous\\20namespace\\29::TriangulatingPathOp::TriangulatingPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\29\n4228:\\28anonymous\\20namespace\\29::TriangulatingPathOp::Triangulate\\28GrEagerVertexAllocator*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool*\\29\n4229:\\28anonymous\\20namespace\\29::TriangulatingPathOp::CreateKey\\28skgpu::UniqueKey*\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\29\n4230:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n4231:\\28anonymous\\20namespace\\29::TextureOpImpl::propagateCoverageAAThroughoutChain\\28\\29\n4232:\\28anonymous\\20namespace\\29::TextureOpImpl::characterize\\28\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\29\\20const\n4233:\\28anonymous\\20namespace\\29::TextureOpImpl::appendQuad\\28DrawQuad*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\29\n4234:\\28anonymous\\20namespace\\29::TextureOpImpl::Make\\28GrRecordingContext*\\2c\\20GrTextureSetEntry*\\2c\\20int\\2c\\20int\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20skgpu::ganesh::TextureOp::Saturate\\2c\\20GrAAType\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\29\n4235:\\28anonymous\\20namespace\\29::TextureOpImpl::FillInVertices\\28GrCaps\\20const&\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl*\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\2c\\20char*\\29\n4236:\\28anonymous\\20namespace\\29::SpotVerticesFactory::makeVertices\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint*\\29\\20const\n4237:\\28anonymous\\20namespace\\29::SkImageImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n4238:\\28anonymous\\20namespace\\29::SDFTSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n4239:\\28anonymous\\20namespace\\29::RunIteratorQueue::advanceRuns\\28\\29\n4240:\\28anonymous\\20namespace\\29::Pass::blur\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n4241:\\28anonymous\\20namespace\\29::MipLevelHelper::allocAndInit\\28SkArenaAlloc*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\29\n4242:\\28anonymous\\20namespace\\29::MeshOp::~MeshOp\\28\\29\n4243:\\28anonymous\\20namespace\\29::MeshOp::MeshOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20sk_sp<SkVertices>\\2c\\20GrPrimitiveType\\20const*\\2c\\20GrAAType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\29\n4244:\\28anonymous\\20namespace\\29::MeshOp::MeshOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMesh\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20true>\\2c\\20GrAAType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\29\n4245:\\28anonymous\\20namespace\\29::MeshOp::Mesh::Mesh\\28SkMesh\\20const&\\29\n4246:\\28anonymous\\20namespace\\29::MeshGP::~MeshGP\\28\\29\n4247:\\28anonymous\\20namespace\\29::MeshGP::Impl::~Impl\\28\\29\n4248:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::defineStruct\\28char\\20const*\\29\n4249:\\28anonymous\\20namespace\\29::FillRectOpImpl::tessellate\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20char*\\29\\20const\n4250:\\28anonymous\\20namespace\\29::FillRectOpImpl::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n4251:\\28anonymous\\20namespace\\29::FillRectOpImpl::FillRectOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n4252:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRRect\\20const&\\29\n4253:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::DrawAtlasOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAAType\\2c\\20int\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n4254:\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29.1\n4255:\\28anonymous\\20namespace\\29::DirectMaskSubRun::~DirectMaskSubRun\\28\\29\n4256:\\28anonymous\\20namespace\\29::DirectMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n4257:\\28anonymous\\20namespace\\29::DirectMaskSubRun::glyphCount\\28\\29\\20const\n4258:\\28anonymous\\20namespace\\29::DefaultPathOp::programInfo\\28\\29\n4259:\\28anonymous\\20namespace\\29::DefaultPathOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4260:\\28anonymous\\20namespace\\29::DefaultPathOp::DefaultPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n4261:\\28anonymous\\20namespace\\29::ClipGeometry\\20\\28anonymous\\20namespace\\29::get_clip_geometry<skgpu::ganesh::ClipStack::SaveRecord\\2c\\20skgpu::ganesh::ClipStack::Draw>\\28skgpu::ganesh::ClipStack::SaveRecord\\20const&\\2c\\20skgpu::ganesh::ClipStack::Draw\\20const&\\29\n4262:\\28anonymous\\20namespace\\29::CircularRRectEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n4263:\\28anonymous\\20namespace\\29::CachedTessellations::~CachedTessellations\\28\\29\n4264:\\28anonymous\\20namespace\\29::CachedTessellations::CachedTessellations\\28\\29\n4265:\\28anonymous\\20namespace\\29::CacheImpl::~CacheImpl\\28\\29\n4266:\\28anonymous\\20namespace\\29::AAHairlineOp::AAHairlineOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkIRect\\2c\\20float\\2c\\20GrUserStencilSettings\\20const*\\29\n4267:WebPResetDecParams\n4268:WebPRescalerGetScaledDimensions\n4269:WebPMultRows\n4270:WebPMultARGBRows\n4271:WebPIoInitFromOptions\n4272:WebPInitUpsamplers\n4273:WebPFlipBuffer\n4274:WebPDemuxGetChunk\n4275:WebPCopyDecBufferPixels\n4276:WebPAllocateDecBuffer\n4277:VP8RemapBitReader\n4278:VP8LHuffmanTablesAllocate\n4279:VP8LDspInit\n4280:VP8LConvertFromBGRA\n4281:VP8LColorCacheInit\n4282:VP8LColorCacheCopy\n4283:VP8LBuildHuffmanTable\n4284:VP8LBitReaderSetBuffer\n4285:VP8InitScanline\n4286:VP8GetInfo\n4287:VP8BitReaderSetBuffer\n4288:Update_Max\n4289:TransformOne_C\n4290:TT_Set_Named_Instance\n4291:TT_Hint_Glyph\n4292:StoreFrame\n4293:SortContourList\\28SkOpContourHead**\\2c\\20bool\\2c\\20bool\\29\n4294:SkYUVAPixmapInfo::isSupported\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\29\\20const\n4295:SkWuffsCodec::seekFrame\\28int\\29\n4296:SkWuffsCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n4297:SkWuffsCodec::onIncrementalDecodeTwoPass\\28\\29\n4298:SkWuffsCodec::decodeFrameConfig\\28\\29\n4299:SkWriter32::writeString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n4300:SkWriteICCProfile\\28skcms_ICCProfile\\20const*\\2c\\20char\\20const*\\29\n4301:SkWebpDecoder::IsWebp\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4302:SkWebpCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29\n4303:SkWbmpDecoder::IsWbmp\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4304:SkWbmpCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29\n4305:SkWStream::SizeOfPackedUInt\\28unsigned\\20long\\29\n4306:SkWBuffer::padToAlign4\\28\\29\n4307:SkVertices::Builder::indices\\28\\29\n4308:SkUnicode::convertUtf16ToUtf8\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n4309:SkUTF::UTF16ToUTF8\\28char*\\2c\\20int\\2c\\20unsigned\\20short\\20const*\\2c\\20unsigned\\20long\\29\n4310:SkTypeface_FreeType::FaceRec::Make\\28SkTypeface_FreeType\\20const*\\29\n4311:SkTypeface_Custom::onGetFamilyName\\28SkString*\\29\\20const\n4312:SkTypeface::textToGlyphs\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkTextEncoding\\2c\\20unsigned\\20short*\\2c\\20int\\29\\20const\n4313:SkTypeface::serialize\\28SkWStream*\\2c\\20SkTypeface::SerializeBehavior\\29\\20const\n4314:SkTypeface::openStream\\28int*\\29\\20const\n4315:SkTypeface::getFamilyName\\28SkString*\\29\\20const\n4316:SkTransformShader::update\\28SkMatrix\\20const&\\29\n4317:SkTransformShader::SkTransformShader\\28SkShaderBase\\20const&\\2c\\20bool\\29\n4318:SkTiffImageFileDirectory::getEntryTag\\28unsigned\\20short\\29\\20const\n4319:SkTiffImageFileDirectory::getEntryRawData\\28unsigned\\20short\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20char\\20const**\\2c\\20unsigned\\20long*\\29\\20const\n4320:SkTiffImageFileDirectory::MakeFromOffset\\28sk_sp<SkData>\\2c\\20bool\\2c\\20unsigned\\20int\\29\n4321:SkTextBlobBuilder::allocRunPos\\28SkFont\\20const&\\2c\\20int\\2c\\20SkRect\\20const*\\29\n4322:SkTextBlob::getIntercepts\\28float\\20const*\\2c\\20float*\\2c\\20SkPaint\\20const*\\29\\20const\n4323:SkTextBlob::RunRecord::StorageSize\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SkTextBlob::GlyphPositioning\\2c\\20SkSafeMath*\\29\n4324:SkTextBlob::MakeFromText\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20SkTextEncoding\\29\n4325:SkTextBlob::MakeFromRSXform\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkRSXform\\20const*\\2c\\20SkFont\\20const&\\2c\\20SkTextEncoding\\29\n4326:SkTextBlob::Iter::experimentalNext\\28SkTextBlob::Iter::ExperimentalRun*\\29\n4327:SkTextBlob::Iter::Iter\\28SkTextBlob\\20const&\\29\n4328:SkTaskGroup::wait\\28\\29\n4329:SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29\n4330:SkTSpan::onlyEndPointsInCommon\\28SkTSpan\\20const*\\2c\\20bool*\\2c\\20bool*\\2c\\20bool*\\29\n4331:SkTSpan::linearIntersects\\28SkTCurve\\20const&\\29\\20const\n4332:SkTSect::removeAllBut\\28SkTSpan\\20const*\\2c\\20SkTSpan*\\2c\\20SkTSect*\\29\n4333:SkTSect::intersects\\28SkTSpan*\\2c\\20SkTSect*\\2c\\20SkTSpan*\\2c\\20int*\\29\n4334:SkTSect::deleteEmptySpans\\28\\29\n4335:SkTSect::addSplitAt\\28SkTSpan*\\2c\\20double\\29\n4336:SkTSect::addForPerp\\28SkTSpan*\\2c\\20double\\29\n4337:SkTSect::EndsEqual\\28SkTSect\\20const*\\2c\\20SkTSect\\20const*\\2c\\20SkIntersections*\\29\n4338:SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::~SkTMultiMap\\28\\29\n4339:SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::find\\28SkImageFilterCacheKey\\20const&\\29\\20const\n4340:SkTDStorage::calculateSizeOrDie\\28int\\29::$_1::operator\\28\\29\\28\\29\\20const\n4341:SkTDStorage::SkTDStorage\\28SkTDStorage&&\\29\n4342:SkTCubic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n4343:SkTConic::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n4344:SkTConic::hullIntersects\\28SkDCubic\\20const&\\2c\\20bool*\\29\\20const\n4345:SkTConic::controlsInside\\28\\29\\20const\n4346:SkTConic::collapsed\\28\\29\\20const\n4347:SkTBlockList<skgpu::ganesh::PathTessellator::PathDrawList\\2c\\2016>::reset\\28\\29\n4348:SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::reset\\28\\29\n4349:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::push_back\\28GrGLProgramDataManager::GLUniformInfo\\20const&\\29\n4350:SkSwizzler::MakeSimple\\28int\\2c\\20SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n4351:SkSurfaces::WrapPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkSurfaceProps\\20const*\\29\n4352:SkSurface_Base::outstandingImageSnapshot\\28\\29\\20const\n4353:SkSurface_Base::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n4354:SkSurface_Base::onCapabilities\\28\\29\n4355:SkStrokeRec::setHairlineStyle\\28\\29\n4356:SkStrokeRec::SkStrokeRec\\28SkPaint\\20const&\\2c\\20SkPaint::Style\\2c\\20float\\29\n4357:SkStrokeRec::GetInflationRadius\\28SkPaint::Join\\2c\\20float\\2c\\20SkPaint::Cap\\2c\\20float\\29\n4358:SkString::insertHex\\28unsigned\\20long\\2c\\20unsigned\\20int\\2c\\20int\\29\n4359:SkString::appendVAList\\28char\\20const*\\2c\\20void*\\29\n4360:SkString::SkString\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4361:SkStrikeSpec::SkStrikeSpec\\28SkStrikeSpec\\20const&\\29\n4362:SkStrikeSpec::ShouldDrawAsPath\\28SkPaint\\20const&\\2c\\20SkFont\\20const&\\2c\\20SkMatrix\\20const&\\29\n4363:SkStrSplit\\28char\\20const*\\2c\\20char\\20const*\\2c\\20SkStrSplitMode\\2c\\20skia_private::TArray<SkString\\2c\\20true>*\\29\n4364:SkStrAppendS32\\28char*\\2c\\20int\\29\n4365:SkSpriteBlitter_Memcpy::~SkSpriteBlitter_Memcpy\\28\\29\n4366:SkSpecialImages::MakeFromRaster\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\2c\\20SkSurfaceProps\\20const&\\29\n4367:SkSpecialImages::AsBitmap\\28SkSpecialImage\\20const*\\2c\\20SkBitmap*\\29\n4368:SkSharedMutex::releaseShared\\28\\29\n4369:SkShapers::unicode::BidiRunIterator\\28sk_sp<SkUnicode>\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\n4370:SkShapers::HB::ScriptRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\29\n4371:SkShaper::MakeStdLanguageRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\29\n4372:SkShaders::MatrixRec::concat\\28SkMatrix\\20const&\\29\\20const\n4373:SkShaders::Blend\\28sk_sp<SkBlender>\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkShader>\\29\n4374:SkShaderUtils::VisitLineByLine\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::function<void\\20\\28int\\2c\\20char\\20const*\\29>\\20const&\\29\n4375:SkShaderUtils::PrettyPrint\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n4376:SkShaderUtils::GLSLPrettyPrint::parseUntil\\28char\\20const*\\29\n4377:SkShaderBase::getFlattenableType\\28\\29\\20const\n4378:SkShader::makeWithLocalMatrix\\28SkMatrix\\20const&\\29\\20const\n4379:SkShader::makeWithColorFilter\\28sk_sp<SkColorFilter>\\29\\20const\n4380:SkScan::PathRequiresTiling\\28SkIRect\\20const&\\29\n4381:SkScan::HairLine\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n4382:SkScan::AntiFrameRect\\28SkRect\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n4383:SkScan::AntiFillXRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n4384:SkScan::AntiFillRect\\28SkRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n4385:SkScan::AAAFillPath\\28SkPath\\20const&\\2c\\20SkBlitter*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n4386:SkScalerContext_FreeType::updateGlyphBoundsIfSubpixel\\28SkGlyph\\20const&\\2c\\20SkRect*\\2c\\20bool\\29\n4387:SkScalerContext_FreeType::shouldSubpixelBitmap\\28SkGlyph\\20const&\\2c\\20SkMatrix\\20const&\\29\n4388:SkScalerContextRec::getSingleMatrix\\28SkMatrix*\\29\\20const\n4389:SkScalerContextFTUtils::drawCOLRv1Glyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n4390:SkScalerContextFTUtils::drawCOLRv0Glyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n4391:SkScalerContext::internalMakeGlyph\\28SkPackedGlyphID\\2c\\20SkMask::Format\\2c\\20SkArenaAlloc*\\29\n4392:SkScalerContext::internalGetPath\\28SkGlyph&\\2c\\20SkArenaAlloc*\\29\n4393:SkScalerContext::getFontMetrics\\28SkFontMetrics*\\29\n4394:SkScalerContext::SkScalerContext\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\n4395:SkScalerContext::PreprocessRec\\28SkTypeface\\20const&\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const&\\29\n4396:SkScalerContext::MakeRecAndEffects\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkScalerContextRec*\\2c\\20SkScalerContextEffects*\\29\n4397:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\n4398:SkScalerContext::GetMaskPreBlend\\28SkScalerContextRec\\20const&\\29\n4399:SkScalerContext::AutoDescriptorGivenRecAndEffects\\28SkScalerContextRec\\20const&\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkAutoDescriptor*\\29\n4400:SkSampledCodec::sampledDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const&\\29\n4401:SkSampledCodec::accountForNativeScaling\\28int*\\2c\\20int*\\29\\20const\n4402:SkSampledCodec::SkSampledCodec\\28SkCodec*\\29\n4403:SkSL::zero_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\29\n4404:SkSL::type_to_sksltype\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSLType*\\29\n4405:SkSL::stoi\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20long\\20long*\\29\n4406:SkSL::splat_scalar\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n4407:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_2::operator\\28\\29\\28int\\29\\20const\n4408:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_1::operator\\28\\29\\28int\\29\\20const\n4409:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n4410:SkSL::negate_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n4411:SkSL::make_reciprocal_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n4412:SkSL::index_out_of_range\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20long\\20long\\2c\\20SkSL::Expression\\20const&\\29\n4413:SkSL::get_struct_definitions_from_module\\28SkSL::Program&\\2c\\20SkSL::Module\\20const&\\2c\\20std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>*\\29\n4414:SkSL::find_existing_declaration\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::IntrinsicKind\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration**\\29::$_0::operator\\28\\29\\28\\29\\20const\n4415:SkSL::extract_matrix\\28SkSL::Expression\\20const*\\2c\\20float*\\29\n4416:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n4417:SkSL::check_main_signature\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\29::$_4::operator\\28\\29\\28int\\29\\20const\n4418:SkSL::\\28anonymous\\20namespace\\29::check_valid_uniform_type\\28SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Context\\20const&\\2c\\20bool\\29::$_0::operator\\28\\29\\28\\29\\20const\n4419:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n4420:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n4421:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n4422:SkSL::VariableReference::setRefKind\\28SkSL::VariableRefKind\\29\n4423:SkSL::Variable::setVarDeclaration\\28SkSL::VarDeclaration*\\29\n4424:SkSL::Variable::setGlobalVarDeclaration\\28SkSL::GlobalVarDeclaration*\\29\n4425:SkSL::Variable::globalVarDeclaration\\28\\29\\20const\n4426:SkSL::Variable::Make\\28SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20bool\\2c\\20SkSL::VariableStorage\\29\n4427:SkSL::Variable::MakeScratchVariable\\28SkSL::Context\\20const&\\2c\\20SkSL::Mangler&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4428:SkSL::VarDeclaration::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Variable*\\2c\\20SkSL::Type\\20const*\\2c\\20int\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4429:SkSL::VarDeclaration::ErrorCheck\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::VariableStorage\\29\n4430:SkSL::TypeReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n4431:SkSL::TypeReference::VerifyType\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Position\\29\n4432:SkSL::TypeReference::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\29\n4433:SkSL::Type::MakeStructType\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Field\\2c\\20true>\\2c\\20bool\\29\n4434:SkSL::Type::MakeLiteralType\\28char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20signed\\20char\\29\n4435:SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::addDeclaringElement\\28SkSL::ProgramElement\\20const*\\29\n4436:SkSL::ToGLSL\\28SkSL::Program&\\2c\\20SkSL::ShaderCaps\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\29\n4437:SkSL::TernaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4438:SkSL::SymbolTable::insertNewParent\\28\\29\n4439:SkSL::SymbolTable::addWithoutOwnership\\28SkSL::Symbol*\\29\n4440:SkSL::Swizzle::MaskString\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\20const&\\29\n4441:SkSL::SwitchStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4442:SkSL::SwitchCase::Make\\28SkSL::Position\\2c\\20long\\20long\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4443:SkSL::SwitchCase::MakeDefault\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4444:SkSL::StructType::StructType\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Field\\2c\\20true>\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n4445:SkSL::String::vappendf\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20char\\20const*\\2c\\20void*\\29\n4446:SkSL::SingleArgumentConstructor::argumentSpan\\28\\29\n4447:SkSL::RP::stack_usage\\28SkSL::RP::Instruction\\20const&\\29\n4448:SkSL::RP::UnownedLValueSlice::isWritable\\28\\29\\20const\n4449:SkSL::RP::UnownedLValueSlice::dynamicSlotRange\\28\\29\n4450:SkSL::RP::ScratchLValue::~ScratchLValue\\28\\29\n4451:SkSL::RP::Program::~Program\\28\\29\n4452:SkSL::RP::LValue::swizzle\\28\\29\n4453:SkSL::RP::Generator::writeVarDeclaration\\28SkSL::VarDeclaration\\20const&\\29\n4454:SkSL::RP::Generator::writeFunction\\28SkSL::IRNode\\20const&\\2c\\20SkSL::FunctionDefinition\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const>\\29\n4455:SkSL::RP::Generator::storeImmutableValueToSlots\\28skia_private::TArray<int\\2c\\20true>\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n4456:SkSL::RP::Generator::pushVariableReferencePartial\\28SkSL::VariableReference\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n4457:SkSL::RP::Generator::pushPrefixExpression\\28SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n4458:SkSL::RP::Generator::pushIntrinsic\\28SkSL::IntrinsicKind\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n4459:SkSL::RP::Generator::pushImmutableData\\28SkSL::Expression\\20const&\\29\n4460:SkSL::RP::Generator::pushAbsFloatIntrinsic\\28int\\29\n4461:SkSL::RP::Generator::getImmutableValueForExpression\\28SkSL::Expression\\20const&\\2c\\20skia_private::TArray<int\\2c\\20true>*\\29\n4462:SkSL::RP::Generator::foldWithMultiOp\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n4463:SkSL::RP::Generator::findPreexistingImmutableData\\28skia_private::TArray<int\\2c\\20true>\\20const&\\29\n4464:SkSL::RP::Builder::push_slots_or_immutable_indirect\\28SkSL::RP::SlotRange\\2c\\20int\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::BuilderOp\\29\n4465:SkSL::RP::Builder::push_condition_mask\\28\\29\n4466:SkSL::RP::Builder::copy_stack_to_slots\\28SkSL::RP::SlotRange\\2c\\20int\\29\n4467:SkSL::RP::Builder::branch_if_any_lanes_active\\28int\\29\n4468:SkSL::ProgramVisitor::visit\\28SkSL::Program\\20const&\\29\n4469:SkSL::ProgramUsage::remove\\28SkSL::Expression\\20const*\\29\n4470:SkSL::ProgramUsage::add\\28SkSL::Statement\\20const*\\29\n4471:SkSL::ProgramUsage::add\\28SkSL::Expression\\20const*\\29\n4472:SkSL::Pool::attachToThread\\28\\29\n4473:SkSL::PipelineStage::PipelineStageCodeGenerator::functionName\\28SkSL::FunctionDeclaration\\20const&\\29\n4474:SkSL::PipelineStage::PipelineStageCodeGenerator::functionDeclaration\\28SkSL::FunctionDeclaration\\20const&\\29\n4475:SkSL::Parser::~Parser\\28\\29\n4476:SkSL::Parser::varDeclarations\\28\\29\n4477:SkSL::Parser::varDeclarationsOrExpressionStatement\\28\\29\n4478:SkSL::Parser::switchCaseBody\\28SkSL::ExpressionArray*\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4479:SkSL::Parser::statementOrNop\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4480:SkSL::Parser::shiftExpression\\28\\29\n4481:SkSL::Parser::relationalExpression\\28\\29\n4482:SkSL::Parser::parameter\\28std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>*\\29\n4483:SkSL::Parser::multiplicativeExpression\\28\\29\n4484:SkSL::Parser::logicalXorExpression\\28\\29\n4485:SkSL::Parser::logicalAndExpression\\28\\29\n4486:SkSL::Parser::localVarDeclarationEnd\\28SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Token\\29\n4487:SkSL::Parser::intLiteral\\28long\\20long*\\29\n4488:SkSL::Parser::globalVarDeclarationEnd\\28SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Token\\29\n4489:SkSL::Parser::equalityExpression\\28\\29\n4490:SkSL::Parser::directive\\28bool\\29\n4491:SkSL::Parser::declarations\\28\\29\n4492:SkSL::Parser::checkNext\\28SkSL::Token::Kind\\2c\\20SkSL::Token*\\29\n4493:SkSL::Parser::bitwiseXorExpression\\28\\29\n4494:SkSL::Parser::bitwiseOrExpression\\28\\29\n4495:SkSL::Parser::bitwiseAndExpression\\28\\29\n4496:SkSL::Parser::additiveExpression\\28\\29\n4497:SkSL::Parser::Parser\\28SkSL::Compiler*\\2c\\20SkSL::ProgramSettings\\20const&\\2c\\20SkSL::ProgramKind\\2c\\20std::__2::unique_ptr<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::default_delete<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>>\\29\n4498:SkSL::MultiArgumentConstructor::argumentSpan\\28\\29\n4499:SkSL::ModuleLoader::~ModuleLoader\\28\\29\n4500:SkSL::ModuleLoader::loadVertexModule\\28SkSL::Compiler*\\29\n4501:SkSL::ModuleLoader::loadSharedModule\\28SkSL::Compiler*\\29\n4502:SkSL::ModuleLoader::loadPublicModule\\28SkSL::Compiler*\\29\n4503:SkSL::ModuleLoader::loadGraphiteVertexModule\\28SkSL::Compiler*\\29\n4504:SkSL::ModuleLoader::loadGraphiteFragmentModule\\28SkSL::Compiler*\\29\n4505:SkSL::ModuleLoader::loadFragmentModule\\28SkSL::Compiler*\\29\n4506:SkSL::ModuleLoader::Get\\28\\29\n4507:SkSL::MethodReference::~MethodReference\\28\\29.1\n4508:SkSL::MethodReference::~MethodReference\\28\\29\n4509:SkSL::MatrixType::bitWidth\\28\\29\\20const\n4510:SkSL::MakeRasterPipelineProgram\\28SkSL::Program\\20const&\\2c\\20SkSL::FunctionDefinition\\20const&\\2c\\20SkSL::DebugTracePriv*\\2c\\20bool\\29\n4511:SkSL::Layout::description\\28\\29\\20const\n4512:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_matrixCompMult\\28double\\2c\\20double\\2c\\20double\\29\n4513:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_length\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n4514:SkSL::InterfaceBlock::~InterfaceBlock\\28\\29\n4515:SkSL::Inliner::candidateCanBeInlined\\28SkSL::InlineCandidate\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20bool\\2c\\20SkGoodHash>*\\29\n4516:SkSL::IfStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n4517:SkSL::GLSLCodeGenerator::writeVarDeclaration\\28SkSL::VarDeclaration\\20const&\\2c\\20bool\\29\n4518:SkSL::GLSLCodeGenerator::writeProgramElement\\28SkSL::ProgramElement\\20const&\\29\n4519:SkSL::GLSLCodeGenerator::writeMinAbsHack\\28SkSL::Expression&\\2c\\20SkSL::Expression&\\29\n4520:SkSL::GLSLCodeGenerator::generateCode\\28\\29\n4521:SkSL::FunctionDefinition::~FunctionDefinition\\28\\29.1\n4522:SkSL::FunctionDefinition::~FunctionDefinition\\28\\29\n4523:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n4524:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::addLocalVariable\\28SkSL::Variable\\20const*\\2c\\20SkSL::Position\\29\n4525:SkSL::FunctionDeclaration::~FunctionDeclaration\\28\\29.1\n4526:SkSL::FunctionDeclaration::~FunctionDeclaration\\28\\29\n4527:SkSL::FunctionDeclaration::mangledName\\28\\29\\20const\n4528:SkSL::FunctionDeclaration::determineFinalTypes\\28SkSL::ExpressionArray\\20const&\\2c\\20skia_private::STArray<8\\2c\\20SkSL::Type\\20const*\\2c\\20true>*\\2c\\20SkSL::Type\\20const**\\29\\20const\n4529:SkSL::FunctionDeclaration::FunctionDeclaration\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Variable*\\2c\\20true>\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::IntrinsicKind\\29\n4530:SkSL::FunctionCall::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::ExpressionArray\\29\n4531:SkSL::FunctionCall::FindBestFunctionForCall\\28SkSL::Context\\20const&\\2c\\20SkSL::FunctionDeclaration\\20const*\\2c\\20SkSL::ExpressionArray\\20const&\\29\n4532:SkSL::FunctionCall::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::ExpressionArray\\29\n4533:SkSL::ForStatement::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n4534:SkSL::FindIntrinsicKind\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4535:SkSL::FieldAccess::~FieldAccess\\28\\29.1\n4536:SkSL::FieldAccess::~FieldAccess\\28\\29\n4537:SkSL::ExpressionStatement::Convert\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4538:SkSL::DoStatement::~DoStatement\\28\\29.1\n4539:SkSL::DoStatement::~DoStatement\\28\\29\n4540:SkSL::DebugTracePriv::setSource\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n4541:SkSL::ConstructorScalarCast::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n4542:SkSL::ConstructorMatrixResize::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n4543:SkSL::Constructor::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n4544:SkSL::ConstantFolder::Simplify\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n4545:SkSL::Compiler::writeErrorCount\\28\\29\n4546:SkSL::Compiler::initializeContext\\28SkSL::Module\\20const*\\2c\\20SkSL::ProgramKind\\2c\\20SkSL::ProgramSettings\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\29\n4547:SkSL::Compiler::cleanupContext\\28\\29\n4548:SkSL::ChildCall::~ChildCall\\28\\29.1\n4549:SkSL::ChildCall::~ChildCall\\28\\29\n4550:SkSL::ChildCall::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Variable\\20const&\\2c\\20SkSL::ExpressionArray\\29\n4551:SkSL::BinaryExpression::isAssignmentIntoVariable\\28\\29\n4552:SkSL::BinaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Type\\20const*\\29\n4553:SkSL::Analysis::\\28anonymous\\20namespace\\29::LoopControlFlowVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n4554:SkSL::Analysis::IsDynamicallyUniformExpression\\28SkSL::Expression\\20const&\\29\n4555:SkSL::Analysis::IsConstantExpression\\28SkSL::Expression\\20const&\\29\n4556:SkSL::Analysis::IsAssignable\\28SkSL::Expression&\\2c\\20SkSL::Analysis::AssignmentInfo*\\2c\\20SkSL::ErrorReporter*\\29\n4557:SkSL::Analysis::GetLoopUnrollInfo\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\20const&\\2c\\20SkSL::Statement\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Statement\\20const*\\2c\\20SkSL::ErrorReporter*\\29\n4558:SkSL::Analysis::GetLoopControlFlowInfo\\28SkSL::Statement\\20const&\\29\n4559:SkSL::AliasType::numberKind\\28\\29\\20const\n4560:SkSL::AliasType::isAllowedInES2\\28\\29\\20const\n4561:SkRuntimeShader::~SkRuntimeShader\\28\\29\n4562:SkRuntimeEffectPriv::WriteChildEffects\\28SkWriteBuffer&\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\29\n4563:SkRuntimeEffectPriv::TransformUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkColorSpaceXformSteps\\20const&\\29\n4564:SkRuntimeEffect::~SkRuntimeEffect\\28\\29\n4565:SkRuntimeEffect::makeShader\\28sk_sp<SkData\\20const>\\2c\\20sk_sp<SkShader>*\\2c\\20unsigned\\20long\\2c\\20SkMatrix\\20const*\\29\\20const\n4566:SkRuntimeEffect::makeColorFilter\\28sk_sp<SkData\\20const>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\29\\20const\n4567:SkRuntimeEffect::TracedShader*\\20emscripten::internal::raw_constructor<SkRuntimeEffect::TracedShader>\\28\\29\n4568:SkRuntimeEffect::MakeInternal\\28std::__2::unique_ptr<SkSL::Program\\2c\\20std::__2::default_delete<SkSL::Program>>\\2c\\20SkRuntimeEffect::Options\\20const&\\2c\\20SkSL::ProgramKind\\29\n4569:SkRuntimeEffect::ChildPtr&\\20skia_private::TArray<SkRuntimeEffect::ChildPtr\\2c\\20true>::emplace_back<sk_sp<SkShader>&>\\28sk_sp<SkShader>&\\29\n4570:SkRuntimeBlender::flatten\\28SkWriteBuffer&\\29\\20const\n4571:SkRgnBuilder::~SkRgnBuilder\\28\\29\n4572:SkResourceCache::PostPurgeSharedID\\28unsigned\\20long\\20long\\29\n4573:SkResourceCache::GetDiscardableFactory\\28\\29\n4574:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n4575:SkRegion::Spanerator::Spanerator\\28SkRegion\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4576:SkRegion::Oper\\28SkRegion\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkRegion::Op\\2c\\20SkRegion*\\29\n4577:SkRefCntSet::~SkRefCntSet\\28\\29\n4578:SkRefCntBase::internal_dispose\\28\\29\\20const\n4579:SkReduceOrder::reduce\\28SkDQuad\\20const&\\29\n4580:SkReduceOrder::Conic\\28SkConic\\20const&\\2c\\20SkPoint*\\29\n4581:SkRectClipBlitter::requestRowsPreserved\\28\\29\\20const\n4582:SkRectClipBlitter::allocBlitMemory\\28unsigned\\20long\\29\n4583:SkRect::intersect\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n4584:SkRecords::TypedMatrix::TypedMatrix\\28SkMatrix\\20const&\\29\n4585:SkRecords::FillBounds::popSaveBlock\\28\\29\n4586:SkRecordOptimize\\28SkRecord*\\29\n4587:SkRecordFillBounds\\28SkRect\\20const&\\2c\\20SkRecord\\20const&\\2c\\20SkRect*\\2c\\20SkBBoxHierarchy::Metadata*\\29\n4588:SkRecord::bytesUsed\\28\\29\\20const\n4589:SkReadPixelsRec::trim\\28int\\2c\\20int\\29\n4590:SkReadBuffer::readString\\28unsigned\\20long*\\29\n4591:SkReadBuffer::readRegion\\28SkRegion*\\29\n4592:SkReadBuffer::readRect\\28\\29\n4593:SkReadBuffer::readPoint3\\28SkPoint3*\\29\n4594:SkReadBuffer::readPad32\\28void*\\2c\\20unsigned\\20long\\29\n4595:SkRasterPipeline_<256ul>::SkRasterPipeline_\\28\\29\n4596:SkRasterPipeline::appendSetRGB\\28SkArenaAlloc*\\2c\\20float\\20const*\\29\n4597:SkRasterClipStack::SkRasterClipStack\\28int\\2c\\20int\\29\n4598:SkRTreeFactory::operator\\28\\29\\28\\29\\20const\n4599:SkRTree::search\\28SkRTree::Node*\\2c\\20SkRect\\20const&\\2c\\20std::__2::vector<int\\2c\\20std::__2::allocator<int>>*\\29\\20const\n4600:SkRTree::bulkLoad\\28std::__2::vector<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>>*\\2c\\20int\\29\n4601:SkRTree::allocateNodeAtLevel\\28unsigned\\20short\\29\n4602:SkRSXform::toQuad\\28float\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n4603:SkRRect::isValid\\28\\29\\20const\n4604:SkRRect::computeType\\28\\29\n4605:SkRGBA4f<\\28SkAlphaType\\292>\\20skgpu::Swizzle::applyTo<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\\20const\n4606:SkRBuffer::skipToAlign4\\28\\29\n4607:SkQuads::EvalAt\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\29\n4608:SkQuadraticEdge::setQuadraticWithoutUpdate\\28SkPoint\\20const*\\2c\\20int\\29\n4609:SkPtrSet::reset\\28\\29\n4610:SkPtrSet::copyToArray\\28void**\\29\\20const\n4611:SkPtrSet::add\\28void*\\29\n4612:SkPoint::Normalize\\28SkPoint*\\29\n4613:SkPngEncoder::Make\\28SkWStream*\\2c\\20SkPixmap\\20const&\\2c\\20SkPngEncoder::Options\\20const&\\29\n4614:SkPngEncoder::Encode\\28GrDirectContext*\\2c\\20SkImage\\20const*\\2c\\20SkPngEncoder::Options\\20const&\\29\n4615:SkPngCodec::initializeXforms\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n4616:SkPngCodec::initializeSwizzler\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\2c\\20bool\\29\n4617:SkPngCodec::allocateStorage\\28SkImageInfo\\20const&\\29\n4618:SkPixmapUtils::Orient\\28SkPixmap\\20const&\\2c\\20SkPixmap\\20const&\\2c\\20SkEncodedOrigin\\29\n4619:SkPixmap::erase\\28unsigned\\20int\\2c\\20SkIRect\\20const&\\29\\20const\n4620:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const\n4621:SkPixelRef::getGenerationID\\28\\29\\20const\n4622:SkPixelRef::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\n4623:SkPixelRef::SkPixelRef\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n4624:SkPictureShader::CachedImageInfo::makeImage\\28sk_sp<SkSurface>\\2c\\20SkPicture\\20const*\\29\\20const\n4625:SkPictureShader::CachedImageInfo::Make\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkColorType\\2c\\20SkColorSpace*\\2c\\20int\\2c\\20SkSurfaceProps\\20const&\\29\n4626:SkPictureRecord::endRecording\\28\\29\n4627:SkPictureRecord::beginRecording\\28\\29\n4628:SkPicturePriv::Flatten\\28sk_sp<SkPicture\\20const>\\2c\\20SkWriteBuffer&\\29\n4629:SkPicturePlayback::draw\\28SkCanvas*\\2c\\20SkPicture::AbortCallback*\\2c\\20SkReadBuffer*\\29\n4630:SkPictureData::parseBufferTag\\28SkReadBuffer&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4631:SkPictureData::getPicture\\28SkReadBuffer*\\29\\20const\n4632:SkPictureData::getDrawable\\28SkReadBuffer*\\29\\20const\n4633:SkPictureData::flatten\\28SkWriteBuffer&\\29\\20const\n4634:SkPictureData::flattenToBuffer\\28SkWriteBuffer&\\2c\\20bool\\29\\20const\n4635:SkPictureData::SkPictureData\\28SkPictureRecord\\20const&\\2c\\20SkPictInfo\\20const&\\29\n4636:SkPicture::backport\\28\\29\\20const\n4637:SkPicture::SkPicture\\28\\29\n4638:SkPicture::MakeFromStreamPriv\\28SkStream*\\2c\\20SkDeserialProcs\\20const*\\2c\\20SkTypefacePlayback*\\2c\\20int\\29\n4639:SkPerlinNoiseShader::getPaintingData\\28\\29\\20const\n4640:SkPathWriter::assemble\\28\\29\n4641:SkPathWriter::SkPathWriter\\28SkPath&\\29\n4642:SkPathRef::resetToSize\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4643:SkPathPriv::IsNestedFillRects\\28SkPath\\20const&\\2c\\20SkRect*\\2c\\20SkPathDirection*\\29\n4644:SkPathPriv::CreateDrawArcPath\\28SkPath*\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n4645:SkPathEffectBase::PointData::~PointData\\28\\29\n4646:SkPathEffect::filterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n4647:SkPathBuilder::addOval\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n4648:SkPath::writeToMemoryAsRRect\\28void*\\29\\20const\n4649:SkPath::setLastPt\\28float\\2c\\20float\\29\n4650:SkPath::reverseAddPath\\28SkPath\\20const&\\29\n4651:SkPath::readFromMemory\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4652:SkPath::offset\\28float\\2c\\20float\\2c\\20SkPath*\\29\\20const\n4653:SkPath::isZeroLengthSincePoint\\28int\\29\\20const\n4654:SkPath::isRRect\\28SkRRect*\\29\\20const\n4655:SkPath::isOval\\28SkRect*\\29\\20const\n4656:SkPath::conservativelyContainsRect\\28SkRect\\20const&\\29\\20const\n4657:SkPath::computeConvexity\\28\\29\\20const\n4658:SkPath::addPath\\28SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath::AddPathMode\\29\n4659:SkPath::Polygon\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\2c\\20SkPathFillType\\2c\\20bool\\29\n4660:SkPath2DPathEffect::Make\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29\n4661:SkPath1DPathEffect::Make\\28SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style\\29\n4662:SkParseEncodedOrigin\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkEncodedOrigin*\\29\n4663:SkPaintPriv::ShouldDither\\28SkPaint\\20const&\\2c\\20SkColorType\\29\n4664:SkPaintPriv::Overwrites\\28SkPaint\\20const*\\2c\\20SkPaintPriv::ShaderOverrideOpacity\\29\n4665:SkPaint::setStroke\\28bool\\29\n4666:SkPaint::reset\\28\\29\n4667:SkPaint::refColorFilter\\28\\29\\20const\n4668:SkOpSpanBase::merge\\28SkOpSpan*\\29\n4669:SkOpSpanBase::globalState\\28\\29\\20const\n4670:SkOpSpan::sortableTop\\28SkOpContour*\\29\n4671:SkOpSpan::release\\28SkOpPtT\\20const*\\29\n4672:SkOpSpan::insertCoincidence\\28SkOpSegment\\20const*\\2c\\20bool\\2c\\20bool\\29\n4673:SkOpSpan::init\\28SkOpSegment*\\2c\\20SkOpSpan*\\2c\\20double\\2c\\20SkPoint\\20const&\\29\n4674:SkOpSegment::updateWindingReverse\\28SkOpAngle\\20const*\\29\n4675:SkOpSegment::oppXor\\28\\29\\20const\n4676:SkOpSegment::moveMultiples\\28\\29\n4677:SkOpSegment::isXor\\28\\29\\20const\n4678:SkOpSegment::findNextWinding\\28SkTDArray<SkOpSpanBase*>*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\29\n4679:SkOpSegment::findNextOp\\28SkTDArray<SkOpSpanBase*>*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\2c\\20bool*\\2c\\20SkPathOp\\2c\\20int\\2c\\20int\\29\n4680:SkOpSegment::computeSum\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkOpAngle::IncludeType\\29\n4681:SkOpSegment::collapsed\\28double\\2c\\20double\\29\\20const\n4682:SkOpSegment::addExpanded\\28double\\2c\\20SkOpSpanBase\\20const*\\2c\\20bool*\\29\n4683:SkOpSegment::activeAngle\\28SkOpSpanBase*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\29\n4684:SkOpSegment::UseInnerWinding\\28int\\2c\\20int\\29\n4685:SkOpPtT::ptAlreadySeen\\28SkOpPtT\\20const*\\29\\20const\n4686:SkOpPtT::contains\\28SkOpSegment\\20const*\\2c\\20double\\29\\20const\n4687:SkOpGlobalState::SkOpGlobalState\\28SkOpContourHead*\\2c\\20SkArenaAlloc*\\29\n4688:SkOpEdgeBuilder::preFetch\\28\\29\n4689:SkOpEdgeBuilder::init\\28\\29\n4690:SkOpEdgeBuilder::finish\\28\\29\n4691:SkOpContourBuilder::addConic\\28SkPoint*\\2c\\20float\\29\n4692:SkOpContour::addQuad\\28SkPoint*\\29\n4693:SkOpContour::addCubic\\28SkPoint*\\29\n4694:SkOpContour::addConic\\28SkPoint*\\2c\\20float\\29\n4695:SkOpCoincidence::release\\28SkOpSegment\\20const*\\29\n4696:SkOpCoincidence::mark\\28\\29\n4697:SkOpCoincidence::markCollapsed\\28SkCoincidentSpans*\\2c\\20SkOpPtT*\\29\n4698:SkOpCoincidence::fixUp\\28SkCoincidentSpans*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT\\20const*\\29\n4699:SkOpCoincidence::contains\\28SkCoincidentSpans\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\29\\20const\n4700:SkOpCoincidence::checkOverlap\\28SkCoincidentSpans*\\2c\\20SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20SkTDArray<SkCoincidentSpans*>*\\29\\20const\n4701:SkOpCoincidence::addOrOverlap\\28SkOpSegment*\\2c\\20SkOpSegment*\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool*\\29\n4702:SkOpAngle::tangentsDiverge\\28SkOpAngle\\20const*\\2c\\20double\\29\n4703:SkOpAngle::setSpans\\28\\29\n4704:SkOpAngle::setSector\\28\\29\n4705:SkOpAngle::previous\\28\\29\\20const\n4706:SkOpAngle::midToSide\\28SkOpAngle\\20const*\\2c\\20bool*\\29\\20const\n4707:SkOpAngle::loopCount\\28\\29\\20const\n4708:SkOpAngle::loopContains\\28SkOpAngle\\20const*\\29\\20const\n4709:SkOpAngle::lastMarked\\28\\29\\20const\n4710:SkOpAngle::endToSide\\28SkOpAngle\\20const*\\2c\\20bool*\\29\\20const\n4711:SkOpAngle::alignmentSameSide\\28SkOpAngle\\20const*\\2c\\20int*\\29\\20const\n4712:SkOpAngle::after\\28SkOpAngle*\\29\n4713:SkOffsetSimplePolygon\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20SkTDArray<SkPoint>*\\2c\\20SkTDArray<int>*\\29\n4714:SkNoDrawCanvas::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n4715:SkNoDrawCanvas::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n4716:SkMipmapBuilder::countLevels\\28\\29\\20const\n4717:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29.1\n4718:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29\n4719:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\\28\\29\\20const\n4720:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::peek\\28\\29\\20const\n4721:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\\28GrDirectContext*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n4722:SkMatrix::setRotate\\28float\\2c\\20float\\2c\\20float\\29\n4723:SkMatrix::mapRectScaleTranslate\\28SkRect*\\2c\\20SkRect\\20const&\\29\\20const\n4724:SkMatrix::isFinite\\28\\29\\20const\n4725:SkMatrix::Translate\\28float\\2c\\20float\\29\n4726:SkMatrix::Translate\\28SkIPoint\\29\n4727:SkMatrix::RotTrans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n4728:SkMaskSwizzler::swizzle\\28void*\\2c\\20unsigned\\20char\\20const*\\29\n4729:SkMaskFilterBase::NinePatch::~NinePatch\\28\\29\n4730:SkMask::computeTotalImageSize\\28\\29\\20const\n4731:SkMakeResourceCacheSharedIDForBitmap\\28unsigned\\20int\\29\n4732:SkMD5::finish\\28\\29\n4733:SkMD5::SkMD5\\28\\29\n4734:SkMD5::Digest::toHexString\\28\\29\\20const\n4735:SkM44::preTranslate\\28float\\2c\\20float\\2c\\20float\\29\n4736:SkM44::postTranslate\\28float\\2c\\20float\\2c\\20float\\29\n4737:SkLocalMatrixShader::type\\28\\29\\20const\n4738:SkLinearColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n4739:SkLineParameters::cubicEndPoints\\28SkDCubic\\20const&\\29\n4740:SkLatticeIter::SkLatticeIter\\28SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\29\n4741:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::~SkLRUCache\\28\\29\n4742:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::reset\\28\\29\n4743:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::insert\\28GrProgramDesc\\20const&\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\29\n4744:SkJpegDecoder::IsJpeg\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4745:SkJpegCodec::readRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkCodec::Options\\20const&\\29\n4746:SkJpegCodec::initializeSwizzler\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\2c\\20bool\\29\n4747:SkIsSimplePolygon\\28SkPoint\\20const*\\2c\\20int\\29\n4748:SkIsConvexPolygon\\28SkPoint\\20const*\\2c\\20int\\29\n4749:SkInvert4x4Matrix\\28float\\20const*\\2c\\20float*\\29\n4750:SkInvert3x3Matrix\\28float\\20const*\\2c\\20float*\\29\n4751:SkInvert2x2Matrix\\28float\\20const*\\2c\\20float*\\29\n4752:SkIntersections::vertical\\28SkDQuad\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4753:SkIntersections::vertical\\28SkDLine\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4754:SkIntersections::vertical\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4755:SkIntersections::vertical\\28SkDConic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4756:SkIntersections::mostOutside\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\\20const\n4757:SkIntersections::intersect\\28SkDQuad\\20const&\\2c\\20SkDLine\\20const&\\29\n4758:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDQuad\\20const&\\29\n4759:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDLine\\20const&\\29\n4760:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDConic\\20const&\\29\n4761:SkIntersections::intersect\\28SkDConic\\20const&\\2c\\20SkDQuad\\20const&\\29\n4762:SkIntersections::intersect\\28SkDConic\\20const&\\2c\\20SkDLine\\20const&\\29\n4763:SkIntersections::insertCoincident\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\n4764:SkIntersections::horizontal\\28SkDQuad\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4765:SkIntersections::horizontal\\28SkDLine\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4766:SkIntersections::horizontal\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4767:SkIntersections::horizontal\\28SkDConic\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n4768:SkImages::RasterFromPixmap\\28SkPixmap\\20const&\\2c\\20void\\20\\28*\\29\\28void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n4769:SkImages::RasterFromData\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\29\n4770:SkImages::DeferredFromGenerator\\28std::__2::unique_ptr<SkImageGenerator\\2c\\20std::__2::default_delete<SkImageGenerator>>\\29\n4771:SkImage_Lazy::~SkImage_Lazy\\28\\29.1\n4772:SkImage_GaneshBase::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n4773:SkImage_Base::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n4774:SkImage_Base::onAsLegacyBitmap\\28GrDirectContext*\\2c\\20SkBitmap*\\29\\20const\n4775:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_1::operator\\28\\29\\28\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n4776:SkImageInfo::validRowBytes\\28unsigned\\20long\\29\\20const\n4777:SkImageInfo::MakeN32Premul\\28int\\2c\\20int\\29\n4778:SkImageGenerator::~SkImageGenerator\\28\\29.1\n4779:SkImageFilters::ColorFilter\\28sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n4780:SkImageFilter_Base::getCTMCapability\\28\\29\\20const\n4781:SkImageFilter_Base::filterImage\\28skif::Context\\20const&\\29\\20const\n4782:SkImageFilterCache::Get\\28\\29\n4783:SkImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n4784:SkImage::withMipmaps\\28sk_sp<SkMipmap>\\29\\20const\n4785:SkImage::peekPixels\\28SkPixmap*\\29\\20const\n4786:SkImage::height\\28\\29\\20const\n4787:SkIcoDecoder::IsIco\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4788:SkIcoCodec::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\29\n4789:SkGradientBaseShader::~SkGradientBaseShader\\28\\29\n4790:SkGradientBaseShader::AppendGradientFillStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const*\\2c\\20float\\20const*\\2c\\20int\\29\n4791:SkGlyphRunListPainterCPU::SkGlyphRunListPainterCPU\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\2c\\20SkColorSpace*\\29\n4792:SkGlyph::setImage\\28SkArenaAlloc*\\2c\\20SkScalerContext*\\29\n4793:SkGlyph::setDrawable\\28SkArenaAlloc*\\2c\\20SkScalerContext*\\29\n4794:SkGlyph::pathIsHairline\\28\\29\\20const\n4795:SkGlyph::mask\\28SkPoint\\29\\20const\n4796:SkGlyph::SkGlyph\\28SkGlyph&&\\29\n4797:SkGifDecoder::MakeFromStream\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::SelectionPolicy\\2c\\20SkCodec::Result*\\29\n4798:SkGifDecoder::IsGif\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4799:SkGenerateDistanceFieldFromA8Image\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\29\n4800:SkGaussFilter::SkGaussFilter\\28double\\29\n4801:SkFrameHolder::setAlphaAndRequiredFrame\\28SkFrame*\\29\n4802:SkFrame::fillIn\\28SkCodec::FrameInfo*\\2c\\20bool\\29\\20const\n4803:SkFontStyleSet_Custom::appendTypeface\\28sk_sp<SkTypeface>\\29\n4804:SkFontStyleSet_Custom::SkFontStyleSet_Custom\\28SkString\\29\n4805:SkFontScanner_FreeType::scanInstance\\28SkStreamAsset*\\2c\\20int\\2c\\20int\\2c\\20SkString*\\2c\\20SkFontStyle*\\2c\\20bool*\\2c\\20skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>*\\29\\20const\n4806:SkFontScanner_FreeType::SkFontScanner_FreeType\\28\\29\n4807:SkFontPriv::GetFontBounds\\28SkFont\\20const&\\29\n4808:SkFontMgr::makeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n4809:SkFontMgr::makeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\\20const\n4810:SkFontMgr::legacyMakeTypeface\\28char\\20const*\\2c\\20SkFontStyle\\29\\20const\n4811:SkFontDescriptor::SkFontDescriptor\\28\\29\n4812:SkFont::setupForAsPaths\\28SkPaint*\\29\n4813:SkFont::setSkewX\\28float\\29\n4814:SkFont::setLinearMetrics\\28bool\\29\n4815:SkFont::setEmbolden\\28bool\\29\n4816:SkFont::operator==\\28SkFont\\20const&\\29\\20const\n4817:SkFont::getPaths\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\\2c\\20void*\\29\\20const\n4818:SkFlattenable::RegisterFlattenablesIfNeeded\\28\\29\n4819:SkFlattenable::PrivateInitializer::InitEffects\\28\\29\n4820:SkFlattenable::NameToFactory\\28char\\20const*\\29\n4821:SkFlattenable::FactoryToName\\28sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\29\n4822:SkFindQuadExtrema\\28float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n4823:SkFindCubicExtrema\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n4824:SkFactorySet::~SkFactorySet\\28\\29\n4825:SkExifMetadata::parseIfd\\28unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n4826:SkEncoder::encodeRows\\28int\\29\n4827:SkEdgeClipper::clipQuad\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\29\n4828:SkEdgeClipper::ClipPath\\28SkPath\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20void\\20\\28*\\29\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\\2c\\20void*\\29\n4829:SkEdgeBuilder::buildEdges\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\29\n4830:SkDynamicMemoryWStream::bytesWritten\\28\\29\\20const\n4831:SkDrawableList::newDrawableSnapshot\\28\\29\n4832:SkDrawTreatAAStrokeAsHairline\\28float\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n4833:SkDrawShadowMetrics::GetSpotShadowTransform\\28SkPoint3\\20const&\\2c\\20float\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20SkMatrix*\\2c\\20float*\\29\n4834:SkDrawShadowMetrics::GetLocalBounds\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect*\\29\n4835:SkDrawBase::drawPaint\\28SkPaint\\20const&\\29\\20const\n4836:SkDrawBase::DrawToMask\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMaskFilter\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkMaskBuilder*\\2c\\20SkMaskBuilder::CreateMode\\2c\\20SkStrokeRec::InitStyle\\29\n4837:SkDraw::drawSprite\\28SkBitmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\\20const\n4838:SkDiscretePathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n4839:SkDiscretePathEffect::Make\\28float\\2c\\20float\\2c\\20unsigned\\20int\\29\n4840:SkDevice::getRelativeTransform\\28SkDevice\\20const&\\29\\20const\n4841:SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n4842:SkDevice::drawDrawable\\28SkCanvas*\\2c\\20SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n4843:SkDevice::drawDevice\\28SkDevice*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n4844:SkDevice::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n4845:SkDescriptor::addEntry\\28unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20void\\20const*\\29\n4846:SkDeque::Iter::next\\28\\29\n4847:SkDeque::Iter::Iter\\28SkDeque\\20const&\\2c\\20SkDeque::Iter::IterStart\\29\n4848:SkData::MakeSubset\\28SkData\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n4849:SkDashPath::InternalFilter\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20SkDashPath::StrokeRecApplication\\29\n4850:SkDashPath::CalcDashParameters\\28float\\2c\\20float\\20const*\\2c\\20int\\2c\\20float*\\2c\\20int*\\2c\\20float*\\2c\\20float*\\29\n4851:SkDRect::setBounds\\28SkDQuad\\20const&\\2c\\20SkDQuad\\20const&\\2c\\20double\\2c\\20double\\29\n4852:SkDRect::setBounds\\28SkDCubic\\20const&\\2c\\20SkDCubic\\20const&\\2c\\20double\\2c\\20double\\29\n4853:SkDRect::setBounds\\28SkDConic\\20const&\\2c\\20SkDConic\\20const&\\2c\\20double\\2c\\20double\\29\n4854:SkDQuad::subDivide\\28double\\2c\\20double\\29\\20const\n4855:SkDQuad::monotonicInY\\28\\29\\20const\n4856:SkDQuad::isLinear\\28int\\2c\\20int\\29\\20const\n4857:SkDQuad::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n4858:SkDPoint::approximatelyDEqual\\28SkDPoint\\20const&\\29\\20const\n4859:SkDCurveSweep::setCurveHullSweep\\28SkPath::Verb\\29\n4860:SkDCurve::nearPoint\\28SkPath::Verb\\2c\\20SkDPoint\\20const&\\2c\\20SkDPoint\\20const&\\29\\20const\n4861:SkDCubic::monotonicInX\\28\\29\\20const\n4862:SkDCubic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n4863:SkDCubic::hullIntersects\\28SkDPoint\\20const*\\2c\\20int\\2c\\20bool*\\29\\20const\n4864:SkDConic::subDivide\\28double\\2c\\20double\\29\\20const\n4865:SkCubics::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n4866:SkCubicEdge::setCubicWithoutUpdate\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\29\n4867:SkCubicClipper::ChopMonoAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20float*\\29\n4868:SkCreateRasterPipelineBlitter\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\29\n4869:SkCreateRasterPipelineBlitter\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n4870:SkContourMeasureIter::~SkContourMeasureIter\\28\\29\n4871:SkContourMeasureIter::SkContourMeasureIter\\28SkPath\\20const&\\2c\\20bool\\2c\\20float\\29\n4872:SkContourMeasure::length\\28\\29\\20const\n4873:SkContourMeasure::getSegment\\28float\\2c\\20float\\2c\\20SkPath*\\2c\\20bool\\29\\20const\n4874:SkConic::BuildUnitArc\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRotationDirection\\2c\\20SkMatrix\\20const*\\2c\\20SkConic*\\29\n4875:SkComputeRadialSteps\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float*\\2c\\20float*\\2c\\20int*\\29\n4876:SkCompressedDataSize\\28SkTextureCompressionType\\2c\\20SkISize\\2c\\20skia_private::TArray<unsigned\\20long\\2c\\20true>*\\2c\\20bool\\29\n4877:SkColorTypeValidateAlphaType\\28SkColorType\\2c\\20SkAlphaType\\2c\\20SkAlphaType*\\29\n4878:SkColorSpaceSingletonFactory::Make\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n4879:SkColorSpace::toProfile\\28skcms_ICCProfile*\\29\\20const\n4880:SkColorSpace::makeLinearGamma\\28\\29\\20const\n4881:SkColorSpace::isSRGB\\28\\29\\20const\n4882:SkColorMatrix_RGB2YUV\\28SkYUVColorSpace\\2c\\20float*\\29\n4883:SkColorFilterShader::SkColorFilterShader\\28sk_sp<SkShader>\\2c\\20float\\2c\\20sk_sp<SkColorFilter>\\29\n4884:SkColor4fXformer::SkColor4fXformer\\28SkGradientBaseShader\\20const*\\2c\\20SkColorSpace*\\2c\\20bool\\29\n4885:SkCoincidentSpans::extend\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\29\n4886:SkCodecs::get_decoders_for_editing\\28\\29\n4887:SkCodec::outputScanline\\28int\\29\\20const\n4888:SkCodec::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n4889:SkCodec::initializeColorXform\\28SkImageInfo\\20const&\\2c\\20SkEncodedInfo::Alpha\\2c\\20bool\\29\n4890:SkChopQuadAtMaxCurvature\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n4891:SkChopQuadAtHalf\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n4892:SkChopMonoCubicAtX\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\29\n4893:SkChopCubicAtInflections\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n4894:SkCharToGlyphCache::findGlyphIndex\\28int\\29\\20const\n4895:SkCanvasPriv::WriteLattice\\28void*\\2c\\20SkCanvas::Lattice\\20const&\\29\n4896:SkCanvasPriv::ReadLattice\\28SkReadBuffer&\\2c\\20SkCanvas::Lattice*\\29\n4897:SkCanvasPriv::ImageToColorFilter\\28SkPaint*\\29\n4898:SkCanvasPriv::GetDstClipAndMatrixCounts\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20int*\\2c\\20int*\\29\n4899:SkCanvas::~SkCanvas\\28\\29\n4900:SkCanvas::skew\\28float\\2c\\20float\\29\n4901:SkCanvas::only_axis_aligned_saveBehind\\28SkRect\\20const*\\29\n4902:SkCanvas::internalDrawDeviceWithFilter\\28SkDevice*\\2c\\20SkDevice*\\2c\\20SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::DeviceCompatibleWithFilter\\2c\\20float\\2c\\20bool\\29\n4903:SkCanvas::getDeviceClipBounds\\28\\29\\20const\n4904:SkCanvas::experimental_DrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n4905:SkCanvas::drawVertices\\28sk_sp<SkVertices>\\20const&\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n4906:SkCanvas::drawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n4907:SkCanvas::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n4908:SkCanvas::drawLine\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n4909:SkCanvas::drawImageNine\\28SkImage\\20const*\\2c\\20SkIRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n4910:SkCanvas::drawClippedToSaveBehind\\28SkPaint\\20const&\\29\n4911:SkCanvas::drawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n4912:SkCanvas::didTranslate\\28float\\2c\\20float\\29\n4913:SkCanvas::clipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n4914:SkCanvas::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n4915:SkCanvas::SkCanvas\\28sk_sp<SkDevice>\\29\n4916:SkCanvas::ImageSetEntry::ImageSetEntry\\28\\29\n4917:SkCachedData::SkCachedData\\28void*\\2c\\20unsigned\\20long\\29\n4918:SkCachedData::SkCachedData\\28unsigned\\20long\\2c\\20SkDiscardableMemory*\\29\n4919:SkCTMShader::isOpaque\\28\\29\\20const\n4920:SkBulkGlyphMetricsAndPaths::glyphs\\28SkSpan<unsigned\\20short\\20const>\\29\n4921:SkBmpStandardCodec::decodeIcoMask\\28SkStream*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\29\n4922:SkBmpMaskCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n4923:SkBmpDecoder::IsBmp\\28void\\20const*\\2c\\20unsigned\\20long\\29\n4924:SkBmpCodec::SkBmpCodec\\28SkEncodedInfo&&\\2c\\20std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20unsigned\\20short\\2c\\20SkCodec::SkScanlineOrder\\29\n4925:SkBmpBaseCodec::SkBmpBaseCodec\\28SkEncodedInfo&&\\2c\\20std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20unsigned\\20short\\2c\\20SkCodec::SkScanlineOrder\\29\n4926:SkBlurMask::ConvertRadiusToSigma\\28float\\29\n4927:SkBlurMask::ComputeBlurredScanline\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\29\n4928:SkBlurMask::BlurRect\\28float\\2c\\20SkMaskBuilder*\\2c\\20SkRect\\20const&\\2c\\20SkBlurStyle\\2c\\20SkIPoint*\\2c\\20SkMaskBuilder::CreateMode\\29\n4929:SkBlockMemoryStream::getPosition\\28\\29\\20const\n4930:SkBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n4931:SkBlitter::Choose\\28SkPixmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n4932:SkBlitter::ChooseSprite\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\29\n4933:SkBlendShader::~SkBlendShader\\28\\29.1\n4934:SkBlendShader::~SkBlendShader\\28\\29\n4935:SkBitmapImageGetPixelRef\\28SkImage\\20const*\\29\n4936:SkBitmapDevice::SkBitmapDevice\\28SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20void*\\29\n4937:SkBitmapDevice::Create\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkRasterHandleAllocator*\\29\n4938:SkBitmapCache::Rec::install\\28SkBitmap*\\29\n4939:SkBitmapCache::Rec::diagnostic_only_getDiscardable\\28\\29\\20const\n4940:SkBitmapCache::Find\\28SkBitmapCacheDesc\\20const&\\2c\\20SkBitmap*\\29\n4941:SkBitmapCache::Alloc\\28SkBitmapCacheDesc\\20const&\\2c\\20SkImageInfo\\20const&\\2c\\20SkPixmap*\\29\n4942:SkBitmapCache::Add\\28std::__2::unique_ptr<SkBitmapCache::Rec\\2c\\20SkBitmapCache::RecDeleter>\\2c\\20SkBitmap*\\29\n4943:SkBitmap::setPixelRef\\28sk_sp<SkPixelRef>\\2c\\20int\\2c\\20int\\29\n4944:SkBitmap::setAlphaType\\28SkAlphaType\\29\n4945:SkBitmap::reset\\28\\29\n4946:SkBitmap::makeShader\\28SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n4947:SkBitmap::getAddr\\28int\\2c\\20int\\29\\20const\n4948:SkBitmap::allocPixels\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28\\29\\20const\n4949:SkBitmap::HeapAllocator::allocPixelRef\\28SkBitmap*\\29\n4950:SkBinaryWriteBuffer::writeFlattenable\\28SkFlattenable\\20const*\\29\n4951:SkBinaryWriteBuffer::writeColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n4952:SkBigPicture::SkBigPicture\\28SkRect\\20const&\\2c\\20sk_sp<SkRecord>\\2c\\20std::__2::unique_ptr<SkBigPicture::SnapshotArray\\2c\\20std::__2::default_delete<SkBigPicture::SnapshotArray>>\\2c\\20sk_sp<SkBBoxHierarchy>\\2c\\20unsigned\\20long\\29\n4953:SkBezierQuad::IntersectWithHorizontalLine\\28SkSpan<SkPoint\\20const>\\2c\\20float\\2c\\20float*\\29\n4954:SkBezierCubic::IntersectWithHorizontalLine\\28SkSpan<SkPoint\\20const>\\2c\\20float\\2c\\20float*\\29\n4955:SkBasicEdgeBuilder::~SkBasicEdgeBuilder\\28\\29\n4956:SkBaseShadowTessellator::finishPathPolygon\\28\\29\n4957:SkBaseShadowTessellator::computeConvexShadow\\28float\\2c\\20float\\2c\\20bool\\29\n4958:SkBaseShadowTessellator::computeConcaveShadow\\28float\\2c\\20float\\29\n4959:SkBaseShadowTessellator::clipUmbraPoint\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint*\\29\n4960:SkBaseShadowTessellator::addInnerPoint\\28SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20SkTDArray<SkPoint>\\20const&\\2c\\20int*\\29\n4961:SkBaseShadowTessellator::addEdge\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20SkTDArray<SkPoint>\\20const&\\2c\\20bool\\2c\\20bool\\29\n4962:SkBaseShadowTessellator::addArc\\28SkPoint\\20const&\\2c\\20float\\2c\\20bool\\29\n4963:SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint\\28\\29\n4964:SkAutoCanvasMatrixPaint::SkAutoCanvasMatrixPaint\\28SkCanvas*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\2c\\20SkRect\\20const&\\29\n4965:SkAndroidCodecAdapter::~SkAndroidCodecAdapter\\28\\29\n4966:SkAndroidCodecAdapter::SkAndroidCodecAdapter\\28SkCodec*\\29\n4967:SkAndroidCodec::~SkAndroidCodec\\28\\29\n4968:SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29\n4969:SkAndroidCodec::SkAndroidCodec\\28SkCodec*\\29\n4970:SkAnalyticEdge::update\\28int\\2c\\20bool\\29\n4971:SkAnalyticEdge::updateLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4972:SkAnalyticEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n4973:SkAAClip::operator=\\28SkAAClip\\20const&\\29\n4974:SkAAClip::op\\28SkIRect\\20const&\\2c\\20SkClipOp\\29\n4975:SkAAClip::Builder::flushRow\\28bool\\29\n4976:SkAAClip::Builder::finish\\28SkAAClip*\\29\n4977:SkAAClip::Builder::Blitter::~Blitter\\28\\29\n4978:SkAAClip::Builder::Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n4979:Sk2DPathEffect::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n4980:SimpleImageInfo*\\20emscripten::internal::raw_constructor<SimpleImageInfo>\\28\\29\n4981:SimpleFontStyle*\\20emscripten::internal::MemberAccess<SimpleStrutStyle\\2c\\20SimpleFontStyle>::getWire<SimpleStrutStyle>\\28SimpleFontStyle\\20SimpleStrutStyle::*\\20const&\\2c\\20SimpleStrutStyle\\20const&\\29\n4982:SharedGenerator::isTextureGenerator\\28\\29\n4983:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\\28\\29.1\n4984:RgnOper::addSpan\\28int\\2c\\20int\\20const*\\2c\\20int\\20const*\\29\n4985:PorterDuffXferProcessor::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n4986:PathSegment::init\\28\\29\n4987:PathAddVerbsPointsWeights\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n4988:ParseSingleImage\n4989:ParseHeadersInternal\n4990:PS_Conv_ASCIIHexDecode\n4991:Op\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\2c\\20SkPath*\\29\n4992:OpAsWinding::markReverse\\28Contour*\\2c\\20Contour*\\29\n4993:OpAsWinding::getDirection\\28Contour&\\29\n4994:OpAsWinding::checkContainerChildren\\28Contour*\\2c\\20Contour*\\29\n4995:OffsetEdge::computeCrossingDistance\\28OffsetEdge\\20const*\\29\n4996:OT::sbix::accelerator_t::get_png_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20bool\\29\\20const\n4997:OT::sbix::accelerator_t::choose_strike\\28hb_font_t*\\29\\20const\n4998:OT::hmtxvmtx<OT::vmtx\\2c\\20OT::vhea\\2c\\20OT::VVAR>::accelerator_t::accelerator_t\\28hb_face_t*\\29\n4999:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::get_advance_with_var_unscaled\\28unsigned\\20int\\2c\\20hb_font_t*\\2c\\20float*\\29\\20const\n5000:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::accelerator_t\\28hb_face_t*\\29\n5001:OT::hb_ot_layout_lookup_accelerator_t*\\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GPOS_impl::PosLookup>\\28OT::Layout::GPOS_impl::PosLookup\\20const&\\29\n5002:OT::hb_kern_machine_t<hb_ot_shape_fallback_kern_driver_t>::kern\\28hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n5003:OT::hb_accelerate_subtables_context_t::return_t\\20OT::Context::dispatch<OT::hb_accelerate_subtables_context_t>\\28OT::hb_accelerate_subtables_context_t*\\29\\20const\n5004:OT::hb_accelerate_subtables_context_t::return_t\\20OT::ChainContext::dispatch<OT::hb_accelerate_subtables_context_t>\\28OT::hb_accelerate_subtables_context_t*\\29\\20const\n5005:OT::glyf_accelerator_t::get_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\29\\20const\n5006:OT::glyf_accelerator_t::get_advance_with_var_unscaled\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n5007:OT::cmap::accelerator_t::get_variation_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_cache_t<21u\\2c\\2016u\\2c\\208u\\2c\\20true>*\\29\\20const\n5008:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::accelerator_templ_t\\28hb_face_t*\\29\n5009:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::_fini\\28\\29\n5010:OT::cff1::lookup_expert_subset_charset_for_sid\\28unsigned\\20int\\29\n5011:OT::cff1::lookup_expert_charset_for_sid\\28unsigned\\20int\\29\n5012:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\\28\\29\n5013:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::_fini\\28\\29\n5014:OT::TupleVariationData::unpack_points\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*&\\2c\\20hb_vector_t<unsigned\\20int\\2c\\20false>&\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\29\n5015:OT::SBIXStrike::get_glyph_blob\\28unsigned\\20int\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n5016:OT::RuleSet<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5017:OT::RuleSet<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ContextApplyLookupContext\\20const&\\29\\20const\n5018:OT::RecordListOf<OT::Script>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5019:OT::RecordListOf<OT::Feature>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5020:OT::PaintTranslate::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5021:OT::PaintSolid::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5022:OT::PaintSkewAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5023:OT::PaintSkew::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5024:OT::PaintScaleUniformAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5025:OT::PaintScaleUniform::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5026:OT::PaintScaleAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5027:OT::PaintScale::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5028:OT::PaintRotateAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5029:OT::PaintLinearGradient<OT::Variable>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5030:OT::PaintLinearGradient<OT::NoVariable>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5031:OT::Lookup::serialize\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5032:OT::Layout::propagate_attachment_offsets\\28hb_glyph_position_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20unsigned\\20int\\29\n5033:OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5034:OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\29\\20const\n5035:OT::Layout::GPOS_impl::reverse_cursive_minor_offset\\28hb_glyph_position_t*\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20unsigned\\20int\\29\n5036:OT::Layout::GPOS_impl::MarkRecord::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5037:OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5038:OT::Layout::GPOS_impl::AnchorMatrix::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5039:OT::IndexSubtableRecord::get_image_data\\28unsigned\\20int\\2c\\20void\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n5040:OT::FeatureVariationRecord::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5041:OT::FeatureParams::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5042:OT::ContextFormat3::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5043:OT::ContextFormat2_5<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5044:OT::ContextFormat2_5<OT::Layout::SmallTypes>::_apply\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\\20const\n5045:OT::ContextFormat1_4<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5046:OT::ColorStop::get_color_stop\\28OT::hb_paint_context_t*\\2c\\20hb_color_stop_t*\\2c\\20unsigned\\20int\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n5047:OT::ColorLine<OT::NoVariable>::static_get_extend\\28hb_color_line_t*\\2c\\20void*\\2c\\20void*\\29\n5048:OT::ChainRuleSet<OT::Layout::SmallTypes>::would_apply\\28OT::hb_would_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n5049:OT::ChainRuleSet<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5050:OT::ChainRuleSet<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n5051:OT::ChainContextFormat3::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5052:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5053:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::_apply\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\\20const\n5054:OT::ChainContextFormat1_4<OT::Layout::SmallTypes>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5055:OT::CBDT::accelerator_t::get_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20bool\\29\\20const\n5056:OT::Affine2x3::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5057:MakeOnScreenGLSurface\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\n5058:Load_SBit_Png\n5059:LineCubicIntersections::intersectRay\\28double*\\29\n5060:LineCubicIntersections::VerticalIntersect\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double*\\29\n5061:LineCubicIntersections::HorizontalIntersect\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double*\\29\n5062:Launch\n5063:JpegDecoderMgr::returnFalse\\28char\\20const*\\29\n5064:JpegDecoderMgr::getEncodedColor\\28SkEncodedInfo::Color*\\29\n5065:JSObjectFromLineMetrics\\28skia::textlayout::LineMetrics&\\29\n5066:JSObjectFromGlyphInfo\\28skia::textlayout::Paragraph::GlyphInfo&\\29\n5067:Ins_DELTAP\n5068:HandleCoincidence\\28SkOpContourHead*\\2c\\20SkOpCoincidence*\\29\n5069:GrWritePixelsTask::~GrWritePixelsTask\\28\\29\n5070:GrWaitRenderTask::~GrWaitRenderTask\\28\\29\n5071:GrVertexBufferAllocPool::makeSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n5072:GrVertexBufferAllocPool::makeSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n5073:GrTriangulator::polysToTriangles\\28GrTriangulator::Poly*\\2c\\20SkPathFillType\\2c\\20skgpu::VertexWriter\\29\\20const\n5074:GrTriangulator::polysToTriangles\\28GrTriangulator::Poly*\\2c\\20GrEagerVertexAllocator*\\29\\20const\n5075:GrTriangulator::mergeEdgesBelow\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5076:GrTriangulator::mergeEdgesAbove\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5077:GrTriangulator::makeSortedVertex\\28SkPoint\\20const&\\2c\\20unsigned\\20char\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5078:GrTriangulator::makeEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeType\\2c\\20GrTriangulator::Comparator\\20const&\\29\n5079:GrTriangulator::computeBisector\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\29\\20const\n5080:GrTriangulator::appendQuadraticToContour\\28SkPoint\\20const*\\2c\\20float\\2c\\20GrTriangulator::VertexList*\\29\\20const\n5081:GrTriangulator::SortMesh\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n5082:GrTriangulator::FindEnclosingEdges\\28GrTriangulator::Vertex\\20const&\\2c\\20GrTriangulator::EdgeList\\20const&\\2c\\20GrTriangulator::Edge**\\2c\\20GrTriangulator::Edge**\\29\n5083:GrTriangulator::Edge::intersect\\28GrTriangulator::Edge\\20const&\\2c\\20SkPoint*\\2c\\20unsigned\\20char*\\29\\20const\n5084:GrTransferFromRenderTask::~GrTransferFromRenderTask\\28\\29\n5085:GrThreadSafeCache::~GrThreadSafeCache\\28\\29\n5086:GrThreadSafeCache::findVertsWithData\\28skgpu::UniqueKey\\20const&\\29\n5087:GrThreadSafeCache::addVertsWithData\\28skgpu::UniqueKey\\20const&\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\2c\\20bool\\20\\28*\\29\\28SkData*\\2c\\20SkData*\\29\\29\n5088:GrThreadSafeCache::Entry::set\\28skgpu::UniqueKey\\20const&\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\29\n5089:GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29\n5090:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\\28\\29\n5091:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\\28sk_sp<GrSurface>\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\29\n5092:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\\28GrCaps\\20const&\\2c\\20std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrMipmapStatus\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5093:GrTextureProxyPriv::setDeferredUploader\\28std::__2::unique_ptr<GrDeferredProxyUploader\\2c\\20std::__2::default_delete<GrDeferredProxyUploader>>\\29\n5094:GrTextureProxy::setUniqueKey\\28GrProxyProvider*\\2c\\20skgpu::UniqueKey\\20const&\\29\n5095:GrTextureProxy::clearUniqueKey\\28\\29\n5096:GrTextureProxy::ProxiesAreCompatibleAsDynamicState\\28GrSurfaceProxy\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29\n5097:GrTextureProxy::GrTextureProxy\\28sk_sp<GrSurface>\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\29.1\n5098:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::$_1::operator\\28\\29\\28int\\2c\\20GrSamplerState::WrapMode\\2c\\20GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::Span\\2c\\20GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::Span\\2c\\20float\\29\\20const\n5099:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::$_2::operator\\28\\29\\28GrTextureEffect::ShaderMode\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n5100:GrTexture::markMipmapsDirty\\28\\29\n5101:GrTexture::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n5102:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::~GrTDeferredProxyUploader\\28\\29\n5103:GrSurfaceProxyPriv::exactify\\28\\29\n5104:GrSurfaceProxy::GrSurfaceProxy\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5105:GrStyledShape::~GrStyledShape\\28\\29\n5106:GrStyledShape::setInheritedKey\\28GrStyledShape\\20const&\\2c\\20GrStyle::Apply\\2c\\20float\\29\n5107:GrStyledShape::asRRect\\28SkRRect*\\2c\\20SkPathDirection*\\2c\\20unsigned\\20int*\\2c\\20bool*\\29\\20const\n5108:GrStyledShape::GrStyledShape\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n5109:GrStyle::~GrStyle\\28\\29\n5110:GrStyle::applyToPath\\28SkPath*\\2c\\20SkStrokeRec::InitStyle*\\2c\\20SkPath\\20const&\\2c\\20float\\29\\20const\n5111:GrStyle::applyPathEffect\\28SkPath*\\2c\\20SkStrokeRec*\\2c\\20SkPath\\20const&\\29\\20const\n5112:GrStencilSettings::SetClipBitSettings\\28bool\\29\n5113:GrStagingBufferManager::detachBuffers\\28\\29\n5114:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::defineStruct\\28char\\20const*\\29\n5115:GrShape::simplify\\28unsigned\\20int\\29\n5116:GrShape::segmentMask\\28\\29\\20const\n5117:GrShape::conservativeContains\\28SkRect\\20const&\\29\\20const\n5118:GrShape::closed\\28\\29\\20const\n5119:GrSWMaskHelper::toTextureView\\28GrRecordingContext*\\2c\\20SkBackingFit\\29\n5120:GrSWMaskHelper::drawShape\\28GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAA\\2c\\20unsigned\\20char\\29\n5121:GrSWMaskHelper::drawShape\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAA\\2c\\20unsigned\\20char\\29\n5122:GrResourceProvider::writePixels\\28sk_sp<GrTexture>\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrMipLevel\\20const*\\2c\\20int\\29\\20const\n5123:GrResourceProvider::wrapBackendSemaphore\\28GrBackendSemaphore\\20const&\\2c\\20GrSemaphoreWrapType\\2c\\20GrWrapOwnership\\29\n5124:GrResourceProvider::prepareLevels\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20skia_private::AutoSTArray<14\\2c\\20GrMipLevel>*\\2c\\20skia_private::AutoSTArray<14\\2c\\20std::__2::unique_ptr<char\\20\\5b\\5d\\2c\\20std::__2::default_delete<char\\20\\5b\\5d>>>*\\29\\20const\n5125:GrResourceProvider::getExactScratch\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5126:GrResourceProvider::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5127:GrResourceProvider::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20GrColorType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMipLevel\\20const*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5128:GrResourceProvider::createApproxTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5129:GrResourceCache::~GrResourceCache\\28\\29\n5130:GrResourceCache::removeResource\\28GrGpuResource*\\29\n5131:GrResourceCache::processFreedGpuResources\\28\\29\n5132:GrResourceCache::insertResource\\28GrGpuResource*\\29\n5133:GrResourceCache::didChangeBudgetStatus\\28GrGpuResource*\\29\n5134:GrResourceAllocator::~GrResourceAllocator\\28\\29\n5135:GrResourceAllocator::planAssignment\\28\\29\n5136:GrResourceAllocator::expire\\28unsigned\\20int\\29\n5137:GrRenderTask::makeSkippable\\28\\29\n5138:GrRenderTask::isInstantiated\\28\\29\\20const\n5139:GrRenderTarget::GrRenderTarget\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20sk_sp<GrAttachment>\\29\n5140:GrRecordingContextPriv::createDevice\\28skgpu::Budgeted\\2c\\20SkImageInfo\\20const&\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\2c\\20skgpu::ganesh::Device::InitContents\\29\n5141:GrRecordingContext::init\\28\\29\n5142:GrRRectEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRRect\\20const&\\2c\\20GrShaderCaps\\20const&\\29\n5143:GrQuadUtils::TessellationHelper::reset\\28GrQuad\\20const&\\2c\\20GrQuad\\20const*\\29\n5144:GrQuadUtils::TessellationHelper::outset\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuad*\\2c\\20GrQuad*\\29\n5145:GrQuadUtils::TessellationHelper::adjustDegenerateVertices\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuadUtils::TessellationHelper::Vertices*\\29\n5146:GrQuadUtils::TessellationHelper::OutsetRequest::reset\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\2c\\20GrQuad::Type\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n5147:GrQuadUtils::TessellationHelper::EdgeVectors::reset\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuad::Type\\29\n5148:GrQuadUtils::ClipToW0\\28DrawQuad*\\2c\\20DrawQuad*\\29\n5149:GrQuad::bounds\\28\\29\\20const\n5150:GrProxyProvider::~GrProxyProvider\\28\\29\n5151:GrProxyProvider::wrapBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\2c\\20sk_sp<skgpu::RefCntedCallback>\\29\n5152:GrProxyProvider::removeUniqueKeyFromProxy\\28GrTextureProxy*\\29\n5153:GrProxyProvider::processInvalidUniqueKeyImpl\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\2c\\20GrProxyProvider::InvalidateGPUResource\\2c\\20GrProxyProvider::RemoveTableEntry\\29\n5154:GrProxyProvider::createLazyProxy\\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Mipmapped\\2c\\20GrMipmapStatus\\2c\\20GrInternalSurfaceFlags\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5155:GrProxyProvider::contextID\\28\\29\\20const\n5156:GrProxyProvider::adoptUniqueKeyFromSurface\\28GrTextureProxy*\\2c\\20GrSurface\\20const*\\29\n5157:GrPixmapBase<void\\2c\\20GrPixmap>::clip\\28SkISize\\2c\\20SkIPoint*\\29\n5158:GrPixmap::GrPixmap\\28GrImageInfo\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\29\n5159:GrPipeline::GrPipeline\\28GrPipeline::InitArgs\\20const&\\2c\\20sk_sp<GrXferProcessor\\20const>\\2c\\20GrAppliedHardClip\\20const&\\29\n5160:GrPersistentCacheUtils::GetType\\28SkReadBuffer*\\29\n5161:GrPathUtils::QuadUVMatrix::set\\28SkPoint\\20const*\\29\n5162:GrPathTessellationShader::MakeStencilOnlyPipeline\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAAType\\2c\\20GrAppliedHardClip\\20const&\\2c\\20GrPipeline::InputFlags\\29\n5163:GrPaint::setCoverageSetOpXPFactory\\28SkRegion::Op\\2c\\20bool\\29\n5164:GrOvalOpFactory::MakeOvalOp\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrShaderCaps\\20const*\\29\n5165:GrOpsRenderPass::drawIndexed\\28int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20int\\29\n5166:GrOpsRenderPass::drawIndexedInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5167:GrOpsRenderPass::drawIndexPattern\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5168:GrOpFlushState::reset\\28\\29\n5169:GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp\\28GrOp\\20const*\\2c\\20SkRect\\20const&\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\29\n5170:GrOpFlushState::addASAPUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29\n5171:GrOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n5172:GrOp::combineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n5173:GrOnFlushResourceProvider::instantiateProxy\\28GrSurfaceProxy*\\29\n5174:GrMeshDrawTarget::allocMesh\\28\\29\n5175:GrMeshDrawOp::PatternHelper::init\\28GrMeshDrawTarget*\\2c\\20GrPrimitiveType\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5176:GrMeshDrawOp::CombinedQuadCountWillOverflow\\28GrAAType\\2c\\20bool\\2c\\20int\\29\n5177:GrMemoryPool::allocate\\28unsigned\\20long\\29\n5178:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::changed\\28\\29\n5179:GrIndexBufferAllocPool::makeSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n5180:GrIndexBufferAllocPool::makeSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n5181:GrImageInfo::refColorSpace\\28\\29\\20const\n5182:GrImageInfo::minRowBytes\\28\\29\\20const\n5183:GrImageInfo::makeDimensions\\28SkISize\\29\\20const\n5184:GrImageInfo::bpp\\28\\29\\20const\n5185:GrImageInfo::GrImageInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\n5186:GrImageContext::abandonContext\\28\\29\n5187:GrGpuResource::makeBudgeted\\28\\29\n5188:GrGpuResource::getResourceName\\28\\29\\20const\n5189:GrGpuResource::abandon\\28\\29\n5190:GrGpuResource::CreateUniqueID\\28\\29\n5191:GrGpu::~GrGpu\\28\\29\n5192:GrGpu::regenerateMipMapLevels\\28GrTexture*\\29\n5193:GrGpu::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5194:GrGpu::createTextureCommon\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5195:GrGeometryProcessor::AttributeSet::addToKey\\28skgpu::KeyBuilder*\\29\\20const\n5196:GrGLVertexArray::invalidateCachedState\\28\\29\n5197:GrGLTextureParameters::invalidate\\28\\29\n5198:GrGLTexture::MakeWrapped\\28GrGLGpu*\\2c\\20GrMipmapStatus\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5199:GrGLTexture::GrGLTexture\\28GrGLGpu*\\2c\\20skgpu::Budgeted\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5200:GrGLTexture::GrGLTexture\\28GrGLGpu*\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5201:GrGLSLVaryingHandler::getFragDecls\\28SkString*\\2c\\20SkString*\\29\\20const\n5202:GrGLSLVaryingHandler::addAttribute\\28GrShaderVar\\20const&\\29\n5203:GrGLSLUniformHandler::liftUniformToVertexShader\\28GrProcessor\\20const&\\2c\\20SkString\\29\n5204:GrGLSLShaderBuilder::finalize\\28unsigned\\20int\\29\n5205:GrGLSLShaderBuilder::emitFunction\\28char\\20const*\\2c\\20char\\20const*\\29\n5206:GrGLSLShaderBuilder::emitFunctionPrototype\\28char\\20const*\\29\n5207:GrGLSLShaderBuilder::appendTextureLookupAndBlend\\28char\\20const*\\2c\\20SkBlendMode\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n5208:GrGLSLShaderBuilder::appendColorGamutXform\\28SkString*\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29::$_0::operator\\28\\29\\28char\\20const*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20skcms_TFType\\29\\20const\n5209:GrGLSLShaderBuilder::addLayoutQualifier\\28char\\20const*\\2c\\20GrGLSLShaderBuilder::InterfaceQualifier\\29\n5210:GrGLSLShaderBuilder::GrGLSLShaderBuilder\\28GrGLSLProgramBuilder*\\29\n5211:GrGLSLProgramDataManager::setRuntimeEffectUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20SkSpan<GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\20const>\\2c\\20SkSpan<GrGLSLProgramDataManager::Specialized\\20const>\\2c\\20void\\20const*\\29\\20const\n5212:GrGLSLProgramBuilder::~GrGLSLProgramBuilder\\28\\29\n5213:GrGLSLBlend::SetBlendModeUniformData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20SkBlendMode\\29\n5214:GrGLSLBlend::BlendExpression\\28GrProcessor\\20const*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20SkBlendMode\\29\n5215:GrGLRenderTarget::GrGLRenderTarget\\28GrGLGpu*\\2c\\20SkISize\\20const&\\2c\\20GrGLFormat\\2c\\20int\\2c\\20GrGLRenderTarget::IDs\\20const&\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5216:GrGLProgramDataManager::set4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n5217:GrGLProgramDataManager::set2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n5218:GrGLProgramBuilder::uniformHandler\\28\\29\n5219:GrGLProgramBuilder::PrecompileProgram\\28GrDirectContext*\\2c\\20GrGLPrecompiledProgram*\\2c\\20SkData\\20const&\\29::$_0::operator\\28\\29\\28SkSL::ProgramKind\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int\\29\\20const\n5220:GrGLProgramBuilder::CreateProgram\\28GrDirectContext*\\2c\\20GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\2c\\20GrGLPrecompiledProgram\\20const*\\29\n5221:GrGLProgram::~GrGLProgram\\28\\29\n5222:GrGLMakeAssembledWebGLInterface\\28void*\\2c\\20void\\20\\28*\\20\\28*\\29\\28void*\\2c\\20char\\20const*\\29\\29\\28\\29\\29\n5223:GrGLGpu::~GrGLGpu\\28\\29\n5224:GrGLGpu::uploadTexData\\28SkISize\\2c\\20unsigned\\20int\\2c\\20SkIRect\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20GrMipLevel\\20const*\\2c\\20int\\29\n5225:GrGLGpu::uploadCompressedTexData\\28SkTextureCompressionType\\2c\\20GrGLFormat\\2c\\20SkISize\\2c\\20skgpu::Mipmapped\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n5226:GrGLGpu::uploadColorToTex\\28GrGLFormat\\2c\\20SkISize\\2c\\20unsigned\\20int\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20unsigned\\20int\\29\n5227:GrGLGpu::readOrTransferPixelsFrom\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20void*\\2c\\20int\\29\n5228:GrGLGpu::getCompatibleStencilIndex\\28GrGLFormat\\29\n5229:GrGLGpu::deleteSync\\28__GLsync*\\29\n5230:GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29\n5231:GrGLGpu::createCompressedTexture2D\\28SkISize\\2c\\20SkTextureCompressionType\\2c\\20GrGLFormat\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrGLTextureParameters::SamplerOverriddenState*\\29\n5232:GrGLGpu::bindFramebuffer\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n5233:GrGLGpu::ProgramCache::reset\\28\\29\n5234:GrGLGpu::ProgramCache::findOrCreateProgramImpl\\28GrDirectContext*\\2c\\20GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\2c\\20GrThreadSafePipelineBuilder::Stats::ProgramCacheResult*\\29\n5235:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n5236:GrGLFunction<void\\20\\28int\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\29\n5237:GrGLFormatIsCompressed\\28GrGLFormat\\29\n5238:GrGLFinishCallbacks::check\\28\\29\n5239:GrGLContext::~GrGLContext\\28\\29.1\n5240:GrGLContext::~GrGLContext\\28\\29\n5241:GrGLCaps::~GrGLCaps\\28\\29\n5242:GrGLCaps::getTexSubImageExternalFormatAndType\\28GrGLFormat\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n5243:GrGLCaps::getTexSubImageDefaultFormatTypeAndColorType\\28GrGLFormat\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20GrColorType*\\29\\20const\n5244:GrGLCaps::getRenderTargetSampleCount\\28int\\2c\\20GrGLFormat\\29\\20const\n5245:GrGLCaps::formatSupportsTexStorage\\28GrGLFormat\\29\\20const\n5246:GrGLCaps::canCopyAsDraw\\28GrGLFormat\\2c\\20bool\\2c\\20bool\\29\\20const\n5247:GrGLCaps::canCopyAsBlit\\28GrGLFormat\\2c\\20int\\2c\\20GrTextureType\\20const*\\2c\\20GrGLFormat\\2c\\20int\\2c\\20GrTextureType\\20const*\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\\20const\n5248:GrFragmentProcessor::~GrFragmentProcessor\\28\\29\n5249:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29\n5250:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29\n5251:GrFragmentProcessor::ProgramImpl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n5252:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5253:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5254:GrFragmentProcessor::ClampOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5255:GrFixedClip::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n5256:GrFixedClip::getConservativeBounds\\28\\29\\20const\n5257:GrFixedClip::apply\\28GrAppliedHardClip*\\2c\\20SkIRect*\\29\\20const\n5258:GrEagerDynamicVertexAllocator::unlock\\28int\\29\n5259:GrDynamicAtlas::readView\\28GrCaps\\20const&\\29\\20const\n5260:GrDynamicAtlas::instantiate\\28GrOnFlushResourceProvider*\\2c\\20sk_sp<GrTexture>\\29\n5261:GrDriverBugWorkarounds::GrDriverBugWorkarounds\\28\\29\n5262:GrDrawingManager::getLastRenderTask\\28GrSurfaceProxy\\20const*\\29\\20const\n5263:GrDrawingManager::flush\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n5264:GrDrawOpAtlasConfig::atlasDimensions\\28skgpu::MaskFormat\\29\\20const\n5265:GrDrawOpAtlasConfig::GrDrawOpAtlasConfig\\28int\\2c\\20unsigned\\20long\\29\n5266:GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n5267:GrDrawOpAtlas::Make\\28GrProxyProvider*\\2c\\20GrBackendFormat\\20const&\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::AtlasGenerationCounter*\\2c\\20GrDrawOpAtlas::AllowMultitexturing\\2c\\20skgpu::PlotEvictionCallback*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5268:GrDistanceFieldA8TextGeoProc::onTextureSampler\\28int\\29\\20const\n5269:GrDistanceFieldA8TextGeoProc::addNewViews\\28GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\29\n5270:GrDisableColorXPFactory::MakeXferProcessor\\28\\29\n5271:GrDirectContextPriv::validPMUPMConversionExists\\28\\29\n5272:GrDirectContext::~GrDirectContext\\28\\29\n5273:GrDirectContext::onGetSmallPathAtlasMgr\\28\\29\n5274:GrDirectContext::getResourceCacheLimits\\28int*\\2c\\20unsigned\\20long*\\29\\20const\n5275:GrCopyRenderTask::~GrCopyRenderTask\\28\\29\n5276:GrCopyRenderTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n5277:GrCopyBaseMipMapToView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Budgeted\\29\n5278:GrContext_Base::threadSafeProxy\\28\\29\n5279:GrContext_Base::maxSurfaceSampleCountForColorType\\28SkColorType\\29\\20const\n5280:GrContext_Base::backend\\28\\29\\20const\n5281:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\\28\\29\n5282:GrColorInfo::makeColorType\\28GrColorType\\29\\20const\n5283:GrColorInfo::isLinearlyBlended\\28\\29\\20const\n5284:GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis\\28GrProcessorAnalysisColor\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\20const*\\2c\\20int\\29\n5285:GrClip::IsPixelAligned\\28SkRect\\20const&\\29\n5286:GrCaps::surfaceSupportsWritePixels\\28GrSurface\\20const*\\29\\20const\n5287:GrCaps::getDstSampleFlagsForProxy\\28GrRenderTargetProxy\\20const*\\2c\\20bool\\29\\20const\n5288:GrCPixmap::GrCPixmap\\28GrPixmap\\20const&\\29\n5289:GrBufferAllocPool::makeSpaceAtLeast\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\2c\\20unsigned\\20long*\\29\n5290:GrBufferAllocPool::createBlock\\28unsigned\\20long\\29\n5291:GrBufferAllocPool::CpuBufferCache::makeBuffer\\28unsigned\\20long\\2c\\20bool\\29\n5292:GrBlurUtils::draw_shape_with_mask_filter\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkMaskFilterBase\\20const*\\2c\\20GrStyledShape\\20const&\\29\n5293:GrBlurUtils::draw_mask\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrPaint&&\\2c\\20GrSurfaceProxyView\\29\n5294:GrBlurUtils::create_integral_table\\28float\\2c\\20SkBitmap*\\29\n5295:GrBlurUtils::convolve_gaussian\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\29\n5296:GrBlurUtils::\\28anonymous\\20namespace\\29::make_texture_effect\\28GrCaps\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20GrSamplerState\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\20const&\\29\n5297:GrBitmapTextGeoProc::addNewViews\\28GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\29\n5298:GrBicubicEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n5299:GrBicubicEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n5300:GrBackendTextures::MakeGL\\28int\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrGLTextureInfo\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5301:GrBackendTexture::operator=\\28GrBackendTexture\\20const&\\29\n5302:GrBackendRenderTargets::MakeGL\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20GrGLFramebufferInfo\\20const&\\29\n5303:GrBackendRenderTargets::GetGLFramebufferInfo\\28GrBackendRenderTarget\\20const&\\2c\\20GrGLFramebufferInfo*\\29\n5304:GrBackendRenderTarget::~GrBackendRenderTarget\\28\\29\n5305:GrBackendRenderTarget::isProtected\\28\\29\\20const\n5306:GrBackendFormatBytesPerBlock\\28GrBackendFormat\\20const&\\29\n5307:GrBackendFormat::makeTexture2D\\28\\29\\20const\n5308:GrBackendFormat::isMockStencilFormat\\28\\29\\20const\n5309:GrBackendFormat::MakeMock\\28GrColorType\\2c\\20SkTextureCompressionType\\2c\\20bool\\29\n5310:GrAuditTrail::opsCombined\\28GrOp\\20const*\\2c\\20GrOp\\20const*\\29\n5311:GrAttachment::ComputeSharedAttachmentUniqueKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20GrAttachment::UsageFlags\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\2c\\20skgpu::UniqueKey*\\29\n5312:GrAtlasManager::~GrAtlasManager\\28\\29\n5313:GrAtlasManager::getViews\\28skgpu::MaskFormat\\2c\\20unsigned\\20int*\\29\n5314:GrAtlasManager::freeAll\\28\\29\n5315:GrAATriangulator::makeEvent\\28GrAATriangulator::SSEdge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrAATriangulator::SSEdge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrAATriangulator::EventList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n5316:GrAATriangulator::collapseOverlapRegions\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\2c\\20GrAATriangulator::EventComparator\\29\n5317:GrAAConvexTessellator::quadTo\\28SkPoint\\20const*\\29\n5318:GetVariationDesignPosition\\28AutoFTAccess&\\2c\\20SkFontArguments::VariationPosition::Coordinate*\\2c\\20int\\29\n5319:GetShapedLines\\28skia::textlayout::Paragraph&\\29\n5320:GetLargeValue\n5321:FontMgrRunIterator::endOfCurrentRun\\28\\29\\20const\n5322:FontMgrRunIterator::atEnd\\28\\29\\20const\n5323:FinishRow\n5324:FindUndone\\28SkOpContourHead*\\29\n5325:FT_Stream_Close\n5326:FT_Sfnt_Table_Info\n5327:FT_Render_Glyph_Internal\n5328:FT_Remove_Module\n5329:FT_Outline_Get_Orientation\n5330:FT_Outline_EmboldenXY\n5331:FT_New_Library\n5332:FT_New_GlyphSlot\n5333:FT_List_Iterate\n5334:FT_List_Find\n5335:FT_List_Finalize\n5336:FT_GlyphLoader_CheckSubGlyphs\n5337:FT_Get_Postscript_Name\n5338:FT_Get_Paint_Layers\n5339:FT_Get_PS_Font_Info\n5340:FT_Get_Kerning\n5341:FT_Get_Glyph_Name\n5342:FT_Get_FSType_Flags\n5343:FT_Get_Colorline_Stops\n5344:FT_Get_Color_Glyph_ClipBox\n5345:FT_Bitmap_Convert\n5346:FT_Add_Default_Modules\n5347:EllipticalRRectOp::~EllipticalRRectOp\\28\\29.1\n5348:EllipticalRRectOp::~EllipticalRRectOp\\28\\29\n5349:EllipticalRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n5350:EllipticalRRectOp::RRect&\\20skia_private::TArray<EllipticalRRectOp::RRect\\2c\\20true>::emplace_back<EllipticalRRectOp::RRect>\\28EllipticalRRectOp::RRect&&\\29\n5351:EllipticalRRectOp::EllipticalRRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint\\2c\\20bool\\29\n5352:EllipseOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n5353:EllipseOp::EllipseOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20EllipseOp::DeviceSpaceParams\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n5354:EllipseGeometryProcessor::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n5355:DIEllipseOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n5356:DIEllipseOp::DIEllipseOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20DIEllipseOp::DeviceSpaceParams\\20const&\\2c\\20SkMatrix\\20const&\\29\n5357:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrXferProcessor\\20const&\\29\n5358:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::emitBlendCodeForDstRead\\28GrGLSLXPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrXferProcessor\\20const&\\29\n5359:Cr_z_deflateReset\n5360:Cr_z_deflate\n5361:Cr_z_crc32_z\n5362:CoverageSetOpXP::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n5363:CircularRRectOp::~CircularRRectOp\\28\\29.1\n5364:CircularRRectOp::~CircularRRectOp\\28\\29\n5365:CircularRRectOp::CircularRRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n5366:CircleOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20GrStyle\\20const&\\2c\\20CircleOp::ArcParams\\20const*\\29\n5367:CircleOp::CircleOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20GrStyle\\20const&\\2c\\20CircleOp::ArcParams\\20const*\\29\n5368:CircleGeometryProcessor::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n5369:CheckDecBuffer\n5370:CFF::path_procs_t<cff1_path_procs_extents_t\\2c\\20CFF::cff1_cs_interp_env_t\\2c\\20cff1_extents_param_t>::rlineto\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\29\n5371:CFF::dict_interpreter_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20CFF::interp_env_t<CFF::number_t>>::interpret\\28CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>&\\29\n5372:CFF::cff2_cs_opset_t<cff2_cs_opset_extents_t\\2c\\20cff2_extents_param_t\\2c\\20CFF::number_t\\2c\\20cff2_path_procs_extents_t>::process_blend\\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\29\n5373:CFF::FDSelect3_4<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n5374:CFF::Charset::get_sid\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20CFF::code_pair_t*\\29\\20const\n5375:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::get_size\\28\\29\\20const\n5376:CFF::CFF2FDSelect::get_fd\\28unsigned\\20int\\29\\20const\n5377:ButtCapDashedCircleOp::ButtCapDashedCircleOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5378:BuildHuffmanTable\n5379:AsWinding\\28SkPath\\20const&\\2c\\20SkPath*\\29\n5380:AngleWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int*\\2c\\20bool*\\29\n5381:AddIntersectTs\\28SkOpContour*\\2c\\20SkOpContour*\\2c\\20SkOpCoincidence*\\29\n5382:ActiveEdgeList::replace\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n5383:ActiveEdgeList::remove\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n5384:ActiveEdgeList::insert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n5385:AAT::hb_aat_apply_context_t::return_t\\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<AAT::hb_aat_apply_context_t>\\28AAT::hb_aat_apply_context_t*\\29\\20const\n5386:AAT::hb_aat_apply_context_t::return_t\\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<AAT::hb_aat_apply_context_t>\\28AAT::hb_aat_apply_context_t*\\29\\20const\n5387:AAT::TrackData::sanitize\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5388:AAT::TrackData::get_tracking\\28void\\20const*\\2c\\20float\\29\\20const\n5389:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n5390:AAT::StateTable<AAT::ExtendedTypes\\2c\\20AAT::LigatureEntry<true>::EntryData>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n5391:AAT::StateTable<AAT::ExtendedTypes\\2c\\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n5392:AAT::RearrangementSubtable<AAT::ExtendedTypes>::driver_context_t::transition\\28AAT::StateTableDriver<AAT::ExtendedTypes\\2c\\20void>*\\2c\\20AAT::Entry<void>\\20const&\\29\n5393:AAT::NoncontextualSubtable<AAT::ExtendedTypes>::apply\\28AAT::hb_aat_apply_context_t*\\29\\20const\n5394:AAT::Lookup<OT::IntType<unsigned\\20int\\2c\\204u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5395:AAT::Lookup<OT::IntType<unsigned\\20int\\2c\\204u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n5396:AAT::InsertionSubtable<AAT::ExtendedTypes>::driver_context_t::transition\\28AAT::StateTableDriver<AAT::ExtendedTypes\\2c\\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>*\\2c\\20AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>\\20const&\\29\n5397:ycck_cmyk_convert\n5398:ycc_rgb_convert\n5399:ycc_rgb565_convert\n5400:ycc_rgb565D_convert\n5401:xyzd50_to_lab\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n5402:xyzd50_to_hcl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n5403:wuffs_gif__decoder__tell_me_more\n5404:wuffs_gif__decoder__set_report_metadata\n5405:wuffs_gif__decoder__num_decoded_frame_configs\n5406:wuffs_base__pixel_swizzler__xxxxxxxx__index_binary_alpha__src_over\n5407:wuffs_base__pixel_swizzler__xxxxxxxx__index__src\n5408:wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over\n5409:wuffs_base__pixel_swizzler__xxxx__index__src\n5410:wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over\n5411:wuffs_base__pixel_swizzler__xxx__index__src\n5412:wuffs_base__pixel_swizzler__transparent_black_src_over\n5413:wuffs_base__pixel_swizzler__transparent_black_src\n5414:wuffs_base__pixel_swizzler__copy_1_1\n5415:wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over\n5416:wuffs_base__pixel_swizzler__bgr_565__index__src\n5417:webgl_get_gl_proc\\28void*\\2c\\20char\\20const*\\29\n5418:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\\20const*&\\2c\\20int>\\28char\\20const*&\\2c\\20int&&\\29\n5419:void\\20std::__2::vector<SkJpegMetadataDecoder::Segment\\2c\\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>::__emplace_back_slow_path<unsigned\\20char\\20const&\\2c\\20sk_sp<SkData>\\20const&>\\28unsigned\\20char\\20const&\\2c\\20sk_sp<SkData>\\20const&\\29\n5420:void\\20mergeT<unsigned\\20short>\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20void*\\29\n5421:void\\20mergeT<unsigned\\20char>\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20void*\\29\n5422:void\\20emscripten::internal::raw_destructor<sk_sp<SkTextBlob>>\\28sk_sp<SkTextBlob>*\\29\n5423:void\\20emscripten::internal::raw_destructor<SkVertices::Builder>\\28SkVertices::Builder*\\29\n5424:void\\20emscripten::internal::raw_destructor<SkRuntimeEffect::TracedShader>\\28SkRuntimeEffect::TracedShader*\\29\n5425:void\\20emscripten::internal::raw_destructor<SkPictureRecorder>\\28SkPictureRecorder*\\29\n5426:void\\20emscripten::internal::raw_destructor<SkPath>\\28SkPath*\\29\n5427:void\\20emscripten::internal::raw_destructor<SkPaint>\\28SkPaint*\\29\n5428:void\\20emscripten::internal::raw_destructor<SkContourMeasureIter>\\28SkContourMeasureIter*\\29\n5429:void\\20emscripten::internal::raw_destructor<SimpleImageInfo>\\28SimpleImageInfo*\\29\n5430:void\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleTextStyle>::setWire<SimpleParagraphStyle>\\28SimpleTextStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle&\\2c\\20SimpleTextStyle*\\29\n5431:void\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleStrutStyle>::setWire<SimpleParagraphStyle>\\28SimpleStrutStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle&\\2c\\20SimpleStrutStyle*\\29\n5432:void\\20emscripten::internal::MemberAccess<SimpleImageInfo\\2c\\20sk_sp<SkColorSpace>>::setWire<SimpleImageInfo>\\28sk_sp<SkColorSpace>\\20SimpleImageInfo::*\\20const&\\2c\\20SimpleImageInfo&\\2c\\20sk_sp<SkColorSpace>*\\29\n5433:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::TypefaceFontProvider>\\28skia::textlayout::TypefaceFontProvider*\\29\n5434:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::ParagraphBuilderImpl>\\28skia::textlayout::ParagraphBuilderImpl*\\29\n5435:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::Paragraph>\\28skia::textlayout::Paragraph*\\29\n5436:void\\20const*\\20emscripten::internal::getActualType<skia::textlayout::FontCollection>\\28skia::textlayout::FontCollection*\\29\n5437:void\\20const*\\20emscripten::internal::getActualType<SkVertices>\\28SkVertices*\\29\n5438:void\\20const*\\20emscripten::internal::getActualType<SkVertices::Builder>\\28SkVertices::Builder*\\29\n5439:void\\20const*\\20emscripten::internal::getActualType<SkTypeface>\\28SkTypeface*\\29\n5440:void\\20const*\\20emscripten::internal::getActualType<SkTextBlob>\\28SkTextBlob*\\29\n5441:void\\20const*\\20emscripten::internal::getActualType<SkSurface>\\28SkSurface*\\29\n5442:void\\20const*\\20emscripten::internal::getActualType<SkShader>\\28SkShader*\\29\n5443:void\\20const*\\20emscripten::internal::getActualType<SkSL::DebugTrace>\\28SkSL::DebugTrace*\\29\n5444:void\\20const*\\20emscripten::internal::getActualType<SkRuntimeEffect>\\28SkRuntimeEffect*\\29\n5445:void\\20const*\\20emscripten::internal::getActualType<SkPictureRecorder>\\28SkPictureRecorder*\\29\n5446:void\\20const*\\20emscripten::internal::getActualType<SkPicture>\\28SkPicture*\\29\n5447:void\\20const*\\20emscripten::internal::getActualType<SkPathEffect>\\28SkPathEffect*\\29\n5448:void\\20const*\\20emscripten::internal::getActualType<SkPath>\\28SkPath*\\29\n5449:void\\20const*\\20emscripten::internal::getActualType<SkPaint>\\28SkPaint*\\29\n5450:void\\20const*\\20emscripten::internal::getActualType<SkMaskFilter>\\28SkMaskFilter*\\29\n5451:void\\20const*\\20emscripten::internal::getActualType<SkImageFilter>\\28SkImageFilter*\\29\n5452:void\\20const*\\20emscripten::internal::getActualType<SkImage>\\28SkImage*\\29\n5453:void\\20const*\\20emscripten::internal::getActualType<SkFontMgr>\\28SkFontMgr*\\29\n5454:void\\20const*\\20emscripten::internal::getActualType<SkFont>\\28SkFont*\\29\n5455:void\\20const*\\20emscripten::internal::getActualType<SkContourMeasureIter>\\28SkContourMeasureIter*\\29\n5456:void\\20const*\\20emscripten::internal::getActualType<SkContourMeasure>\\28SkContourMeasure*\\29\n5457:void\\20const*\\20emscripten::internal::getActualType<SkColorSpace>\\28SkColorSpace*\\29\n5458:void\\20const*\\20emscripten::internal::getActualType<SkColorFilter>\\28SkColorFilter*\\29\n5459:void\\20const*\\20emscripten::internal::getActualType<SkCanvas>\\28SkCanvas*\\29\n5460:void\\20const*\\20emscripten::internal::getActualType<SkBlender>\\28SkBlender*\\29\n5461:void\\20const*\\20emscripten::internal::getActualType<SkAnimatedImage>\\28SkAnimatedImage*\\29\n5462:void\\20const*\\20emscripten::internal::getActualType<GrDirectContext>\\28GrDirectContext*\\29\n5463:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5464:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5465:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5466:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5467:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5468:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5469:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5470:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5471:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5472:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5473:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5474:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5475:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5476:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5477:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5478:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5479:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5480:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5481:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5482:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5483:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5484:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5485:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5486:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5487:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5488:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5489:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5490:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5491:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5492:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5493:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5494:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5495:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5496:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5497:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5498:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5499:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5500:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5501:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5502:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5503:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5504:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5505:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5506:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5507:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5508:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5509:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5510:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5511:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5512:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5513:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5514:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5515:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5516:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5517:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5518:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5519:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5520:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5521:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5522:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5523:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5524:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5525:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5526:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5527:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5528:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5529:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5530:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5531:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5532:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5533:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5534:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5535:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5536:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5537:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5538:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5539:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5540:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5541:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5542:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5543:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5544:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5545:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5546:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5547:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5548:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5549:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5550:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5551:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5552:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5553:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5554:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5555:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5556:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5557:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5558:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n5559:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5560:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5561:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5562:void\\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5563:void\\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5564:void\\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5565:void\\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5566:void\\20SkSwizzler::SkipLeading8888ZerosThen<&sample4\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5567:void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5568:void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5569:void\\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5570:void\\20SkSwizzler::SkipLeading8888ZerosThen<&copy\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29>\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5571:virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n5572:virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n5573:virtual\\20thunk\\20to\\20std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29.1\n5574:virtual\\20thunk\\20to\\20std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::~basic_ostream\\28\\29\n5575:virtual\\20thunk\\20to\\20std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.1\n5576:virtual\\20thunk\\20to\\20std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29\n5577:virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n5578:virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n5579:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n5580:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n5581:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n5582:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n5583:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n5584:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n5585:virtual\\20thunk\\20to\\20GrTextureProxy::~GrTextureProxy\\28\\29.1\n5586:virtual\\20thunk\\20to\\20GrTextureProxy::~GrTextureProxy\\28\\29\n5587:virtual\\20thunk\\20to\\20GrTextureProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n5588:virtual\\20thunk\\20to\\20GrTextureProxy::instantiate\\28GrResourceProvider*\\29\n5589:virtual\\20thunk\\20to\\20GrTextureProxy::getUniqueKey\\28\\29\\20const\n5590:virtual\\20thunk\\20to\\20GrTextureProxy::createSurface\\28GrResourceProvider*\\29\\20const\n5591:virtual\\20thunk\\20to\\20GrTextureProxy::callbackDesc\\28\\29\\20const\n5592:virtual\\20thunk\\20to\\20GrTextureProxy::asTextureProxy\\28\\29\\20const\n5593:virtual\\20thunk\\20to\\20GrTextureProxy::asTextureProxy\\28\\29\n5594:virtual\\20thunk\\20to\\20GrTexture::onGpuMemorySize\\28\\29\\20const\n5595:virtual\\20thunk\\20to\\20GrTexture::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n5596:virtual\\20thunk\\20to\\20GrTexture::asTexture\\28\\29\\20const\n5597:virtual\\20thunk\\20to\\20GrTexture::asTexture\\28\\29\n5598:virtual\\20thunk\\20to\\20GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.1\n5599:virtual\\20thunk\\20to\\20GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29\n5600:virtual\\20thunk\\20to\\20GrRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n5601:virtual\\20thunk\\20to\\20GrRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n5602:virtual\\20thunk\\20to\\20GrRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n5603:virtual\\20thunk\\20to\\20GrRenderTargetProxy::callbackDesc\\28\\29\\20const\n5604:virtual\\20thunk\\20to\\20GrRenderTargetProxy::asRenderTargetProxy\\28\\29\\20const\n5605:virtual\\20thunk\\20to\\20GrRenderTargetProxy::asRenderTargetProxy\\28\\29\n5606:virtual\\20thunk\\20to\\20GrRenderTarget::onRelease\\28\\29\n5607:virtual\\20thunk\\20to\\20GrRenderTarget::onAbandon\\28\\29\n5608:virtual\\20thunk\\20to\\20GrRenderTarget::asRenderTarget\\28\\29\\20const\n5609:virtual\\20thunk\\20to\\20GrRenderTarget::asRenderTarget\\28\\29\n5610:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n5611:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n5612:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onRelease\\28\\29\n5613:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n5614:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onAbandon\\28\\29\n5615:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n5616:virtual\\20thunk\\20to\\20GrGLTexture::~GrGLTexture\\28\\29.1\n5617:virtual\\20thunk\\20to\\20GrGLTexture::~GrGLTexture\\28\\29\n5618:virtual\\20thunk\\20to\\20GrGLTexture::onRelease\\28\\29\n5619:virtual\\20thunk\\20to\\20GrGLTexture::onAbandon\\28\\29\n5620:virtual\\20thunk\\20to\\20GrGLTexture::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n5621:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n5622:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n5623:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::onFinalize\\28\\29\n5624:virtual\\20thunk\\20to\\20GrGLRenderTarget::~GrGLRenderTarget\\28\\29.1\n5625:virtual\\20thunk\\20to\\20GrGLRenderTarget::~GrGLRenderTarget\\28\\29\n5626:virtual\\20thunk\\20to\\20GrGLRenderTarget::onRelease\\28\\29\n5627:virtual\\20thunk\\20to\\20GrGLRenderTarget::onGpuMemorySize\\28\\29\\20const\n5628:virtual\\20thunk\\20to\\20GrGLRenderTarget::onAbandon\\28\\29\n5629:virtual\\20thunk\\20to\\20GrGLRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n5630:virtual\\20thunk\\20to\\20GrGLRenderTarget::backendFormat\\28\\29\\20const\n5631:tt_vadvance_adjust\n5632:tt_slot_init\n5633:tt_size_select\n5634:tt_size_reset_iterator\n5635:tt_size_request\n5636:tt_size_init\n5637:tt_size_done\n5638:tt_sbit_decoder_load_png\n5639:tt_sbit_decoder_load_compound\n5640:tt_sbit_decoder_load_byte_aligned\n5641:tt_sbit_decoder_load_bit_aligned\n5642:tt_property_set\n5643:tt_property_get\n5644:tt_name_ascii_from_utf16\n5645:tt_name_ascii_from_other\n5646:tt_hadvance_adjust\n5647:tt_glyph_load\n5648:tt_get_var_blend\n5649:tt_get_interface\n5650:tt_get_glyph_name\n5651:tt_get_cmap_info\n5652:tt_get_advances\n5653:tt_face_set_sbit_strike\n5654:tt_face_load_strike_metrics\n5655:tt_face_load_sbit_image\n5656:tt_face_load_sbit\n5657:tt_face_load_post\n5658:tt_face_load_pclt\n5659:tt_face_load_os2\n5660:tt_face_load_name\n5661:tt_face_load_maxp\n5662:tt_face_load_kern\n5663:tt_face_load_hmtx\n5664:tt_face_load_hhea\n5665:tt_face_load_head\n5666:tt_face_load_gasp\n5667:tt_face_load_font_dir\n5668:tt_face_load_cpal\n5669:tt_face_load_colr\n5670:tt_face_load_cmap\n5671:tt_face_load_bhed\n5672:tt_face_load_any\n5673:tt_face_init\n5674:tt_face_goto_table\n5675:tt_face_get_paint_layers\n5676:tt_face_get_paint\n5677:tt_face_get_kerning\n5678:tt_face_get_colr_layer\n5679:tt_face_get_colr_glyph_paint\n5680:tt_face_get_colorline_stops\n5681:tt_face_get_color_glyph_clipbox\n5682:tt_face_free_sbit\n5683:tt_face_free_ps_names\n5684:tt_face_free_name\n5685:tt_face_free_cpal\n5686:tt_face_free_colr\n5687:tt_face_done\n5688:tt_face_colr_blend_layer\n5689:tt_driver_init\n5690:tt_cvt_ready_iterator\n5691:tt_cmap_unicode_init\n5692:tt_cmap_unicode_char_next\n5693:tt_cmap_unicode_char_index\n5694:tt_cmap_init\n5695:tt_cmap8_validate\n5696:tt_cmap8_get_info\n5697:tt_cmap8_char_next\n5698:tt_cmap8_char_index\n5699:tt_cmap6_validate\n5700:tt_cmap6_get_info\n5701:tt_cmap6_char_next\n5702:tt_cmap6_char_index\n5703:tt_cmap4_validate\n5704:tt_cmap4_init\n5705:tt_cmap4_get_info\n5706:tt_cmap4_char_next\n5707:tt_cmap4_char_index\n5708:tt_cmap2_validate\n5709:tt_cmap2_get_info\n5710:tt_cmap2_char_next\n5711:tt_cmap2_char_index\n5712:tt_cmap14_variants\n5713:tt_cmap14_variant_chars\n5714:tt_cmap14_validate\n5715:tt_cmap14_init\n5716:tt_cmap14_get_info\n5717:tt_cmap14_done\n5718:tt_cmap14_char_variants\n5719:tt_cmap14_char_var_isdefault\n5720:tt_cmap14_char_var_index\n5721:tt_cmap14_char_next\n5722:tt_cmap13_validate\n5723:tt_cmap13_get_info\n5724:tt_cmap13_char_next\n5725:tt_cmap13_char_index\n5726:tt_cmap12_validate\n5727:tt_cmap12_get_info\n5728:tt_cmap12_char_next\n5729:tt_cmap12_char_index\n5730:tt_cmap10_validate\n5731:tt_cmap10_get_info\n5732:tt_cmap10_char_next\n5733:tt_cmap10_char_index\n5734:tt_cmap0_validate\n5735:tt_cmap0_get_info\n5736:tt_cmap0_char_next\n5737:tt_cmap0_char_index\n5738:transform_scanline_rgbA\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5739:transform_scanline_memcpy\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5740:transform_scanline_bgra_1010102_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5741:transform_scanline_bgra_1010102\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5742:transform_scanline_bgr_101010x_xr\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5743:transform_scanline_bgr_101010x\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5744:transform_scanline_bgrA\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5745:transform_scanline_RGBX\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5746:transform_scanline_F32_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5747:transform_scanline_F32\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5748:transform_scanline_F16_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5749:transform_scanline_F16\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5750:transform_scanline_BGRX\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5751:transform_scanline_BGRA\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5752:transform_scanline_A8_to_GrayAlpha\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5753:transform_scanline_565\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5754:transform_scanline_444\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5755:transform_scanline_4444\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5756:transform_scanline_101010x\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5757:transform_scanline_1010102_premul\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5758:transform_scanline_1010102\\28char*\\2c\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n5759:t2_hints_stems\n5760:t2_hints_open\n5761:t1_make_subfont\n5762:t1_hints_stem\n5763:t1_hints_open\n5764:t1_decrypt\n5765:t1_decoder_parse_metrics\n5766:t1_decoder_init\n5767:t1_decoder_done\n5768:t1_cmap_unicode_init\n5769:t1_cmap_unicode_char_next\n5770:t1_cmap_unicode_char_index\n5771:t1_cmap_std_done\n5772:t1_cmap_std_char_next\n5773:t1_cmap_std_char_index\n5774:t1_cmap_standard_init\n5775:t1_cmap_expert_init\n5776:t1_cmap_custom_init\n5777:t1_cmap_custom_done\n5778:t1_cmap_custom_char_next\n5779:t1_cmap_custom_char_index\n5780:t1_builder_start_point\n5781:t1_builder_init\n5782:t1_builder_add_point1\n5783:t1_builder_add_point\n5784:t1_builder_add_contour\n5785:swizzle_small_index_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5786:swizzle_small_index_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5787:swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5788:swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5789:swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5790:swizzle_rgba16_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5791:swizzle_rgba16_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5792:swizzle_rgba16_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5793:swizzle_rgba16_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5794:swizzle_rgb_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5795:swizzle_rgb_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5796:swizzle_rgb_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5797:swizzle_rgb16_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5798:swizzle_rgb16_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5799:swizzle_rgb16_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5800:swizzle_mask32_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5801:swizzle_mask32_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5802:swizzle_mask32_to_rgba_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5803:swizzle_mask32_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5804:swizzle_mask32_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5805:swizzle_mask32_to_bgra_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5806:swizzle_mask32_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5807:swizzle_mask24_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5808:swizzle_mask24_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5809:swizzle_mask24_to_rgba_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5810:swizzle_mask24_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5811:swizzle_mask24_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5812:swizzle_mask24_to_bgra_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5813:swizzle_mask24_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5814:swizzle_mask16_to_rgba_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5815:swizzle_mask16_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5816:swizzle_mask16_to_rgba_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5817:swizzle_mask16_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5818:swizzle_mask16_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5819:swizzle_mask16_to_bgra_opaque\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5820:swizzle_mask16_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20SkMasks*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5821:swizzle_index_to_n32_skipZ\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5822:swizzle_index_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5823:swizzle_index_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5824:swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5825:swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5826:swizzle_grayalpha_to_a8\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5827:swizzle_gray_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5828:swizzle_gray_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5829:swizzle_cmyk_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5830:swizzle_cmyk_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5831:swizzle_cmyk_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5832:swizzle_bit_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5833:swizzle_bit_to_grayscale\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5834:swizzle_bit_to_f16\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5835:swizzle_bit_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5836:swizzle_bgr_to_565\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n5837:string_read\n5838:std::exception::what\\28\\29\\20const\n5839:std::bad_variant_access::what\\28\\29\\20const\n5840:std::bad_optional_access::what\\28\\29\\20const\n5841:std::bad_array_new_length::what\\28\\29\\20const\n5842:std::bad_alloc::what\\28\\29\\20const\n5843:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n5844:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\\5babi:v160004\\5d\\28std::__2::unique_ptr<SkEncodedInfo::ICCProfile\\2c\\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>&&\\29\n5845:std::__2::time_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n5846:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n5847:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_year\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5848:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_weekday\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5849:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_time\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5850:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_monthname\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5851:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_date\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5852:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\2c\\20char\\29\\20const\n5853:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_year\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5854:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_weekday\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5855:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_time\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5856:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_monthname\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5857:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_date\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n5858:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\2c\\20char\\29\\20const\n5859:std::__2::numpunct<wchar_t>::~numpunct\\28\\29.1\n5860:std::__2::numpunct<wchar_t>::do_truename\\28\\29\\20const\n5861:std::__2::numpunct<wchar_t>::do_grouping\\28\\29\\20const\n5862:std::__2::numpunct<wchar_t>::do_falsename\\28\\29\\20const\n5863:std::__2::numpunct<char>::~numpunct\\28\\29.1\n5864:std::__2::numpunct<char>::do_truename\\28\\29\\20const\n5865:std::__2::numpunct<char>::do_thousands_sep\\28\\29\\20const\n5866:std::__2::numpunct<char>::do_grouping\\28\\29\\20const\n5867:std::__2::numpunct<char>::do_falsename\\28\\29\\20const\n5868:std::__2::numpunct<char>::do_decimal_point\\28\\29\\20const\n5869:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20void\\20const*\\29\\20const\n5870:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20unsigned\\20long\\29\\20const\n5871:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20unsigned\\20long\\20long\\29\\20const\n5872:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\29\\20const\n5873:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20long\\29\\20const\n5874:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20double\\29\\20const\n5875:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20double\\29\\20const\n5876:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20bool\\29\\20const\n5877:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20void\\20const*\\29\\20const\n5878:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20unsigned\\20long\\29\\20const\n5879:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20unsigned\\20long\\20long\\29\\20const\n5880:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\29\\20const\n5881:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20long\\29\\20const\n5882:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20double\\29\\20const\n5883:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20double\\29\\20const\n5884:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20bool\\29\\20const\n5885:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20void*&\\29\\20const\n5886:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20short&\\29\\20const\n5887:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20long\\20long&\\29\\20const\n5888:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20long&\\29\\20const\n5889:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n5890:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long&\\29\\20const\n5891:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20float&\\29\\20const\n5892:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20double&\\29\\20const\n5893:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20bool&\\29\\20const\n5894:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20void*&\\29\\20const\n5895:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20short&\\29\\20const\n5896:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20long\\20long&\\29\\20const\n5897:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20long&\\29\\20const\n5898:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n5899:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long&\\29\\20const\n5900:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20float&\\29\\20const\n5901:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20double&\\29\\20const\n5902:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20bool&\\29\\20const\n5903:std::__2::money_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\29\\20const\n5904:std::__2::money_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20double\\29\\20const\n5905:std::__2::money_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\\20const\n5906:std::__2::money_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20double\\29\\20const\n5907:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\29\\20const\n5908:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n5909:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\29\\20const\n5910:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n5911:std::__2::messages<wchar_t>::do_get\\28long\\2c\\20int\\2c\\20int\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\29\\20const\n5912:std::__2::messages<char>::do_get\\28long\\2c\\20int\\2c\\20int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\\20const\n5913:std::__2::locale::id::__init\\28\\29\n5914:std::__2::locale::__imp::~__imp\\28\\29.1\n5915:std::__2::ios_base::~ios_base\\28\\29.1\n5916:std::__2::ctype<wchar_t>::do_widen\\28char\\20const*\\2c\\20char\\20const*\\2c\\20wchar_t*\\29\\20const\n5917:std::__2::ctype<wchar_t>::do_toupper\\28wchar_t\\29\\20const\n5918:std::__2::ctype<wchar_t>::do_toupper\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n5919:std::__2::ctype<wchar_t>::do_tolower\\28wchar_t\\29\\20const\n5920:std::__2::ctype<wchar_t>::do_tolower\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n5921:std::__2::ctype<wchar_t>::do_scan_not\\28unsigned\\20long\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n5922:std::__2::ctype<wchar_t>::do_scan_is\\28unsigned\\20long\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n5923:std::__2::ctype<wchar_t>::do_narrow\\28wchar_t\\2c\\20char\\29\\20const\n5924:std::__2::ctype<wchar_t>::do_narrow\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20char\\2c\\20char*\\29\\20const\n5925:std::__2::ctype<wchar_t>::do_is\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20unsigned\\20long*\\29\\20const\n5926:std::__2::ctype<wchar_t>::do_is\\28unsigned\\20long\\2c\\20wchar_t\\29\\20const\n5927:std::__2::ctype<char>::~ctype\\28\\29.1\n5928:std::__2::ctype<char>::do_widen\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n5929:std::__2::ctype<char>::do_toupper\\28char\\29\\20const\n5930:std::__2::ctype<char>::do_toupper\\28char*\\2c\\20char\\20const*\\29\\20const\n5931:std::__2::ctype<char>::do_tolower\\28char\\29\\20const\n5932:std::__2::ctype<char>::do_tolower\\28char*\\2c\\20char\\20const*\\29\\20const\n5933:std::__2::ctype<char>::do_narrow\\28char\\2c\\20char\\29\\20const\n5934:std::__2::ctype<char>::do_narrow\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\2c\\20char*\\29\\20const\n5935:std::__2::collate<wchar_t>::do_transform\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n5936:std::__2::collate<wchar_t>::do_hash\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n5937:std::__2::collate<wchar_t>::do_compare\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n5938:std::__2::collate<char>::do_transform\\28char\\20const*\\2c\\20char\\20const*\\29\\20const\n5939:std::__2::collate<char>::do_hash\\28char\\20const*\\2c\\20char\\20const*\\29\\20const\n5940:std::__2::collate<char>::do_compare\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n5941:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::~codecvt\\28\\29.1\n5942:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_unshift\\28__mbstate_t&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n5943:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n5944:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_max_length\\28\\29\\20const\n5945:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n5946:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20wchar_t*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\29\\20const\n5947:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_encoding\\28\\29\\20const\n5948:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n5949:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringbuf\\28\\29.1\n5950:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::underflow\\28\\29\n5951:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::seekpos\\28std::__2::fpos<__mbstate_t>\\2c\\20unsigned\\20int\\29\n5952:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::seekoff\\28long\\20long\\2c\\20std::__2::ios_base::seekdir\\2c\\20unsigned\\20int\\29\n5953:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::pbackfail\\28int\\29\n5954:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::overflow\\28int\\29\n5955:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::~basic_streambuf\\28\\29.1\n5956:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::xsputn\\28char\\20const*\\2c\\20long\\29\n5957:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::xsgetn\\28char*\\2c\\20long\\29\n5958:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::uflow\\28\\29\n5959:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setbuf\\28char*\\2c\\20long\\29\n5960:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::seekpos\\28std::__2::fpos<__mbstate_t>\\2c\\20unsigned\\20int\\29\n5961:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::seekoff\\28long\\20long\\2c\\20std::__2::ios_base::seekdir\\2c\\20unsigned\\20int\\29\n5962:std::__2::bad_function_call::what\\28\\29\\20const\n5963:std::__2::__time_get_c_storage<wchar_t>::__x\\28\\29\\20const\n5964:std::__2::__time_get_c_storage<wchar_t>::__weeks\\28\\29\\20const\n5965:std::__2::__time_get_c_storage<wchar_t>::__r\\28\\29\\20const\n5966:std::__2::__time_get_c_storage<wchar_t>::__months\\28\\29\\20const\n5967:std::__2::__time_get_c_storage<wchar_t>::__c\\28\\29\\20const\n5968:std::__2::__time_get_c_storage<wchar_t>::__am_pm\\28\\29\\20const\n5969:std::__2::__time_get_c_storage<wchar_t>::__X\\28\\29\\20const\n5970:std::__2::__time_get_c_storage<char>::__x\\28\\29\\20const\n5971:std::__2::__time_get_c_storage<char>::__weeks\\28\\29\\20const\n5972:std::__2::__time_get_c_storage<char>::__r\\28\\29\\20const\n5973:std::__2::__time_get_c_storage<char>::__months\\28\\29\\20const\n5974:std::__2::__time_get_c_storage<char>::__c\\28\\29\\20const\n5975:std::__2::__time_get_c_storage<char>::__am_pm\\28\\29\\20const\n5976:std::__2::__time_get_c_storage<char>::__X\\28\\29\\20const\n5977:std::__2::__shared_ptr_pointer<_IO_FILE*\\2c\\20void\\20\\28*\\29\\28_IO_FILE*\\29\\2c\\20std::__2::allocator<_IO_FILE>>::__on_zero_shared\\28\\29\n5978:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\\28\\29.1\n5979:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\\28\\29\n5980:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::__on_zero_shared\\28\\29\n5981:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\\28\\29.1\n5982:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\\28\\29\n5983:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::__on_zero_shared\\28\\29\n5984:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\\2c\\20std::__2::allocator<SkUnicode_client::Data>>::~__shared_ptr_emplace\\28\\29.1\n5985:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\\2c\\20std::__2::allocator<SkUnicode_client::Data>>::~__shared_ptr_emplace\\28\\29\n5986:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\\2c\\20std::__2::allocator<SkUnicode_client::Data>>::__on_zero_shared\\28\\29\n5987:std::__2::__shared_ptr_emplace<SkSL::Context\\2c\\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\\28\\29.1\n5988:std::__2::__shared_ptr_emplace<SkSL::Context\\2c\\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\\28\\29\n5989:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n5990:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n5991:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n5992:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n5993:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n5994:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n5995:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n5996:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n5997:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n5998:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n5999:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6000:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6001:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6002:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6003:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6004:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6005:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6006:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6007:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::Cluster\\20const*&&\\2c\\20unsigned\\20long&&\\2c\\20bool&&\\29\n6008:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n6009:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6010:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::Cluster\\20const*&&\\2c\\20unsigned\\20long&&\\2c\\20bool&&\\29\n6011:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n6012:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6013:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6014:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6015:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6016:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6017:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6018:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6019:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6020:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6021:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6022:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6023:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6024:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6025:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6026:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6027:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6028:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6029:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6030:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6031:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6032:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6033:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6034:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6035:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6036:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6037:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6038:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6039:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6040:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6041:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6042:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6043:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6044:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6045:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6046:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n6047:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n6048:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n6049:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n6050:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n6051:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n6052:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20SkPoint&&\\2c\\20SkPoint&&\\2c\\20skia::textlayout::InternalLineMetrics&&\\2c\\20bool&&\\29\n6053:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>*\\29\\20const\n6054:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6055:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::operator\\28\\29\\28skia::textlayout::Cluster*&&\\29\n6056:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::Cluster*\\29>*\\29\\20const\n6057:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::__clone\\28\\29\\20const\n6058:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>*\\29\\20const\n6059:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6060:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20SkSpan<skia::textlayout::Block>&&\\2c\\20float&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20char&&\\29\n6061:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28std::__2::__function::__base<float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>*\\29\\20const\n6062:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28\\29\\20const\n6063:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::operator\\28\\29\\28skia::textlayout::Block&&\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>&&\\29\n6064:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>*\\29\\20const\n6065:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::__clone\\28\\29\\20const\n6066:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::operator\\28\\29\\28sk_sp<SkTypeface>&&\\29\n6067:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::__clone\\28std::__2::__function::__base<skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>*\\29\\20const\n6068:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::__clone\\28\\29\\20const\n6069:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\29\n6070:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>*\\29\\20const\n6071:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::__clone\\28\\29\\20const\n6072:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\n6073:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28std::__2::__function::__base<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>*\\29\\20const\n6074:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28\\29\\20const\n6075:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::~__func\\28\\29.1\n6076:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::~__func\\28\\29\n6077:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::operator\\28\\29\\28void*&&\\2c\\20void\\20const*&&\\29\n6078:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::destroy_deallocate\\28\\29\n6079:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::destroy\\28\\29\n6080:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28void*\\2c\\20void\\20const*\\29>*\\29\\20const\n6081:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::__clone\\28\\29\\20const\n6082:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6083:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6084:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6085:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6086:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6087:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6088:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n6089:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6090:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6091:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n6092:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6093:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6094:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n6095:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6096:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6097:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\n6098:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28std::__2::__function::__base<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>*\\29\\20const\n6099:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28\\29\\20const\n6100:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::operator\\28\\29\\28sktext::gpu::GlyphVector*&&\\2c\\20int&&\\2c\\20int&&\\2c\\20skgpu::MaskFormat&&\\2c\\20int&&\\29\n6101:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>*\\29\\20const\n6102:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::__clone\\28\\29\\20const\n6103:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::operator\\28\\29\\28GrSurfaceProxy\\20const*&&\\29\n6104:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28GrSurfaceProxy\\20const*\\29>*\\29\\20const\n6105:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::__clone\\28\\29\\20const\n6106:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20char\\20const*&&\\29\n6107:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20char\\20const*\\29>*\\29\\20const\n6108:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28\\29\\20const\n6109:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6110:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6111:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n6112:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n6113:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6114:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6115:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6116:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6117:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6118:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6119:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6120:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6121:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6122:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6123:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6124:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6125:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6126:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6127:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6128:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6129:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6130:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6131:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6132:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6133:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6134:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6135:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6136:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6137:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6138:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::~__func\\28\\29.1\n6139:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::~__func\\28\\29\n6140:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6141:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::destroy_deallocate\\28\\29\n6142:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::destroy\\28\\29\n6143:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6144:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6145:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20char\\20const*&&\\29\n6146:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20char\\20const*\\29>*\\29\\20const\n6147:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28\\29\\20const\n6148:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\29\n6149:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n6150:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n6151:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_0>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n6152:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_0>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n6153:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::operator\\28\\29\\28SkVertices\\20const*&&\\2c\\20SkBlendMode&&\\2c\\20SkPaint\\20const&\\2c\\20float&&\\2c\\20float&&\\2c\\20bool&&\\29\n6154:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>*\\29\\20const\n6155:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::__clone\\28\\29\\20const\n6156:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::operator\\28\\29\\28SkIRect\\20const&\\29\n6157:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28SkIRect\\20const&\\29>*\\29\\20const\n6158:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28\\29\\20const\n6159:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0>\\2c\\20SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>::operator\\28\\29\\28SkImageInfo\\20const&\\2c\\20void*&&\\2c\\20unsigned\\20long&&\\2c\\20SkCodec::Options\\20const&\\2c\\20int&&\\29\n6160:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0>\\2c\\20SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>*\\29\\20const\n6161:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const*\\29::$_0>\\2c\\20SkCodec::Result\\20\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int\\29>::__clone\\28\\29\\20const\n6162:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n6163:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n6164:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6165:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n6166:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n6167:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6168:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6169:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n6170:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n6171:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6172:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n6173:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n6174:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6175:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6176:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n6177:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n6178:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6179:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n6180:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n6181:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6182:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6183:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28GrTextureProxy*&&\\2c\\20SkIRect&&\\2c\\20GrColorType&&\\2c\\20void\\20const*&&\\2c\\20unsigned\\20long&&\\29\n6184:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>*\\29\\20const\n6185:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n6186:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::operator\\28\\29\\28GrBackendTexture&&\\29\n6187:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrBackendTexture\\29>*\\29\\20const\n6188:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::__clone\\28\\29\\20const\n6189:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6190:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6191:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6192:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n6193:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n6194:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n6195:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6196:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6197:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6198:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n6199:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n6200:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n6201:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n6202:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n6203:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n6204:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n6205:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n6206:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n6207:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29.1\n6208:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29\n6209:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n6210:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n6211:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29.1\n6212:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29\n6213:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n6214:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n6215:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::operator\\28\\29\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\n6216:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n6217:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n6218:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*&&\\29\n6219:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>*\\29\\20const\n6220:std::__2::__function::__func<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0\\2c\\20std::__2::allocator<GetShapedLines\\28skia::textlayout::Paragraph&\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::__clone\\28\\29\\20const\n6221:start_pass_upsample\n6222:start_pass_phuff_decoder\n6223:start_pass_merged_upsample\n6224:start_pass_main\n6225:start_pass_huff_decoder\n6226:start_pass_dpost\n6227:start_pass_2_quant\n6228:start_pass_1_quant\n6229:start_pass\n6230:start_output_pass\n6231:start_input_pass.1\n6232:stackSave\n6233:stackRestore\n6234:srgb_to_hwb\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n6235:srgb_to_hsl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n6236:srcover_p\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\n6237:sn_write\n6238:sktext::gpu::post_purge_blob_message\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n6239:sktext::gpu::VertexFiller::isLCD\\28\\29\\20const\n6240:sktext::gpu::TextBlob::~TextBlob\\28\\29.1\n6241:sktext::gpu::TextBlob::~TextBlob\\28\\29\n6242:sktext::gpu::SubRun::~SubRun\\28\\29\n6243:sktext::gpu::SlugImpl::~SlugImpl\\28\\29.1\n6244:sktext::gpu::SlugImpl::~SlugImpl\\28\\29\n6245:sktext::gpu::SlugImpl::sourceBounds\\28\\29\\20const\n6246:sktext::gpu::SlugImpl::sourceBoundsWithOrigin\\28\\29\\20const\n6247:sktext::gpu::SlugImpl::doFlatten\\28SkWriteBuffer&\\29\\20const\n6248:sktext::gpu::SDFMaskFilterImpl::getTypeName\\28\\29\\20const\n6249:sktext::gpu::SDFMaskFilterImpl::filterMask\\28SkMaskBuilder*\\2c\\20SkMask\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\29\\20const\n6250:sktext::gpu::SDFMaskFilterImpl::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n6251:skip_variable\n6252:skif::\\28anonymous\\20namespace\\29::RasterBackend::~RasterBackend\\28\\29\n6253:skif::\\28anonymous\\20namespace\\29::RasterBackend::makeImage\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\29\\20const\n6254:skif::\\28anonymous\\20namespace\\29::RasterBackend::makeDevice\\28SkISize\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const*\\29\\20const\n6255:skif::\\28anonymous\\20namespace\\29::RasterBackend::getCachedBitmap\\28SkBitmap\\20const&\\29\\20const\n6256:skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.1\n6257:skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29\n6258:skif::\\28anonymous\\20namespace\\29::GaneshBackend::makeImage\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\29\\20const\n6259:skif::\\28anonymous\\20namespace\\29::GaneshBackend::makeDevice\\28SkISize\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const*\\29\\20const\n6260:skif::\\28anonymous\\20namespace\\29::GaneshBackend::getCachedBitmap\\28SkBitmap\\20const&\\29\\20const\n6261:skif::\\28anonymous\\20namespace\\29::GaneshBackend::getBlurEngine\\28\\29\\20const\n6262:skif::\\28anonymous\\20namespace\\29::GaneshBackend::findAlgorithm\\28SkSize\\2c\\20SkColorType\\29\\20const\n6263:skia_png_zalloc\n6264:skia_png_write_rows\n6265:skia_png_write_info\n6266:skia_png_write_end\n6267:skia_png_user_version_check\n6268:skia_png_set_text\n6269:skia_png_set_sRGB\n6270:skia_png_set_keep_unknown_chunks\n6271:skia_png_set_iCCP\n6272:skia_png_set_gray_to_rgb\n6273:skia_png_set_filter\n6274:skia_png_set_filler\n6275:skia_png_read_update_info\n6276:skia_png_read_info\n6277:skia_png_read_image\n6278:skia_png_read_end\n6279:skia_png_push_fill_buffer\n6280:skia_png_process_data\n6281:skia_png_default_write_data\n6282:skia_png_default_read_data\n6283:skia_png_default_flush\n6284:skia_png_create_read_struct\n6285:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\\28\\29.1\n6286:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\\28\\29\n6287:skia::textlayout::TypefaceFontStyleSet::getStyle\\28int\\2c\\20SkFontStyle*\\2c\\20SkString*\\29\n6288:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\\28\\29.1\n6289:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\\28\\29\n6290:skia::textlayout::TypefaceFontProvider::onMatchFamily\\28char\\20const*\\29\\20const\n6291:skia::textlayout::TypefaceFontProvider::onMatchFamilyStyle\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\29\\20const\n6292:skia::textlayout::TypefaceFontProvider::onGetFamilyName\\28int\\2c\\20SkString*\\29\\20const\n6293:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::~ShapeHandler\\28\\29.1\n6294:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::~ShapeHandler\\28\\29\n6295:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::runBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6296:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6297:skia::textlayout::PositionWithAffinity*\\20emscripten::internal::raw_constructor<skia::textlayout::PositionWithAffinity>\\28\\29\n6298:skia::textlayout::ParagraphImpl::~ParagraphImpl\\28\\29.1\n6299:skia::textlayout::ParagraphImpl::visit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>\\20const&\\29\n6300:skia::textlayout::ParagraphImpl::updateTextAlign\\28skia::textlayout::TextAlign\\29\n6301:skia::textlayout::ParagraphImpl::updateForegroundPaint\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\29\n6302:skia::textlayout::ParagraphImpl::updateFontSize\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\29\n6303:skia::textlayout::ParagraphImpl::updateBackgroundPaint\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\29\n6304:skia::textlayout::ParagraphImpl::unresolvedGlyphs\\28\\29\n6305:skia::textlayout::ParagraphImpl::unresolvedCodepoints\\28\\29\n6306:skia::textlayout::ParagraphImpl::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29\n6307:skia::textlayout::ParagraphImpl::paint\\28SkCanvas*\\2c\\20float\\2c\\20float\\29\n6308:skia::textlayout::ParagraphImpl::markDirty\\28\\29\n6309:skia::textlayout::ParagraphImpl::lineNumber\\28\\29\n6310:skia::textlayout::ParagraphImpl::layout\\28float\\29\n6311:skia::textlayout::ParagraphImpl::getWordBoundary\\28unsigned\\20int\\29\n6312:skia::textlayout::ParagraphImpl::getRectsForRange\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n6313:skia::textlayout::ParagraphImpl::getRectsForPlaceholders\\28\\29\n6314:skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const::'lambda'\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29::__invoke\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\n6315:skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29\n6316:skia::textlayout::ParagraphImpl::getLineNumberAt\\28unsigned\\20long\\29\\20const\n6317:skia::textlayout::ParagraphImpl::getLineNumberAtUTF16Offset\\28unsigned\\20long\\29\n6318:skia::textlayout::ParagraphImpl::getLineMetrics\\28std::__2::vector<skia::textlayout::LineMetrics\\2c\\20std::__2::allocator<skia::textlayout::LineMetrics>>&\\29\n6319:skia::textlayout::ParagraphImpl::getLineMetricsAt\\28int\\2c\\20skia::textlayout::LineMetrics*\\29\\20const\n6320:skia::textlayout::ParagraphImpl::getGlyphPositionAtCoordinate\\28float\\2c\\20float\\29\n6321:skia::textlayout::ParagraphImpl::getFonts\\28\\29\\20const\n6322:skia::textlayout::ParagraphImpl::getFontAt\\28unsigned\\20long\\29\\20const\n6323:skia::textlayout::ParagraphImpl::getFontAtUTF16Offset\\28unsigned\\20long\\29\n6324:skia::textlayout::ParagraphImpl::getClosestUTF16GlyphInfoAt\\28float\\2c\\20float\\2c\\20skia::textlayout::Paragraph::GlyphInfo*\\29\n6325:skia::textlayout::ParagraphImpl::getClosestGlyphClusterAt\\28float\\2c\\20float\\2c\\20skia::textlayout::Paragraph::GlyphClusterInfo*\\29\n6326:skia::textlayout::ParagraphImpl::getActualTextRange\\28int\\2c\\20bool\\29\\20const\n6327:skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29\n6328:skia::textlayout::ParagraphImpl::containsEmoji\\28SkTextBlob*\\29\n6329:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\\28SkTextBlob*\\29::$_0::__invoke\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\n6330:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\\28SkTextBlob*\\29\n6331:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\\28\\29.1\n6332:skia::textlayout::ParagraphBuilderImpl::setWordsUtf8\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n6333:skia::textlayout::ParagraphBuilderImpl::setWordsUtf16\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n6334:skia::textlayout::ParagraphBuilderImpl::setLineBreaksUtf8\\28std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>\\29\n6335:skia::textlayout::ParagraphBuilderImpl::setLineBreaksUtf16\\28std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>\\29\n6336:skia::textlayout::ParagraphBuilderImpl::setGraphemeBreaksUtf8\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n6337:skia::textlayout::ParagraphBuilderImpl::setGraphemeBreaksUtf16\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n6338:skia::textlayout::ParagraphBuilderImpl::pushStyle\\28skia::textlayout::TextStyle\\20const&\\29\n6339:skia::textlayout::ParagraphBuilderImpl::pop\\28\\29\n6340:skia::textlayout::ParagraphBuilderImpl::peekStyle\\28\\29\n6341:skia::textlayout::ParagraphBuilderImpl::getText\\28\\29\n6342:skia::textlayout::ParagraphBuilderImpl::getParagraphStyle\\28\\29\\20const\n6343:skia::textlayout::ParagraphBuilderImpl::addText\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n6344:skia::textlayout::ParagraphBuilderImpl::addText\\28char\\20const*\\2c\\20unsigned\\20long\\29\n6345:skia::textlayout::ParagraphBuilderImpl::addText\\28char\\20const*\\29\n6346:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\\28skia::textlayout::PlaceholderStyle\\20const&\\29\n6347:skia::textlayout::ParagraphBuilderImpl::SetUnicode\\28sk_sp<SkUnicode>\\29\n6348:skia::textlayout::ParagraphBuilderImpl::Reset\\28\\29\n6349:skia::textlayout::ParagraphBuilderImpl::RequiresClientICU\\28\\29\n6350:skia::textlayout::ParagraphBuilderImpl::Build\\28\\29\n6351:skia::textlayout::Paragraph::getMinIntrinsicWidth\\28\\29\n6352:skia::textlayout::Paragraph::getMaxWidth\\28\\29\n6353:skia::textlayout::Paragraph::getMaxIntrinsicWidth\\28\\29\n6354:skia::textlayout::Paragraph::getLongestLine\\28\\29\n6355:skia::textlayout::Paragraph::getIdeographicBaseline\\28\\29\n6356:skia::textlayout::Paragraph::getHeight\\28\\29\n6357:skia::textlayout::Paragraph::getAlphabeticBaseline\\28\\29\n6358:skia::textlayout::Paragraph::didExceedMaxLines\\28\\29\n6359:skia::textlayout::Paragraph::FontInfo::~FontInfo\\28\\29.1\n6360:skia::textlayout::Paragraph::FontInfo::~FontInfo\\28\\29\n6361:skia::textlayout::OneLineShaper::~OneLineShaper\\28\\29.1\n6362:skia::textlayout::OneLineShaper::runBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6363:skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n6364:skia::textlayout::LangIterator::~LangIterator\\28\\29.1\n6365:skia::textlayout::LangIterator::~LangIterator\\28\\29\n6366:skia::textlayout::LangIterator::endOfCurrentRun\\28\\29\\20const\n6367:skia::textlayout::LangIterator::currentLanguage\\28\\29\\20const\n6368:skia::textlayout::LangIterator::consume\\28\\29\n6369:skia::textlayout::LangIterator::atEnd\\28\\29\\20const\n6370:skia::textlayout::FontCollection::~FontCollection\\28\\29.1\n6371:skia::textlayout::CanvasParagraphPainter::translate\\28float\\2c\\20float\\29\n6372:skia::textlayout::CanvasParagraphPainter::save\\28\\29\n6373:skia::textlayout::CanvasParagraphPainter::restore\\28\\29\n6374:skia::textlayout::CanvasParagraphPainter::drawTextShadow\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20float\\29\n6375:skia::textlayout::CanvasParagraphPainter::drawTextBlob\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n6376:skia::textlayout::CanvasParagraphPainter::drawRect\\28SkRect\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n6377:skia::textlayout::CanvasParagraphPainter::drawPath\\28SkPath\\20const&\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n6378:skia::textlayout::CanvasParagraphPainter::drawLine\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n6379:skia::textlayout::CanvasParagraphPainter::drawFilledRect\\28SkRect\\20const&\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n6380:skia::textlayout::CanvasParagraphPainter::clipRect\\28SkRect\\20const&\\29\n6381:skgpu::tess::FixedCountWedges::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6382:skgpu::tess::FixedCountWedges::WriteIndexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6383:skgpu::tess::FixedCountStrokes::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6384:skgpu::tess::FixedCountCurves::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6385:skgpu::tess::FixedCountCurves::WriteIndexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n6386:skgpu::ganesh::texture_proxy_view_from_planes\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20skgpu::Budgeted\\29::$_0::__invoke\\28void*\\2c\\20void*\\29\n6387:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::~SmallPathOp\\28\\29.1\n6388:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6389:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6390:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6391:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6392:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::name\\28\\29\\20const\n6393:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::fixedFunctionFlags\\28\\29\\20const\n6394:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6395:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::name\\28\\29\\20const\n6396:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n6397:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6398:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6399:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n6400:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::~HullShader\\28\\29.1\n6401:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::~HullShader\\28\\29\n6402:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::name\\28\\29\\20const\n6403:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6404:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6405:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\\28\\29.1\n6406:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\\28\\29\n6407:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6408:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6409:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6410:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6411:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6412:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::name\\28\\29\\20const\n6413:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::fixedFunctionFlags\\28\\29\\20const\n6414:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6415:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::~AAConvexPathOp\\28\\29.1\n6416:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::~AAConvexPathOp\\28\\29\n6417:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6418:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6419:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6420:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6421:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6422:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::name\\28\\29\\20const\n6423:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6424:skgpu::ganesh::TriangulatingPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6425:skgpu::ganesh::TriangulatingPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6426:skgpu::ganesh::TriangulatingPathRenderer::name\\28\\29\\20const\n6427:skgpu::ganesh::TessellationPathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n6428:skgpu::ganesh::TessellationPathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n6429:skgpu::ganesh::TessellationPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6430:skgpu::ganesh::TessellationPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6431:skgpu::ganesh::TessellationPathRenderer::name\\28\\29\\20const\n6432:skgpu::ganesh::SurfaceDrawContext::willReplaceOpsTask\\28skgpu::ganesh::OpsTask*\\2c\\20skgpu::ganesh::OpsTask*\\29\n6433:skgpu::ganesh::SurfaceDrawContext::canDiscardPreviousOpsOnFullClear\\28\\29\\20const\n6434:skgpu::ganesh::SurfaceContext::~SurfaceContext\\28\\29.1\n6435:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n6436:skgpu::ganesh::SurfaceContext::asyncReadPixels\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\2c\\20SkColorType\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n6437:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\\28\\29.1\n6438:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\\28\\29\n6439:skgpu::ganesh::StrokeTessellateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6440:skgpu::ganesh::StrokeTessellateOp::usesStencil\\28\\29\\20const\n6441:skgpu::ganesh::StrokeTessellateOp::onPrepare\\28GrOpFlushState*\\29\n6442:skgpu::ganesh::StrokeTessellateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6443:skgpu::ganesh::StrokeTessellateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6444:skgpu::ganesh::StrokeTessellateOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6445:skgpu::ganesh::StrokeTessellateOp::name\\28\\29\\20const\n6446:skgpu::ganesh::StrokeTessellateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6447:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\\28\\29.1\n6448:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\\28\\29\n6449:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6450:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::programInfo\\28\\29\n6451:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6452:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6453:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6454:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::name\\28\\29\\20const\n6455:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6456:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::~AAStrokeRectOp\\28\\29.1\n6457:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::~AAStrokeRectOp\\28\\29\n6458:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6459:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::programInfo\\28\\29\n6460:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6461:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6462:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6463:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6464:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::name\\28\\29\\20const\n6465:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6466:skgpu::ganesh::StencilClip::~StencilClip\\28\\29.1\n6467:skgpu::ganesh::StencilClip::~StencilClip\\28\\29\n6468:skgpu::ganesh::StencilClip::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n6469:skgpu::ganesh::StencilClip::getConservativeBounds\\28\\29\\20const\n6470:skgpu::ganesh::StencilClip::apply\\28GrAppliedHardClip*\\2c\\20SkIRect*\\29\\20const\n6471:skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6472:skgpu::ganesh::SoftwarePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6473:skgpu::ganesh::SoftwarePathRenderer::name\\28\\29\\20const\n6474:skgpu::ganesh::SmallPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6475:skgpu::ganesh::SmallPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6476:skgpu::ganesh::SmallPathRenderer::name\\28\\29\\20const\n6477:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29.1\n6478:skgpu::ganesh::SmallPathAtlasMgr::preFlush\\28GrOnFlushResourceProvider*\\29\n6479:skgpu::ganesh::SmallPathAtlasMgr::postFlush\\28skgpu::AtlasToken\\29\n6480:skgpu::ganesh::SmallPathAtlasMgr::evict\\28skgpu::PlotLocator\\29\n6481:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::~RegionOpImpl\\28\\29.1\n6482:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::~RegionOpImpl\\28\\29\n6483:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6484:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::programInfo\\28\\29\n6485:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6486:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6487:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6488:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6489:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::name\\28\\29\\20const\n6490:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6491:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_quad_generic\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6492:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6493:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6494:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_cov_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6495:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_cov_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6496:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6497:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6498:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6499:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\\28\\29.1\n6500:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\\28\\29\n6501:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::onTextureSampler\\28int\\29\\20const\n6502:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::name\\28\\29\\20const\n6503:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n6504:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6505:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6506:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n6507:skgpu::ganesh::PathWedgeTessellator::prepare\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n6508:skgpu::ganesh::PathTessellator::~PathTessellator\\28\\29\n6509:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\\28\\29.1\n6510:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\\28\\29\n6511:skgpu::ganesh::PathTessellateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6512:skgpu::ganesh::PathTessellateOp::usesStencil\\28\\29\\20const\n6513:skgpu::ganesh::PathTessellateOp::onPrepare\\28GrOpFlushState*\\29\n6514:skgpu::ganesh::PathTessellateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6515:skgpu::ganesh::PathTessellateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6516:skgpu::ganesh::PathTessellateOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6517:skgpu::ganesh::PathTessellateOp::name\\28\\29\\20const\n6518:skgpu::ganesh::PathTessellateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6519:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\\28\\29.1\n6520:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\\28\\29\n6521:skgpu::ganesh::PathStencilCoverOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6522:skgpu::ganesh::PathStencilCoverOp::onPrepare\\28GrOpFlushState*\\29\n6523:skgpu::ganesh::PathStencilCoverOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6524:skgpu::ganesh::PathStencilCoverOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6525:skgpu::ganesh::PathStencilCoverOp::name\\28\\29\\20const\n6526:skgpu::ganesh::PathStencilCoverOp::fixedFunctionFlags\\28\\29\\20const\n6527:skgpu::ganesh::PathStencilCoverOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6528:skgpu::ganesh::PathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n6529:skgpu::ganesh::PathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n6530:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\\28\\29.1\n6531:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\\28\\29\n6532:skgpu::ganesh::PathInnerTriangulateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6533:skgpu::ganesh::PathInnerTriangulateOp::onPrepare\\28GrOpFlushState*\\29\n6534:skgpu::ganesh::PathInnerTriangulateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6535:skgpu::ganesh::PathInnerTriangulateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6536:skgpu::ganesh::PathInnerTriangulateOp::name\\28\\29\\20const\n6537:skgpu::ganesh::PathInnerTriangulateOp::fixedFunctionFlags\\28\\29\\20const\n6538:skgpu::ganesh::PathInnerTriangulateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6539:skgpu::ganesh::PathCurveTessellator::prepare\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n6540:skgpu::ganesh::OpsTask::~OpsTask\\28\\29.1\n6541:skgpu::ganesh::OpsTask::onPrepare\\28GrOpFlushState*\\29\n6542:skgpu::ganesh::OpsTask::onPrePrepare\\28GrRecordingContext*\\29\n6543:skgpu::ganesh::OpsTask::onMakeSkippable\\28\\29\n6544:skgpu::ganesh::OpsTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n6545:skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n6546:skgpu::ganesh::OpsTask::endFlush\\28GrDrawingManager*\\29\n6547:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::~NonAALatticeOp\\28\\29.1\n6548:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6549:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6550:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6551:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6552:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6553:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::name\\28\\29\\20const\n6554:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6555:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::~LatticeGP\\28\\29.1\n6556:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::~LatticeGP\\28\\29\n6557:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::onTextureSampler\\28int\\29\\20const\n6558:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::name\\28\\29\\20const\n6559:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n6560:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6561:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6562:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n6563:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::~FillRRectOpImpl\\28\\29.1\n6564:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::~FillRRectOpImpl\\28\\29\n6565:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6566:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::programInfo\\28\\29\n6567:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6568:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6569:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6570:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6571:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::name\\28\\29\\20const\n6572:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6573:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::clipToShape\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20SkClipOp\\2c\\20SkMatrix\\20const&\\2c\\20GrShape\\20const&\\2c\\20GrAA\\29\n6574:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::~Processor\\28\\29.1\n6575:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::~Processor\\28\\29\n6576:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::name\\28\\29\\20const\n6577:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6578:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n6579:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6580:skgpu::ganesh::DrawableOp::~DrawableOp\\28\\29.1\n6581:skgpu::ganesh::DrawableOp::~DrawableOp\\28\\29\n6582:skgpu::ganesh::DrawableOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6583:skgpu::ganesh::DrawableOp::name\\28\\29\\20const\n6584:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\\28\\29.1\n6585:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\\28\\29\n6586:skgpu::ganesh::DrawAtlasPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6587:skgpu::ganesh::DrawAtlasPathOp::onPrepare\\28GrOpFlushState*\\29\n6588:skgpu::ganesh::DrawAtlasPathOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6589:skgpu::ganesh::DrawAtlasPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6590:skgpu::ganesh::DrawAtlasPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6591:skgpu::ganesh::DrawAtlasPathOp::name\\28\\29\\20const\n6592:skgpu::ganesh::DrawAtlasPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6593:skgpu::ganesh::Device::~Device\\28\\29.1\n6594:skgpu::ganesh::Device::~Device\\28\\29\n6595:skgpu::ganesh::Device::strikeDeviceInfo\\28\\29\\20const\n6596:skgpu::ganesh::Device::snapSpecial\\28SkIRect\\20const&\\2c\\20bool\\29\n6597:skgpu::ganesh::Device::snapSpecialScaled\\28SkIRect\\20const&\\2c\\20SkISize\\20const&\\29\n6598:skgpu::ganesh::Device::replaceClip\\28SkIRect\\20const&\\29\n6599:skgpu::ganesh::Device::recordingContext\\28\\29\\20const\n6600:skgpu::ganesh::Device::pushClipStack\\28\\29\n6601:skgpu::ganesh::Device::popClipStack\\28\\29\n6602:skgpu::ganesh::Device::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n6603:skgpu::ganesh::Device::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n6604:skgpu::ganesh::Device::onDrawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n6605:skgpu::ganesh::Device::onClipShader\\28sk_sp<SkShader>\\29\n6606:skgpu::ganesh::Device::makeSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n6607:skgpu::ganesh::Device::makeSpecial\\28SkImage\\20const*\\29\n6608:skgpu::ganesh::Device::isClipWideOpen\\28\\29\\20const\n6609:skgpu::ganesh::Device::isClipRect\\28\\29\\20const\n6610:skgpu::ganesh::Device::isClipEmpty\\28\\29\\20const\n6611:skgpu::ganesh::Device::isClipAntiAliased\\28\\29\\20const\n6612:skgpu::ganesh::Device::drawVertices\\28SkVertices\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n6613:skgpu::ganesh::Device::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n6614:skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n6615:skgpu::ganesh::Device::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n6616:skgpu::ganesh::Device::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n6617:skgpu::ganesh::Device::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n6618:skgpu::ganesh::Device::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n6619:skgpu::ganesh::Device::drawPaint\\28SkPaint\\20const&\\29\n6620:skgpu::ganesh::Device::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n6621:skgpu::ganesh::Device::drawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n6622:skgpu::ganesh::Device::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n6623:skgpu::ganesh::Device::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const&\\29\n6624:skgpu::ganesh::Device::drawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n6625:skgpu::ganesh::Device::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n6626:skgpu::ganesh::Device::drawDrawable\\28SkCanvas*\\2c\\20SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n6627:skgpu::ganesh::Device::drawDevice\\28SkDevice*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n6628:skgpu::ganesh::Device::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n6629:skgpu::ganesh::Device::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n6630:skgpu::ganesh::Device::drawAsTiledImageRect\\28SkCanvas*\\2c\\20SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n6631:skgpu::ganesh::Device::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n6632:skgpu::ganesh::Device::devClipBounds\\28\\29\\20const\n6633:skgpu::ganesh::Device::createImageFilteringBackend\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\29\\20const\n6634:skgpu::ganesh::Device::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n6635:skgpu::ganesh::Device::convertGlyphRunListToSlug\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n6636:skgpu::ganesh::Device::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n6637:skgpu::ganesh::Device::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n6638:skgpu::ganesh::Device::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n6639:skgpu::ganesh::Device::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n6640:skgpu::ganesh::Device::android_utils_clipWithStencil\\28\\29\n6641:skgpu::ganesh::DefaultPathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n6642:skgpu::ganesh::DefaultPathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n6643:skgpu::ganesh::DefaultPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6644:skgpu::ganesh::DefaultPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6645:skgpu::ganesh::DefaultPathRenderer::name\\28\\29\\20const\n6646:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::name\\28\\29\\20const\n6647:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6648:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n6649:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6650:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::name\\28\\29\\20const\n6651:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n6652:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n6653:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n6654:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::~DashOpImpl\\28\\29.1\n6655:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::~DashOpImpl\\28\\29\n6656:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6657:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::programInfo\\28\\29\n6658:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6659:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6660:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n6661:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6662:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::name\\28\\29\\20const\n6663:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::fixedFunctionFlags\\28\\29\\20const\n6664:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6665:skgpu::ganesh::DashLinePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6666:skgpu::ganesh::DashLinePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6667:skgpu::ganesh::DashLinePathRenderer::name\\28\\29\\20const\n6668:skgpu::ganesh::ClipStack::~ClipStack\\28\\29.1\n6669:skgpu::ganesh::ClipStack::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n6670:skgpu::ganesh::ClipStack::apply\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrDrawOp*\\2c\\20GrAAType\\2c\\20GrAppliedClip*\\2c\\20SkRect*\\29\\20const\n6671:skgpu::ganesh::ClearOp::~ClearOp\\28\\29\n6672:skgpu::ganesh::ClearOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6673:skgpu::ganesh::ClearOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6674:skgpu::ganesh::ClearOp::name\\28\\29\\20const\n6675:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\\28\\29.1\n6676:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\\28\\29\n6677:skgpu::ganesh::AtlasTextOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n6678:skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n6679:skgpu::ganesh::AtlasTextOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n6680:skgpu::ganesh::AtlasTextOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n6681:skgpu::ganesh::AtlasTextOp::name\\28\\29\\20const\n6682:skgpu::ganesh::AtlasTextOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n6683:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\\28\\29.1\n6684:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\\28\\29\n6685:skgpu::ganesh::AtlasRenderTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n6686:skgpu::ganesh::AtlasRenderTask::onExecute\\28GrOpFlushState*\\29\n6687:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29.1\n6688:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29\n6689:skgpu::ganesh::AtlasPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6690:skgpu::ganesh::AtlasPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6691:skgpu::ganesh::AtlasPathRenderer::name\\28\\29\\20const\n6692:skgpu::ganesh::AALinearizingConvexPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6693:skgpu::ganesh::AALinearizingConvexPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6694:skgpu::ganesh::AALinearizingConvexPathRenderer::name\\28\\29\\20const\n6695:skgpu::ganesh::AAHairLinePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6696:skgpu::ganesh::AAHairLinePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6697:skgpu::ganesh::AAHairLinePathRenderer::name\\28\\29\\20const\n6698:skgpu::ganesh::AAConvexPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n6699:skgpu::ganesh::AAConvexPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n6700:skgpu::ganesh::AAConvexPathRenderer::name\\28\\29\\20const\n6701:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\\28\\29.1\n6702:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::rowBytes\\28int\\29\\20const\n6703:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::data\\28int\\29\\20const\n6704:skgpu::StringKeyBuilder::~StringKeyBuilder\\28\\29.1\n6705:skgpu::StringKeyBuilder::~StringKeyBuilder\\28\\29\n6706:skgpu::StringKeyBuilder::appendComment\\28char\\20const*\\29\n6707:skgpu::StringKeyBuilder::addBits\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n6708:skgpu::ShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n6709:skgpu::RectanizerSkyline::~RectanizerSkyline\\28\\29.1\n6710:skgpu::RectanizerSkyline::~RectanizerSkyline\\28\\29\n6711:skgpu::RectanizerSkyline::reset\\28\\29\n6712:skgpu::RectanizerSkyline::percentFull\\28\\29\\20const\n6713:skgpu::RectanizerPow2::reset\\28\\29\n6714:skgpu::RectanizerPow2::percentFull\\28\\29\\20const\n6715:skgpu::RectanizerPow2::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n6716:skgpu::Plot::~Plot\\28\\29.1\n6717:skgpu::Plot::~Plot\\28\\29\n6718:skgpu::KeyBuilder::~KeyBuilder\\28\\29\n6719:skgpu::KeyBuilder::addBits\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n6720:skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29\n6721:sk_write_fn\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n6722:sk_sp<SkColorSpace>*\\20emscripten::internal::MemberAccess<SimpleImageInfo\\2c\\20sk_sp<SkColorSpace>>::getWire<SimpleImageInfo>\\28sk_sp<SkColorSpace>\\20SimpleImageInfo::*\\20const&\\2c\\20SimpleImageInfo\\20const&\\29\n6723:sk_read_user_chunk\\28png_struct_def*\\2c\\20png_unknown_chunk_t*\\29\n6724:sk_mmap_releaseproc\\28void\\20const*\\2c\\20void*\\29\n6725:sk_ft_stream_io\\28FT_StreamRec_*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n6726:sk_ft_realloc\\28FT_MemoryRec_*\\2c\\20long\\2c\\20long\\2c\\20void*\\29\n6727:sk_ft_free\\28FT_MemoryRec_*\\2c\\20void*\\29\n6728:sk_ft_alloc\\28FT_MemoryRec_*\\2c\\20long\\29\n6729:sk_dataref_releaseproc\\28void\\20const*\\2c\\20void*\\29\n6730:sfnt_table_info\n6731:sfnt_stream_close\n6732:sfnt_load_face\n6733:sfnt_is_postscript\n6734:sfnt_is_alphanumeric\n6735:sfnt_init_face\n6736:sfnt_get_ps_name\n6737:sfnt_get_name_index\n6738:sfnt_get_name_id\n6739:sfnt_get_interface\n6740:sfnt_get_glyph_name\n6741:sfnt_get_charset_id\n6742:sfnt_done_face\n6743:setup_syllables_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6744:setup_syllables_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6745:setup_syllables_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6746:setup_syllables_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6747:setup_masks_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6748:setup_masks_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6749:setup_masks_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6750:setup_masks_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6751:setup_masks_hangul\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6752:setup_masks_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6753:sep_upsample\n6754:self_destruct\n6755:save_marker\n6756:sample8\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6757:sample6\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6758:sample4\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6759:sample2\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6760:sample1\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n6761:rgb_rgb_convert\n6762:rgb_rgb565_convert\n6763:rgb_rgb565D_convert\n6764:rgb_gray_convert\n6765:reverse_hit_compare_y\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n6766:reverse_hit_compare_x\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n6767:reset_marker_reader\n6768:reset_input_controller\n6769:reset_error_mgr\n6770:request_virt_sarray\n6771:request_virt_barray\n6772:reorder_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6773:reorder_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6774:reorder_marks_hebrew\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6775:reorder_marks_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n6776:reorder_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6777:release_data\\28void*\\2c\\20void*\\29\n6778:record_stch\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6779:record_rphf_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6780:record_pref_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n6781:realize_virt_arrays\n6782:read_restart_marker\n6783:read_markers\n6784:read_data_from_FT_Stream\n6785:quantize_ord_dither\n6786:quantize_fs_dither\n6787:quantize3_ord_dither\n6788:psnames_get_service\n6789:pshinter_get_t2_funcs\n6790:pshinter_get_t1_funcs\n6791:pshinter_get_globals_funcs\n6792:psh_globals_new\n6793:psh_globals_destroy\n6794:psaux_get_glyph_name\n6795:ps_table_release\n6796:ps_table_new\n6797:ps_table_done\n6798:ps_table_add\n6799:ps_property_set\n6800:ps_property_get\n6801:ps_parser_to_token_array\n6802:ps_parser_to_int\n6803:ps_parser_to_fixed_array\n6804:ps_parser_to_fixed\n6805:ps_parser_to_coord_array\n6806:ps_parser_to_bytes\n6807:ps_parser_skip_spaces\n6808:ps_parser_load_field_table\n6809:ps_parser_init\n6810:ps_hints_t2mask\n6811:ps_hints_t2counter\n6812:ps_hints_t1stem3\n6813:ps_hints_t1reset\n6814:ps_hints_close\n6815:ps_hints_apply\n6816:ps_hinter_init\n6817:ps_hinter_done\n6818:ps_get_standard_strings\n6819:ps_get_macintosh_name\n6820:ps_decoder_init\n6821:ps_builder_init\n6822:progress_monitor\\28jpeg_common_struct*\\29\n6823:process_data_simple_main\n6824:process_data_crank_post\n6825:process_data_context_main\n6826:prescan_quantize\n6827:preprocess_text_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6828:preprocess_text_thai\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6829:preprocess_text_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6830:preprocess_text_hangul\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6831:prepare_for_output_pass\n6832:premultiply_data\n6833:premul_rgb\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n6834:premul_polar\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n6835:postprocess_glyphs_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n6836:post_process_prepass\n6837:post_process_2pass\n6838:post_process_1pass\n6839:portable::xy_to_unit_angle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6840:portable::xy_to_radius\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6841:portable::xy_to_2pt_conical_well_behaved\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6842:portable::xy_to_2pt_conical_strip\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6843:portable::xy_to_2pt_conical_smaller\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6844:portable::xy_to_2pt_conical_greater\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6845:portable::xy_to_2pt_conical_focal_on_circle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6846:portable::xor_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6847:portable::white_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6848:portable::unpremul_polar\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6849:portable::unpremul\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6850:portable::trace_var\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6851:portable::trace_scope\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6852:portable::trace_line\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6853:portable::trace_exit\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6854:portable::trace_enter\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6855:portable::tan_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6856:portable::swizzle_copy_to_indirect_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6857:portable::swizzle_copy_slot_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6858:portable::swizzle_copy_4_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6859:portable::swizzle_copy_3_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6860:portable::swizzle_copy_2_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6861:portable::swizzle_4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6862:portable::swizzle_3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6863:portable::swizzle_2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6864:portable::swizzle_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6865:portable::swizzle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6866:portable::swap_src_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6867:portable::swap_rb_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6868:portable::swap_rb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6869:portable::sub_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6870:portable::sub_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6871:portable::sub_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6872:portable::sub_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6873:portable::sub_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6874:portable::sub_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6875:portable::sub_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6876:portable::sub_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6877:portable::sub_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6878:portable::sub_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6879:portable::store_src_rg\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6880:portable::store_src_a\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6881:portable::store_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6882:portable::store_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6883:portable::store_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6884:portable::store_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6885:portable::store_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6886:portable::store_r8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6887:portable::store_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6888:portable::store_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6889:portable::store_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6890:portable::store_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6891:portable::store_device_xy01\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6892:portable::store_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6893:portable::store_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6894:portable::store_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6895:portable::store_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6896:portable::store_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6897:portable::store_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6898:portable::store_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6899:portable::store_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6900:portable::store_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6901:portable::store_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6902:portable::store_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6903:portable::start_pipeline\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkRasterPipelineStage*\\2c\\20SkSpan<SkRasterPipeline_MemoryCtxPatch>\\2c\\20unsigned\\20char*\\29\n6904:portable::stack_rewind\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6905:portable::stack_checkpoint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6906:portable::srcover_rgba_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6907:portable::srcover\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6908:portable::srcout\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6909:portable::srcin\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6910:portable::srcatop\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6911:portable::sqrt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6912:portable::splat_4_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6913:portable::splat_3_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6914:portable::splat_2_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6915:portable::softlight\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6916:portable::smoothstep_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6917:portable::sin_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6918:portable::shuffle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6919:portable::set_base_pointer\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6920:portable::seed_shader\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6921:portable::screen\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6922:portable::scale_u8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6923:portable::scale_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6924:portable::saturation\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6925:portable::rgb_to_hsl\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6926:portable::repeat_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6927:portable::repeat_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6928:portable::repeat_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6929:portable::refract_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6930:portable::reenable_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6931:portable::rect_memset64\\28unsigned\\20long\\20long*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n6932:portable::rect_memset32\\28unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n6933:portable::rect_memset16\\28unsigned\\20short*\\2c\\20unsigned\\20short\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n6934:portable::premul_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6935:portable::premul\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6936:portable::pow_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6937:portable::plus_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6938:portable::perlin_noise\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6939:portable::parametric\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6940:portable::overlay\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6941:portable::negate_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6942:portable::multiply\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6943:portable::mul_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6944:portable::mul_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6945:portable::mul_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6946:portable::mul_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6947:portable::mul_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6948:portable::mul_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6949:portable::mul_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6950:portable::mul_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6951:portable::mul_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6952:portable::mul_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6953:portable::mul_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6954:portable::mul_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6955:portable::move_src_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6956:portable::move_dst_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6957:portable::modulate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6958:portable::mod_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6959:portable::mod_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6960:portable::mod_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6961:portable::mod_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6962:portable::mod_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6963:portable::mix_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6964:portable::mix_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6965:portable::mix_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6966:portable::mix_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6967:portable::mix_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6968:portable::mix_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6969:portable::mix_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6970:portable::mix_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6971:portable::mix_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6972:portable::mix_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6973:portable::mirror_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6974:portable::mirror_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6975:portable::mirror_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6976:portable::mipmap_linear_update\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6977:portable::mipmap_linear_init\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6978:portable::mipmap_linear_finish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6979:portable::min_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6980:portable::min_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6981:portable::min_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6982:portable::min_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6983:portable::min_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6984:portable::min_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6985:portable::min_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6986:portable::min_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6987:portable::min_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6988:portable::min_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6989:portable::min_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6990:portable::min_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6991:portable::min_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6992:portable::min_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6993:portable::min_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6994:portable::min_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6995:portable::merge_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6996:portable::merge_inv_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6997:portable::merge_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n6998:portable::memset32\\28unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20int\\29\n6999:portable::memset16\\28unsigned\\20short*\\2c\\20unsigned\\20short\\2c\\20int\\29\n7000:portable::max_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7001:portable::max_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7002:portable::max_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7003:portable::max_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7004:portable::max_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7005:portable::max_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7006:portable::max_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7007:portable::max_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7008:portable::max_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7009:portable::max_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7010:portable::max_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7011:portable::max_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7012:portable::max_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7013:portable::max_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7014:portable::max_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7015:portable::max_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7016:portable::matrix_translate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7017:portable::matrix_scale_translate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7018:portable::matrix_perspective\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7019:portable::matrix_multiply_4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7020:portable::matrix_multiply_3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7021:portable::matrix_multiply_2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7022:portable::matrix_4x5\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7023:portable::matrix_4x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7024:portable::matrix_3x4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7025:portable::matrix_3x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7026:portable::matrix_2x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7027:portable::mask_off_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7028:portable::mask_off_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7029:portable::mask_2pt_conical_nan\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7030:portable::mask_2pt_conical_degenerates\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7031:portable::luminosity\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7032:portable::log_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7033:portable::log2_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7034:portable::load_src_rg\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7035:portable::load_rgf16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7036:portable::load_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7037:portable::load_rg88_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7038:portable::load_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7039:portable::load_rg1616_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7040:portable::load_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7041:portable::load_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7042:portable::load_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7043:portable::load_f32_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7044:portable::load_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7045:portable::load_f16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7046:portable::load_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7047:portable::load_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7048:portable::load_af16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7049:portable::load_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7050:portable::load_a8_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7051:portable::load_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7052:portable::load_a16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7053:portable::load_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7054:portable::load_8888_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7055:portable::load_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7056:portable::load_565_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7057:portable::load_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7058:portable::load_4444_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7059:portable::load_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7060:portable::load_16161616_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7061:portable::load_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7062:portable::load_10x6_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7063:portable::load_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7064:portable::load_1010102_xr_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7065:portable::load_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7066:portable::load_1010102_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7067:portable::load_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7068:portable::lighten\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7069:portable::lerp_u8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7070:portable::lerp_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7071:portable::just_return\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7072:portable::jump\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7073:portable::invsqrt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7074:portable::invsqrt_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7075:portable::invsqrt_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7076:portable::invsqrt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7077:portable::inverted_CMYK_to_RGB1\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7078:portable::inverted_CMYK_to_BGR1\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7079:portable::inverse_mat4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7080:portable::inverse_mat3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7081:portable::inverse_mat2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7082:portable::init_lane_masks\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7083:portable::hue\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7084:portable::hsl_to_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7085:portable::hardlight\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7086:portable::gray_to_RGB1\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7087:portable::grayA_to_rgbA\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7088:portable::grayA_to_RGBA\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7089:portable::gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7090:portable::gauss_a_to_rgba\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7091:portable::gather_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7092:portable::gather_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7093:portable::gather_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7094:portable::gather_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7095:portable::gather_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7096:portable::gather_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7097:portable::gather_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7098:portable::gather_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7099:portable::gather_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7100:portable::gather_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7101:portable::gather_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7102:portable::gather_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7103:portable::gather_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7104:portable::gather_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7105:portable::gather_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7106:portable::gamma_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7107:portable::force_opaque_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7108:portable::force_opaque\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7109:portable::floor_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7110:portable::floor_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7111:portable::floor_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7112:portable::floor_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7113:portable::exp_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7114:portable::exp2_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7115:portable::exclusion\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7116:portable::exchange_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7117:portable::evenly_spaced_gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7118:portable::evenly_spaced_2_stop_gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7119:portable::emboss\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7120:portable::dstover\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7121:portable::dstout\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7122:portable::dstin\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7123:portable::dstatop\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7124:portable::dot_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7125:portable::dot_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7126:portable::dot_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7127:portable::div_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7128:portable::div_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7129:portable::div_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7130:portable::div_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7131:portable::div_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7132:portable::div_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7133:portable::div_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7134:portable::div_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7135:portable::div_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7136:portable::div_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7137:portable::div_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7138:portable::div_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7139:portable::div_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7140:portable::div_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7141:portable::div_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7142:portable::dither\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7143:portable::difference\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7144:portable::decal_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7145:portable::decal_x_and_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7146:portable::decal_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7147:portable::darken\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7148:portable::css_oklab_to_linear_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7149:portable::css_oklab_gamut_map_to_linear_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7150:portable::css_lab_to_xyz\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7151:portable::css_hwb_to_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7152:portable::css_hsl_to_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7153:portable::css_hcl_to_lab\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7154:portable::cos_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7155:portable::copy_uniform\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7156:portable::copy_to_indirect_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7157:portable::copy_slot_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7158:portable::copy_slot_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7159:portable::copy_immutable_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7160:portable::copy_constant\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7161:portable::copy_4_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7162:portable::copy_4_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7163:portable::copy_4_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7164:portable::copy_4_immutables_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7165:portable::copy_3_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7166:portable::copy_3_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7167:portable::copy_3_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7168:portable::copy_3_immutables_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7169:portable::copy_2_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7170:portable::copy_2_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7171:portable::continue_op\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7172:portable::colordodge\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7173:portable::colorburn\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7174:portable::color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7175:portable::cmpne_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7176:portable::cmpne_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7177:portable::cmpne_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7178:portable::cmpne_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7179:portable::cmpne_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7180:portable::cmpne_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7181:portable::cmpne_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7182:portable::cmpne_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7183:portable::cmpne_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7184:portable::cmpne_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7185:portable::cmpne_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7186:portable::cmpne_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7187:portable::cmplt_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7188:portable::cmplt_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7189:portable::cmplt_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7190:portable::cmplt_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7191:portable::cmplt_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7192:portable::cmplt_imm_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7193:portable::cmplt_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7194:portable::cmplt_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7195:portable::cmplt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7196:portable::cmplt_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7197:portable::cmplt_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7198:portable::cmplt_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7199:portable::cmplt_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7200:portable::cmplt_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7201:portable::cmplt_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7202:portable::cmplt_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7203:portable::cmplt_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7204:portable::cmplt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7205:portable::cmple_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7206:portable::cmple_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7207:portable::cmple_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7208:portable::cmple_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7209:portable::cmple_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7210:portable::cmple_imm_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7211:portable::cmple_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7212:portable::cmple_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7213:portable::cmple_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7214:portable::cmple_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7215:portable::cmple_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7216:portable::cmple_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7217:portable::cmple_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7218:portable::cmple_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7219:portable::cmple_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7220:portable::cmple_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7221:portable::cmple_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7222:portable::cmple_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7223:portable::cmpeq_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7224:portable::cmpeq_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7225:portable::cmpeq_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7226:portable::cmpeq_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7227:portable::cmpeq_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7228:portable::cmpeq_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7229:portable::cmpeq_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7230:portable::cmpeq_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7231:portable::cmpeq_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7232:portable::cmpeq_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7233:portable::cmpeq_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7234:portable::cmpeq_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7235:portable::clear\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7236:portable::clamp_x_and_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7237:portable::clamp_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7238:portable::clamp_gamut\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7239:portable::clamp_01\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7240:portable::ceil_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7241:portable::ceil_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7242:portable::ceil_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7243:portable::ceil_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7244:portable::cast_to_uint_from_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7245:portable::cast_to_uint_from_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7246:portable::cast_to_uint_from_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7247:portable::cast_to_uint_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7248:portable::cast_to_int_from_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7249:portable::cast_to_int_from_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7250:portable::cast_to_int_from_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7251:portable::cast_to_int_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7252:portable::cast_to_float_from_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7253:portable::cast_to_float_from_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7254:portable::cast_to_float_from_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7255:portable::cast_to_float_from_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7256:portable::cast_to_float_from_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7257:portable::cast_to_float_from_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7258:portable::cast_to_float_from_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7259:portable::cast_to_float_from_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7260:portable::case_op\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7261:portable::callback\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7262:portable::byte_tables\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7263:portable::bt709_luminance_or_luma_to_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7264:portable::bt709_luminance_or_luma_to_alpha\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7265:portable::branch_if_no_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7266:portable::branch_if_no_active_lanes_eq\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7267:portable::branch_if_any_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7268:portable::branch_if_all_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7269:portable::blit_row_s32a_opaque\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n7270:portable::black_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7271:portable::bitwise_xor_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7272:portable::bitwise_xor_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7273:portable::bitwise_xor_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7274:portable::bitwise_xor_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7275:portable::bitwise_xor_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7276:portable::bitwise_xor_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7277:portable::bitwise_or_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7278:portable::bitwise_or_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7279:portable::bitwise_or_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7280:portable::bitwise_or_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7281:portable::bitwise_or_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7282:portable::bitwise_and_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7283:portable::bitwise_and_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7284:portable::bitwise_and_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7285:portable::bitwise_and_imm_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7286:portable::bitwise_and_imm_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7287:portable::bitwise_and_imm_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7288:portable::bitwise_and_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7289:portable::bitwise_and_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7290:portable::bitwise_and_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7291:portable::bilinear_setup\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7292:portable::bilinear_py\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7293:portable::bilinear_px\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7294:portable::bilinear_ny\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7295:portable::bilinear_nx\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7296:portable::bilerp_clamp_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7297:portable::bicubic_setup\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7298:portable::bicubic_p3y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7299:portable::bicubic_p3x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7300:portable::bicubic_p1y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7301:portable::bicubic_p1x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7302:portable::bicubic_n3y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7303:portable::bicubic_n3x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7304:portable::bicubic_n1y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7305:portable::bicubic_n1x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7306:portable::bicubic_clamp_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7307:portable::atan_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7308:portable::atan2_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7309:portable::asin_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7310:portable::alter_2pt_conical_unswap\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7311:portable::alter_2pt_conical_compensate_focal\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7312:portable::alpha_to_red_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7313:portable::alpha_to_red\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7314:portable::alpha_to_gray_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7315:portable::alpha_to_gray\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7316:portable::add_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7317:portable::add_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7318:portable::add_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7319:portable::add_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7320:portable::add_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7321:portable::add_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7322:portable::add_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7323:portable::add_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7324:portable::add_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7325:portable::add_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7326:portable::add_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7327:portable::add_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7328:portable::acos_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7329:portable::accumulate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7330:portable::abs_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7331:portable::abs_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7332:portable::abs_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7333:portable::abs_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7334:portable::RGB_to_RGB1\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7335:portable::RGB_to_BGR1\\28unsigned\\20int*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7336:portable::RGBA_to_rgbA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7337:portable::RGBA_to_bgrA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7338:portable::RGBA_to_BGRA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n7339:portable::PQish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7340:portable::HLGish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7341:portable::HLGinvish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7342:pop_arg_long_double\n7343:png_read_filter_row_up\n7344:png_read_filter_row_sub\n7345:png_read_filter_row_paeth_multibyte_pixel\n7346:png_read_filter_row_paeth_1byte_pixel\n7347:png_read_filter_row_avg\n7348:pass2_no_dither\n7349:pass2_fs_dither\n7350:override_features_khmer\\28hb_ot_shape_planner_t*\\29\n7351:override_features_indic\\28hb_ot_shape_planner_t*\\29\n7352:override_features_hangul\\28hb_ot_shape_planner_t*\\29\n7353:output_message\\28jpeg_common_struct*\\29\n7354:output_message\n7355:null_convert\n7356:noop_upsample\n7357:non-virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n7358:non-virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n7359:non-virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n7360:non-virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n7361:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.3\n7362:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.2\n7363:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.1\n7364:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29\n7365:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::findAlgorithm\\28SkSize\\2c\\20SkColorType\\29\\20const\n7366:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::blur\\28SkSize\\2c\\20sk_sp<SkSpecialImage>\\2c\\20SkIRect\\20const&\\2c\\20SkTileMode\\2c\\20SkIRect\\20const&\\29\\20const\n7367:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29.1\n7368:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29\n7369:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::evict\\28skgpu::PlotLocator\\29\n7370:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29.1\n7371:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29\n7372:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::preFlush\\28GrOnFlushResourceProvider*\\29\n7373:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n7374:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n7375:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n7376:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::instanceFlags\\28\\29\\20const\n7377:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n7378:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29.1\n7379:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29\n7380:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n7381:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n7382:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::glyphCount\\28\\29\\20const\n7383:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n7384:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n7385:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n7386:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n7387:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::instanceFlags\\28\\29\\20const\n7388:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n7389:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n7390:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n7391:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n7392:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n7393:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n7394:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n7395:non-virtual\\20thunk\\20to\\20GrOpFlushState::~GrOpFlushState\\28\\29.1\n7396:non-virtual\\20thunk\\20to\\20GrOpFlushState::~GrOpFlushState\\28\\29\n7397:non-virtual\\20thunk\\20to\\20GrOpFlushState::writeView\\28\\29\\20const\n7398:non-virtual\\20thunk\\20to\\20GrOpFlushState::usesMSAASurface\\28\\29\\20const\n7399:non-virtual\\20thunk\\20to\\20GrOpFlushState::threadSafeCache\\28\\29\\20const\n7400:non-virtual\\20thunk\\20to\\20GrOpFlushState::strikeCache\\28\\29\\20const\n7401:non-virtual\\20thunk\\20to\\20GrOpFlushState::smallPathAtlasManager\\28\\29\\20const\n7402:non-virtual\\20thunk\\20to\\20GrOpFlushState::sampledProxyArray\\28\\29\n7403:non-virtual\\20thunk\\20to\\20GrOpFlushState::rtProxy\\28\\29\\20const\n7404:non-virtual\\20thunk\\20to\\20GrOpFlushState::resourceProvider\\28\\29\\20const\n7405:non-virtual\\20thunk\\20to\\20GrOpFlushState::renderPassBarriers\\28\\29\\20const\n7406:non-virtual\\20thunk\\20to\\20GrOpFlushState::recordDraw\\28GrGeometryProcessor\\20const*\\2c\\20GrSimpleMesh\\20const*\\2c\\20int\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPrimitiveType\\29\n7407:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackVertices\\28int\\2c\\20unsigned\\20long\\29\n7408:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndirectDraws\\28int\\29\n7409:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndices\\28int\\29\n7410:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndexedIndirectDraws\\28int\\29\n7411:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeVertexSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n7412:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeVertexSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n7413:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeIndexSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n7414:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeIndexSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n7415:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeDrawIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n7416:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeDrawIndexedIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n7417:non-virtual\\20thunk\\20to\\20GrOpFlushState::dstProxyView\\28\\29\\20const\n7418:non-virtual\\20thunk\\20to\\20GrOpFlushState::detachAppliedClip\\28\\29\n7419:non-virtual\\20thunk\\20to\\20GrOpFlushState::deferredUploadTarget\\28\\29\n7420:non-virtual\\20thunk\\20to\\20GrOpFlushState::colorLoadOp\\28\\29\\20const\n7421:non-virtual\\20thunk\\20to\\20GrOpFlushState::caps\\28\\29\\20const\n7422:non-virtual\\20thunk\\20to\\20GrOpFlushState::atlasManager\\28\\29\\20const\n7423:non-virtual\\20thunk\\20to\\20GrOpFlushState::appliedClip\\28\\29\\20const\n7424:non-virtual\\20thunk\\20to\\20GrGpuBuffer::~GrGpuBuffer\\28\\29\n7425:non-virtual\\20thunk\\20to\\20GrGpuBuffer::unref\\28\\29\\20const\n7426:non-virtual\\20thunk\\20to\\20GrGpuBuffer::ref\\28\\29\\20const\n7427:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n7428:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n7429:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onSetLabel\\28\\29\n7430:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onRelease\\28\\29\n7431:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n7432:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onAbandon\\28\\29\n7433:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n7434:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::backendFormat\\28\\29\\20const\n7435:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n7436:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n7437:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::hasSecondaryOutput\\28\\29\\20const\n7438:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\\28skgpu::BlendEquation\\29\n7439:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::dstColor\\28\\29\n7440:non-virtual\\20thunk\\20to\\20GrGLBuffer::~GrGLBuffer\\28\\29.1\n7441:non-virtual\\20thunk\\20to\\20GrGLBuffer::~GrGLBuffer\\28\\29\n7442:new_color_map_2_quant\n7443:new_color_map_1_quant\n7444:merged_2v_upsample\n7445:merged_1v_upsample\n7446:lin_srgb_to_oklab\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n7447:lin_srgb_to_okhcl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n7448:legalstub$dynCall_vijiii\n7449:legalstub$dynCall_viji\n7450:legalstub$dynCall_vij\n7451:legalstub$dynCall_viijii\n7452:legalstub$dynCall_viij\n7453:legalstub$dynCall_viiij\n7454:legalstub$dynCall_viiiiij\n7455:legalstub$dynCall_jiji\n7456:legalstub$dynCall_jiiiiji\n7457:legalstub$dynCall_jiiiiii\n7458:legalstub$dynCall_jii\n7459:legalstub$dynCall_ji\n7460:legalstub$dynCall_iijj\n7461:legalstub$dynCall_iiij\n7462:legalstub$dynCall_iiiij\n7463:legalstub$dynCall_iiiiijj\n7464:legalstub$dynCall_iiiiij\n7465:legalstub$dynCall_iiiiiijj\n7466:legalfunc$glWaitSync\n7467:legalfunc$glClientWaitSync\n7468:lcd_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n7469:jpeg_start_decompress\n7470:jpeg_skip_scanlines\n7471:jpeg_save_markers\n7472:jpeg_resync_to_restart\n7473:jpeg_read_scanlines\n7474:jpeg_read_raw_data\n7475:jpeg_read_header\n7476:jpeg_idct_islow\n7477:jpeg_idct_ifast\n7478:jpeg_idct_float\n7479:jpeg_idct_9x9\n7480:jpeg_idct_7x7\n7481:jpeg_idct_6x6\n7482:jpeg_idct_5x5\n7483:jpeg_idct_4x4\n7484:jpeg_idct_3x3\n7485:jpeg_idct_2x2\n7486:jpeg_idct_1x1\n7487:jpeg_idct_16x16\n7488:jpeg_idct_15x15\n7489:jpeg_idct_14x14\n7490:jpeg_idct_13x13\n7491:jpeg_idct_12x12\n7492:jpeg_idct_11x11\n7493:jpeg_idct_10x10\n7494:jpeg_crop_scanline\n7495:is_deleted_glyph\\28hb_glyph_info_t\\20const*\\29\n7496:internal_memalign\n7497:int_upsample\n7498:initial_reordering_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7499:hit_compare_y\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n7500:hit_compare_x\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n7501:hb_unicode_script_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7502:hb_unicode_general_category_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7503:hb_ucd_script\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7504:hb_ucd_mirroring\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7505:hb_ucd_general_category\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7506:hb_ucd_decompose\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7507:hb_ucd_compose\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7508:hb_ucd_combining_class\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7509:hb_syllabic_clear_var\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7510:hb_paint_sweep_gradient_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7511:hb_paint_push_transform_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7512:hb_paint_push_clip_rectangle_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7513:hb_paint_image_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n7514:hb_paint_extents_push_transform\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7515:hb_paint_extents_push_group\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n7516:hb_paint_extents_push_clip_rectangle\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7517:hb_paint_extents_push_clip_glyph\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_font_t*\\2c\\20void*\\29\n7518:hb_paint_extents_pop_transform\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n7519:hb_paint_extents_pop_group\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_paint_composite_mode_t\\2c\\20void*\\29\n7520:hb_paint_extents_pop_clip\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n7521:hb_paint_extents_paint_sweep_gradient\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7522:hb_paint_extents_paint_image\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n7523:hb_paint_extents_paint_color\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7524:hb_outline_recording_pen_quadratic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7525:hb_outline_recording_pen_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7526:hb_outline_recording_pen_line_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7527:hb_outline_recording_pen_cubic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7528:hb_outline_recording_pen_close_path\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20void*\\29\n7529:hb_ot_paint_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7530:hb_ot_map_t::lookup_map_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n7531:hb_ot_map_t::feature_map_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n7532:hb_ot_map_builder_t::feature_info_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n7533:hb_ot_get_variation_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7534:hb_ot_get_nominal_glyphs\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7535:hb_ot_get_nominal_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7536:hb_ot_get_glyph_v_origin\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7537:hb_ot_get_glyph_v_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7538:hb_ot_get_glyph_name\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7539:hb_ot_get_glyph_h_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7540:hb_ot_get_glyph_from_name\\28hb_font_t*\\2c\\20void*\\2c\\20char\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7541:hb_ot_get_glyph_extents\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n7542:hb_ot_get_font_v_extents\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n7543:hb_ot_get_font_h_extents\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n7544:hb_ot_draw_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n7545:hb_font_paint_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7546:hb_font_get_variation_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7547:hb_font_get_nominal_glyphs_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7548:hb_font_get_nominal_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7549:hb_font_get_nominal_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7550:hb_font_get_glyph_v_origin_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7551:hb_font_get_glyph_v_origin_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7552:hb_font_get_glyph_v_kerning_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7553:hb_font_get_glyph_v_advances_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7554:hb_font_get_glyph_v_advance_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7555:hb_font_get_glyph_v_advance_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7556:hb_font_get_glyph_name_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7557:hb_font_get_glyph_name_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7558:hb_font_get_glyph_h_origin_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7559:hb_font_get_glyph_h_origin_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7560:hb_font_get_glyph_h_kerning_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7561:hb_font_get_glyph_h_advances_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7562:hb_font_get_glyph_h_advance_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7563:hb_font_get_glyph_h_advance_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n7564:hb_font_get_glyph_from_name_default\\28hb_font_t*\\2c\\20void*\\2c\\20char\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n7565:hb_font_get_glyph_extents_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n7566:hb_font_get_glyph_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n7567:hb_font_get_glyph_contour_point_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7568:hb_font_get_glyph_contour_point_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n7569:hb_font_get_font_v_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n7570:hb_font_get_font_h_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n7571:hb_font_draw_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n7572:hb_draw_quadratic_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7573:hb_draw_quadratic_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7574:hb_draw_move_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7575:hb_draw_line_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7576:hb_draw_extents_quadratic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7577:hb_draw_extents_cubic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7578:hb_draw_cubic_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n7579:hb_draw_close_path_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20void*\\29\n7580:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::hhea>\\28hb_blob_t*\\29\n7581:hb_aat_map_builder_t::feature_info_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n7582:hb_aat_map_builder_t::feature_event_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n7583:h2v2_upsample\n7584:h2v2_merged_upsample_565D\n7585:h2v2_merged_upsample_565\n7586:h2v2_merged_upsample\n7587:h2v2_fancy_upsample\n7588:h2v1_upsample\n7589:h2v1_merged_upsample_565D\n7590:h2v1_merged_upsample_565\n7591:h2v1_merged_upsample\n7592:h2v1_fancy_upsample\n7593:grayscale_convert\n7594:gray_rgb_convert\n7595:gray_rgb565_convert\n7596:gray_rgb565D_convert\n7597:gray_raster_render\n7598:gray_raster_new\n7599:gray_raster_done\n7600:gray_move_to\n7601:gray_line_to\n7602:gray_cubic_to\n7603:gray_conic_to\n7604:get_sk_marker_list\\28jpeg_decompress_struct*\\29\n7605:get_sfnt_table\n7606:get_interesting_appn\n7607:fullsize_upsample\n7608:ft_smooth_transform\n7609:ft_smooth_set_mode\n7610:ft_smooth_render\n7611:ft_smooth_overlap_spans\n7612:ft_smooth_lcd_spans\n7613:ft_smooth_init\n7614:ft_smooth_get_cbox\n7615:ft_gzip_free\n7616:ft_gzip_alloc\n7617:ft_ansi_stream_io\n7618:ft_ansi_stream_close\n7619:fquad_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n7620:format_message\n7621:fmt_fp\n7622:fline_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n7623:first_axis_intersection\\28double\\20const*\\2c\\20bool\\2c\\20double\\2c\\20double*\\29\n7624:finish_pass1\n7625:finish_output_pass\n7626:finish_input_pass\n7627:final_reordering_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7628:fcubic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n7629:fconic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n7630:fast_swizzle_rgba_to_rgba_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7631:fast_swizzle_rgba_to_bgra_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7632:fast_swizzle_rgba_to_bgra_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7633:fast_swizzle_rgb_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7634:fast_swizzle_rgb_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7635:fast_swizzle_grayalpha_to_n32_unpremul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7636:fast_swizzle_grayalpha_to_n32_premul\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7637:fast_swizzle_gray_to_n32\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7638:fast_swizzle_cmyk_to_rgba\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7639:fast_swizzle_cmyk_to_bgra\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n7640:error_exit\n7641:error_callback\n7642:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkTextBlob>*\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n7643:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n7644:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n7645:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\2c\\20float\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7646:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28float\\2c\\20float\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28float\\2c\\20float\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\29\n7647:emscripten::internal::MethodInvoker<void\\20\\28SkCanvas::*\\29\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas*\\2c\\20SkPath\\20const&\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28SkCanvas::*\\20const&\\29\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20SkPath*\\2c\\20SkPaint*\\29\n7648:emscripten::internal::MethodInvoker<skia::textlayout::SkRange<unsigned\\20long>\\20\\28skia::textlayout::Paragraph::*\\29\\28unsigned\\20int\\29\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::Paragraph*\\2c\\20unsigned\\20int>::invoke\\28skia::textlayout::SkRange<unsigned\\20long>\\20\\28skia::textlayout::Paragraph::*\\20const&\\29\\28unsigned\\20int\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20unsigned\\20int\\29\n7649:emscripten::internal::MethodInvoker<skia::textlayout::PositionWithAffinity\\20\\28skia::textlayout::Paragraph::*\\29\\28float\\2c\\20float\\29\\2c\\20skia::textlayout::PositionWithAffinity\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float>::invoke\\28skia::textlayout::PositionWithAffinity\\20\\28skia::textlayout::Paragraph::*\\20const&\\29\\28float\\2c\\20float\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n7650:emscripten::internal::MethodInvoker<int\\20\\28skia::textlayout::Paragraph::*\\29\\28unsigned\\20long\\29\\20const\\2c\\20int\\2c\\20skia::textlayout::Paragraph\\20const*\\2c\\20unsigned\\20long>::invoke\\28int\\20\\28skia::textlayout::Paragraph::*\\20const&\\29\\28unsigned\\20long\\29\\20const\\2c\\20skia::textlayout::Paragraph\\20const*\\2c\\20unsigned\\20long\\29\n7651:emscripten::internal::MethodInvoker<bool\\20\\28SkPath::*\\29\\28float\\2c\\20float\\29\\20const\\2c\\20bool\\2c\\20SkPath\\20const*\\2c\\20float\\2c\\20float>::invoke\\28bool\\20\\28SkPath::*\\20const&\\29\\28float\\2c\\20float\\29\\20const\\2c\\20SkPath\\20const*\\2c\\20float\\2c\\20float\\29\n7652:emscripten::internal::MethodInvoker<SkPath&\\20\\28SkPath::*\\29\\28bool\\29\\2c\\20SkPath&\\2c\\20SkPath*\\2c\\20bool>::invoke\\28SkPath&\\20\\28SkPath::*\\20const&\\29\\28bool\\29\\2c\\20SkPath*\\2c\\20bool\\29\n7653:emscripten::internal::Invoker<void\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7654:emscripten::internal::Invoker<void\\2c\\20emscripten::val>::invoke\\28void\\20\\28*\\29\\28emscripten::val\\29\\2c\\20emscripten::_EM_VAL*\\29\n7655:emscripten::internal::Invoker<unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28unsigned\\20long\\20\\28*\\29\\28unsigned\\20long\\29\\2c\\20unsigned\\20long\\29\n7656:emscripten::internal::Invoker<sk_sp<SkTextBlob>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&>::invoke\\28sk_sp<SkTextBlob>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont*\\29\n7657:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>*\\2c\\20int\\2c\\20int\\29\n7658:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>*\\29\n7659:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20int\\2c\\20int\\29\n7660:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20sk_sp<GrDirectContext>\\2c\\20SimpleImageInfo>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28sk_sp<GrDirectContext>\\2c\\20SimpleImageInfo\\29\\2c\\20sk_sp<GrDirectContext>*\\2c\\20SimpleImageInfo*\\29\n7661:emscripten::internal::Invoker<sk_sp<SkSurface>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkSurface>\\20\\28*\\29\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7662:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n7663:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n7664:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n7665:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n7666:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\\2c\\20float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\n7667:emscripten::internal::Invoker<sk_sp<SkShader>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkShader>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>*\\29\n7668:emscripten::internal::Invoker<sk_sp<SkRuntimeEffect>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val>::invoke\\28sk_sp<SkRuntimeEffect>\\20\\28*\\29\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\2c\\20emscripten::_EM_VAL*\\29\n7669:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20float>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28unsigned\\20long\\2c\\20int\\2c\\20float\\29\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20float\\29\n7670:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20unsigned\\20long\\2c\\20SkPath>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkPath\\29\\2c\\20unsigned\\20long\\2c\\20SkPath*\\29\n7671:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20float\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28float\\2c\\20unsigned\\20long\\29\\2c\\20float\\2c\\20unsigned\\20long\\29\n7672:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20unsigned\\20int\\29\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\29\n7673:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20float>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28float\\29\\2c\\20float\\29\n7674:emscripten::internal::Invoker<sk_sp<SkPathEffect>\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style>::invoke\\28sk_sp<SkPathEffect>\\20\\28*\\29\\28SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20SkPath1DPathEffect::Style\\29\n7675:emscripten::internal::Invoker<sk_sp<SkMaskFilter>\\2c\\20SkBlurStyle\\2c\\20float\\2c\\20bool>::invoke\\28sk_sp<SkMaskFilter>\\20\\28*\\29\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\\2c\\20SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n7676:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>*\\29\n7677:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>*\\29\n7678:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkShader>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkShader>\\29\\2c\\20sk_sp<SkShader>*\\29\n7679:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImage>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7680:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImage>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7681:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>*\\29\n7682:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>*\\29\n7683:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>*\\29\n7684:emscripten::internal::Invoker<sk_sp<SkImageFilter>\\2c\\20SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>>::invoke\\28sk_sp<SkImageFilter>\\20\\28*\\29\\28SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\\2c\\20SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>*\\2c\\20sk_sp<SkImageFilter>*\\29\n7685:emscripten::internal::Invoker<sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImage>\\20\\28*\\29\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\29\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\29\n7686:emscripten::internal::Invoker<sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20emscripten::val>::invoke\\28sk_sp<SkImage>\\20\\28*\\29\\28SimpleImageInfo\\2c\\20emscripten::val\\29\\2c\\20SimpleImageInfo*\\2c\\20emscripten::_EM_VAL*\\29\n7687:emscripten::internal::Invoker<sk_sp<SkColorFilter>\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>>::invoke\\28sk_sp<SkColorFilter>\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>*\\29\n7688:emscripten::internal::Invoker<sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>>::invoke\\28sk_sp<SkColorFilter>\\20\\28*\\29\\28sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>\\29\\2c\\20sk_sp<SkColorFilter>*\\2c\\20sk_sp<SkColorFilter>*\\29\n7689:emscripten::internal::Invoker<sk_sp<SkColorFilter>\\2c\\20float\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>>::invoke\\28sk_sp<SkColorFilter>\\20\\28*\\29\\28float\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>\\29\\2c\\20float\\2c\\20sk_sp<SkColorFilter>*\\2c\\20sk_sp<SkColorFilter>*\\29\n7690:emscripten::internal::Invoker<emscripten::val\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28emscripten::val\\20\\28*\\29\\28unsigned\\20long\\2c\\20int\\29\\2c\\20unsigned\\20long\\2c\\20int\\29\n7691:emscripten::internal::Invoker<emscripten::val\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>::invoke\\28emscripten::val\\20\\28*\\29\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\29\n7692:emscripten::internal::Invoker<emscripten::val\\2c\\20emscripten::val\\2c\\20emscripten::val\\2c\\20float>::invoke\\28emscripten::val\\20\\28*\\29\\28emscripten::val\\2c\\20emscripten::val\\2c\\20float\\29\\2c\\20emscripten::_EM_VAL*\\2c\\20emscripten::_EM_VAL*\\2c\\20float\\29\n7693:emscripten::internal::Invoker<emscripten::val\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20float>::invoke\\28emscripten::val\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20float\\29\n7694:emscripten::internal::Invoker<emscripten::val\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp>::invoke\\28emscripten::val\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20SkPathOp\\29\n7695:emscripten::internal::Invoker<bool\\2c\\20unsigned\\20long\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long>::invoke\\28bool\\20\\28*\\29\\28unsigned\\20long\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\\2c\\20unsigned\\20long\\2c\\20SkPath*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\n7696:emscripten::internal::Invoker<bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>>::invoke\\28bool\\20\\28*\\29\\28sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>\\29\\2c\\20sk_sp<SkColorSpace>*\\2c\\20sk_sp<SkColorSpace>*\\29\n7697:emscripten::internal::Invoker<bool\\2c\\20SkPath\\20const&\\2c\\20SkPath\\20const&>::invoke\\28bool\\20\\28*\\29\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\\2c\\20SkPath*\\2c\\20SkPath*\\29\n7698:emscripten::internal::Invoker<SkVertices::Builder*\\2c\\20SkVertices::VertexMode&&\\2c\\20int&&\\2c\\20int&&\\2c\\20unsigned\\20int&&>::invoke\\28SkVertices::Builder*\\20\\28*\\29\\28SkVertices::VertexMode&&\\2c\\20int&&\\2c\\20int&&\\2c\\20unsigned\\20int&&\\29\\2c\\20SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n7699:emscripten::internal::Invoker<SkRuntimeEffect::TracedShader\\2c\\20sk_sp<SkShader>\\2c\\20int\\2c\\20int>::invoke\\28SkRuntimeEffect::TracedShader\\20\\28*\\29\\28sk_sp<SkShader>\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<SkShader>*\\2c\\20int\\2c\\20int\\29\n7700:emscripten::internal::Invoker<SkPath\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28SkPath\\20\\28*\\29\\28unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n7701:emscripten::internal::Invoker<SkFont*\\2c\\20sk_sp<SkTypeface>&&\\2c\\20float&&\\2c\\20float&&\\2c\\20float&&>::invoke\\28SkFont*\\20\\28*\\29\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\2c\\20float&&\\2c\\20float&&\\29\\2c\\20sk_sp<SkTypeface>*\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7702:emscripten::internal::Invoker<SkFont*\\2c\\20sk_sp<SkTypeface>&&\\2c\\20float&&>::invoke\\28SkFont*\\20\\28*\\29\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\29\\2c\\20sk_sp<SkTypeface>*\\2c\\20float\\29\n7703:emscripten::internal::Invoker<SkFont*\\2c\\20sk_sp<SkTypeface>&&>::invoke\\28SkFont*\\20\\28*\\29\\28sk_sp<SkTypeface>&&\\29\\2c\\20sk_sp<SkTypeface>*\\29\n7704:emscripten::internal::Invoker<SkContourMeasureIter*\\2c\\20SkPath\\20const&\\2c\\20bool&&\\2c\\20float&&>::invoke\\28SkContourMeasureIter*\\20\\28*\\29\\28SkPath\\20const&\\2c\\20bool&&\\2c\\20float&&\\29\\2c\\20SkPath*\\2c\\20bool\\2c\\20float\\29\n7705:emscripten::internal::Invoker<SkCanvas*\\2c\\20float&&\\2c\\20float&&>::invoke\\28SkCanvas*\\20\\28*\\29\\28float&&\\2c\\20float&&\\29\\2c\\20float\\2c\\20float\\29\n7706:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long\\29\\2c\\20void\\2c\\20skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long\\29\\2c\\20skia::textlayout::TypefaceFontProvider*\\2c\\20sk_sp<SkTypeface>*\\2c\\20unsigned\\20long\\29\n7707:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\29\n7708:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\n7709:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20SimpleTextStyle*\\2c\\20SkPaint*\\2c\\20SkPaint*\\29\n7710:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\29\\2c\\20void\\2c\\20skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle>::invoke\\28void\\20\\28**\\29\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\29\\2c\\20skia::textlayout::ParagraphBuilderImpl*\\2c\\20SimpleTextStyle*\\29\n7711:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7712:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7713:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7714:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n7715:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7716:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20void\\2c\\20SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28void\\20\\28**\\29\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath*\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7717:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20void\\2c\\20SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long>::invoke\\28void\\20\\28**\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20SkContourMeasure*\\2c\\20float\\2c\\20unsigned\\20long\\29\n7718:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont*\\2c\\20SkPaint*\\29\n7719:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint*\\29\n7720:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7721:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7722:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7723:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\\2c\\20SkCanvas*\\2c\\20sk_sp<SkImage>*\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n7724:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont*\\2c\\20SkPaint*\\29\n7725:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\\2c\\20SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint*\\29\n7726:emscripten::internal::FunctionInvoker<void\\20\\28*\\29\\28SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\\2c\\20void\\2c\\20SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int>::invoke\\28void\\20\\28**\\29\\28SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\\2c\\20SkCanvas*\\2c\\20SkPath*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n7727:emscripten::internal::FunctionInvoker<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20\\28*\\29\\28SkSL::DebugTrace&\\29\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::DebugTrace&>::invoke\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20\\28**\\29\\28SkSL::DebugTrace&\\29\\2c\\20SkSL::DebugTrace*\\29\n7728:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\\20\\28*\\29\\28SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20sk_sp<SkTypeface>\\2c\\20SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int>::invoke\\28sk_sp<SkTypeface>\\20\\28**\\29\\28SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int\\29\\2c\\20SkFontMgr*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7729:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\\20\\28*\\29\\28SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\\2c\\20sk_sp<SkTypeface>\\2c\\20SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val>::invoke\\28sk_sp<SkTypeface>\\20\\28**\\29\\28SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\\2c\\20SkFontMgr*\\2c\\20emscripten::internal::BindingType<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20void>::'unnamed'*\\2c\\20emscripten::_EM_VAL*\\29\n7730:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\n7731:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\n7732:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20SkRuntimeEffect*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7733:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\\2c\\20SkRuntimeEffect*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\n7734:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\\20\\28*\\29\\28SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkShader>\\2c\\20SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkShader>\\20\\28**\\29\\28SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\2c\\20SkPicture*\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7735:emscripten::internal::FunctionInvoker<sk_sp<SkPicture>\\20\\28*\\29\\28SkPictureRecorder&\\29\\2c\\20sk_sp<SkPicture>\\2c\\20SkPictureRecorder&>::invoke\\28sk_sp<SkPicture>\\20\\28**\\29\\28SkPictureRecorder&\\29\\2c\\20SkPictureRecorder*\\29\n7736:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\\20\\28*\\29\\28SkSurface&\\2c\\20unsigned\\20long\\29\\2c\\20sk_sp<SkImage>\\2c\\20SkSurface&\\2c\\20unsigned\\20long>::invoke\\28sk_sp<SkImage>\\20\\28**\\29\\28SkSurface&\\2c\\20unsigned\\20long\\29\\2c\\20SkSurface*\\2c\\20unsigned\\20long\\29\n7737:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\\20\\28*\\29\\28SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo\\29\\2c\\20sk_sp<SkImage>\\2c\\20SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo>::invoke\\28sk_sp<SkImage>\\20\\28**\\29\\28SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo\\29\\2c\\20SkSurface*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo*\\29\n7738:emscripten::internal::FunctionInvoker<sk_sp<SkBlender>\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\\2c\\20sk_sp<SkBlender>\\2c\\20SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool>::invoke\\28sk_sp<SkBlender>\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\\2c\\20SkRuntimeEffect*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n7739:emscripten::internal::FunctionInvoker<int\\20\\28*\\29\\28SkCanvas&\\2c\\20SkPaint\\29\\2c\\20int\\2c\\20SkCanvas&\\2c\\20SkPaint>::invoke\\28int\\20\\28**\\29\\28SkCanvas&\\2c\\20SkPaint\\29\\2c\\20SkCanvas*\\2c\\20SkPaint*\\29\n7740:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\\2c\\20emscripten::val\\2c\\20skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle>::invoke\\28emscripten::val\\20\\28**\\29\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n7741:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float\\29\\2c\\20emscripten::val\\2c\\20skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float>::invoke\\28emscripten::val\\20\\28**\\29\\28skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float\\29\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n7742:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20emscripten::val\\2c\\20sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*>::invoke\\28emscripten::val\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\n7743:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\\2c\\20emscripten::val\\2c\\20sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int>::invoke\\28emscripten::val\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\n7744:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28sk_sp<SkImage>\\29\\2c\\20emscripten::val\\2c\\20sk_sp<SkImage>>::invoke\\28emscripten::val\\20\\28**\\29\\28sk_sp<SkImage>\\29\\2c\\20sk_sp<SkImage>*\\29\n7745:emscripten::internal::FunctionInvoker<emscripten::val\\20\\28*\\29\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20emscripten::val\\2c\\20SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float>::invoke\\28emscripten::val\\20\\28**\\29\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\\2c\\20SkFont*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n7746:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20bool\\2c\\20sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*>::invoke\\28bool\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\n7747:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20bool\\2c\\20sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int>::invoke\\28bool\\20\\28**\\29\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20sk_sp<SkImage>*\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n7748:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20float>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7749:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath*\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7750:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkPath&\\2c\\20StrokeOpts\\29\\2c\\20bool\\2c\\20SkPath&\\2c\\20StrokeOpts>::invoke\\28bool\\20\\28**\\29\\28SkPath&\\2c\\20StrokeOpts\\29\\2c\\20SkPath*\\2c\\20StrokeOpts*\\29\n7751:emscripten::internal::FunctionInvoker<bool\\20\\28*\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20bool\\2c\\20SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int>::invoke\\28bool\\20\\28**\\29\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\2c\\20SkCanvas*\\2c\\20SimpleImageInfo*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n7752:emscripten::internal::FunctionInvoker<SkPath\\20\\28*\\29\\28SkPath\\20const&\\29\\2c\\20SkPath\\2c\\20SkPath\\20const&>::invoke\\28SkPath\\20\\28**\\29\\28SkPath\\20const&\\29\\2c\\20SkPath*\\29\n7753:emscripten::internal::FunctionInvoker<SkPath\\20\\28*\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkPath\\2c\\20SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool>::invoke\\28SkPath\\20\\28**\\29\\28SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\2c\\20SkContourMeasure*\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7754:emscripten::internal::FunctionInvoker<SkPaint\\20\\28*\\29\\28SkPaint\\20const&\\29\\2c\\20SkPaint\\2c\\20SkPaint\\20const&>::invoke\\28SkPaint\\20\\28**\\29\\28SkPaint\\20const&\\29\\2c\\20SkPaint*\\29\n7755:emscripten::internal::FunctionInvoker<SimpleImageInfo\\20\\28*\\29\\28SkSurface&\\29\\2c\\20SimpleImageInfo\\2c\\20SkSurface&>::invoke\\28SimpleImageInfo\\20\\28**\\29\\28SkSurface&\\29\\2c\\20SkSurface*\\29\n7756:emscripten::internal::FunctionInvoker<RuntimeEffectUniform\\20\\28*\\29\\28SkRuntimeEffect&\\2c\\20int\\29\\2c\\20RuntimeEffectUniform\\2c\\20SkRuntimeEffect&\\2c\\20int>::invoke\\28RuntimeEffectUniform\\20\\28**\\29\\28SkRuntimeEffect&\\2c\\20int\\29\\2c\\20SkRuntimeEffect*\\2c\\20int\\29\n7757:emit_message\n7758:embind_init_Skia\\28\\29::$_9::__invoke\\28SkAnimatedImage&\\29\n7759:embind_init_Skia\\28\\29::$_99::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20bool\\29\n7760:embind_init_Skia\\28\\29::$_98::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20bool\\29\n7761:embind_init_Skia\\28\\29::$_97::__invoke\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7762:embind_init_Skia\\28\\29::$_96::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20int\\29\n7763:embind_init_Skia\\28\\29::$_95::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\29\n7764:embind_init_Skia\\28\\29::$_94::__invoke\\28unsigned\\20long\\2c\\20SkPath\\29\n7765:embind_init_Skia\\28\\29::$_93::__invoke\\28float\\2c\\20unsigned\\20long\\29\n7766:embind_init_Skia\\28\\29::$_92::__invoke\\28unsigned\\20long\\2c\\20int\\2c\\20float\\29\n7767:embind_init_Skia\\28\\29::$_91::__invoke\\28\\29\n7768:embind_init_Skia\\28\\29::$_90::__invoke\\28\\29\n7769:embind_init_Skia\\28\\29::$_8::__invoke\\28emscripten::val\\29\n7770:embind_init_Skia\\28\\29::$_89::__invoke\\28sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>\\29\n7771:embind_init_Skia\\28\\29::$_88::__invoke\\28SkPaint&\\2c\\20unsigned\\20int\\2c\\20sk_sp<SkColorSpace>\\29\n7772:embind_init_Skia\\28\\29::$_87::__invoke\\28SkPaint&\\2c\\20unsigned\\20int\\29\n7773:embind_init_Skia\\28\\29::$_86::__invoke\\28SkPaint&\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n7774:embind_init_Skia\\28\\29::$_85::__invoke\\28SkPaint&\\2c\\20unsigned\\20long\\29\n7775:embind_init_Skia\\28\\29::$_84::__invoke\\28SkPaint\\20const&\\29\n7776:embind_init_Skia\\28\\29::$_83::__invoke\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n7777:embind_init_Skia\\28\\29::$_82::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n7778:embind_init_Skia\\28\\29::$_81::__invoke\\28unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20sk_sp<SkImageFilter>\\29\n7779:embind_init_Skia\\28\\29::$_80::__invoke\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n7780:embind_init_Skia\\28\\29::$_7::__invoke\\28GrDirectContext&\\2c\\20unsigned\\20long\\29\n7781:embind_init_Skia\\28\\29::$_79::__invoke\\28sk_sp<SkImage>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7782:embind_init_Skia\\28\\29::$_78::__invoke\\28sk_sp<SkImage>\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7783:embind_init_Skia\\28\\29::$_77::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n7784:embind_init_Skia\\28\\29::$_76::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\n7785:embind_init_Skia\\28\\29::$_75::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkImageFilter>\\29\n7786:embind_init_Skia\\28\\29::$_74::__invoke\\28sk_sp<SkShader>\\29\n7787:embind_init_Skia\\28\\29::$_73::__invoke\\28SkColorChannel\\2c\\20SkColorChannel\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n7788:embind_init_Skia\\28\\29::$_72::__invoke\\28float\\2c\\20float\\2c\\20sk_sp<SkImageFilter>\\29\n7789:embind_init_Skia\\28\\29::$_71::__invoke\\28sk_sp<SkColorFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n7790:embind_init_Skia\\28\\29::$_70::__invoke\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\n7791:embind_init_Skia\\28\\29::$_6::__invoke\\28GrDirectContext&\\29\n7792:embind_init_Skia\\28\\29::$_69::__invoke\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n7793:embind_init_Skia\\28\\29::$_68::__invoke\\28SkImageFilter\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7794:embind_init_Skia\\28\\29::$_67::__invoke\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n7795:embind_init_Skia\\28\\29::$_66::__invoke\\28sk_sp<SkImage>\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20GrDirectContext*\\29\n7796:embind_init_Skia\\28\\29::$_65::__invoke\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20unsigned\\20long\\29\n7797:embind_init_Skia\\28\\29::$_64::__invoke\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\29\n7798:embind_init_Skia\\28\\29::$_63::__invoke\\28sk_sp<SkImage>\\29\n7799:embind_init_Skia\\28\\29::$_62::__invoke\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\2c\\20GrDirectContext*\\29\n7800:embind_init_Skia\\28\\29::$_61::__invoke\\28sk_sp<SkImage>\\2c\\20SkEncodedImageFormat\\2c\\20int\\29\n7801:embind_init_Skia\\28\\29::$_60::__invoke\\28sk_sp<SkImage>\\29\n7802:embind_init_Skia\\28\\29::$_5::__invoke\\28GrDirectContext&\\29\n7803:embind_init_Skia\\28\\29::$_59::__invoke\\28sk_sp<SkImage>\\29\n7804:embind_init_Skia\\28\\29::$_58::__invoke\\28SkFontMgr&\\2c\\20unsigned\\20long\\2c\\20int\\29\n7805:embind_init_Skia\\28\\29::$_57::__invoke\\28SkFontMgr&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\n7806:embind_init_Skia\\28\\29::$_56::__invoke\\28SkFontMgr&\\2c\\20int\\29\n7807:embind_init_Skia\\28\\29::$_55::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\29\n7808:embind_init_Skia\\28\\29::$_54::__invoke\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n7809:embind_init_Skia\\28\\29::$_53::__invoke\\28SkFont&\\29\n7810:embind_init_Skia\\28\\29::$_52::__invoke\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7811:embind_init_Skia\\28\\29::$_51::__invoke\\28SkFont&\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint*\\29\n7812:embind_init_Skia\\28\\29::$_50::__invoke\\28SkContourMeasure&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7813:embind_init_Skia\\28\\29::$_4::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n7814:embind_init_Skia\\28\\29::$_49::__invoke\\28SkContourMeasure&\\2c\\20float\\2c\\20unsigned\\20long\\29\n7815:embind_init_Skia\\28\\29::$_48::__invoke\\28unsigned\\20long\\29\n7816:embind_init_Skia\\28\\29::$_47::__invoke\\28unsigned\\20long\\2c\\20SkBlendMode\\2c\\20sk_sp<SkColorSpace>\\29\n7817:embind_init_Skia\\28\\29::$_46::__invoke\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n7818:embind_init_Skia\\28\\29::$_45::__invoke\\28SkCanvas&\\2c\\20SkPaint\\29\n7819:embind_init_Skia\\28\\29::$_44::__invoke\\28SkCanvas&\\2c\\20SkPaint\\20const*\\2c\\20unsigned\\20long\\2c\\20SkImageFilter\\20const*\\2c\\20unsigned\\20int\\29\n7820:embind_init_Skia\\28\\29::$_43::__invoke\\28SkCanvas&\\2c\\20SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\n7821:embind_init_Skia\\28\\29::$_42::__invoke\\28SkCanvas&\\2c\\20SimpleImageInfo\\29\n7822:embind_init_Skia\\28\\29::$_41::__invoke\\28SkCanvas\\20const&\\2c\\20unsigned\\20long\\29\n7823:embind_init_Skia\\28\\29::$_40::__invoke\\28SkCanvas\\20const&\\2c\\20unsigned\\20long\\29\n7824:embind_init_Skia\\28\\29::$_3::__invoke\\28unsigned\\20long\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\n7825:embind_init_Skia\\28\\29::$_39::__invoke\\28SkCanvas\\20const&\\2c\\20unsigned\\20long\\29\n7826:embind_init_Skia\\28\\29::$_38::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\n7827:embind_init_Skia\\28\\29::$_37::__invoke\\28SkCanvas&\\2c\\20SkPath\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n7828:embind_init_Skia\\28\\29::$_36::__invoke\\28SkCanvas&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n7829:embind_init_Skia\\28\\29::$_35::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n7830:embind_init_Skia\\28\\29::$_34::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n7831:embind_init_Skia\\28\\29::$_33::__invoke\\28SkCanvas&\\2c\\20SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkPaint&\\29\n7832:embind_init_Skia\\28\\29::$_32::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n7833:embind_init_Skia\\28\\29::$_31::__invoke\\28SkCanvas&\\2c\\20skia::textlayout::Paragraph*\\2c\\20float\\2c\\20float\\29\n7834:embind_init_Skia\\28\\29::$_30::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n7835:embind_init_Skia\\28\\29::$_2::__invoke\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\29\n7836:embind_init_Skia\\28\\29::$_29::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n7837:embind_init_Skia\\28\\29::$_28::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7838:embind_init_Skia\\28\\29::$_27::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const*\\2c\\20bool\\29\n7839:embind_init_Skia\\28\\29::$_26::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n7840:embind_init_Skia\\28\\29::$_25::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n7841:embind_init_Skia\\28\\29::$_24::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7842:embind_init_Skia\\28\\29::$_23::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7843:embind_init_Skia\\28\\29::$_22::__invoke\\28SkCanvas&\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20SkFont\\20const&\\2c\\20SkPaint\\20const&\\29\n7844:embind_init_Skia\\28\\29::$_21::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\20const&\\29\n7845:embind_init_Skia\\28\\29::$_20::__invoke\\28SkCanvas&\\2c\\20unsigned\\20int\\2c\\20SkBlendMode\\29\n7846:embind_init_Skia\\28\\29::$_1::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n7847:embind_init_Skia\\28\\29::$_19::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkBlendMode\\29\n7848:embind_init_Skia\\28\\29::$_18::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n7849:embind_init_Skia\\28\\29::$_17::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const*\\29\n7850:embind_init_Skia\\28\\29::$_16::__invoke\\28SkCanvas&\\2c\\20sk_sp<SkImage>\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkPaint\\20const*\\29\n7851:embind_init_Skia\\28\\29::$_15::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n7852:embind_init_Skia\\28\\29::$_14::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n7853:embind_init_Skia\\28\\29::$_148::__invoke\\28SkVertices::Builder&\\29\n7854:embind_init_Skia\\28\\29::$_147::__invoke\\28SkVertices::Builder&\\29\n7855:embind_init_Skia\\28\\29::$_146::__invoke\\28SkVertices::Builder&\\29\n7856:embind_init_Skia\\28\\29::$_145::__invoke\\28SkVertices::Builder&\\29\n7857:embind_init_Skia\\28\\29::$_144::__invoke\\28SkVertices&\\2c\\20unsigned\\20long\\29\n7858:embind_init_Skia\\28\\29::$_143::__invoke\\28SkTypeface&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7859:embind_init_Skia\\28\\29::$_142::__invoke\\28unsigned\\20long\\2c\\20int\\29\n7860:embind_init_Skia\\28\\29::$_141::__invoke\\28\\29\n7861:embind_init_Skia\\28\\29::$_140::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n7862:embind_init_Skia\\28\\29::$_13::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\n7863:embind_init_Skia\\28\\29::$_139::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n7864:embind_init_Skia\\28\\29::$_138::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n7865:embind_init_Skia\\28\\29::$_137::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\29\n7866:embind_init_Skia\\28\\29::$_136::__invoke\\28SkSurface&\\29\n7867:embind_init_Skia\\28\\29::$_135::__invoke\\28SkSurface&\\29\n7868:embind_init_Skia\\28\\29::$_134::__invoke\\28SkSurface&\\29\n7869:embind_init_Skia\\28\\29::$_133::__invoke\\28SkSurface&\\2c\\20SimpleImageInfo\\29\n7870:embind_init_Skia\\28\\29::$_132::__invoke\\28SkSurface&\\2c\\20unsigned\\20long\\29\n7871:embind_init_Skia\\28\\29::$_131::__invoke\\28SkSurface&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SimpleImageInfo\\29\n7872:embind_init_Skia\\28\\29::$_130::__invoke\\28SkSurface&\\29\n7873:embind_init_Skia\\28\\29::$_12::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\2c\\20SkClipOp\\2c\\20bool\\29\n7874:embind_init_Skia\\28\\29::$_129::__invoke\\28SkSurface&\\29\n7875:embind_init_Skia\\28\\29::$_128::__invoke\\28SimpleImageInfo\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7876:embind_init_Skia\\28\\29::$_127::__invoke\\28SkRuntimeEffect&\\2c\\20int\\29\n7877:embind_init_Skia\\28\\29::$_126::__invoke\\28SkRuntimeEffect&\\2c\\20int\\29\n7878:embind_init_Skia\\28\\29::$_125::__invoke\\28SkRuntimeEffect&\\29\n7879:embind_init_Skia\\28\\29::$_124::__invoke\\28SkRuntimeEffect&\\29\n7880:embind_init_Skia\\28\\29::$_123::__invoke\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n7881:embind_init_Skia\\28\\29::$_122::__invoke\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7882:embind_init_Skia\\28\\29::$_121::__invoke\\28SkRuntimeEffect&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\2c\\20unsigned\\20long\\29\n7883:embind_init_Skia\\28\\29::$_120::__invoke\\28sk_sp<SkShader>\\2c\\20int\\2c\\20int\\29\n7884:embind_init_Skia\\28\\29::$_11::__invoke\\28SkCanvas&\\2c\\20unsigned\\20long\\29\n7885:embind_init_Skia\\28\\29::$_119::__invoke\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\n7886:embind_init_Skia\\28\\29::$_118::__invoke\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20emscripten::val\\29\n7887:embind_init_Skia\\28\\29::$_117::__invoke\\28SkSL::DebugTrace&\\29\n7888:embind_init_Skia\\28\\29::$_116::__invoke\\28unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n7889:embind_init_Skia\\28\\29::$_115::__invoke\\28float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\n7890:embind_init_Skia\\28\\29::$_114::__invoke\\28float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n7891:embind_init_Skia\\28\\29::$_113::__invoke\\28float\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n7892:embind_init_Skia\\28\\29::$_112::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n7893:embind_init_Skia\\28\\29::$_111::__invoke\\28float\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20int\\29\n7894:embind_init_Skia\\28\\29::$_110::__invoke\\28unsigned\\20long\\2c\\20sk_sp<SkColorSpace>\\29\n7895:embind_init_Skia\\28\\29::$_10::__invoke\\28SkAnimatedImage&\\29\n7896:embind_init_Skia\\28\\29::$_109::operator\\28\\29\\28SkPicture&\\29\\20const::'lambda'\\28SkImage*\\2c\\20void*\\29::__invoke\\28SkImage*\\2c\\20void*\\29\n7897:embind_init_Skia\\28\\29::$_109::__invoke\\28SkPicture&\\29\n7898:embind_init_Skia\\28\\29::$_108::__invoke\\28SkPicture&\\2c\\20unsigned\\20long\\29\n7899:embind_init_Skia\\28\\29::$_107::__invoke\\28SkPicture&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkFilterMode\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7900:embind_init_Skia\\28\\29::$_106::__invoke\\28SkPictureRecorder&\\29\n7901:embind_init_Skia\\28\\29::$_105::__invoke\\28SkPictureRecorder&\\2c\\20unsigned\\20long\\2c\\20bool\\29\n7902:embind_init_Skia\\28\\29::$_104::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\29\n7903:embind_init_Skia\\28\\29::$_103::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\29\n7904:embind_init_Skia\\28\\29::$_102::__invoke\\28SkPath&\\2c\\20int\\2c\\20unsigned\\20long\\29\n7905:embind_init_Skia\\28\\29::$_101::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7906:embind_init_Skia\\28\\29::$_100::__invoke\\28SkPath&\\2c\\20unsigned\\20long\\2c\\20bool\\29\n7907:embind_init_Skia\\28\\29::$_0::__invoke\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n7908:embind_init_Paragraph\\28\\29::$_9::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7909:embind_init_Paragraph\\28\\29::$_8::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\29\n7910:embind_init_Paragraph\\28\\29::$_7::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::PlaceholderAlignment\\2c\\20skia::textlayout::TextBaseline\\2c\\20float\\29\n7911:embind_init_Paragraph\\28\\29::$_6::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\2c\\20SkPaint\\2c\\20SkPaint\\29\n7912:embind_init_Paragraph\\28\\29::$_5::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20SimpleTextStyle\\29\n7913:embind_init_Paragraph\\28\\29::$_4::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n7914:embind_init_Paragraph\\28\\29::$_3::__invoke\\28emscripten::val\\2c\\20emscripten::val\\2c\\20float\\29\n7915:embind_init_Paragraph\\28\\29::$_2::__invoke\\28SimpleParagraphStyle\\2c\\20sk_sp<skia::textlayout::FontCollection>\\29\n7916:embind_init_Paragraph\\28\\29::$_18::__invoke\\28skia::textlayout::FontCollection&\\2c\\20sk_sp<skia::textlayout::TypefaceFontProvider>\\20const&\\29\n7917:embind_init_Paragraph\\28\\29::$_17::__invoke\\28\\29\n7918:embind_init_Paragraph\\28\\29::$_16::__invoke\\28skia::textlayout::TypefaceFontProvider&\\2c\\20sk_sp<SkTypeface>\\2c\\20unsigned\\20long\\29\n7919:embind_init_Paragraph\\28\\29::$_15::__invoke\\28\\29\n7920:embind_init_Paragraph\\28\\29::$_14::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7921:embind_init_Paragraph\\28\\29::$_13::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7922:embind_init_Paragraph\\28\\29::$_12::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7923:embind_init_Paragraph\\28\\29::$_11::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7924:embind_init_Paragraph\\28\\29::$_10::__invoke\\28skia::textlayout::ParagraphBuilderImpl&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n7925:dispose_external_texture\\28void*\\29\n7926:deleteJSTexture\\28void*\\29\n7927:deflate_slow\n7928:deflate_fast\n7929:decompress_smooth_data\n7930:decompress_onepass\n7931:decompress_data\n7932:decompose_unicode\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n7933:decompose_khmer\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n7934:decompose_indic\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n7935:decode_mcu_DC_refine\n7936:decode_mcu_DC_first\n7937:decode_mcu_AC_refine\n7938:decode_mcu_AC_first\n7939:decode_mcu\n7940:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::Make\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::Make\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7941:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader*\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&>\\28SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7942:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList*\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList\\2c\\20skgpu::ganesh::StrokeTessellator::PathStrokeList>\\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7943:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator*\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator\\2c\\20skgpu::tess::PatchAttribs&>\\28skgpu::tess::PatchAttribs&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::StrokeTessellator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7944:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList*\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::PathTessellator::PathDrawList&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7945:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Make\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Make\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7946:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::RectanizerSkyline*\\20SkArenaAlloc::make<skgpu::RectanizerSkyline\\2c\\20int&\\2c\\20int&>\\28int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28skgpu::RectanizerSkyline&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7947:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::RectanizerPow2*\\20SkArenaAlloc::make<skgpu::RectanizerPow2\\2c\\20int&\\2c\\20int&>\\28int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28skgpu::RectanizerPow2&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7948:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<sk_sp<SkShader>*\\20SkArenaAlloc::make<sk_sp<SkShader>>\\28\\29::'lambda'\\28void*\\29>\\28sk_sp<SkShader>&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7949:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc>\\28\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::TextureOpImpl::Desc&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7950:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TentPass*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TentPass\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&>\\28skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::TentPass&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7951:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::SimpleTriangleShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::SimpleTriangleShader\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::SimpleTriangleShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7952:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&>\\28skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::GaussPass&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7953:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::DrawAtlasPathShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::DrawAtlasPathShader\\2c\\20bool&\\2c\\20skgpu::ganesh::AtlasInstancedHelper*\\2c\\20GrShaderCaps\\20const&>\\28bool&\\2c\\20skgpu::ganesh::AtlasInstancedHelper*&&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::DrawAtlasPathShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7954:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::BoundingBoxShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::BoundingBoxShader\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&>\\28SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::BoundingBoxShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7955:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<Sprite_D32_S32*\\20SkArenaAlloc::make<Sprite_D32_S32\\2c\\20SkPixmap\\20const&\\2c\\20unsigned\\20char>\\28SkPixmap\\20const&\\2c\\20unsigned\\20char&&\\29::'lambda'\\28void*\\29>\\28Sprite_D32_S32&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7956:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTriColorShader*\\20SkArenaAlloc::make<SkTriColorShader\\2c\\20bool\\2c\\20bool\\20const&>\\28bool&&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTriColorShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7957:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTCubic*\\20SkArenaAlloc::make<SkTCubic>\\28\\29::'lambda'\\28void*\\29>\\28SkTCubic&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7958:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTConic*\\20SkArenaAlloc::make<SkTConic>\\28\\29::'lambda'\\28void*\\29>\\28SkTConic&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7959:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy*\\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy\\2c\\20SkPixmap\\20const&>\\28SkPixmap\\20const&\\29::'lambda'\\28void*\\29>\\28SkSpriteBlitter_Memcpy&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7960:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter*\\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter\\2c\\20SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\2c\\20sk_sp<SkShader>&>\\28SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\2c\\20sk_sp<SkShader>&\\29::'lambda'\\28void*\\29>\\28SkRasterPipelineSpriteBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7961:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkRasterPipelineBlitter*\\20SkArenaAlloc::make<SkRasterPipelineBlitter\\2c\\20SkPixmap\\20const&\\2c\\20SkArenaAlloc*&>\\28SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\29::'lambda'\\28void*\\29>\\28SkRasterPipelineBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7962:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkNullBlitter*\\20SkArenaAlloc::make<SkNullBlitter>\\28\\29::'lambda'\\28void*\\29>\\28SkNullBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7963:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkMipmapAccessor*\\20SkArenaAlloc::make<SkMipmapAccessor\\2c\\20SkImage_Base\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode&>\\28SkImage_Base\\20const*&&\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode&\\29::'lambda'\\28void*\\29>\\28SkMipmapAccessor&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7964:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph::PathData*\\20SkArenaAlloc::make<SkGlyph::PathData>\\28\\29::'lambda'\\28void*\\29>\\28SkGlyph::PathData&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7965:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph::DrawableData*\\20SkArenaAlloc::make<SkGlyph::DrawableData>\\28\\29::'lambda'\\28void*\\29>\\28SkGlyph::DrawableData&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7966:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph*\\20SkArenaAlloc::make<SkGlyph\\2c\\20SkGlyph>\\28SkGlyph&&\\29::'lambda'\\28void*\\29>\\28SkGlyph&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7967:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7968:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20skgpu::AtlasToken>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\2c\\20skgpu::AtlasToken&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7969:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node>\\28\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::Draw>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7970:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkA8_Coverage_Blitter*\\20SkArenaAlloc::make<SkA8_Coverage_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29::'lambda'\\28void*\\29>\\28SkA8_Coverage_Blitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7971:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrSimpleMesh*\\20SkArenaAlloc::make<GrSimpleMesh>\\28\\29::'lambda'\\28void*\\29>\\28GrSimpleMesh&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7972:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrResourceAllocator::Register*\\20SkArenaAlloc::make<GrResourceAllocator::Register\\2c\\20GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceProvider*&>\\28GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey&&\\2c\\20GrResourceProvider*&\\29::'lambda'\\28void*\\29>\\28GrResourceAllocator::Register&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7973:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrInnerFanTriangulator*\\20SkArenaAlloc::make<GrInnerFanTriangulator\\2c\\20SkPath\\20const&\\2c\\20SkArenaAlloc*\\20const&>\\28SkPath\\20const&\\2c\\20SkArenaAlloc*\\20const&\\29::'lambda'\\28void*\\29>\\28GrInnerFanTriangulator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7974:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrDistanceFieldLCDTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28GrDistanceFieldLCDTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7975:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7976:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrAppliedClip*\\20SkArenaAlloc::make<GrAppliedClip\\2c\\20GrAppliedClip>\\28GrAppliedClip&&\\29::'lambda'\\28void*\\29>\\28GrAppliedClip&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7977:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<EllipseGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28EllipseGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n7978:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>&\\2c\\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7979:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&\\29\n7980:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7981:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7982:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\29\n7983:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>&\\2c\\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7984:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&\\29\n7985:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7986:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7987:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n7988:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\29\n7989:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\29\n7990:deallocate_buffer_var\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n7991:ddquad_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7992:ddquad_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7993:ddline_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7994:ddline_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7995:ddcubic_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7996:ddcubic_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7997:ddconic_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7998:ddconic_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n7999:data_destroy_use\\28void*\\29\n8000:data_create_use\\28hb_ot_shape_plan_t\\20const*\\29\n8001:data_create_khmer\\28hb_ot_shape_plan_t\\20const*\\29\n8002:data_create_indic\\28hb_ot_shape_plan_t\\20const*\\29\n8003:data_create_hangul\\28hb_ot_shape_plan_t\\20const*\\29\n8004:copy\\28void*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\29\n8005:convert_bytes_to_data\n8006:consume_markers\n8007:consume_data\n8008:computeTonalColors\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n8009:compose_unicode\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8010:compose_indic\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8011:compose_hebrew\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8012:compare_ppem\n8013:compare_offsets\n8014:compare_myanmar_order\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\n8015:compare_combining_class\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\n8016:color_quantize3\n8017:color_quantize\n8018:collect_features_use\\28hb_ot_shape_planner_t*\\29\n8019:collect_features_myanmar\\28hb_ot_shape_planner_t*\\29\n8020:collect_features_khmer\\28hb_ot_shape_planner_t*\\29\n8021:collect_features_indic\\28hb_ot_shape_planner_t*\\29\n8022:collect_features_hangul\\28hb_ot_shape_planner_t*\\29\n8023:collect_features_arabic\\28hb_ot_shape_planner_t*\\29\n8024:clip\\28SkPath\\20const&\\2c\\20SkHalfPlane\\20const&\\29::$_0::__invoke\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\n8025:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitStatement\\28SkSL::Statement\\20const&\\29\n8026:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n8027:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8028:cff_slot_init\n8029:cff_slot_done\n8030:cff_size_request\n8031:cff_size_init\n8032:cff_size_done\n8033:cff_sid_to_glyph_name\n8034:cff_set_var_design\n8035:cff_set_mm_weightvector\n8036:cff_set_mm_blend\n8037:cff_set_instance\n8038:cff_random\n8039:cff_ps_has_glyph_names\n8040:cff_ps_get_font_info\n8041:cff_ps_get_font_extra\n8042:cff_parse_vsindex\n8043:cff_parse_private_dict\n8044:cff_parse_multiple_master\n8045:cff_parse_maxstack\n8046:cff_parse_font_matrix\n8047:cff_parse_font_bbox\n8048:cff_parse_cid_ros\n8049:cff_parse_blend\n8050:cff_metrics_adjust\n8051:cff_hadvance_adjust\n8052:cff_glyph_load\n8053:cff_get_var_design\n8054:cff_get_var_blend\n8055:cff_get_standard_encoding\n8056:cff_get_ros\n8057:cff_get_ps_name\n8058:cff_get_name_index\n8059:cff_get_mm_weightvector\n8060:cff_get_mm_var\n8061:cff_get_mm_blend\n8062:cff_get_is_cid\n8063:cff_get_interface\n8064:cff_get_glyph_name\n8065:cff_get_glyph_data\n8066:cff_get_cmap_info\n8067:cff_get_cid_from_glyph_index\n8068:cff_get_advances\n8069:cff_free_glyph_data\n8070:cff_fd_select_get\n8071:cff_face_init\n8072:cff_face_done\n8073:cff_driver_init\n8074:cff_done_blend\n8075:cff_decoder_prepare\n8076:cff_decoder_init\n8077:cff_cmap_unicode_init\n8078:cff_cmap_unicode_char_next\n8079:cff_cmap_unicode_char_index\n8080:cff_cmap_encoding_init\n8081:cff_cmap_encoding_done\n8082:cff_cmap_encoding_char_next\n8083:cff_cmap_encoding_char_index\n8084:cff_builder_start_point\n8085:cff_builder_init\n8086:cff_builder_add_point1\n8087:cff_builder_add_point\n8088:cff_builder_add_contour\n8089:cff_blend_check_vector\n8090:cf2_free_instance\n8091:cf2_decoder_parse_charstrings\n8092:cf2_builder_moveTo\n8093:cf2_builder_lineTo\n8094:cf2_builder_cubeTo\n8095:bw_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n8096:bw_square_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8097:bw_pt_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8098:bw_poly_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8099:bw_line_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8100:bool\\20\\28anonymous\\20namespace\\29::FindVisitor<\\28anonymous\\20namespace\\29::SpotVerticesFactory>\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8101:bool\\20\\28anonymous\\20namespace\\29::FindVisitor<\\28anonymous\\20namespace\\29::AmbientVerticesFactory>\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8102:bool\\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n8103:bool\\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n8104:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n8105:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n8106:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&_hb_arabic_pua_trad_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8107:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&_hb_arabic_pua_simp_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8108:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&OT::_hb_symbol_pua_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8109:bool\\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtableFormat12>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8110:bool\\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtable>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n8111:blur_y_radius_4\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8112:blur_y_radius_3\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8113:blur_y_radius_2\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8114:blur_y_radius_1\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8115:blur_x_radius_4\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8116:blur_x_radius_3\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8117:blur_x_radius_2\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8118:blur_x_radius_1\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n8119:blit_row_s32a_blend\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n8120:blit_row_s32_opaque\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n8121:blit_row_s32_blend\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n8122:argb32_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n8123:arabic_fallback_shape\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8124:alwaysSaveTypefaceBytes\\28SkTypeface*\\2c\\20void*\\29\n8125:alloc_sarray\n8126:alloc_barray\n8127:afm_parser_parse\n8128:afm_parser_init\n8129:afm_parser_done\n8130:afm_compare_kern_pairs\n8131:af_property_set\n8132:af_property_get\n8133:af_latin_metrics_scale\n8134:af_latin_metrics_init\n8135:af_latin_hints_init\n8136:af_latin_hints_apply\n8137:af_latin_get_standard_widths\n8138:af_indic_metrics_init\n8139:af_indic_hints_apply\n8140:af_get_interface\n8141:af_face_globals_free\n8142:af_dummy_hints_init\n8143:af_dummy_hints_apply\n8144:af_cjk_metrics_init\n8145:af_autofitter_load_glyph\n8146:af_autofitter_init\n8147:access_virt_sarray\n8148:access_virt_barray\n8149:aa_square_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8150:aa_poly_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8151:aa_line_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n8152:_hb_ot_font_destroy\\28void*\\29\n8153:_hb_glyph_info_is_default_ignorable\\28hb_glyph_info_t\\20const*\\29\n8154:_hb_face_for_data_reference_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8155:_hb_face_for_data_closure_destroy\\28void*\\29\n8156:_hb_clear_substitution_flags\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8157:_embind_initialize_bindings\n8158:__wasm_call_ctors\n8159:__stdio_write\n8160:__stdio_seek\n8161:__stdio_read\n8162:__stdio_close\n8163:__getTypeName\n8164:__cxxabiv1::__vmi_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n8165:__cxxabiv1::__vmi_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n8166:__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n8167:__cxxabiv1::__si_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n8168:__cxxabiv1::__si_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n8169:__cxxabiv1::__si_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n8170:__cxxabiv1::__class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n8171:__cxxabiv1::__class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n8172:__cxxabiv1::__class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n8173:__cxxabiv1::__class_type_info::can_catch\\28__cxxabiv1::__shim_type_info\\20const*\\2c\\20void*&\\29\\20const\n8174:__cxx_global_array_dtor.9\n8175:__cxx_global_array_dtor.87\n8176:__cxx_global_array_dtor.72\n8177:__cxx_global_array_dtor.57\n8178:__cxx_global_array_dtor.5\n8179:__cxx_global_array_dtor.44\n8180:__cxx_global_array_dtor.42\n8181:__cxx_global_array_dtor.40\n8182:__cxx_global_array_dtor.4\n8183:__cxx_global_array_dtor.38\n8184:__cxx_global_array_dtor.36\n8185:__cxx_global_array_dtor.34\n8186:__cxx_global_array_dtor.32\n8187:__cxx_global_array_dtor.2\n8188:__cxx_global_array_dtor.16\n8189:__cxx_global_array_dtor.15\n8190:__cxx_global_array_dtor.14\n8191:__cxx_global_array_dtor.138\n8192:__cxx_global_array_dtor.135\n8193:__cxx_global_array_dtor.111\n8194:__cxx_global_array_dtor.10\n8195:__cxx_global_array_dtor.1.1\n8196:__cxx_global_array_dtor.1\n8197:__cxx_global_array_dtor\n8198:__cxa_pure_virtual\n8199:__cxa_is_pointer_type\n8200:\\28anonymous\\20namespace\\29::skhb_nominal_glyphs\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8201:\\28anonymous\\20namespace\\29::skhb_nominal_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8202:\\28anonymous\\20namespace\\29::skhb_glyph_h_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8203:\\28anonymous\\20namespace\\29::skhb_glyph_h_advance\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8204:\\28anonymous\\20namespace\\29::skhb_glyph_extents\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n8205:\\28anonymous\\20namespace\\29::skhb_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n8206:\\28anonymous\\20namespace\\29::skhb_get_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n8207:\\28anonymous\\20namespace\\29::skhb_get_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n8208:\\28anonymous\\20namespace\\29::make_morphology\\28\\28anonymous\\20namespace\\29::MorphType\\2c\\20SkSize\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n8209:\\28anonymous\\20namespace\\29::make_drop_shadow_graph\\28SkPoint\\2c\\20SkSize\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20sk_sp<SkImageFilter>\\2c\\20std::__2::optional<SkRect>\\20const&\\29\n8210:\\28anonymous\\20namespace\\29::extension_compare\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\n8211:\\28anonymous\\20namespace\\29::YUVPlanesRec::~YUVPlanesRec\\28\\29.1\n8212:\\28anonymous\\20namespace\\29::YUVPlanesRec::getCategory\\28\\29\\20const\n8213:\\28anonymous\\20namespace\\29::YUVPlanesRec::diagnostic_only_getDiscardable\\28\\29\\20const\n8214:\\28anonymous\\20namespace\\29::YUVPlanesRec::bytesUsed\\28\\29\\20const\n8215:\\28anonymous\\20namespace\\29::YUVPlanesRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8216:\\28anonymous\\20namespace\\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\\28\\29.1\n8217:\\28anonymous\\20namespace\\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\\28\\29\n8218:\\28anonymous\\20namespace\\29::TriangulatingPathOp::~TriangulatingPathOp\\28\\29.1\n8219:\\28anonymous\\20namespace\\29::TriangulatingPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8220:\\28anonymous\\20namespace\\29::TriangulatingPathOp::programInfo\\28\\29\n8221:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8222:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8223:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8224:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8225:\\28anonymous\\20namespace\\29::TriangulatingPathOp::name\\28\\29\\20const\n8226:\\28anonymous\\20namespace\\29::TriangulatingPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8227:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::unflattenSize\\28\\29\\20const\n8228:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n8229:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::instanceFlags\\28\\29\\20const\n8230:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n8231:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n8232:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n8233:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n8234:\\28anonymous\\20namespace\\29::TextureOpImpl::~TextureOpImpl\\28\\29.1\n8235:\\28anonymous\\20namespace\\29::TextureOpImpl::~TextureOpImpl\\28\\29\n8236:\\28anonymous\\20namespace\\29::TextureOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8237:\\28anonymous\\20namespace\\29::TextureOpImpl::programInfo\\28\\29\n8238:\\28anonymous\\20namespace\\29::TextureOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8239:\\28anonymous\\20namespace\\29::TextureOpImpl::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8240:\\28anonymous\\20namespace\\29::TextureOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8241:\\28anonymous\\20namespace\\29::TextureOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8242:\\28anonymous\\20namespace\\29::TextureOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8243:\\28anonymous\\20namespace\\29::TextureOpImpl::name\\28\\29\\20const\n8244:\\28anonymous\\20namespace\\29::TextureOpImpl::fixedFunctionFlags\\28\\29\\20const\n8245:\\28anonymous\\20namespace\\29::TextureOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8246:\\28anonymous\\20namespace\\29::TentPass::startBlur\\28\\29\n8247:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n8248:\\28anonymous\\20namespace\\29::TentPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::makePass\\28void*\\2c\\20SkArenaAlloc*\\29\\20const\n8249:\\28anonymous\\20namespace\\29::TentPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::bufferSizeBytes\\28\\29\\20const\n8250:\\28anonymous\\20namespace\\29::StaticVertexAllocator::~StaticVertexAllocator\\28\\29.1\n8251:\\28anonymous\\20namespace\\29::StaticVertexAllocator::~StaticVertexAllocator\\28\\29\n8252:\\28anonymous\\20namespace\\29::StaticVertexAllocator::unlock\\28int\\29\n8253:\\28anonymous\\20namespace\\29::StaticVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n8254:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::currentScript\\28\\29\\20const\n8255:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::consume\\28\\29\n8256:\\28anonymous\\20namespace\\29::SkShaderImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8257:\\28anonymous\\20namespace\\29::SkShaderImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8258:\\28anonymous\\20namespace\\29::SkShaderImageFilter::getTypeName\\28\\29\\20const\n8259:\\28anonymous\\20namespace\\29::SkShaderImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8260:\\28anonymous\\20namespace\\29::SkShaderImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8261:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8262:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8263:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8264:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::getTypeName\\28\\29\\20const\n8265:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8266:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8267:\\28anonymous\\20namespace\\29::SkMergeImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8268:\\28anonymous\\20namespace\\29::SkMergeImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8269:\\28anonymous\\20namespace\\29::SkMergeImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8270:\\28anonymous\\20namespace\\29::SkMergeImageFilter::getTypeName\\28\\29\\20const\n8271:\\28anonymous\\20namespace\\29::SkMergeImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8272:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8273:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8274:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8275:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::getTypeName\\28\\29\\20const\n8276:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8277:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8278:\\28anonymous\\20namespace\\29::SkImageImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8279:\\28anonymous\\20namespace\\29::SkImageImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8280:\\28anonymous\\20namespace\\29::SkImageImageFilter::getTypeName\\28\\29\\20const\n8281:\\28anonymous\\20namespace\\29::SkImageImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8282:\\28anonymous\\20namespace\\29::SkImageImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8283:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Quad\\28FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20void*\\29\n8284:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Move\\28FT_Vector_\\20const*\\2c\\20void*\\29\n8285:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Line\\28FT_Vector_\\20const*\\2c\\20void*\\29\n8286:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Cubic\\28FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20void*\\29\n8287:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n8288:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onGetFamilyName\\28SkString*\\29\\20const\n8289:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n8290:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCreateFamilyNameIterator\\28\\29\\20const\n8291:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n8292:\\28anonymous\\20namespace\\29::SkEmptyTypeface::MakeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\n8293:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8294:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8295:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8296:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::getTypeName\\28\\29\\20const\n8297:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8298:\\28anonymous\\20namespace\\29::SkDisplacementMapImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8299:\\28anonymous\\20namespace\\29::SkCropImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8300:\\28anonymous\\20namespace\\29::SkCropImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8301:\\28anonymous\\20namespace\\29::SkCropImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8302:\\28anonymous\\20namespace\\29::SkCropImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n8303:\\28anonymous\\20namespace\\29::SkCropImageFilter::getTypeName\\28\\29\\20const\n8304:\\28anonymous\\20namespace\\29::SkCropImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8305:\\28anonymous\\20namespace\\29::SkCropImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8306:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8307:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8308:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8309:\\28anonymous\\20namespace\\29::SkComposeImageFilter::getTypeName\\28\\29\\20const\n8310:\\28anonymous\\20namespace\\29::SkComposeImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8311:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onIsColorFilterNode\\28SkColorFilter**\\29\\20const\n8312:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8313:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8314:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8315:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n8316:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::getTypeName\\28\\29\\20const\n8317:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8318:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8319:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8320:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8321:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8322:\\28anonymous\\20namespace\\29::SkBlurImageFilter::getTypeName\\28\\29\\20const\n8323:\\28anonymous\\20namespace\\29::SkBlurImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8324:\\28anonymous\\20namespace\\29::SkBlurImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8325:\\28anonymous\\20namespace\\29::SkBlendImageFilter::~SkBlendImageFilter\\28\\29.1\n8326:\\28anonymous\\20namespace\\29::SkBlendImageFilter::~SkBlendImageFilter\\28\\29\n8327:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8328:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n8329:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n8330:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n8331:\\28anonymous\\20namespace\\29::SkBlendImageFilter::getTypeName\\28\\29\\20const\n8332:\\28anonymous\\20namespace\\29::SkBlendImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n8333:\\28anonymous\\20namespace\\29::SkBlendImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n8334:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::~SkBidiIterator_icu\\28\\29.1\n8335:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::~SkBidiIterator_icu\\28\\29\n8336:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::getLevelAt\\28int\\29\n8337:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::getLength\\28\\29\n8338:\\28anonymous\\20namespace\\29::SimpleTriangleShader::name\\28\\29\\20const\n8339:\\28anonymous\\20namespace\\29::SimpleTriangleShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8340:\\28anonymous\\20namespace\\29::SimpleTriangleShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8341:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::~ShaperHarfBuzz\\28\\29.1\n8342:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::FontRunIterator&\\2c\\20SkShaper::BiDiRunIterator&\\2c\\20SkShaper::ScriptRunIterator&\\2c\\20SkShaper::LanguageRunIterator&\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n8343:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::FontRunIterator&\\2c\\20SkShaper::BiDiRunIterator&\\2c\\20SkShaper::ScriptRunIterator&\\2c\\20SkShaper::LanguageRunIterator&\\2c\\20SkShaper::Feature\\20const*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n8344:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20bool\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n8345:\\28anonymous\\20namespace\\29::ShapeDontWrapOrReorder::~ShapeDontWrapOrReorder\\28\\29\n8346:\\28anonymous\\20namespace\\29::ShapeDontWrapOrReorder::wrap\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::BiDiRunIterator\\20const&\\2c\\20SkShaper::LanguageRunIterator\\20const&\\2c\\20SkShaper::ScriptRunIterator\\20const&\\2c\\20SkShaper::FontRunIterator\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue&\\2c\\20SkShaper::Feature\\20const*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n8347:\\28anonymous\\20namespace\\29::ShadowInvalidator::~ShadowInvalidator\\28\\29.1\n8348:\\28anonymous\\20namespace\\29::ShadowInvalidator::~ShadowInvalidator\\28\\29\n8349:\\28anonymous\\20namespace\\29::ShadowInvalidator::changed\\28\\29\n8350:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\\28\\29.1\n8351:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\\28\\29\n8352:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8353:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::programInfo\\28\\29\n8354:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8355:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8356:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8357:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8358:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::name\\28\\29\\20const\n8359:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8360:\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29.1\n8361:\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29\n8362:\\28anonymous\\20namespace\\29::SDFTSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n8363:\\28anonymous\\20namespace\\29::SDFTSubRun::vertexFiller\\28\\29\\20const\n8364:\\28anonymous\\20namespace\\29::SDFTSubRun::unflattenSize\\28\\29\\20const\n8365:\\28anonymous\\20namespace\\29::SDFTSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n8366:\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n8367:\\28anonymous\\20namespace\\29::SDFTSubRun::glyphs\\28\\29\\20const\n8368:\\28anonymous\\20namespace\\29::SDFTSubRun::glyphCount\\28\\29\\20const\n8369:\\28anonymous\\20namespace\\29::SDFTSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n8370:\\28anonymous\\20namespace\\29::SDFTSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n8371:\\28anonymous\\20namespace\\29::SDFTSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n8372:\\28anonymous\\20namespace\\29::SDFTSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n8373:\\28anonymous\\20namespace\\29::RectsBlurRec::~RectsBlurRec\\28\\29.1\n8374:\\28anonymous\\20namespace\\29::RectsBlurRec::~RectsBlurRec\\28\\29\n8375:\\28anonymous\\20namespace\\29::RectsBlurRec::getCategory\\28\\29\\20const\n8376:\\28anonymous\\20namespace\\29::RectsBlurRec::diagnostic_only_getDiscardable\\28\\29\\20const\n8377:\\28anonymous\\20namespace\\29::RectsBlurRec::bytesUsed\\28\\29\\20const\n8378:\\28anonymous\\20namespace\\29::RectsBlurRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8379:\\28anonymous\\20namespace\\29::RRectBlurRec::~RRectBlurRec\\28\\29.1\n8380:\\28anonymous\\20namespace\\29::RRectBlurRec::~RRectBlurRec\\28\\29\n8381:\\28anonymous\\20namespace\\29::RRectBlurRec::getCategory\\28\\29\\20const\n8382:\\28anonymous\\20namespace\\29::RRectBlurRec::diagnostic_only_getDiscardable\\28\\29\\20const\n8383:\\28anonymous\\20namespace\\29::RRectBlurRec::bytesUsed\\28\\29\\20const\n8384:\\28anonymous\\20namespace\\29::RRectBlurRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8385:\\28anonymous\\20namespace\\29::PathSubRun::~PathSubRun\\28\\29.1\n8386:\\28anonymous\\20namespace\\29::PathSubRun::~PathSubRun\\28\\29\n8387:\\28anonymous\\20namespace\\29::PathSubRun::unflattenSize\\28\\29\\20const\n8388:\\28anonymous\\20namespace\\29::PathSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n8389:\\28anonymous\\20namespace\\29::PathSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n8390:\\28anonymous\\20namespace\\29::MipMapRec::~MipMapRec\\28\\29.1\n8391:\\28anonymous\\20namespace\\29::MipMapRec::~MipMapRec\\28\\29\n8392:\\28anonymous\\20namespace\\29::MipMapRec::getCategory\\28\\29\\20const\n8393:\\28anonymous\\20namespace\\29::MipMapRec::diagnostic_only_getDiscardable\\28\\29\\20const\n8394:\\28anonymous\\20namespace\\29::MipMapRec::bytesUsed\\28\\29\\20const\n8395:\\28anonymous\\20namespace\\29::MipMapRec::Finder\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8396:\\28anonymous\\20namespace\\29::MiddleOutShader::~MiddleOutShader\\28\\29.1\n8397:\\28anonymous\\20namespace\\29::MiddleOutShader::~MiddleOutShader\\28\\29\n8398:\\28anonymous\\20namespace\\29::MiddleOutShader::name\\28\\29\\20const\n8399:\\28anonymous\\20namespace\\29::MiddleOutShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8400:\\28anonymous\\20namespace\\29::MiddleOutShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8401:\\28anonymous\\20namespace\\29::MiddleOutShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8402:\\28anonymous\\20namespace\\29::MeshOp::~MeshOp\\28\\29.1\n8403:\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8404:\\28anonymous\\20namespace\\29::MeshOp::programInfo\\28\\29\n8405:\\28anonymous\\20namespace\\29::MeshOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8406:\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8407:\\28anonymous\\20namespace\\29::MeshOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8408:\\28anonymous\\20namespace\\29::MeshOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8409:\\28anonymous\\20namespace\\29::MeshOp::name\\28\\29\\20const\n8410:\\28anonymous\\20namespace\\29::MeshOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8411:\\28anonymous\\20namespace\\29::MeshGP::~MeshGP\\28\\29.1\n8412:\\28anonymous\\20namespace\\29::MeshGP::onTextureSampler\\28int\\29\\20const\n8413:\\28anonymous\\20namespace\\29::MeshGP::name\\28\\29\\20const\n8414:\\28anonymous\\20namespace\\29::MeshGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8415:\\28anonymous\\20namespace\\29::MeshGP::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8416:\\28anonymous\\20namespace\\29::MeshGP::Impl::~Impl\\28\\29.1\n8417:\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8418:\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8419:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::toLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n8420:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleShader\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n8421:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleColorFilter\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n8422:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleBlender\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n8423:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::getMangledName\\28char\\20const*\\29\n8424:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::getMainName\\28\\29\n8425:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::fromLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n8426:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::defineFunction\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n8427:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::declareUniform\\28SkSL::VarDeclaration\\20const*\\29\n8428:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::declareFunction\\28char\\20const*\\29\n8429:\\28anonymous\\20namespace\\29::ImageFromPictureRec::~ImageFromPictureRec\\28\\29.1\n8430:\\28anonymous\\20namespace\\29::ImageFromPictureRec::~ImageFromPictureRec\\28\\29\n8431:\\28anonymous\\20namespace\\29::ImageFromPictureRec::getCategory\\28\\29\\20const\n8432:\\28anonymous\\20namespace\\29::ImageFromPictureRec::bytesUsed\\28\\29\\20const\n8433:\\28anonymous\\20namespace\\29::ImageFromPictureRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n8434:\\28anonymous\\20namespace\\29::HQDownSampler::buildLevel\\28SkPixmap\\20const&\\2c\\20SkPixmap\\20const&\\29\n8435:\\28anonymous\\20namespace\\29::GaussPass::startBlur\\28\\29\n8436:\\28anonymous\\20namespace\\29::GaussPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n8437:\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::makePass\\28void*\\2c\\20SkArenaAlloc*\\29\\20const\n8438:\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::bufferSizeBytes\\28\\29\\20const\n8439:\\28anonymous\\20namespace\\29::FillRectOpImpl::~FillRectOpImpl\\28\\29.1\n8440:\\28anonymous\\20namespace\\29::FillRectOpImpl::~FillRectOpImpl\\28\\29\n8441:\\28anonymous\\20namespace\\29::FillRectOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8442:\\28anonymous\\20namespace\\29::FillRectOpImpl::programInfo\\28\\29\n8443:\\28anonymous\\20namespace\\29::FillRectOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8444:\\28anonymous\\20namespace\\29::FillRectOpImpl::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8445:\\28anonymous\\20namespace\\29::FillRectOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8446:\\28anonymous\\20namespace\\29::FillRectOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8447:\\28anonymous\\20namespace\\29::FillRectOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8448:\\28anonymous\\20namespace\\29::FillRectOpImpl::name\\28\\29\\20const\n8449:\\28anonymous\\20namespace\\29::FillRectOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8450:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onMakeProgramImpl\\28\\29\\20const\n8451:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8452:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::name\\28\\29\\20const\n8453:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::clone\\28\\29\\20const\n8454:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n8455:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n8456:\\28anonymous\\20namespace\\29::DrawableSubRun::~DrawableSubRun\\28\\29.1\n8457:\\28anonymous\\20namespace\\29::DrawableSubRun::~DrawableSubRun\\28\\29\n8458:\\28anonymous\\20namespace\\29::DrawableSubRun::unflattenSize\\28\\29\\20const\n8459:\\28anonymous\\20namespace\\29::DrawableSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n8460:\\28anonymous\\20namespace\\29::DrawableSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n8461:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::~DrawAtlasPathShader\\28\\29.1\n8462:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::~DrawAtlasPathShader\\28\\29\n8463:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::onTextureSampler\\28int\\29\\20const\n8464:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::name\\28\\29\\20const\n8465:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8466:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8467:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8468:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8469:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\\28\\29.1\n8470:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\\28\\29\n8471:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8472:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8473:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8474:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::name\\28\\29\\20const\n8475:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8476:\\28anonymous\\20namespace\\29::DirectMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n8477:\\28anonymous\\20namespace\\29::DirectMaskSubRun::unflattenSize\\28\\29\\20const\n8478:\\28anonymous\\20namespace\\29::DirectMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n8479:\\28anonymous\\20namespace\\29::DirectMaskSubRun::instanceFlags\\28\\29\\20const\n8480:\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n8481:\\28anonymous\\20namespace\\29::DirectMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n8482:\\28anonymous\\20namespace\\29::DirectMaskSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n8483:\\28anonymous\\20namespace\\29::DirectMaskSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n8484:\\28anonymous\\20namespace\\29::DefaultPathOp::~DefaultPathOp\\28\\29.1\n8485:\\28anonymous\\20namespace\\29::DefaultPathOp::~DefaultPathOp\\28\\29\n8486:\\28anonymous\\20namespace\\29::DefaultPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8487:\\28anonymous\\20namespace\\29::DefaultPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8488:\\28anonymous\\20namespace\\29::DefaultPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8489:\\28anonymous\\20namespace\\29::DefaultPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8490:\\28anonymous\\20namespace\\29::DefaultPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8491:\\28anonymous\\20namespace\\29::DefaultPathOp::name\\28\\29\\20const\n8492:\\28anonymous\\20namespace\\29::DefaultPathOp::fixedFunctionFlags\\28\\29\\20const\n8493:\\28anonymous\\20namespace\\29::DefaultPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8494:\\28anonymous\\20namespace\\29::CircularRRectEffect::onMakeProgramImpl\\28\\29\\20const\n8495:\\28anonymous\\20namespace\\29::CircularRRectEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8496:\\28anonymous\\20namespace\\29::CircularRRectEffect::name\\28\\29\\20const\n8497:\\28anonymous\\20namespace\\29::CircularRRectEffect::clone\\28\\29\\20const\n8498:\\28anonymous\\20namespace\\29::CircularRRectEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n8499:\\28anonymous\\20namespace\\29::CircularRRectEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n8500:\\28anonymous\\20namespace\\29::CachedTessellationsRec::~CachedTessellationsRec\\28\\29.1\n8501:\\28anonymous\\20namespace\\29::CachedTessellationsRec::~CachedTessellationsRec\\28\\29\n8502:\\28anonymous\\20namespace\\29::CachedTessellationsRec::getCategory\\28\\29\\20const\n8503:\\28anonymous\\20namespace\\29::CachedTessellationsRec::bytesUsed\\28\\29\\20const\n8504:\\28anonymous\\20namespace\\29::CachedTessellations::~CachedTessellations\\28\\29.1\n8505:\\28anonymous\\20namespace\\29::CacheImpl::~CacheImpl\\28\\29.1\n8506:\\28anonymous\\20namespace\\29::CacheImpl::set\\28SkImageFilterCacheKey\\20const&\\2c\\20SkImageFilter\\20const*\\2c\\20skif::FilterResult\\20const&\\29\n8507:\\28anonymous\\20namespace\\29::CacheImpl::purge\\28\\29\n8508:\\28anonymous\\20namespace\\29::CacheImpl::purgeByImageFilter\\28SkImageFilter\\20const*\\29\n8509:\\28anonymous\\20namespace\\29::CacheImpl::get\\28SkImageFilterCacheKey\\20const&\\2c\\20skif::FilterResult*\\29\\20const\n8510:\\28anonymous\\20namespace\\29::BoundingBoxShader::name\\28\\29\\20const\n8511:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8512:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8513:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8514:\\28anonymous\\20namespace\\29::AAHairlineOp::~AAHairlineOp\\28\\29.1\n8515:\\28anonymous\\20namespace\\29::AAHairlineOp::~AAHairlineOp\\28\\29\n8516:\\28anonymous\\20namespace\\29::AAHairlineOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8517:\\28anonymous\\20namespace\\29::AAHairlineOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8518:\\28anonymous\\20namespace\\29::AAHairlineOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8519:\\28anonymous\\20namespace\\29::AAHairlineOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8520:\\28anonymous\\20namespace\\29::AAHairlineOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8521:\\28anonymous\\20namespace\\29::AAHairlineOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8522:\\28anonymous\\20namespace\\29::AAHairlineOp::name\\28\\29\\20const\n8523:\\28anonymous\\20namespace\\29::AAHairlineOp::fixedFunctionFlags\\28\\29\\20const\n8524:\\28anonymous\\20namespace\\29::AAHairlineOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8525:YuvToRgbaRow\n8526:YuvToRgba4444Row\n8527:YuvToRgbRow\n8528:YuvToRgb565Row\n8529:YuvToBgraRow\n8530:YuvToBgrRow\n8531:YuvToArgbRow\n8532:Write_CVT_Stretched\n8533:Write_CVT\n8534:WebPYuv444ToRgba_C\n8535:WebPYuv444ToRgba4444_C\n8536:WebPYuv444ToRgb_C\n8537:WebPYuv444ToRgb565_C\n8538:WebPYuv444ToBgra_C\n8539:WebPYuv444ToBgr_C\n8540:WebPYuv444ToArgb_C\n8541:WebPRescalerImportRowShrink_C\n8542:WebPRescalerImportRowExpand_C\n8543:WebPRescalerExportRowShrink_C\n8544:WebPRescalerExportRowExpand_C\n8545:WebPMultRow_C\n8546:WebPMultARGBRow_C\n8547:WebPConvertRGBA32ToUV_C\n8548:WebPConvertARGBToUV_C\n8549:WebGLTextureImageGenerator::~WebGLTextureImageGenerator\\28\\29.1\n8550:WebGLTextureImageGenerator::~WebGLTextureImageGenerator\\28\\29\n8551:WebGLTextureImageGenerator::generateExternalTexture\\28GrRecordingContext*\\2c\\20skgpu::Mipmapped\\29\n8552:Vertish_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n8553:Vertish_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n8554:VerticalUnfilter_C\n8555:VerticalFilter_C\n8556:VertState::Triangles\\28VertState*\\29\n8557:VertState::TrianglesX\\28VertState*\\29\n8558:VertState::TriangleStrip\\28VertState*\\29\n8559:VertState::TriangleStripX\\28VertState*\\29\n8560:VertState::TriangleFan\\28VertState*\\29\n8561:VertState::TriangleFanX\\28VertState*\\29\n8562:VR4_C\n8563:VP8LTransformColorInverse_C\n8564:VP8LPredictor9_C\n8565:VP8LPredictor8_C\n8566:VP8LPredictor7_C\n8567:VP8LPredictor6_C\n8568:VP8LPredictor5_C\n8569:VP8LPredictor4_C\n8570:VP8LPredictor3_C\n8571:VP8LPredictor2_C\n8572:VP8LPredictor1_C\n8573:VP8LPredictor13_C\n8574:VP8LPredictor12_C\n8575:VP8LPredictor11_C\n8576:VP8LPredictor10_C\n8577:VP8LPredictor0_C\n8578:VP8LConvertBGRAToRGB_C\n8579:VP8LConvertBGRAToRGBA_C\n8580:VP8LConvertBGRAToRGBA4444_C\n8581:VP8LConvertBGRAToRGB565_C\n8582:VP8LConvertBGRAToBGR_C\n8583:VP8LAddGreenToBlueAndRed_C\n8584:VLine_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n8585:VLine_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n8586:VL4_C\n8587:VFilter8i_C\n8588:VFilter8_C\n8589:VFilter16i_C\n8590:VFilter16_C\n8591:VE8uv_C\n8592:VE4_C\n8593:VE16_C\n8594:UpsampleRgbaLinePair_C\n8595:UpsampleRgba4444LinePair_C\n8596:UpsampleRgbLinePair_C\n8597:UpsampleRgb565LinePair_C\n8598:UpsampleBgraLinePair_C\n8599:UpsampleBgrLinePair_C\n8600:UpsampleArgbLinePair_C\n8601:UnresolvedCodepoints\\28skia::textlayout::Paragraph&\\29\n8602:TransformWHT_C\n8603:TransformUV_C\n8604:TransformTwo_C\n8605:TransformDC_C\n8606:TransformDCUV_C\n8607:TransformAC3_C\n8608:ToSVGString\\28SkPath\\20const&\\29\n8609:ToCmds\\28SkPath\\20const&\\29\n8610:TT_Set_MM_Blend\n8611:TT_RunIns\n8612:TT_Load_Simple_Glyph\n8613:TT_Load_Glyph_Header\n8614:TT_Load_Composite_Glyph\n8615:TT_Get_Var_Design\n8616:TT_Get_MM_Blend\n8617:TT_Forget_Glyph_Frame\n8618:TT_Access_Glyph_Frame\n8619:TM8uv_C\n8620:TM4_C\n8621:TM16_C\n8622:Sync\n8623:SquareCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n8624:Sprite_D32_S32::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n8625:SkWuffsFrameHolder::onGetFrame\\28int\\29\\20const\n8626:SkWuffsCodec::~SkWuffsCodec\\28\\29.1\n8627:SkWuffsCodec::~SkWuffsCodec\\28\\29\n8628:SkWuffsCodec::onIncrementalDecode\\28int*\\29\n8629:SkWuffsCodec::onGetRepetitionCount\\28\\29\n8630:SkWuffsCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n8631:SkWuffsCodec::onGetFrameInfo\\28int\\2c\\20SkCodec::FrameInfo*\\29\\20const\n8632:SkWuffsCodec::onGetFrameCount\\28\\29\n8633:SkWuffsCodec::getFrameHolder\\28\\29\\20const\n8634:SkWuffsCodec::getEncodedData\\28\\29\\20const\n8635:SkWriteICCProfile\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n8636:SkWebpDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n8637:SkWebpCodec::~SkWebpCodec\\28\\29.1\n8638:SkWebpCodec::~SkWebpCodec\\28\\29\n8639:SkWebpCodec::onGetValidSubset\\28SkIRect*\\29\\20const\n8640:SkWebpCodec::onGetRepetitionCount\\28\\29\n8641:SkWebpCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n8642:SkWebpCodec::onGetFrameInfo\\28int\\2c\\20SkCodec::FrameInfo*\\29\\20const\n8643:SkWebpCodec::onGetFrameCount\\28\\29\n8644:SkWebpCodec::getFrameHolder\\28\\29\\20const\n8645:SkWebpCodec::FrameHolder::~FrameHolder\\28\\29.1\n8646:SkWebpCodec::FrameHolder::~FrameHolder\\28\\29\n8647:SkWebpCodec::FrameHolder::onGetFrame\\28int\\29\\20const\n8648:SkWeakRefCnt::internal_dispose\\28\\29\\20const\n8649:SkWbmpDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n8650:SkWbmpCodec::~SkWbmpCodec\\28\\29.1\n8651:SkWbmpCodec::~SkWbmpCodec\\28\\29\n8652:SkWbmpCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n8653:SkWbmpCodec::onSkipScanlines\\28int\\29\n8654:SkWbmpCodec::onRewind\\28\\29\n8655:SkWbmpCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n8656:SkWbmpCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n8657:SkWbmpCodec::getSampler\\28bool\\29\n8658:SkWbmpCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n8659:SkVertices::Builder*\\20emscripten::internal::operator_new<SkVertices::Builder\\2c\\20SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int>\\28SkVertices::VertexMode&&\\2c\\20int&&\\2c\\20int&&\\2c\\20unsigned\\20int&&\\29\n8660:SkUserTypeface::~SkUserTypeface\\28\\29.1\n8661:SkUserTypeface::~SkUserTypeface\\28\\29\n8662:SkUserTypeface::onOpenStream\\28int*\\29\\20const\n8663:SkUserTypeface::onGetUPEM\\28\\29\\20const\n8664:SkUserTypeface::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n8665:SkUserTypeface::onGetFamilyName\\28SkString*\\29\\20const\n8666:SkUserTypeface::onFilterRec\\28SkScalerContextRec*\\29\\20const\n8667:SkUserTypeface::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n8668:SkUserTypeface::onCountGlyphs\\28\\29\\20const\n8669:SkUserTypeface::onComputeBounds\\28SkRect*\\29\\20const\n8670:SkUserTypeface::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n8671:SkUserTypeface::getGlyphToUnicodeMap\\28int*\\29\\20const\n8672:SkUserScalerContext::~SkUserScalerContext\\28\\29\n8673:SkUserScalerContext::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n8674:SkUserScalerContext::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n8675:SkUserScalerContext::generateImage\\28SkGlyph\\20const&\\2c\\20void*\\29\n8676:SkUserScalerContext::generateFontMetrics\\28SkFontMetrics*\\29\n8677:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::~DrawableMatrixWrapper\\28\\29.1\n8678:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::~DrawableMatrixWrapper\\28\\29\n8679:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::onGetBounds\\28\\29\n8680:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::onDraw\\28SkCanvas*\\29\n8681:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29::DrawableMatrixWrapper::onApproximateBytesUsed\\28\\29\n8682:SkUserScalerContext::generateDrawable\\28SkGlyph\\20const&\\29\n8683:SkUnicode_client::~SkUnicode_client\\28\\29.1\n8684:SkUnicode_client::~SkUnicode_client\\28\\29\n8685:SkUnicode_client::toUpper\\28SkString\\20const&\\2c\\20char\\20const*\\29\n8686:SkUnicode_client::toUpper\\28SkString\\20const&\\29\n8687:SkUnicode_client::reorderVisual\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\n8688:SkUnicode_client::makeBreakIterator\\28char\\20const*\\2c\\20SkUnicode::BreakType\\29\n8689:SkUnicode_client::makeBreakIterator\\28SkUnicode::BreakType\\29\n8690:SkUnicode_client::makeBidiIterator\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\n8691:SkUnicode_client::makeBidiIterator\\28char\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\n8692:SkUnicode_client::getWords\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29\n8693:SkUnicode_client::getBidiRegions\\28char\\20const*\\2c\\20int\\2c\\20SkUnicode::TextDirection\\2c\\20std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>*\\29\n8694:SkUnicode_client::computeCodeUnitFlags\\28char16_t*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29\n8695:SkUnicode_client::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29\n8696:SkUnicodeHardCodedCharProperties::isWhitespace\\28int\\29\n8697:SkUnicodeHardCodedCharProperties::isTabulation\\28int\\29\n8698:SkUnicodeHardCodedCharProperties::isSpace\\28int\\29\n8699:SkUnicodeHardCodedCharProperties::isIdeographic\\28int\\29\n8700:SkUnicodeHardCodedCharProperties::isHardBreak\\28int\\29\n8701:SkUnicodeHardCodedCharProperties::isControl\\28int\\29\n8702:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\\28\\29.1\n8703:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\\28\\29\n8704:SkUnicodeBidiRunIterator::endOfCurrentRun\\28\\29\\20const\n8705:SkUnicodeBidiRunIterator::currentLevel\\28\\29\\20const\n8706:SkUnicodeBidiRunIterator::consume\\28\\29\n8707:SkUnicodeBidiRunIterator::atEnd\\28\\29\\20const\n8708:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\\28\\29.1\n8709:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\\28\\29\n8710:SkTypeface_FreeTypeStream::onOpenStream\\28int*\\29\\20const\n8711:SkTypeface_FreeTypeStream::onMakeFontData\\28\\29\\20const\n8712:SkTypeface_FreeTypeStream::onMakeClone\\28SkFontArguments\\20const&\\29\\20const\n8713:SkTypeface_FreeTypeStream::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n8714:SkTypeface_FreeType::onGlyphMaskNeedsCurrentColor\\28\\29\\20const\n8715:SkTypeface_FreeType::onGetVariationDesignPosition\\28SkFontArguments::VariationPosition::Coordinate*\\2c\\20int\\29\\20const\n8716:SkTypeface_FreeType::onGetVariationDesignParameters\\28SkFontParameters::Variation::Axis*\\2c\\20int\\29\\20const\n8717:SkTypeface_FreeType::onGetUPEM\\28\\29\\20const\n8718:SkTypeface_FreeType::onGetTableTags\\28unsigned\\20int*\\29\\20const\n8719:SkTypeface_FreeType::onGetTableData\\28unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20void*\\29\\20const\n8720:SkTypeface_FreeType::onGetPostScriptName\\28SkString*\\29\\20const\n8721:SkTypeface_FreeType::onGetKerningPairAdjustments\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n8722:SkTypeface_FreeType::onGetAdvancedMetrics\\28\\29\\20const\n8723:SkTypeface_FreeType::onFilterRec\\28SkScalerContextRec*\\29\\20const\n8724:SkTypeface_FreeType::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n8725:SkTypeface_FreeType::onCreateFamilyNameIterator\\28\\29\\20const\n8726:SkTypeface_FreeType::onCountGlyphs\\28\\29\\20const\n8727:SkTypeface_FreeType::onCopyTableData\\28unsigned\\20int\\29\\20const\n8728:SkTypeface_FreeType::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n8729:SkTypeface_FreeType::getPostScriptGlyphNames\\28SkString*\\29\\20const\n8730:SkTypeface_FreeType::getGlyphToUnicodeMap\\28int*\\29\\20const\n8731:SkTypeface_Empty::~SkTypeface_Empty\\28\\29\n8732:SkTypeface_Custom::~SkTypeface_Custom\\28\\29.1\n8733:SkTypeface_Custom::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n8734:SkTypeface::onCopyTableData\\28unsigned\\20int\\29\\20const\n8735:SkTypeface::onComputeBounds\\28SkRect*\\29\\20const\n8736:SkTrimPE::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n8737:SkTrimPE::getTypeName\\28\\29\\20const\n8738:SkTriColorShader::type\\28\\29\\20const\n8739:SkTriColorShader::isOpaque\\28\\29\\20const\n8740:SkTriColorShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n8741:SkTransformShader::type\\28\\29\\20const\n8742:SkTransformShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n8743:SkTQuad::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n8744:SkTQuad::setBounds\\28SkDRect*\\29\\20const\n8745:SkTQuad::ptAtT\\28double\\29\\20const\n8746:SkTQuad::make\\28SkArenaAlloc&\\29\\20const\n8747:SkTQuad::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n8748:SkTQuad::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n8749:SkTQuad::dxdyAtT\\28double\\29\\20const\n8750:SkTQuad::debugInit\\28\\29\n8751:SkTCubic::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n8752:SkTCubic::setBounds\\28SkDRect*\\29\\20const\n8753:SkTCubic::ptAtT\\28double\\29\\20const\n8754:SkTCubic::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n8755:SkTCubic::make\\28SkArenaAlloc&\\29\\20const\n8756:SkTCubic::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n8757:SkTCubic::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n8758:SkTCubic::hullIntersects\\28SkDCubic\\20const&\\2c\\20bool*\\29\\20const\n8759:SkTCubic::dxdyAtT\\28double\\29\\20const\n8760:SkTCubic::debugInit\\28\\29\n8761:SkTCubic::controlsInside\\28\\29\\20const\n8762:SkTCubic::collapsed\\28\\29\\20const\n8763:SkTConic::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n8764:SkTConic::setBounds\\28SkDRect*\\29\\20const\n8765:SkTConic::ptAtT\\28double\\29\\20const\n8766:SkTConic::make\\28SkArenaAlloc&\\29\\20const\n8767:SkTConic::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n8768:SkTConic::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n8769:SkTConic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n8770:SkTConic::dxdyAtT\\28double\\29\\20const\n8771:SkTConic::debugInit\\28\\29\n8772:SkSwizzler::onSetSampleX\\28int\\29\n8773:SkSwizzler::fillWidth\\28\\29\\20const\n8774:SkSweepGradient::getTypeName\\28\\29\\20const\n8775:SkSweepGradient::flatten\\28SkWriteBuffer&\\29\\20const\n8776:SkSweepGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n8777:SkSweepGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n8778:SkSurface_Raster::~SkSurface_Raster\\28\\29.1\n8779:SkSurface_Raster::~SkSurface_Raster\\28\\29\n8780:SkSurface_Raster::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n8781:SkSurface_Raster::onRestoreBackingMutability\\28\\29\n8782:SkSurface_Raster::onNewSurface\\28SkImageInfo\\20const&\\29\n8783:SkSurface_Raster::onNewImageSnapshot\\28SkIRect\\20const*\\29\n8784:SkSurface_Raster::onNewCanvas\\28\\29\n8785:SkSurface_Raster::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n8786:SkSurface_Raster::onCopyOnWrite\\28SkSurface::ContentChangeMode\\29\n8787:SkSurface_Raster::imageInfo\\28\\29\\20const\n8788:SkSurface_Ganesh::~SkSurface_Ganesh\\28\\29.1\n8789:SkSurface_Ganesh::~SkSurface_Ganesh\\28\\29\n8790:SkSurface_Ganesh::replaceBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrSurfaceOrigin\\2c\\20SkSurface::ContentChangeMode\\2c\\20void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n8791:SkSurface_Ganesh::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n8792:SkSurface_Ganesh::onWait\\28int\\2c\\20GrBackendSemaphore\\20const*\\2c\\20bool\\29\n8793:SkSurface_Ganesh::onNewSurface\\28SkImageInfo\\20const&\\29\n8794:SkSurface_Ganesh::onNewImageSnapshot\\28SkIRect\\20const*\\29\n8795:SkSurface_Ganesh::onNewCanvas\\28\\29\n8796:SkSurface_Ganesh::onIsCompatible\\28GrSurfaceCharacterization\\20const&\\29\\20const\n8797:SkSurface_Ganesh::onGetRecordingContext\\28\\29\\20const\n8798:SkSurface_Ganesh::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n8799:SkSurface_Ganesh::onDiscard\\28\\29\n8800:SkSurface_Ganesh::onCopyOnWrite\\28SkSurface::ContentChangeMode\\29\n8801:SkSurface_Ganesh::onCharacterize\\28GrSurfaceCharacterization*\\29\\20const\n8802:SkSurface_Ganesh::onCapabilities\\28\\29\n8803:SkSurface_Ganesh::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n8804:SkSurface_Ganesh::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n8805:SkSurface_Ganesh::imageInfo\\28\\29\\20const\n8806:SkSurface_Base::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n8807:SkSurface::imageInfo\\28\\29\\20const\n8808:SkSurface::height\\28\\29\\20const\n8809:SkStrikeCache::~SkStrikeCache\\28\\29.1\n8810:SkStrikeCache::~SkStrikeCache\\28\\29\n8811:SkStrikeCache::findOrCreateScopedStrike\\28SkStrikeSpec\\20const&\\29\n8812:SkStrike::~SkStrike\\28\\29.1\n8813:SkStrike::~SkStrike\\28\\29\n8814:SkStrike::strikePromise\\28\\29\n8815:SkStrike::roundingSpec\\28\\29\\20const\n8816:SkStrike::prepareForPath\\28SkGlyph*\\29\n8817:SkStrike::prepareForImage\\28SkGlyph*\\29\n8818:SkStrike::prepareForDrawable\\28SkGlyph*\\29\n8819:SkStrike::getDescriptor\\28\\29\\20const\n8820:SkSpriteBlitter_Memcpy::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n8821:SkSpriteBlitter::~SkSpriteBlitter\\28\\29.1\n8822:SkSpriteBlitter::setup\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\n8823:SkSpriteBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n8824:SkSpriteBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n8825:SkSpriteBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n8826:SkSpecialImage_Raster::~SkSpecialImage_Raster\\28\\29.1\n8827:SkSpecialImage_Raster::~SkSpecialImage_Raster\\28\\29\n8828:SkSpecialImage_Raster::onMakeBackingStoreSubset\\28SkIRect\\20const&\\29\\20const\n8829:SkSpecialImage_Raster::getSize\\28\\29\\20const\n8830:SkSpecialImage_Raster::backingStoreDimensions\\28\\29\\20const\n8831:SkSpecialImage_Raster::asShader\\28SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\\20const\n8832:SkSpecialImage_Raster::asImage\\28\\29\\20const\n8833:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\\28\\29.1\n8834:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\\28\\29\n8835:SkSpecialImage_Gpu::onMakeBackingStoreSubset\\28SkIRect\\20const&\\29\\20const\n8836:SkSpecialImage_Gpu::getSize\\28\\29\\20const\n8837:SkSpecialImage_Gpu::backingStoreDimensions\\28\\29\\20const\n8838:SkSpecialImage_Gpu::asImage\\28\\29\\20const\n8839:SkSpecialImage::~SkSpecialImage\\28\\29\n8840:SkSpecialImage::asShader\\28SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\\20const\n8841:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\\28\\29.1\n8842:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\\28\\29\n8843:SkShaper::TrivialLanguageRunIterator::currentLanguage\\28\\29\\20const\n8844:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\\28\\29.1\n8845:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\\28\\29\n8846:SkShaper::TrivialBiDiRunIterator::currentLevel\\28\\29\\20const\n8847:SkScan::HairSquarePath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8848:SkScan::HairRoundPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8849:SkScan::HairPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8850:SkScan::AntiHairSquarePath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8851:SkScan::AntiHairRoundPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8852:SkScan::AntiHairPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8853:SkScan::AntiFillPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n8854:SkScalingCodec::onGetScaledDimensions\\28float\\29\\20const\n8855:SkScalingCodec::onDimensionsSupported\\28SkISize\\20const&\\29\n8856:SkScalerContext_FreeType::~SkScalerContext_FreeType\\28\\29.1\n8857:SkScalerContext_FreeType::~SkScalerContext_FreeType\\28\\29\n8858:SkScalerContext_FreeType::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n8859:SkScalerContext_FreeType::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n8860:SkScalerContext_FreeType::generateImage\\28SkGlyph\\20const&\\2c\\20void*\\29\n8861:SkScalerContext_FreeType::generateFontMetrics\\28SkFontMetrics*\\29\n8862:SkScalerContext_FreeType::generateDrawable\\28SkGlyph\\20const&\\29\n8863:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::~SkScalerContext_Empty\\28\\29\n8864:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n8865:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n8866:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generateFontMetrics\\28SkFontMetrics*\\29\n8867:SkSampledCodec::onGetSampledDimensions\\28int\\29\\20const\n8868:SkSampledCodec::onGetAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const&\\29\n8869:SkSRGBColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n8870:SkSRGBColorSpaceLuminance::fromLuma\\28float\\2c\\20float\\29\\20const\n8871:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_3::__invoke\\28double\\2c\\20double\\29\n8872:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_2::__invoke\\28double\\2c\\20double\\29\n8873:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_1::__invoke\\28double\\2c\\20double\\29\n8874:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_0::__invoke\\28double\\2c\\20double\\29\n8875:SkSL::remove_break_statements\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29::RemoveBreaksWriter::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n8876:SkSL::hoist_vardecl_symbols_into_outer_scope\\28SkSL::Context\\20const&\\2c\\20SkSL::Block\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::SymbolTable*\\29::SymbolHoister::visitStatement\\28SkSL::Statement\\20const&\\29\n8877:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\\28\\29.1\n8878:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\\28\\29\n8879:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\\28\\29.1\n8880:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\\28\\29\n8881:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n8882:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::visitExpressionPtr\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&\\29\n8883:SkSL::count_returns_at_end_of_control_flow\\28SkSL::FunctionDefinition\\20const&\\29::CountReturnsAtEndOfControlFlow::visitStatement\\28SkSL::Statement\\20const&\\29\n8884:SkSL::\\28anonymous\\20namespace\\29::VariableWriteVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8885:SkSL::\\28anonymous\\20namespace\\29::SampleOutsideMainVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n8886:SkSL::\\28anonymous\\20namespace\\29::SampleOutsideMainVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8887:SkSL::\\28anonymous\\20namespace\\29::ReturnsNonOpaqueColorVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n8888:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n8889:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n8890:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n8891:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n8892:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n8893:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8894:SkSL::\\28anonymous\\20namespace\\29::MergeSampleUsageVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n8895:SkSL::\\28anonymous\\20namespace\\29::MergeSampleUsageVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8896:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::~FinalizationVisitor\\28\\29.1\n8897:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::~FinalizationVisitor\\28\\29\n8898:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8899:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::~ES2IndexingVisitor\\28\\29.1\n8900:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::~ES2IndexingVisitor\\28\\29\n8901:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n8902:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n8903:SkSL::VectorType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n8904:SkSL::VectorType::isAllowedInES2\\28\\29\\20const\n8905:SkSL::VariableReference::clone\\28SkSL::Position\\29\\20const\n8906:SkSL::Variable::~Variable\\28\\29.1\n8907:SkSL::Variable::~Variable\\28\\29\n8908:SkSL::Variable::setInterfaceBlock\\28SkSL::InterfaceBlock*\\29\n8909:SkSL::Variable::mangledName\\28\\29\\20const\n8910:SkSL::Variable::layout\\28\\29\\20const\n8911:SkSL::Variable::description\\28\\29\\20const\n8912:SkSL::VarDeclaration::~VarDeclaration\\28\\29.1\n8913:SkSL::VarDeclaration::~VarDeclaration\\28\\29\n8914:SkSL::VarDeclaration::description\\28\\29\\20const\n8915:SkSL::TypeReference::clone\\28SkSL::Position\\29\\20const\n8916:SkSL::Type::minimumValue\\28\\29\\20const\n8917:SkSL::Type::maximumValue\\28\\29\\20const\n8918:SkSL::Type::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n8919:SkSL::Type::fields\\28\\29\\20const\n8920:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\\28\\29.1\n8921:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\\28\\29\n8922:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n8923:SkSL::Tracer::var\\28int\\2c\\20int\\29\n8924:SkSL::Tracer::scope\\28int\\29\n8925:SkSL::Tracer::line\\28int\\29\n8926:SkSL::Tracer::exit\\28int\\29\n8927:SkSL::Tracer::enter\\28int\\29\n8928:SkSL::TextureType::textureAccess\\28\\29\\20const\n8929:SkSL::TextureType::isMultisampled\\28\\29\\20const\n8930:SkSL::TextureType::isDepth\\28\\29\\20const\n8931:SkSL::TextureType::isArrayedTexture\\28\\29\\20const\n8932:SkSL::TernaryExpression::~TernaryExpression\\28\\29.1\n8933:SkSL::TernaryExpression::~TernaryExpression\\28\\29\n8934:SkSL::TernaryExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n8935:SkSL::TernaryExpression::clone\\28SkSL::Position\\29\\20const\n8936:SkSL::TProgramVisitor<SkSL::ProgramWriterTypes>::visitExpression\\28SkSL::Expression&\\29\n8937:SkSL::Swizzle::~Swizzle\\28\\29.1\n8938:SkSL::Swizzle::~Swizzle\\28\\29\n8939:SkSL::Swizzle::description\\28SkSL::OperatorPrecedence\\29\\20const\n8940:SkSL::Swizzle::clone\\28SkSL::Position\\29\\20const\n8941:SkSL::SwitchStatement::description\\28\\29\\20const\n8942:SkSL::SwitchCase::description\\28\\29\\20const\n8943:SkSL::StructType::slotType\\28unsigned\\20long\\29\\20const\n8944:SkSL::StructType::isOrContainsUnsizedArray\\28\\29\\20const\n8945:SkSL::StructType::isOrContainsAtomic\\28\\29\\20const\n8946:SkSL::StructType::isOrContainsArray\\28\\29\\20const\n8947:SkSL::StructType::isInterfaceBlock\\28\\29\\20const\n8948:SkSL::StructType::isBuiltin\\28\\29\\20const\n8949:SkSL::StructType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n8950:SkSL::StructType::isAllowedInES2\\28\\29\\20const\n8951:SkSL::StructType::fields\\28\\29\\20const\n8952:SkSL::StructDefinition::description\\28\\29\\20const\n8953:SkSL::StringStream::~StringStream\\28\\29.1\n8954:SkSL::StringStream::~StringStream\\28\\29\n8955:SkSL::StringStream::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n8956:SkSL::StringStream::writeText\\28char\\20const*\\29\n8957:SkSL::StringStream::write8\\28unsigned\\20char\\29\n8958:SkSL::SingleArgumentConstructor::~SingleArgumentConstructor\\28\\29\n8959:SkSL::Setting::description\\28SkSL::OperatorPrecedence\\29\\20const\n8960:SkSL::Setting::clone\\28SkSL::Position\\29\\20const\n8961:SkSL::ScalarType::priority\\28\\29\\20const\n8962:SkSL::ScalarType::numberKind\\28\\29\\20const\n8963:SkSL::ScalarType::minimumValue\\28\\29\\20const\n8964:SkSL::ScalarType::maximumValue\\28\\29\\20const\n8965:SkSL::ScalarType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n8966:SkSL::ScalarType::isAllowedInES2\\28\\29\\20const\n8967:SkSL::ScalarType::bitWidth\\28\\29\\20const\n8968:SkSL::SamplerType::textureAccess\\28\\29\\20const\n8969:SkSL::SamplerType::isMultisampled\\28\\29\\20const\n8970:SkSL::SamplerType::isDepth\\28\\29\\20const\n8971:SkSL::SamplerType::isArrayedTexture\\28\\29\\20const\n8972:SkSL::SamplerType::dimensions\\28\\29\\20const\n8973:SkSL::ReturnStatement::description\\28\\29\\20const\n8974:SkSL::RP::VariableLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8975:SkSL::RP::VariableLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8976:SkSL::RP::VariableLValue::isWritable\\28\\29\\20const\n8977:SkSL::RP::VariableLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n8978:SkSL::RP::UnownedLValueSlice::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8979:SkSL::RP::UnownedLValueSlice::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8980:SkSL::RP::UnownedLValueSlice::fixedSlotRange\\28SkSL::RP::Generator*\\29\n8981:SkSL::RP::SwizzleLValue::~SwizzleLValue\\28\\29.1\n8982:SkSL::RP::SwizzleLValue::~SwizzleLValue\\28\\29\n8983:SkSL::RP::SwizzleLValue::swizzle\\28\\29\n8984:SkSL::RP::SwizzleLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8985:SkSL::RP::SwizzleLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8986:SkSL::RP::SwizzleLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n8987:SkSL::RP::ScratchLValue::~ScratchLValue\\28\\29.1\n8988:SkSL::RP::ScratchLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8989:SkSL::RP::ScratchLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n8990:SkSL::RP::LValueSlice::~LValueSlice\\28\\29.1\n8991:SkSL::RP::LValueSlice::~LValueSlice\\28\\29\n8992:SkSL::RP::LValue::~LValue\\28\\29.1\n8993:SkSL::RP::ImmutableLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8994:SkSL::RP::ImmutableLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n8995:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\\28\\29.1\n8996:SkSL::RP::DynamicIndexLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8997:SkSL::RP::DynamicIndexLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n8998:SkSL::RP::DynamicIndexLValue::isWritable\\28\\29\\20const\n8999:SkSL::RP::DynamicIndexLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n9000:SkSL::ProgramVisitor::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\20const&\\29\n9001:SkSL::ProgramVisitor::visitExpressionPtr\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const&\\29\n9002:SkSL::PrefixExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n9003:SkSL::PrefixExpression::clone\\28SkSL::Position\\29\\20const\n9004:SkSL::PostfixExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n9005:SkSL::PostfixExpression::clone\\28SkSL::Position\\29\\20const\n9006:SkSL::Poison::description\\28SkSL::OperatorPrecedence\\29\\20const\n9007:SkSL::Poison::clone\\28SkSL::Position\\29\\20const\n9008:SkSL::PipelineStage::Callbacks::getMainName\\28\\29\n9009:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\\28\\29.1\n9010:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\\28\\29\n9011:SkSL::Parser::Checkpoint::ForwardingErrorReporter::handleError\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n9012:SkSL::Nop::description\\28\\29\\20const\n9013:SkSL::MultiArgumentConstructor::~MultiArgumentConstructor\\28\\29\n9014:SkSL::ModifiersDeclaration::description\\28\\29\\20const\n9015:SkSL::MethodReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n9016:SkSL::MethodReference::clone\\28SkSL::Position\\29\\20const\n9017:SkSL::MatrixType::slotCount\\28\\29\\20const\n9018:SkSL::MatrixType::rows\\28\\29\\20const\n9019:SkSL::MatrixType::isAllowedInES2\\28\\29\\20const\n9020:SkSL::LiteralType::minimumValue\\28\\29\\20const\n9021:SkSL::LiteralType::maximumValue\\28\\29\\20const\n9022:SkSL::Literal::getConstantValue\\28int\\29\\20const\n9023:SkSL::Literal::description\\28SkSL::OperatorPrecedence\\29\\20const\n9024:SkSL::Literal::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n9025:SkSL::Literal::clone\\28SkSL::Position\\29\\20const\n9026:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::finalize_distance\\28double\\29\n9027:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_uintBitsToFloat\\28double\\2c\\20double\\2c\\20double\\29\n9028:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_trunc\\28double\\2c\\20double\\2c\\20double\\29\n9029:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_tanh\\28double\\2c\\20double\\2c\\20double\\29\n9030:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_tan\\28double\\2c\\20double\\2c\\20double\\29\n9031:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sub\\28double\\2c\\20double\\2c\\20double\\29\n9032:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_step\\28double\\2c\\20double\\2c\\20double\\29\n9033:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sqrt\\28double\\2c\\20double\\2c\\20double\\29\n9034:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_smoothstep\\28double\\2c\\20double\\2c\\20double\\29\n9035:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sinh\\28double\\2c\\20double\\2c\\20double\\29\n9036:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sin\\28double\\2c\\20double\\2c\\20double\\29\n9037:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_saturate\\28double\\2c\\20double\\2c\\20double\\29\n9038:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_radians\\28double\\2c\\20double\\2c\\20double\\29\n9039:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_pow\\28double\\2c\\20double\\2c\\20double\\29\n9040:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mod\\28double\\2c\\20double\\2c\\20double\\29\n9041:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mix\\28double\\2c\\20double\\2c\\20double\\29\n9042:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_min\\28double\\2c\\20double\\2c\\20double\\29\n9043:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_max\\28double\\2c\\20double\\2c\\20double\\29\n9044:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_log\\28double\\2c\\20double\\2c\\20double\\29\n9045:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_log2\\28double\\2c\\20double\\2c\\20double\\29\n9046:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_inversesqrt\\28double\\2c\\20double\\2c\\20double\\29\n9047:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_intBitsToFloat\\28double\\2c\\20double\\2c\\20double\\29\n9048:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_fract\\28double\\2c\\20double\\2c\\20double\\29\n9049:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_fma\\28double\\2c\\20double\\2c\\20double\\29\n9050:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floor\\28double\\2c\\20double\\2c\\20double\\29\n9051:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floatBitsToUint\\28double\\2c\\20double\\2c\\20double\\29\n9052:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floatBitsToInt\\28double\\2c\\20double\\2c\\20double\\29\n9053:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_exp\\28double\\2c\\20double\\2c\\20double\\29\n9054:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_exp2\\28double\\2c\\20double\\2c\\20double\\29\n9055:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_div\\28double\\2c\\20double\\2c\\20double\\29\n9056:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_degrees\\28double\\2c\\20double\\2c\\20double\\29\n9057:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_cosh\\28double\\2c\\20double\\2c\\20double\\29\n9058:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_cos\\28double\\2c\\20double\\2c\\20double\\29\n9059:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_clamp\\28double\\2c\\20double\\2c\\20double\\29\n9060:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_ceil\\28double\\2c\\20double\\2c\\20double\\29\n9061:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atanh\\28double\\2c\\20double\\2c\\20double\\29\n9062:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atan\\28double\\2c\\20double\\2c\\20double\\29\n9063:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atan2\\28double\\2c\\20double\\2c\\20double\\29\n9064:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_asinh\\28double\\2c\\20double\\2c\\20double\\29\n9065:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_asin\\28double\\2c\\20double\\2c\\20double\\29\n9066:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_add\\28double\\2c\\20double\\2c\\20double\\29\n9067:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_acosh\\28double\\2c\\20double\\2c\\20double\\29\n9068:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_acos\\28double\\2c\\20double\\2c\\20double\\29\n9069:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_abs\\28double\\2c\\20double\\2c\\20double\\29\n9070:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_notEqual\\28double\\2c\\20double\\29\n9071:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_lessThan\\28double\\2c\\20double\\29\n9072:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_lessThanEqual\\28double\\2c\\20double\\29\n9073:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_greaterThan\\28double\\2c\\20double\\29\n9074:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_greaterThanEqual\\28double\\2c\\20double\\29\n9075:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_equal\\28double\\2c\\20double\\29\n9076:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_dot\\28double\\2c\\20double\\2c\\20double\\29\n9077:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_distance\\28double\\2c\\20double\\2c\\20double\\29\n9078:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_any\\28double\\2c\\20double\\2c\\20double\\29\n9079:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_all\\28double\\2c\\20double\\2c\\20double\\29\n9080:SkSL::InterfaceBlock::~InterfaceBlock\\28\\29.1\n9081:SkSL::InterfaceBlock::description\\28\\29\\20const\n9082:SkSL::IndexExpression::~IndexExpression\\28\\29.1\n9083:SkSL::IndexExpression::~IndexExpression\\28\\29\n9084:SkSL::IndexExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n9085:SkSL::IndexExpression::clone\\28SkSL::Position\\29\\20const\n9086:SkSL::IfStatement::~IfStatement\\28\\29.1\n9087:SkSL::IfStatement::~IfStatement\\28\\29\n9088:SkSL::IfStatement::description\\28\\29\\20const\n9089:SkSL::GlobalVarDeclaration::description\\28\\29\\20const\n9090:SkSL::GenericType::slotType\\28unsigned\\20long\\29\\20const\n9091:SkSL::GenericType::coercibleTypes\\28\\29\\20const\n9092:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\\28\\29.1\n9093:SkSL::FunctionReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n9094:SkSL::FunctionReference::clone\\28SkSL::Position\\29\\20const\n9095:SkSL::FunctionPrototype::description\\28\\29\\20const\n9096:SkSL::FunctionDefinition::description\\28\\29\\20const\n9097:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::~Finalizer\\28\\29.1\n9098:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::~Finalizer\\28\\29\n9099:SkSL::FunctionCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n9100:SkSL::FunctionCall::clone\\28SkSL::Position\\29\\20const\n9101:SkSL::ForStatement::~ForStatement\\28\\29.1\n9102:SkSL::ForStatement::~ForStatement\\28\\29\n9103:SkSL::ForStatement::description\\28\\29\\20const\n9104:SkSL::FieldSymbol::description\\28\\29\\20const\n9105:SkSL::FieldAccess::clone\\28SkSL::Position\\29\\20const\n9106:SkSL::Extension::description\\28\\29\\20const\n9107:SkSL::ExtendedVariable::~ExtendedVariable\\28\\29.1\n9108:SkSL::ExtendedVariable::~ExtendedVariable\\28\\29\n9109:SkSL::ExtendedVariable::setInterfaceBlock\\28SkSL::InterfaceBlock*\\29\n9110:SkSL::ExtendedVariable::mangledName\\28\\29\\20const\n9111:SkSL::ExtendedVariable::layout\\28\\29\\20const\n9112:SkSL::ExtendedVariable::interfaceBlock\\28\\29\\20const\n9113:SkSL::ExtendedVariable::detachDeadInterfaceBlock\\28\\29\n9114:SkSL::ExpressionStatement::description\\28\\29\\20const\n9115:SkSL::Expression::getConstantValue\\28int\\29\\20const\n9116:SkSL::EmptyExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n9117:SkSL::EmptyExpression::clone\\28SkSL::Position\\29\\20const\n9118:SkSL::DoStatement::description\\28\\29\\20const\n9119:SkSL::DiscardStatement::description\\28\\29\\20const\n9120:SkSL::DebugTracePriv::~DebugTracePriv\\28\\29.1\n9121:SkSL::DebugTracePriv::writeTrace\\28SkWStream*\\29\\20const\n9122:SkSL::DebugTracePriv::dump\\28SkWStream*\\29\\20const\n9123:SkSL::CountReturnsWithLimit::visitStatement\\28SkSL::Statement\\20const&\\29\n9124:SkSL::ContinueStatement::description\\28\\29\\20const\n9125:SkSL::ConstructorStruct::clone\\28SkSL::Position\\29\\20const\n9126:SkSL::ConstructorSplat::getConstantValue\\28int\\29\\20const\n9127:SkSL::ConstructorSplat::clone\\28SkSL::Position\\29\\20const\n9128:SkSL::ConstructorScalarCast::clone\\28SkSL::Position\\29\\20const\n9129:SkSL::ConstructorMatrixResize::getConstantValue\\28int\\29\\20const\n9130:SkSL::ConstructorMatrixResize::clone\\28SkSL::Position\\29\\20const\n9131:SkSL::ConstructorDiagonalMatrix::getConstantValue\\28int\\29\\20const\n9132:SkSL::ConstructorDiagonalMatrix::clone\\28SkSL::Position\\29\\20const\n9133:SkSL::ConstructorCompoundCast::clone\\28SkSL::Position\\29\\20const\n9134:SkSL::ConstructorCompound::clone\\28SkSL::Position\\29\\20const\n9135:SkSL::ConstructorArrayCast::clone\\28SkSL::Position\\29\\20const\n9136:SkSL::ConstructorArray::clone\\28SkSL::Position\\29\\20const\n9137:SkSL::Compiler::CompilerErrorReporter::handleError\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n9138:SkSL::CodeGenerator::~CodeGenerator\\28\\29\n9139:SkSL::ChildCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n9140:SkSL::ChildCall::clone\\28SkSL::Position\\29\\20const\n9141:SkSL::BreakStatement::description\\28\\29\\20const\n9142:SkSL::Block::~Block\\28\\29.1\n9143:SkSL::Block::~Block\\28\\29\n9144:SkSL::Block::isEmpty\\28\\29\\20const\n9145:SkSL::Block::description\\28\\29\\20const\n9146:SkSL::BinaryExpression::~BinaryExpression\\28\\29.1\n9147:SkSL::BinaryExpression::~BinaryExpression\\28\\29\n9148:SkSL::BinaryExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n9149:SkSL::BinaryExpression::clone\\28SkSL::Position\\29\\20const\n9150:SkSL::ArrayType::slotType\\28unsigned\\20long\\29\\20const\n9151:SkSL::ArrayType::slotCount\\28\\29\\20const\n9152:SkSL::ArrayType::isUnsizedArray\\28\\29\\20const\n9153:SkSL::ArrayType::isOrContainsUnsizedArray\\28\\29\\20const\n9154:SkSL::ArrayType::isOrContainsAtomic\\28\\29\\20const\n9155:SkSL::ArrayType::isBuiltin\\28\\29\\20const\n9156:SkSL::ArrayType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n9157:SkSL::AnyConstructor::getConstantValue\\28int\\29\\20const\n9158:SkSL::AnyConstructor::description\\28SkSL::OperatorPrecedence\\29\\20const\n9159:SkSL::AnyConstructor::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n9160:SkSL::Analysis::IsDynamicallyUniformExpression\\28SkSL::Expression\\20const&\\29::IsDynamicallyUniformExpressionVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9161:SkSL::Analysis::IsCompileTimeConstant\\28SkSL::Expression\\20const&\\29::IsCompileTimeConstantVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9162:SkSL::Analysis::HasSideEffects\\28SkSL::Expression\\20const&\\29::HasSideEffectsVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9163:SkSL::Analysis::ContainsVariable\\28SkSL::Expression\\20const&\\2c\\20SkSL::Variable\\20const&\\29::ContainsVariableVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9164:SkSL::Analysis::ContainsRTAdjust\\28SkSL::Expression\\20const&\\29::ContainsRTAdjustVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9165:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::~ProgramSizeVisitor\\28\\29.1\n9166:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::~ProgramSizeVisitor\\28\\29\n9167:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9168:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9169:SkSL::AliasType::textureAccess\\28\\29\\20const\n9170:SkSL::AliasType::slotType\\28unsigned\\20long\\29\\20const\n9171:SkSL::AliasType::slotCount\\28\\29\\20const\n9172:SkSL::AliasType::rows\\28\\29\\20const\n9173:SkSL::AliasType::priority\\28\\29\\20const\n9174:SkSL::AliasType::isVector\\28\\29\\20const\n9175:SkSL::AliasType::isUnsizedArray\\28\\29\\20const\n9176:SkSL::AliasType::isStruct\\28\\29\\20const\n9177:SkSL::AliasType::isScalar\\28\\29\\20const\n9178:SkSL::AliasType::isMultisampled\\28\\29\\20const\n9179:SkSL::AliasType::isMatrix\\28\\29\\20const\n9180:SkSL::AliasType::isLiteral\\28\\29\\20const\n9181:SkSL::AliasType::isInterfaceBlock\\28\\29\\20const\n9182:SkSL::AliasType::isDepth\\28\\29\\20const\n9183:SkSL::AliasType::isArrayedTexture\\28\\29\\20const\n9184:SkSL::AliasType::isArray\\28\\29\\20const\n9185:SkSL::AliasType::dimensions\\28\\29\\20const\n9186:SkSL::AliasType::componentType\\28\\29\\20const\n9187:SkSL::AliasType::columns\\28\\29\\20const\n9188:SkSL::AliasType::coercibleTypes\\28\\29\\20const\n9189:SkRuntimeShader::~SkRuntimeShader\\28\\29.1\n9190:SkRuntimeShader::type\\28\\29\\20const\n9191:SkRuntimeShader::isOpaque\\28\\29\\20const\n9192:SkRuntimeShader::getTypeName\\28\\29\\20const\n9193:SkRuntimeShader::flatten\\28SkWriteBuffer&\\29\\20const\n9194:SkRuntimeShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9195:SkRuntimeEffect::~SkRuntimeEffect\\28\\29.1\n9196:SkRuntimeEffect::MakeFromSource\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\2c\\20SkSL::ProgramKind\\29\n9197:SkRuntimeColorFilter::~SkRuntimeColorFilter\\28\\29.1\n9198:SkRuntimeColorFilter::~SkRuntimeColorFilter\\28\\29\n9199:SkRuntimeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n9200:SkRuntimeColorFilter::getTypeName\\28\\29\\20const\n9201:SkRuntimeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n9202:SkRuntimeBlender::~SkRuntimeBlender\\28\\29.1\n9203:SkRuntimeBlender::~SkRuntimeBlender\\28\\29\n9204:SkRuntimeBlender::onAppendStages\\28SkStageRec\\20const&\\29\\20const\n9205:SkRuntimeBlender::getTypeName\\28\\29\\20const\n9206:SkRgnClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n9207:SkRgnClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9208:SkRgnClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n9209:SkRgnClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9210:SkRgnClipBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n9211:SkRgnClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n9212:SkRgnBuilder::~SkRgnBuilder\\28\\29.1\n9213:SkRgnBuilder::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9214:SkResourceCache::SetTotalByteLimit\\28unsigned\\20long\\29\n9215:SkResourceCache::GetTotalBytesUsed\\28\\29\n9216:SkResourceCache::GetTotalByteLimit\\28\\29\n9217:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::~Result\\28\\29.1\n9218:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::~Result\\28\\29\n9219:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::rowBytes\\28int\\29\\20const\n9220:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::data\\28int\\29\\20const\n9221:SkRefCntSet::~SkRefCntSet\\28\\29.1\n9222:SkRefCntSet::incPtr\\28void*\\29\n9223:SkRefCntSet::decPtr\\28void*\\29\n9224:SkRectClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n9225:SkRectClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9226:SkRectClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n9227:SkRectClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9228:SkRectClipBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n9229:SkRectClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n9230:SkRecorder::~SkRecorder\\28\\29.1\n9231:SkRecorder::~SkRecorder\\28\\29\n9232:SkRecorder::willSave\\28\\29\n9233:SkRecorder::onResetClip\\28\\29\n9234:SkRecorder::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n9235:SkRecorder::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n9236:SkRecorder::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n9237:SkRecorder::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n9238:SkRecorder::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n9239:SkRecorder::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9240:SkRecorder::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9241:SkRecorder::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n9242:SkRecorder::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n9243:SkRecorder::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n9244:SkRecorder::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n9245:SkRecorder::onDrawPaint\\28SkPaint\\20const&\\29\n9246:SkRecorder::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9247:SkRecorder::onDrawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n9248:SkRecorder::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n9249:SkRecorder::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n9250:SkRecorder::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n9251:SkRecorder::onDrawGlyphRunList\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n9252:SkRecorder::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n9253:SkRecorder::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n9254:SkRecorder::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n9255:SkRecorder::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9256:SkRecorder::onDrawBehind\\28SkPaint\\20const&\\29\n9257:SkRecorder::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n9258:SkRecorder::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n9259:SkRecorder::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n9260:SkRecorder::onDoSaveBehind\\28SkRect\\20const*\\29\n9261:SkRecorder::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n9262:SkRecorder::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n9263:SkRecorder::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n9264:SkRecorder::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n9265:SkRecorder::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n9266:SkRecorder::getSaveLayerStrategy\\28SkCanvas::SaveLayerRec\\20const&\\29\n9267:SkRecorder::didTranslate\\28float\\2c\\20float\\29\n9268:SkRecorder::didSetM44\\28SkM44\\20const&\\29\n9269:SkRecorder::didScale\\28float\\2c\\20float\\29\n9270:SkRecorder::didRestore\\28\\29\n9271:SkRecorder::didConcat44\\28SkM44\\20const&\\29\n9272:SkRecordedDrawable::~SkRecordedDrawable\\28\\29.1\n9273:SkRecordedDrawable::~SkRecordedDrawable\\28\\29\n9274:SkRecordedDrawable::onMakePictureSnapshot\\28\\29\n9275:SkRecordedDrawable::onGetBounds\\28\\29\n9276:SkRecordedDrawable::onDraw\\28SkCanvas*\\29\n9277:SkRecordedDrawable::onApproximateBytesUsed\\28\\29\n9278:SkRecordedDrawable::getTypeName\\28\\29\\20const\n9279:SkRecordedDrawable::flatten\\28SkWriteBuffer&\\29\\20const\n9280:SkRecord::~SkRecord\\28\\29.1\n9281:SkRecord::~SkRecord\\28\\29\n9282:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\\28\\29.1\n9283:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\\28\\29\n9284:SkRasterPipelineSpriteBlitter::setup\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\n9285:SkRasterPipelineSpriteBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9286:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\\28\\29.1\n9287:SkRasterPipelineBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n9288:SkRasterPipelineBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9289:SkRasterPipelineBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9290:SkRasterPipelineBlitter::blitAntiV2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n9291:SkRasterPipelineBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n9292:SkRasterPipelineBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n9293:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_3::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n9294:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_2::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n9295:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_1::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n9296:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_0::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n9297:SkRadialGradient::getTypeName\\28\\29\\20const\n9298:SkRadialGradient::flatten\\28SkWriteBuffer&\\29\\20const\n9299:SkRadialGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n9300:SkRadialGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n9301:SkRTree::~SkRTree\\28\\29.1\n9302:SkRTree::~SkRTree\\28\\29\n9303:SkRTree::search\\28SkRect\\20const&\\2c\\20std::__2::vector<int\\2c\\20std::__2::allocator<int>>*\\29\\20const\n9304:SkRTree::insert\\28SkRect\\20const*\\2c\\20int\\29\n9305:SkRTree::bytesUsed\\28\\29\\20const\n9306:SkPtrSet::~SkPtrSet\\28\\29\n9307:SkPngNormalDecoder::~SkPngNormalDecoder\\28\\29\n9308:SkPngNormalDecoder::setRange\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n9309:SkPngNormalDecoder::decode\\28int*\\29\n9310:SkPngNormalDecoder::decodeAllRows\\28void*\\2c\\20unsigned\\20long\\2c\\20int*\\29\n9311:SkPngNormalDecoder::RowCallback\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20int\\29\n9312:SkPngNormalDecoder::AllRowsCallback\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20int\\29\n9313:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\\28\\29.1\n9314:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\\28\\29\n9315:SkPngInterlacedDecoder::setRange\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n9316:SkPngInterlacedDecoder::decode\\28int*\\29\n9317:SkPngInterlacedDecoder::decodeAllRows\\28void*\\2c\\20unsigned\\20long\\2c\\20int*\\29\n9318:SkPngInterlacedDecoder::InterlacedRowCallback\\28png_struct_def*\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20int\\2c\\20int\\29\n9319:SkPngEncoderImpl::~SkPngEncoderImpl\\28\\29.1\n9320:SkPngEncoderImpl::~SkPngEncoderImpl\\28\\29\n9321:SkPngEncoderImpl::onEncodeRows\\28int\\29\n9322:SkPngDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9323:SkPngCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n9324:SkPngCodec::onRewind\\28\\29\n9325:SkPngCodec::onIncrementalDecode\\28int*\\29\n9326:SkPngCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9327:SkPngCodec::getSampler\\28bool\\29\n9328:SkPngCodec::createColorTable\\28SkImageInfo\\20const&\\29\n9329:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_2::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n9330:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_1::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n9331:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_0::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n9332:SkPixelRef::~SkPixelRef\\28\\29.1\n9333:SkPictureShader::~SkPictureShader\\28\\29.1\n9334:SkPictureShader::~SkPictureShader\\28\\29\n9335:SkPictureShader::type\\28\\29\\20const\n9336:SkPictureShader::getTypeName\\28\\29\\20const\n9337:SkPictureShader::flatten\\28SkWriteBuffer&\\29\\20const\n9338:SkPictureShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9339:SkPictureRecorder*\\20emscripten::internal::operator_new<SkPictureRecorder>\\28\\29\n9340:SkPictureRecord::~SkPictureRecord\\28\\29.1\n9341:SkPictureRecord::willSave\\28\\29\n9342:SkPictureRecord::willRestore\\28\\29\n9343:SkPictureRecord::onResetClip\\28\\29\n9344:SkPictureRecord::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n9345:SkPictureRecord::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n9346:SkPictureRecord::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n9347:SkPictureRecord::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n9348:SkPictureRecord::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n9349:SkPictureRecord::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9350:SkPictureRecord::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9351:SkPictureRecord::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n9352:SkPictureRecord::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n9353:SkPictureRecord::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n9354:SkPictureRecord::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n9355:SkPictureRecord::onDrawPaint\\28SkPaint\\20const&\\29\n9356:SkPictureRecord::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9357:SkPictureRecord::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n9358:SkPictureRecord::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n9359:SkPictureRecord::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n9360:SkPictureRecord::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n9361:SkPictureRecord::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n9362:SkPictureRecord::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n9363:SkPictureRecord::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9364:SkPictureRecord::onDrawBehind\\28SkPaint\\20const&\\29\n9365:SkPictureRecord::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n9366:SkPictureRecord::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n9367:SkPictureRecord::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n9368:SkPictureRecord::onDoSaveBehind\\28SkRect\\20const*\\29\n9369:SkPictureRecord::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n9370:SkPictureRecord::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n9371:SkPictureRecord::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n9372:SkPictureRecord::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n9373:SkPictureRecord::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n9374:SkPictureRecord::getSaveLayerStrategy\\28SkCanvas::SaveLayerRec\\20const&\\29\n9375:SkPictureRecord::didTranslate\\28float\\2c\\20float\\29\n9376:SkPictureRecord::didSetM44\\28SkM44\\20const&\\29\n9377:SkPictureRecord::didScale\\28float\\2c\\20float\\29\n9378:SkPictureRecord::didConcat44\\28SkM44\\20const&\\29\n9379:SkPictureData::serialize\\28SkWStream*\\2c\\20SkSerialProcs\\20const&\\2c\\20SkRefCntSet*\\2c\\20bool\\29\\20const::DevNull::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n9380:SkPerlinNoiseShader::~SkPerlinNoiseShader\\28\\29.1\n9381:SkPerlinNoiseShader::~SkPerlinNoiseShader\\28\\29\n9382:SkPerlinNoiseShader::type\\28\\29\\20const\n9383:SkPerlinNoiseShader::getTypeName\\28\\29\\20const\n9384:SkPerlinNoiseShader::flatten\\28SkWriteBuffer&\\29\\20const\n9385:SkPerlinNoiseShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9386:SkPath::setIsVolatile\\28bool\\29\n9387:SkPath::setFillType\\28SkPathFillType\\29\n9388:SkPath::isVolatile\\28\\29\\20const\n9389:SkPath::getFillType\\28\\29\\20const\n9390:SkPath2DPathEffectImpl::~SkPath2DPathEffectImpl\\28\\29.1\n9391:SkPath2DPathEffectImpl::~SkPath2DPathEffectImpl\\28\\29\n9392:SkPath2DPathEffectImpl::next\\28SkPoint\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPath*\\29\\20const\n9393:SkPath2DPathEffectImpl::getTypeName\\28\\29\\20const\n9394:SkPath2DPathEffectImpl::getFactory\\28\\29\\20const\n9395:SkPath2DPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n9396:SkPath2DPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n9397:SkPath1DPathEffectImpl::~SkPath1DPathEffectImpl\\28\\29.1\n9398:SkPath1DPathEffectImpl::~SkPath1DPathEffectImpl\\28\\29\n9399:SkPath1DPathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9400:SkPath1DPathEffectImpl::next\\28SkPath*\\2c\\20float\\2c\\20SkPathMeasure&\\29\\20const\n9401:SkPath1DPathEffectImpl::getTypeName\\28\\29\\20const\n9402:SkPath1DPathEffectImpl::getFactory\\28\\29\\20const\n9403:SkPath1DPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n9404:SkPath1DPathEffectImpl::begin\\28float\\29\\20const\n9405:SkPath1DPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n9406:SkPath*\\20emscripten::internal::operator_new<SkPath>\\28\\29\n9407:SkPairPathEffect::~SkPairPathEffect\\28\\29.1\n9408:SkPaint::setDither\\28bool\\29\n9409:SkPaint::setAntiAlias\\28bool\\29\n9410:SkPaint::getStrokeMiter\\28\\29\\20const\n9411:SkPaint::getStrokeJoin\\28\\29\\20const\n9412:SkPaint::getStrokeCap\\28\\29\\20const\n9413:SkPaint*\\20emscripten::internal::operator_new<SkPaint>\\28\\29\n9414:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\\28\\29.1\n9415:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\\28\\29\n9416:SkOTUtils::LocalizedStrings_SingleName::next\\28SkTypeface::LocalizedString*\\29\n9417:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\\28\\29.1\n9418:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\\28\\29\n9419:SkOTUtils::LocalizedStrings_NameTable::next\\28SkTypeface::LocalizedString*\\29\n9420:SkNoPixelsDevice::~SkNoPixelsDevice\\28\\29.1\n9421:SkNoPixelsDevice::~SkNoPixelsDevice\\28\\29\n9422:SkNoPixelsDevice::replaceClip\\28SkIRect\\20const&\\29\n9423:SkNoPixelsDevice::pushClipStack\\28\\29\n9424:SkNoPixelsDevice::popClipStack\\28\\29\n9425:SkNoPixelsDevice::onClipShader\\28sk_sp<SkShader>\\29\n9426:SkNoPixelsDevice::isClipWideOpen\\28\\29\\20const\n9427:SkNoPixelsDevice::isClipRect\\28\\29\\20const\n9428:SkNoPixelsDevice::isClipEmpty\\28\\29\\20const\n9429:SkNoPixelsDevice::isClipAntiAliased\\28\\29\\20const\n9430:SkNoPixelsDevice::devClipBounds\\28\\29\\20const\n9431:SkNoPixelsDevice::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n9432:SkNoPixelsDevice::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n9433:SkNoPixelsDevice::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n9434:SkNoPixelsDevice::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n9435:SkNoPixelsDevice::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n9436:SkNoDrawCanvas::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n9437:SkNoDrawCanvas::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n9438:SkMipmap::~SkMipmap\\28\\29.1\n9439:SkMipmap::~SkMipmap\\28\\29\n9440:SkMipmap::onDataChange\\28void*\\2c\\20void*\\29\n9441:SkMipmap::countLevels\\28\\29\\20const\n9442:SkMemoryStream::~SkMemoryStream\\28\\29.1\n9443:SkMemoryStream::~SkMemoryStream\\28\\29\n9444:SkMemoryStream::setMemory\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n9445:SkMemoryStream::seek\\28unsigned\\20long\\29\n9446:SkMemoryStream::rewind\\28\\29\n9447:SkMemoryStream::read\\28void*\\2c\\20unsigned\\20long\\29\n9448:SkMemoryStream::peek\\28void*\\2c\\20unsigned\\20long\\29\\20const\n9449:SkMemoryStream::onFork\\28\\29\\20const\n9450:SkMemoryStream::onDuplicate\\28\\29\\20const\n9451:SkMemoryStream::move\\28long\\29\n9452:SkMemoryStream::isAtEnd\\28\\29\\20const\n9453:SkMemoryStream::getMemoryBase\\28\\29\n9454:SkMemoryStream::getLength\\28\\29\\20const\n9455:SkMemoryStream::getData\\28\\29\\20const\n9456:SkMatrixColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n9457:SkMatrixColorFilter::onAsAColorMatrix\\28float*\\29\\20const\n9458:SkMatrixColorFilter::getTypeName\\28\\29\\20const\n9459:SkMatrixColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9460:SkMatrixColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n9461:SkMatrix::Trans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n9462:SkMatrix::Trans_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n9463:SkMatrix::Scale_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n9464:SkMatrix::Scale_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n9465:SkMatrix::ScaleTrans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n9466:SkMatrix::Poly4Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n9467:SkMatrix::Poly3Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n9468:SkMatrix::Poly2Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n9469:SkMatrix::Persp_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n9470:SkMatrix::Persp_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n9471:SkMatrix::Identity_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n9472:SkMatrix::Identity_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n9473:SkMatrix::Affine_vpts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n9474:SkMaskSwizzler::onSetSampleX\\28int\\29\n9475:SkMaskFilterBase::filterRectsToNine\\28SkRect\\20const*\\2c\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n9476:SkMaskFilterBase::filterRRectToNine\\28SkRRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n9477:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::PixelRef::~PixelRef\\28\\29.1\n9478:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::PixelRef::~PixelRef\\28\\29\n9479:SkMakePixelRefWithProc\\28int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29::PixelRef::~PixelRef\\28\\29.1\n9480:SkMakePixelRefWithProc\\28int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29::PixelRef::~PixelRef\\28\\29\n9481:SkLumaColorFilter::Make\\28\\29\n9482:SkLocalMatrixShader::~SkLocalMatrixShader\\28\\29.1\n9483:SkLocalMatrixShader::~SkLocalMatrixShader\\28\\29\n9484:SkLocalMatrixShader::onIsAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n9485:SkLocalMatrixShader::makeAsALocalMatrixShader\\28SkMatrix*\\29\\20const\n9486:SkLocalMatrixShader::isOpaque\\28\\29\\20const\n9487:SkLocalMatrixShader::isConstant\\28\\29\\20const\n9488:SkLocalMatrixShader::getTypeName\\28\\29\\20const\n9489:SkLocalMatrixShader::flatten\\28SkWriteBuffer&\\29\\20const\n9490:SkLocalMatrixShader::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n9491:SkLocalMatrixShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9492:SkLinearGradient::getTypeName\\28\\29\\20const\n9493:SkLinearGradient::flatten\\28SkWriteBuffer&\\29\\20const\n9494:SkLinearGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n9495:SkLine2DPathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9496:SkLine2DPathEffectImpl::nextSpan\\28int\\2c\\20int\\2c\\20int\\2c\\20SkPath*\\29\\20const\n9497:SkLine2DPathEffectImpl::getTypeName\\28\\29\\20const\n9498:SkLine2DPathEffectImpl::getFactory\\28\\29\\20const\n9499:SkLine2DPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n9500:SkLine2DPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n9501:SkJpegMetadataDecoderImpl::~SkJpegMetadataDecoderImpl\\28\\29.1\n9502:SkJpegMetadataDecoderImpl::~SkJpegMetadataDecoderImpl\\28\\29\n9503:SkJpegMetadataDecoderImpl::getICCProfileData\\28bool\\29\\20const\n9504:SkJpegMetadataDecoderImpl::getExifMetadata\\28bool\\29\\20const\n9505:SkJpegMemorySourceMgr::skipInputBytes\\28unsigned\\20long\\2c\\20unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n9506:SkJpegMemorySourceMgr::initSource\\28unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n9507:SkJpegDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9508:SkJpegCodec::~SkJpegCodec\\28\\29.1\n9509:SkJpegCodec::~SkJpegCodec\\28\\29\n9510:SkJpegCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9511:SkJpegCodec::onSkipScanlines\\28int\\29\n9512:SkJpegCodec::onRewind\\28\\29\n9513:SkJpegCodec::onQueryYUVAInfo\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\2c\\20SkYUVAPixmapInfo*\\29\\20const\n9514:SkJpegCodec::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n9515:SkJpegCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n9516:SkJpegCodec::onGetScaledDimensions\\28float\\29\\20const\n9517:SkJpegCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9518:SkJpegCodec::onDimensionsSupported\\28SkISize\\20const&\\29\n9519:SkJpegCodec::getSampler\\28bool\\29\n9520:SkJpegCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n9521:SkJpegBufferedSourceMgr::~SkJpegBufferedSourceMgr\\28\\29.1\n9522:SkJpegBufferedSourceMgr::~SkJpegBufferedSourceMgr\\28\\29\n9523:SkJpegBufferedSourceMgr::skipInputBytes\\28unsigned\\20long\\2c\\20unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n9524:SkJpegBufferedSourceMgr::initSource\\28unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n9525:SkJpegBufferedSourceMgr::fillInputBuffer\\28unsigned\\20char\\20const*&\\2c\\20unsigned\\20long&\\29\n9526:SkImage_Raster::~SkImage_Raster\\28\\29.1\n9527:SkImage_Raster::~SkImage_Raster\\28\\29\n9528:SkImage_Raster::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n9529:SkImage_Raster::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n9530:SkImage_Raster::onPeekPixels\\28SkPixmap*\\29\\20const\n9531:SkImage_Raster::onPeekMips\\28\\29\\20const\n9532:SkImage_Raster::onPeekBitmap\\28\\29\\20const\n9533:SkImage_Raster::onMakeWithMipmaps\\28sk_sp<SkMipmap>\\29\\20const\n9534:SkImage_Raster::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n9535:SkImage_Raster::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n9536:SkImage_Raster::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n9537:SkImage_Raster::onHasMipmaps\\28\\29\\20const\n9538:SkImage_Raster::onAsLegacyBitmap\\28GrDirectContext*\\2c\\20SkBitmap*\\29\\20const\n9539:SkImage_Raster::notifyAddedToRasterCache\\28\\29\\20const\n9540:SkImage_Raster::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n9541:SkImage_LazyTexture::readPixelsProxy\\28GrDirectContext*\\2c\\20SkPixmap\\20const&\\29\\20const\n9542:SkImage_LazyTexture::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n9543:SkImage_Lazy::~SkImage_Lazy\\28\\29\n9544:SkImage_Lazy::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n9545:SkImage_Lazy::onRefEncoded\\28\\29\\20const\n9546:SkImage_Lazy::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n9547:SkImage_Lazy::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n9548:SkImage_Lazy::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n9549:SkImage_Lazy::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n9550:SkImage_Lazy::onIsProtected\\28\\29\\20const\n9551:SkImage_Lazy::isValid\\28GrRecordingContext*\\29\\20const\n9552:SkImage_Lazy::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n9553:SkImage_GaneshBase::~SkImage_GaneshBase\\28\\29\n9554:SkImage_GaneshBase::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n9555:SkImage_GaneshBase::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n9556:SkImage_GaneshBase::makeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n9557:SkImage_GaneshBase::makeColorTypeAndColorSpace\\28skgpu::graphite::Recorder*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n9558:SkImage_GaneshBase::makeColorTypeAndColorSpace\\28GrDirectContext*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n9559:SkImage_GaneshBase::isValid\\28GrRecordingContext*\\29\\20const\n9560:SkImage_GaneshBase::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n9561:SkImage_GaneshBase::directContext\\28\\29\\20const\n9562:SkImage_Ganesh::~SkImage_Ganesh\\28\\29.1\n9563:SkImage_Ganesh::textureSize\\28\\29\\20const\n9564:SkImage_Ganesh::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n9565:SkImage_Ganesh::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n9566:SkImage_Ganesh::onIsProtected\\28\\29\\20const\n9567:SkImage_Ganesh::onHasMipmaps\\28\\29\\20const\n9568:SkImage_Ganesh::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n9569:SkImage_Ganesh::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n9570:SkImage_Ganesh::generatingSurfaceIsDeleted\\28\\29\n9571:SkImage_Ganesh::flush\\28GrDirectContext*\\2c\\20GrFlushInfo\\20const&\\29\\20const\n9572:SkImage_Ganesh::asView\\28GrRecordingContext*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\\20const\n9573:SkImage_Ganesh::asFragmentProcessor\\28GrRecordingContext*\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\\20const\n9574:SkImage_Base::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n9575:SkImage_Base::notifyAddedToRasterCache\\28\\29\\20const\n9576:SkImage_Base::makeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n9577:SkImage_Base::makeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n9578:SkImage_Base::makeColorTypeAndColorSpace\\28skgpu::graphite::Recorder*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n9579:SkImage_Base::makeColorTypeAndColorSpace\\28GrDirectContext*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n9580:SkImage_Base::makeColorSpace\\28skgpu::graphite::Recorder*\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n9581:SkImage_Base::makeColorSpace\\28GrDirectContext*\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n9582:SkImage_Base::isTextureBacked\\28\\29\\20const\n9583:SkImage_Base::isLazyGenerated\\28\\29\\20const\n9584:SkImageShader::~SkImageShader\\28\\29.1\n9585:SkImageShader::~SkImageShader\\28\\29\n9586:SkImageShader::type\\28\\29\\20const\n9587:SkImageShader::onIsAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n9588:SkImageShader::isOpaque\\28\\29\\20const\n9589:SkImageShader::getTypeName\\28\\29\\20const\n9590:SkImageShader::flatten\\28SkWriteBuffer&\\29\\20const\n9591:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9592:SkImageGenerator::~SkImageGenerator\\28\\29\n9593:SkImageFilters::Compose\\28sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\29\n9594:SkImage::~SkImage\\28\\29\n9595:SkIcoDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9596:SkIcoCodec::~SkIcoCodec\\28\\29.1\n9597:SkIcoCodec::~SkIcoCodec\\28\\29\n9598:SkIcoCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9599:SkIcoCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n9600:SkIcoCodec::onSkipScanlines\\28int\\29\n9601:SkIcoCodec::onIncrementalDecode\\28int*\\29\n9602:SkIcoCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n9603:SkIcoCodec::onGetScanlineOrder\\28\\29\\20const\n9604:SkIcoCodec::onGetScaledDimensions\\28float\\29\\20const\n9605:SkIcoCodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9606:SkIcoCodec::onDimensionsSupported\\28SkISize\\20const&\\29\n9607:SkIcoCodec::getSampler\\28bool\\29\n9608:SkIcoCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n9609:SkGradientBaseShader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n9610:SkGradientBaseShader::isOpaque\\28\\29\\20const\n9611:SkGradientBaseShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9612:SkGifDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9613:SkGaussianColorFilter::getTypeName\\28\\29\\20const\n9614:SkGaussianColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n9615:SkGammaColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n9616:SkGammaColorSpaceLuminance::fromLuma\\28float\\2c\\20float\\29\\20const\n9617:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\\28\\29.1\n9618:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\\28\\29\n9619:SkFontStyleSet_Custom::getStyle\\28int\\2c\\20SkFontStyle*\\2c\\20SkString*\\29\n9620:SkFontScanner_FreeType::~SkFontScanner_FreeType\\28\\29.1\n9621:SkFontScanner_FreeType::~SkFontScanner_FreeType\\28\\29\n9622:SkFontScanner_FreeType::scanFile\\28SkStreamAsset*\\2c\\20int*\\29\\20const\n9623:SkFontScanner_FreeType::scanFace\\28SkStreamAsset*\\2c\\20int\\2c\\20int*\\29\\20const\n9624:SkFontMgr_Custom::~SkFontMgr_Custom\\28\\29.1\n9625:SkFontMgr_Custom::~SkFontMgr_Custom\\28\\29\n9626:SkFontMgr_Custom::onMatchFamily\\28char\\20const*\\29\\20const\n9627:SkFontMgr_Custom::onMatchFamilyStyle\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\29\\20const\n9628:SkFontMgr_Custom::onMakeFromStreamIndex\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n9629:SkFontMgr_Custom::onMakeFromStreamArgs\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\\20const\n9630:SkFontMgr_Custom::onMakeFromFile\\28char\\20const*\\2c\\20int\\29\\20const\n9631:SkFontMgr_Custom::onMakeFromData\\28sk_sp<SkData>\\2c\\20int\\29\\20const\n9632:SkFontMgr_Custom::onLegacyMakeTypeface\\28char\\20const*\\2c\\20SkFontStyle\\29\\20const\n9633:SkFontMgr_Custom::onGetFamilyName\\28int\\2c\\20SkString*\\29\\20const\n9634:SkFont::setScaleX\\28float\\29\n9635:SkFont::setEmbeddedBitmaps\\28bool\\29\n9636:SkFont::isEmbolden\\28\\29\\20const\n9637:SkFont::getSkewX\\28\\29\\20const\n9638:SkFont::getSize\\28\\29\\20const\n9639:SkFont::getScaleX\\28\\29\\20const\n9640:SkFont*\\20emscripten::internal::operator_new<SkFont\\2c\\20sk_sp<SkTypeface>\\2c\\20float\\2c\\20float\\2c\\20float>\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\2c\\20float&&\\2c\\20float&&\\29\n9641:SkFont*\\20emscripten::internal::operator_new<SkFont\\2c\\20sk_sp<SkTypeface>\\2c\\20float>\\28sk_sp<SkTypeface>&&\\2c\\20float&&\\29\n9642:SkFont*\\20emscripten::internal::operator_new<SkFont\\2c\\20sk_sp<SkTypeface>>\\28sk_sp<SkTypeface>&&\\29\n9643:SkFont*\\20emscripten::internal::operator_new<SkFont>\\28\\29\n9644:SkFILEStream::~SkFILEStream\\28\\29.1\n9645:SkFILEStream::~SkFILEStream\\28\\29\n9646:SkFILEStream::seek\\28unsigned\\20long\\29\n9647:SkFILEStream::rewind\\28\\29\n9648:SkFILEStream::read\\28void*\\2c\\20unsigned\\20long\\29\n9649:SkFILEStream::onFork\\28\\29\\20const\n9650:SkFILEStream::onDuplicate\\28\\29\\20const\n9651:SkFILEStream::move\\28long\\29\n9652:SkFILEStream::isAtEnd\\28\\29\\20const\n9653:SkFILEStream::getPosition\\28\\29\\20const\n9654:SkFILEStream::getLength\\28\\29\\20const\n9655:SkEncoder::~SkEncoder\\28\\29\n9656:SkEmptyShader::getTypeName\\28\\29\\20const\n9657:SkEmptyPicture::~SkEmptyPicture\\28\\29\n9658:SkEmptyPicture::cullRect\\28\\29\\20const\n9659:SkEmptyPicture::approximateBytesUsed\\28\\29\\20const\n9660:SkEmptyFontMgr::onMatchFamily\\28char\\20const*\\29\\20const\n9661:SkEdgeBuilder::~SkEdgeBuilder\\28\\29\n9662:SkEdgeBuilder::build\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\2c\\20bool\\29::$_0::__invoke\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\n9663:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\\28\\29.1\n9664:SkDrawable::onMakePictureSnapshot\\28\\29\n9665:SkDrawBase::~SkDrawBase\\28\\29\n9666:SkDraw::paintMasks\\28SkZip<SkGlyph\\20const*\\2c\\20SkPoint>\\2c\\20SkPaint\\20const&\\29\\20const\n9667:SkDiscretePathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9668:SkDiscretePathEffectImpl::getTypeName\\28\\29\\20const\n9669:SkDiscretePathEffectImpl::getFactory\\28\\29\\20const\n9670:SkDiscretePathEffectImpl::computeFastBounds\\28SkRect*\\29\\20const\n9671:SkDiscretePathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n9672:SkDevice::~SkDevice\\28\\29\n9673:SkDevice::strikeDeviceInfo\\28\\29\\20const\n9674:SkDevice::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n9675:SkDevice::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n9676:SkDevice::drawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n9677:SkDevice::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const&\\29\n9678:SkDevice::drawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n9679:SkDevice::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n9680:SkDevice::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9681:SkDevice::drawCoverageMask\\28SkSpecialImage\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n9682:SkDevice::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n9683:SkDevice::drawAsTiledImageRect\\28SkCanvas*\\2c\\20SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n9684:SkDevice::createImageFilteringBackend\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\29\\20const\n9685:SkDashImpl::~SkDashImpl\\28\\29.1\n9686:SkDashImpl::~SkDashImpl\\28\\29\n9687:SkDashImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9688:SkDashImpl::onAsPoints\\28SkPathEffectBase::PointData*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\29\\20const\n9689:SkDashImpl::onAsADash\\28SkPathEffect::DashInfo*\\29\\20const\n9690:SkDashImpl::getTypeName\\28\\29\\20const\n9691:SkDashImpl::flatten\\28SkWriteBuffer&\\29\\20const\n9692:SkCustomTypefaceBuilder::MakeFromStream\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\n9693:SkCornerPathEffectImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9694:SkCornerPathEffectImpl::getTypeName\\28\\29\\20const\n9695:SkCornerPathEffectImpl::getFactory\\28\\29\\20const\n9696:SkCornerPathEffectImpl::flatten\\28SkWriteBuffer&\\29\\20const\n9697:SkCornerPathEffectImpl::CreateProc\\28SkReadBuffer&\\29\n9698:SkCornerPathEffect::Make\\28float\\29\n9699:SkContourMeasureIter*\\20emscripten::internal::operator_new<SkContourMeasureIter\\2c\\20SkPath\\20const&\\2c\\20bool\\2c\\20float>\\28SkPath\\20const&\\2c\\20bool&&\\2c\\20float&&\\29\n9700:SkContourMeasure::~SkContourMeasure\\28\\29.1\n9701:SkContourMeasure::~SkContourMeasure\\28\\29\n9702:SkContourMeasure::isClosed\\28\\29\\20const\n9703:SkConicalGradient::getTypeName\\28\\29\\20const\n9704:SkConicalGradient::flatten\\28SkWriteBuffer&\\29\\20const\n9705:SkConicalGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n9706:SkConicalGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n9707:SkComposePathEffect::~SkComposePathEffect\\28\\29\n9708:SkComposePathEffect::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n9709:SkComposePathEffect::getTypeName\\28\\29\\20const\n9710:SkComposePathEffect::computeFastBounds\\28SkRect*\\29\\20const\n9711:SkComposeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n9712:SkComposeColorFilter::getTypeName\\28\\29\\20const\n9713:SkComposeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n9714:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\\28\\29.1\n9715:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\\28\\29\n9716:SkColorSpaceXformColorFilter::getTypeName\\28\\29\\20const\n9717:SkColorSpaceXformColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9718:SkColorSpaceXformColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n9719:SkColorShader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n9720:SkColorShader::isOpaque\\28\\29\\20const\n9721:SkColorShader::getTypeName\\28\\29\\20const\n9722:SkColorShader::flatten\\28SkWriteBuffer&\\29\\20const\n9723:SkColorShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9724:SkColorPalette::~SkColorPalette\\28\\29.1\n9725:SkColorPalette::~SkColorPalette\\28\\29\n9726:SkColorFilters::SRGBToLinearGamma\\28\\29\n9727:SkColorFilters::LinearToSRGBGamma\\28\\29\n9728:SkColorFilters::Lerp\\28float\\2c\\20sk_sp<SkColorFilter>\\2c\\20sk_sp<SkColorFilter>\\29\n9729:SkColorFilters::Compose\\28sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>\\29\n9730:SkColorFilterShader::~SkColorFilterShader\\28\\29.1\n9731:SkColorFilterShader::~SkColorFilterShader\\28\\29\n9732:SkColorFilterShader::isOpaque\\28\\29\\20const\n9733:SkColorFilterShader::getTypeName\\28\\29\\20const\n9734:SkColorFilterShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9735:SkColorFilterBase::onFilterColor4f\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkColorSpace*\\29\\20const\n9736:SkColor4Shader::~SkColor4Shader\\28\\29.1\n9737:SkColor4Shader::~SkColor4Shader\\28\\29\n9738:SkColor4Shader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n9739:SkColor4Shader::isOpaque\\28\\29\\20const\n9740:SkColor4Shader::getTypeName\\28\\29\\20const\n9741:SkColor4Shader::flatten\\28SkWriteBuffer&\\29\\20const\n9742:SkColor4Shader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9743:SkCodecImageGenerator::~SkCodecImageGenerator\\28\\29.1\n9744:SkCodecImageGenerator::~SkCodecImageGenerator\\28\\29\n9745:SkCodecImageGenerator::onRefEncodedData\\28\\29\n9746:SkCodecImageGenerator::onQueryYUVAInfo\\28SkYUVAPixmapInfo::SupportedDataTypes\\20const&\\2c\\20SkYUVAPixmapInfo*\\29\\20const\n9747:SkCodecImageGenerator::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n9748:SkCodecImageGenerator::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageGenerator::Options\\20const&\\29\n9749:SkCodec::onStartScanlineDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9750:SkCodec::onStartIncrementalDecode\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n9751:SkCodec::onOutputScanline\\28int\\29\\20const\n9752:SkCodec::onGetScaledDimensions\\28float\\29\\20const\n9753:SkCodec::getEncodedData\\28\\29\\20const\n9754:SkCodec::conversionSupported\\28SkImageInfo\\20const&\\2c\\20bool\\2c\\20bool\\29\n9755:SkCanvas::rotate\\28float\\2c\\20float\\2c\\20float\\29\n9756:SkCanvas::recordingContext\\28\\29\\20const\n9757:SkCanvas::recorder\\28\\29\\20const\n9758:SkCanvas::onPeekPixels\\28SkPixmap*\\29\n9759:SkCanvas::onNewSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n9760:SkCanvas::onImageInfo\\28\\29\\20const\n9761:SkCanvas::onGetProps\\28SkSurfaceProps*\\2c\\20bool\\29\\20const\n9762:SkCanvas::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n9763:SkCanvas::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n9764:SkCanvas::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n9765:SkCanvas::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n9766:SkCanvas::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n9767:SkCanvas::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9768:SkCanvas::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9769:SkCanvas::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n9770:SkCanvas::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n9771:SkCanvas::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n9772:SkCanvas::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n9773:SkCanvas::onDrawPaint\\28SkPaint\\20const&\\29\n9774:SkCanvas::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9775:SkCanvas::onDrawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n9776:SkCanvas::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n9777:SkCanvas::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n9778:SkCanvas::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n9779:SkCanvas::onDrawGlyphRunList\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n9780:SkCanvas::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n9781:SkCanvas::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n9782:SkCanvas::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n9783:SkCanvas::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9784:SkCanvas::onDrawBehind\\28SkPaint\\20const&\\29\n9785:SkCanvas::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n9786:SkCanvas::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n9787:SkCanvas::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n9788:SkCanvas::onDiscard\\28\\29\n9789:SkCanvas::onConvertGlyphRunListToSlug\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n9790:SkCanvas::onAccessTopLayerPixels\\28SkPixmap*\\29\n9791:SkCanvas::isClipRect\\28\\29\\20const\n9792:SkCanvas::isClipEmpty\\28\\29\\20const\n9793:SkCanvas::getSaveCount\\28\\29\\20const\n9794:SkCanvas::getBaseLayerSize\\28\\29\\20const\n9795:SkCanvas::drawTextBlob\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n9796:SkCanvas::drawPicture\\28sk_sp<SkPicture>\\20const&\\29\n9797:SkCanvas::drawCircle\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n9798:SkCanvas*\\20emscripten::internal::operator_new<SkCanvas\\2c\\20float\\2c\\20float>\\28float&&\\2c\\20float&&\\29\n9799:SkCanvas*\\20emscripten::internal::operator_new<SkCanvas>\\28\\29\n9800:SkCachedData::~SkCachedData\\28\\29.1\n9801:SkCTMShader::~SkCTMShader\\28\\29\n9802:SkCTMShader::isConstant\\28\\29\\20const\n9803:SkCTMShader::getTypeName\\28\\29\\20const\n9804:SkCTMShader::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n9805:SkCTMShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9806:SkBreakIterator_client::~SkBreakIterator_client\\28\\29.1\n9807:SkBreakIterator_client::~SkBreakIterator_client\\28\\29\n9808:SkBreakIterator_client::status\\28\\29\n9809:SkBreakIterator_client::setText\\28char\\20const*\\2c\\20int\\29\n9810:SkBreakIterator_client::setText\\28char16_t\\20const*\\2c\\20int\\29\n9811:SkBreakIterator_client::next\\28\\29\n9812:SkBreakIterator_client::isDone\\28\\29\n9813:SkBreakIterator_client::first\\28\\29\n9814:SkBreakIterator_client::current\\28\\29\n9815:SkBmpStandardCodec::~SkBmpStandardCodec\\28\\29.1\n9816:SkBmpStandardCodec::~SkBmpStandardCodec\\28\\29\n9817:SkBmpStandardCodec::onPrepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9818:SkBmpStandardCodec::onInIco\\28\\29\\20const\n9819:SkBmpStandardCodec::getSampler\\28bool\\29\n9820:SkBmpStandardCodec::decodeRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n9821:SkBmpRLESampler::onSetSampleX\\28int\\29\n9822:SkBmpRLESampler::fillWidth\\28\\29\\20const\n9823:SkBmpRLECodec::~SkBmpRLECodec\\28\\29.1\n9824:SkBmpRLECodec::~SkBmpRLECodec\\28\\29\n9825:SkBmpRLECodec::skipRows\\28int\\29\n9826:SkBmpRLECodec::onPrepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9827:SkBmpRLECodec::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\2c\\20int*\\29\n9828:SkBmpRLECodec::getSampler\\28bool\\29\n9829:SkBmpRLECodec::decodeRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n9830:SkBmpMaskCodec::~SkBmpMaskCodec\\28\\29.1\n9831:SkBmpMaskCodec::~SkBmpMaskCodec\\28\\29\n9832:SkBmpMaskCodec::onPrepareToDecode\\28SkImageInfo\\20const&\\2c\\20SkCodec::Options\\20const&\\29\n9833:SkBmpMaskCodec::getSampler\\28bool\\29\n9834:SkBmpMaskCodec::decodeRows\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkCodec::Options\\20const&\\29\n9835:SkBmpDecoder::Decode\\28std::__2::unique_ptr<SkStream\\2c\\20std::__2::default_delete<SkStream>>\\2c\\20SkCodec::Result*\\2c\\20void*\\29\n9836:SkBmpCodec::~SkBmpCodec\\28\\29\n9837:SkBmpCodec::skipRows\\28int\\29\n9838:SkBmpCodec::onSkipScanlines\\28int\\29\n9839:SkBmpCodec::onRewind\\28\\29\n9840:SkBmpCodec::onGetScanlines\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\29\n9841:SkBmpCodec::onGetScanlineOrder\\28\\29\\20const\n9842:SkBlurMaskFilterImpl::getTypeName\\28\\29\\20const\n9843:SkBlurMaskFilterImpl::flatten\\28SkWriteBuffer&\\29\\20const\n9844:SkBlurMaskFilterImpl::filterRectsToNine\\28SkRect\\20const*\\2c\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n9845:SkBlurMaskFilterImpl::filterRRectToNine\\28SkRRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n9846:SkBlurMaskFilterImpl::filterMask\\28SkMaskBuilder*\\2c\\20SkMask\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\29\\20const\n9847:SkBlurMaskFilterImpl::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n9848:SkBlurMaskFilterImpl::asImageFilter\\28SkMatrix\\20const&\\29\\20const\n9849:SkBlurMaskFilterImpl::asABlur\\28SkMaskFilterBase::BlurRec*\\29\\20const\n9850:SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29.1\n9851:SkBlockMemoryStream::~SkBlockMemoryStream\\28\\29\n9852:SkBlockMemoryStream::seek\\28unsigned\\20long\\29\n9853:SkBlockMemoryStream::rewind\\28\\29\n9854:SkBlockMemoryStream::read\\28void*\\2c\\20unsigned\\20long\\29\n9855:SkBlockMemoryStream::peek\\28void*\\2c\\20unsigned\\20long\\29\\20const\n9856:SkBlockMemoryStream::onFork\\28\\29\\20const\n9857:SkBlockMemoryStream::onDuplicate\\28\\29\\20const\n9858:SkBlockMemoryStream::move\\28long\\29\n9859:SkBlockMemoryStream::isAtEnd\\28\\29\\20const\n9860:SkBlockMemoryStream::getMemoryBase\\28\\29\n9861:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\\28\\29.1\n9862:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\\28\\29\n9863:SkBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9864:SkBlitter::blitAntiV2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n9865:SkBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n9866:SkBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n9867:SkBlitter::allocBlitMemory\\28unsigned\\20long\\29\n9868:SkBlenderBase::asBlendMode\\28\\29\\20const\n9869:SkBlendShader::getTypeName\\28\\29\\20const\n9870:SkBlendShader::flatten\\28SkWriteBuffer&\\29\\20const\n9871:SkBlendShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n9872:SkBlendModeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n9873:SkBlendModeColorFilter::onAsAColorMode\\28unsigned\\20int*\\2c\\20SkBlendMode*\\29\\20const\n9874:SkBlendModeColorFilter::getTypeName\\28\\29\\20const\n9875:SkBlendModeColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n9876:SkBlendModeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n9877:SkBlendModeBlender::onAppendStages\\28SkStageRec\\20const&\\29\\20const\n9878:SkBlendModeBlender::getTypeName\\28\\29\\20const\n9879:SkBlendModeBlender::flatten\\28SkWriteBuffer&\\29\\20const\n9880:SkBlendModeBlender::asBlendMode\\28\\29\\20const\n9881:SkBitmapDevice::~SkBitmapDevice\\28\\29.1\n9882:SkBitmapDevice::~SkBitmapDevice\\28\\29\n9883:SkBitmapDevice::snapSpecial\\28SkIRect\\20const&\\2c\\20bool\\29\n9884:SkBitmapDevice::setImmutable\\28\\29\n9885:SkBitmapDevice::replaceClip\\28SkIRect\\20const&\\29\n9886:SkBitmapDevice::pushClipStack\\28\\29\n9887:SkBitmapDevice::popClipStack\\28\\29\n9888:SkBitmapDevice::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n9889:SkBitmapDevice::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n9890:SkBitmapDevice::onPeekPixels\\28SkPixmap*\\29\n9891:SkBitmapDevice::onDrawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n9892:SkBitmapDevice::onClipShader\\28sk_sp<SkShader>\\29\n9893:SkBitmapDevice::onAccessPixels\\28SkPixmap*\\29\n9894:SkBitmapDevice::makeSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n9895:SkBitmapDevice::makeSpecial\\28SkImage\\20const*\\29\n9896:SkBitmapDevice::makeSpecial\\28SkBitmap\\20const&\\29\n9897:SkBitmapDevice::isClipWideOpen\\28\\29\\20const\n9898:SkBitmapDevice::isClipRect\\28\\29\\20const\n9899:SkBitmapDevice::isClipEmpty\\28\\29\\20const\n9900:SkBitmapDevice::isClipAntiAliased\\28\\29\\20const\n9901:SkBitmapDevice::getRasterHandle\\28\\29\\20const\n9902:SkBitmapDevice::drawVertices\\28SkVertices\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n9903:SkBitmapDevice::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n9904:SkBitmapDevice::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9905:SkBitmapDevice::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9906:SkBitmapDevice::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n9907:SkBitmapDevice::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n9908:SkBitmapDevice::drawPaint\\28SkPaint\\20const&\\29\n9909:SkBitmapDevice::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n9910:SkBitmapDevice::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n9911:SkBitmapDevice::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n9912:SkBitmapDevice::devClipBounds\\28\\29\\20const\n9913:SkBitmapDevice::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n9914:SkBitmapDevice::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n9915:SkBitmapDevice::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n9916:SkBitmapDevice::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n9917:SkBitmapDevice::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n9918:SkBitmapDevice::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n9919:SkBitmapCache::Rec::~Rec\\28\\29.1\n9920:SkBitmapCache::Rec::~Rec\\28\\29\n9921:SkBitmapCache::Rec::postAddInstall\\28void*\\29\n9922:SkBitmapCache::Rec::getCategory\\28\\29\\20const\n9923:SkBitmapCache::Rec::canBePurged\\28\\29\n9924:SkBitmapCache::Rec::bytesUsed\\28\\29\\20const\n9925:SkBitmapCache::Rec::ReleaseProc\\28void*\\2c\\20void*\\29\n9926:SkBitmapCache::Rec::Finder\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9927:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\\28\\29.1\n9928:SkBinaryWriteBuffer::write\\28SkM44\\20const&\\29\n9929:SkBinaryWriteBuffer::writeTypeface\\28SkTypeface*\\29\n9930:SkBinaryWriteBuffer::writeString\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n9931:SkBinaryWriteBuffer::writeStream\\28SkStream*\\2c\\20unsigned\\20long\\29\n9932:SkBinaryWriteBuffer::writeScalar\\28float\\29\n9933:SkBinaryWriteBuffer::writeSampling\\28SkSamplingOptions\\20const&\\29\n9934:SkBinaryWriteBuffer::writeRegion\\28SkRegion\\20const&\\29\n9935:SkBinaryWriteBuffer::writeRect\\28SkRect\\20const&\\29\n9936:SkBinaryWriteBuffer::writePoint\\28SkPoint\\20const&\\29\n9937:SkBinaryWriteBuffer::writePointArray\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\29\n9938:SkBinaryWriteBuffer::writePoint3\\28SkPoint3\\20const&\\29\n9939:SkBinaryWriteBuffer::writePath\\28SkPath\\20const&\\29\n9940:SkBinaryWriteBuffer::writePaint\\28SkPaint\\20const&\\29\n9941:SkBinaryWriteBuffer::writePad32\\28void\\20const*\\2c\\20unsigned\\20long\\29\n9942:SkBinaryWriteBuffer::writeMatrix\\28SkMatrix\\20const&\\29\n9943:SkBinaryWriteBuffer::writeImage\\28SkImage\\20const*\\29\n9944:SkBinaryWriteBuffer::writeColor4fArray\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20unsigned\\20int\\29\n9945:SkBigPicture::~SkBigPicture\\28\\29.1\n9946:SkBigPicture::~SkBigPicture\\28\\29\n9947:SkBigPicture::playback\\28SkCanvas*\\2c\\20SkPicture::AbortCallback*\\29\\20const\n9948:SkBigPicture::cullRect\\28\\29\\20const\n9949:SkBigPicture::approximateOpCount\\28bool\\29\\20const\n9950:SkBigPicture::approximateBytesUsed\\28\\29\\20const\n9951:SkBidiSubsetFactory::errorName\\28UErrorCode\\29\\20const\n9952:SkBidiSubsetFactory::bidi_setPara\\28UBiDi*\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20UErrorCode*\\29\\20const\n9953:SkBidiSubsetFactory::bidi_reorderVisual\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n9954:SkBidiSubsetFactory::bidi_openSized\\28int\\2c\\20int\\2c\\20UErrorCode*\\29\\20const\n9955:SkBidiSubsetFactory::bidi_getLevelAt\\28UBiDi\\20const*\\2c\\20int\\29\\20const\n9956:SkBidiSubsetFactory::bidi_getLength\\28UBiDi\\20const*\\29\\20const\n9957:SkBidiSubsetFactory::bidi_getDirection\\28UBiDi\\20const*\\29\\20const\n9958:SkBidiSubsetFactory::bidi_close_callback\\28\\29\\20const\n9959:SkBezierCubic::Subdivide\\28double\\20const*\\2c\\20double\\2c\\20double*\\29\n9960:SkBasicEdgeBuilder::recoverClip\\28SkIRect\\20const&\\29\\20const\n9961:SkBasicEdgeBuilder::allocEdges\\28unsigned\\20long\\2c\\20unsigned\\20long*\\29\n9962:SkBasicEdgeBuilder::addQuad\\28SkPoint\\20const*\\29\n9963:SkBasicEdgeBuilder::addPolyLine\\28SkPoint\\20const*\\2c\\20char*\\2c\\20char**\\29\n9964:SkBasicEdgeBuilder::addLine\\28SkPoint\\20const*\\29\n9965:SkBasicEdgeBuilder::addCubic\\28SkPoint\\20const*\\29\n9966:SkBaseShadowTessellator::~SkBaseShadowTessellator\\28\\29\n9967:SkBBoxHierarchy::insert\\28SkRect\\20const*\\2c\\20SkBBoxHierarchy::Metadata\\20const*\\2c\\20int\\29\n9968:SkArenaAlloc::SkipPod\\28char*\\29\n9969:SkArenaAlloc::NextBlock\\28char*\\29\n9970:SkAnimatedImage::~SkAnimatedImage\\28\\29.1\n9971:SkAnimatedImage::~SkAnimatedImage\\28\\29\n9972:SkAnimatedImage::reset\\28\\29\n9973:SkAnimatedImage::onGetBounds\\28\\29\n9974:SkAnimatedImage::onDraw\\28SkCanvas*\\29\n9975:SkAnimatedImage::getRepetitionCount\\28\\29\\20const\n9976:SkAnimatedImage::getCurrentFrame\\28\\29\n9977:SkAnimatedImage::currentFrameDuration\\28\\29\n9978:SkAndroidCodecAdapter::onGetSupportedSubset\\28SkIRect*\\29\\20const\n9979:SkAndroidCodecAdapter::onGetSampledDimensions\\28int\\29\\20const\n9980:SkAndroidCodecAdapter::onGetAndroidPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkAndroidCodec::AndroidOptions\\20const&\\29\n9981:SkAnalyticEdgeBuilder::recoverClip\\28SkIRect\\20const&\\29\\20const\n9982:SkAnalyticEdgeBuilder::allocEdges\\28unsigned\\20long\\2c\\20unsigned\\20long*\\29\n9983:SkAnalyticEdgeBuilder::addQuad\\28SkPoint\\20const*\\29\n9984:SkAnalyticEdgeBuilder::addPolyLine\\28SkPoint\\20const*\\2c\\20char*\\2c\\20char**\\29\n9985:SkAnalyticEdgeBuilder::addLine\\28SkPoint\\20const*\\29\n9986:SkAnalyticEdgeBuilder::addCubic\\28SkPoint\\20const*\\29\n9987:SkAAClipBlitter::~SkAAClipBlitter\\28\\29.1\n9988:SkAAClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n9989:SkAAClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9990:SkAAClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n9991:SkAAClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9992:SkAAClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n9993:SkAAClip::Builder::operateY\\28SkAAClip\\20const&\\2c\\20SkAAClip\\20const&\\2c\\20SkClipOp\\29::$_1::__invoke\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n9994:SkAAClip::Builder::operateY\\28SkAAClip\\20const&\\2c\\20SkAAClip\\20const&\\2c\\20SkClipOp\\29::$_0::__invoke\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n9995:SkAAClip::Builder::Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n9996:SkAAClip::Builder::Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n9997:SkAAClip::Builder::Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n9998:SkAAClip::Builder::Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n9999:SkAAClip::Builder::Blitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10000:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\\28\\29.1\n10001:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\\28\\29\n10002:SkA8_Coverage_Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10003:SkA8_Coverage_Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10004:SkA8_Coverage_Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10005:SkA8_Coverage_Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10006:SkA8_Coverage_Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10007:SkA8_Blitter::~SkA8_Blitter\\28\\29.1\n10008:SkA8_Blitter::~SkA8_Blitter\\28\\29\n10009:SkA8_Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10010:SkA8_Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10011:SkA8_Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10012:SkA8_Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10013:SkA8_Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10014:SkA8Blitter_Choose\\28SkPixmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n10015:Sk2DPathEffect::nextSpan\\28int\\2c\\20int\\2c\\20int\\2c\\20SkPath*\\29\\20const\n10016:Sk2DPathEffect::flatten\\28SkWriteBuffer&\\29\\20const\n10017:SimpleVFilter16i_C\n10018:SimpleVFilter16_C\n10019:SimpleTextStyle*\\20emscripten::internal::raw_constructor<SimpleTextStyle>\\28\\29\n10020:SimpleTextStyle*\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleTextStyle>::getWire<SimpleParagraphStyle>\\28SimpleTextStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle\\20const&\\29\n10021:SimpleStrutStyle*\\20emscripten::internal::raw_constructor<SimpleStrutStyle>\\28\\29\n10022:SimpleStrutStyle*\\20emscripten::internal::MemberAccess<SimpleParagraphStyle\\2c\\20SimpleStrutStyle>::getWire<SimpleParagraphStyle>\\28SimpleStrutStyle\\20SimpleParagraphStyle::*\\20const&\\2c\\20SimpleParagraphStyle\\20const&\\29\n10023:SimpleParagraphStyle*\\20emscripten::internal::raw_constructor<SimpleParagraphStyle>\\28\\29\n10024:SimpleHFilter16i_C\n10025:SimpleHFilter16_C\n10026:SimpleFontStyle*\\20emscripten::internal::raw_constructor<SimpleFontStyle>\\28\\29\n10027:ShaderPDXferProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10028:ShaderPDXferProcessor::name\\28\\29\\20const\n10029:ShaderPDXferProcessor::makeProgramImpl\\28\\29\\20const\n10030:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10031:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n10032:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10033:RuntimeEffectUniform*\\20emscripten::internal::raw_constructor<RuntimeEffectUniform>\\28\\29\n10034:RuntimeEffectRPCallbacks::toLinearSrgb\\28void\\20const*\\29\n10035:RuntimeEffectRPCallbacks::fromLinearSrgb\\28void\\20const*\\29\n10036:RuntimeEffectRPCallbacks::appendShader\\28int\\29\n10037:RuntimeEffectRPCallbacks::appendColorFilter\\28int\\29\n10038:RuntimeEffectRPCallbacks::appendBlender\\28int\\29\n10039:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\\28\\29\n10040:RunBasedAdditiveBlitter::getRealBlitter\\28bool\\29\n10041:RunBasedAdditiveBlitter::flush_if_y_changed\\28int\\2c\\20int\\29\n10042:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10043:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n10044:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10045:Round_Up_To_Grid\n10046:Round_To_Half_Grid\n10047:Round_To_Grid\n10048:Round_To_Double_Grid\n10049:Round_Super_45\n10050:Round_Super\n10051:Round_None\n10052:Round_Down_To_Grid\n10053:RoundJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n10054:RoundCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n10055:Reset\n10056:Read_CVT_Stretched\n10057:Read_CVT\n10058:RD4_C\n10059:Project_y\n10060:Project\n10061:ProcessRows\n10062:PredictorAdd9_C\n10063:PredictorAdd8_C\n10064:PredictorAdd7_C\n10065:PredictorAdd6_C\n10066:PredictorAdd5_C\n10067:PredictorAdd4_C\n10068:PredictorAdd3_C\n10069:PredictorAdd2_C\n10070:PredictorAdd1_C\n10071:PredictorAdd13_C\n10072:PredictorAdd12_C\n10073:PredictorAdd11_C\n10074:PredictorAdd10_C\n10075:PredictorAdd0_C\n10076:PrePostInverseBlitterProc\\28SkBlitter*\\2c\\20int\\2c\\20bool\\29\n10077:PorterDuffXferProcessor::onHasSecondaryOutput\\28\\29\\20const\n10078:PorterDuffXferProcessor::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n10079:PorterDuffXferProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10080:PorterDuffXferProcessor::name\\28\\29\\20const\n10081:PorterDuffXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n10082:PorterDuffXferProcessor::makeProgramImpl\\28\\29\\20const\n10083:ParseVP8X\n10084:PackRGB_C\n10085:PDLCDXferProcessor::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n10086:PDLCDXferProcessor::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n10087:PDLCDXferProcessor::name\\28\\29\\20const\n10088:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrXferProcessor\\20const&\\29\n10089:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n10090:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const\n10091:OT::match_glyph\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n10092:OT::match_coverage\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n10093:OT::match_class_cached\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n10094:OT::match_class_cached2\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n10095:OT::match_class_cached1\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n10096:OT::match_class\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n10097:OT::hb_ot_apply_context_t::return_t\\20OT::Layout::GSUB_impl::SubstLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\29\n10098:OT::hb_ot_apply_context_t::return_t\\20OT::Layout::GPOS_impl::PosLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\29\n10099:OT::cff1::accelerator_t::gname_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n10100:OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>::cmp_range\\28void\\20const*\\2c\\20void\\20const*\\29\n10101:OT::ColorLine<OT::Variable>::static_get_color_stops\\28hb_color_line_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_color_stop_t*\\2c\\20void*\\29\n10102:OT::ColorLine<OT::NoVariable>::static_get_color_stops\\28hb_color_line_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_color_stop_t*\\2c\\20void*\\29\n10103:OT::CmapSubtableFormat4::accelerator_t::get_glyph_func\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n10104:Move_CVT_Stretched\n10105:Move_CVT\n10106:MiterJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n10107:MaskAdditiveBlitter::~MaskAdditiveBlitter\\28\\29.1\n10108:MaskAdditiveBlitter::~MaskAdditiveBlitter\\28\\29\n10109:MaskAdditiveBlitter::getWidth\\28\\29\n10110:MaskAdditiveBlitter::getRealBlitter\\28bool\\29\n10111:MaskAdditiveBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10112:MaskAdditiveBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10113:MaskAdditiveBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10114:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10115:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n10116:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10117:MapAlpha_C\n10118:MapARGB_C\n10119:MakeRenderTarget\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\29\n10120:MakeRenderTarget\\28sk_sp<GrDirectContext>\\2c\\20SimpleImageInfo\\29\n10121:MakePathFromVerbsPointsWeights\\28unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n10122:MakePathFromSVGString\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10123:MakePathFromOp\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\n10124:MakePathFromInterpolation\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\29\n10125:MakePathFromCmds\\28unsigned\\20long\\2c\\20int\\29\n10126:MakeOnScreenGLSurface\\28sk_sp<GrDirectContext>\\2c\\20int\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\29\n10127:MakeImageFromGenerator\\28SimpleImageInfo\\2c\\20emscripten::val\\29\n10128:MakeGrContext\\28\\29\n10129:MakeAsWinding\\28SkPath\\20const&\\29\n10130:LD4_C\n10131:JpegDecoderMgr::returnFailure\\28char\\20const*\\2c\\20SkCodec::Result\\29\n10132:JpegDecoderMgr::init\\28\\29\n10133:JpegDecoderMgr::SourceMgr::SkipInputData\\28jpeg_decompress_struct*\\2c\\20long\\29\n10134:JpegDecoderMgr::SourceMgr::InitSource\\28jpeg_decompress_struct*\\29\n10135:JpegDecoderMgr::SourceMgr::FillInputBuffer\\28jpeg_decompress_struct*\\29\n10136:JpegDecoderMgr::JpegDecoderMgr\\28SkStream*\\29\n10137:IsValidSimpleFormat\n10138:IsValidExtendedFormat\n10139:InverseBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10140:Init\n10141:HorizontalUnfilter_C\n10142:HorizontalFilter_C\n10143:Horish_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10144:Horish_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10145:HasAlpha8b_C\n10146:HasAlpha32b_C\n10147:HU4_C\n10148:HLine_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10149:HLine_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10150:HFilter8i_C\n10151:HFilter8_C\n10152:HFilter16i_C\n10153:HFilter16_C\n10154:HE8uv_C\n10155:HE4_C\n10156:HE16_C\n10157:HD4_C\n10158:GradientUnfilter_C\n10159:GradientFilter_C\n10160:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10161:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10162:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const\n10163:GrYUVtoRGBEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10164:GrYUVtoRGBEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10165:GrYUVtoRGBEffect::name\\28\\29\\20const\n10166:GrYUVtoRGBEffect::clone\\28\\29\\20const\n10167:GrXferProcessor::ProgramImpl::emitWriteSwizzle\\28GrGLSLXPFragmentBuilder*\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n10168:GrXferProcessor::ProgramImpl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n10169:GrXferProcessor::ProgramImpl::emitBlendCodeForDstRead\\28GrGLSLXPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrXferProcessor\\20const&\\29\n10170:GrWritePixelsTask::~GrWritePixelsTask\\28\\29.1\n10171:GrWritePixelsTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n10172:GrWritePixelsTask::onExecute\\28GrOpFlushState*\\29\n10173:GrWritePixelsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n10174:GrWaitRenderTask::~GrWaitRenderTask\\28\\29.1\n10175:GrWaitRenderTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n10176:GrWaitRenderTask::onExecute\\28GrOpFlushState*\\29\n10177:GrWaitRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n10178:GrTriangulator::~GrTriangulator\\28\\29\n10179:GrTransferFromRenderTask::~GrTransferFromRenderTask\\28\\29.1\n10180:GrTransferFromRenderTask::onExecute\\28GrOpFlushState*\\29\n10181:GrTransferFromRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n10182:GrThreadSafeCache::Trampoline::~Trampoline\\28\\29.1\n10183:GrThreadSafeCache::Trampoline::~Trampoline\\28\\29\n10184:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\\28\\29.1\n10185:GrTextureResolveRenderTask::onExecute\\28GrOpFlushState*\\29\n10186:GrTextureResolveRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n10187:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n10188:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n10189:GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n10190:GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n10191:GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n10192:GrTextureProxy::~GrTextureProxy\\28\\29.2\n10193:GrTextureProxy::~GrTextureProxy\\28\\29.1\n10194:GrTextureProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n10195:GrTextureProxy::instantiate\\28GrResourceProvider*\\29\n10196:GrTextureProxy::createSurface\\28GrResourceProvider*\\29\\20const\n10197:GrTextureProxy::callbackDesc\\28\\29\\20const\n10198:GrTextureEffect::~GrTextureEffect\\28\\29.1\n10199:GrTextureEffect::~GrTextureEffect\\28\\29\n10200:GrTextureEffect::onMakeProgramImpl\\28\\29\\20const\n10201:GrTextureEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10202:GrTextureEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10203:GrTextureEffect::name\\28\\29\\20const\n10204:GrTextureEffect::clone\\28\\29\\20const\n10205:GrTextureEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10206:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10207:GrTexture::onGpuMemorySize\\28\\29\\20const\n10208:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::~GrTDeferredProxyUploader\\28\\29.1\n10209:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::freeData\\28\\29\n10210:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::~GrTDeferredProxyUploader\\28\\29.1\n10211:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::~GrTDeferredProxyUploader\\28\\29\n10212:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::freeData\\28\\29\n10213:GrSurfaceProxy::getUniqueKey\\28\\29\\20const\n10214:GrSurface::~GrSurface\\28\\29\n10215:GrSurface::getResourceType\\28\\29\\20const\n10216:GrStrokeTessellationShader::~GrStrokeTessellationShader\\28\\29.1\n10217:GrStrokeTessellationShader::~GrStrokeTessellationShader\\28\\29\n10218:GrStrokeTessellationShader::name\\28\\29\\20const\n10219:GrStrokeTessellationShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10220:GrStrokeTessellationShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10221:GrStrokeTessellationShader::Impl::~Impl\\28\\29.1\n10222:GrStrokeTessellationShader::Impl::~Impl\\28\\29\n10223:GrStrokeTessellationShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10224:GrStrokeTessellationShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10225:GrSkSLFP::~GrSkSLFP\\28\\29.1\n10226:GrSkSLFP::~GrSkSLFP\\28\\29\n10227:GrSkSLFP::onMakeProgramImpl\\28\\29\\20const\n10228:GrSkSLFP::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10229:GrSkSLFP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10230:GrSkSLFP::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10231:GrSkSLFP::clone\\28\\29\\20const\n10232:GrSkSLFP::Impl::~Impl\\28\\29.1\n10233:GrSkSLFP::Impl::~Impl\\28\\29\n10234:GrSkSLFP::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10235:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::toLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10236:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleShader\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10237:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleColorFilter\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10238:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleBlender\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10239:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::getMangledName\\28char\\20const*\\29\n10240:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::fromLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10241:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::defineFunction\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n10242:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::declareUniform\\28SkSL::VarDeclaration\\20const*\\29\n10243:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::declareFunction\\28char\\20const*\\29\n10244:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10245:GrSimpleMesh*\\20SkArenaAlloc::allocUninitializedArray<GrSimpleMesh>\\28unsigned\\20long\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n10246:GrRingBuffer::FinishSubmit\\28void*\\29\n10247:GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\n10248:GrRenderTask::~GrRenderTask\\28\\29\n10249:GrRenderTask::disown\\28GrDrawingManager*\\29\n10250:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.1\n10251:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29\n10252:GrRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n10253:GrRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n10254:GrRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n10255:GrRenderTargetProxy::callbackDesc\\28\\29\\20const\n10256:GrRecordingContext::~GrRecordingContext\\28\\29.1\n10257:GrRecordingContext::abandoned\\28\\29\n10258:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\\28\\29.1\n10259:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\\28\\29\n10260:GrRRectShadowGeoProc::onTextureSampler\\28int\\29\\20const\n10261:GrRRectShadowGeoProc::name\\28\\29\\20const\n10262:GrRRectShadowGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10263:GrRRectShadowGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10264:GrQuadEffect::name\\28\\29\\20const\n10265:GrQuadEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10266:GrQuadEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10267:GrQuadEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10268:GrQuadEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10269:GrPorterDuffXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10270:GrPorterDuffXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10271:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\\28\\29.1\n10272:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\\28\\29\n10273:GrPerlinNoise2Effect::onMakeProgramImpl\\28\\29\\20const\n10274:GrPerlinNoise2Effect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10275:GrPerlinNoise2Effect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10276:GrPerlinNoise2Effect::name\\28\\29\\20const\n10277:GrPerlinNoise2Effect::clone\\28\\29\\20const\n10278:GrPerlinNoise2Effect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10279:GrPerlinNoise2Effect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10280:GrPathTessellationShader::Impl::~Impl\\28\\29\n10281:GrPathTessellationShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10282:GrPathTessellationShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10283:GrOpsRenderPass::~GrOpsRenderPass\\28\\29\n10284:GrOpsRenderPass::onExecuteDrawable\\28std::__2::unique_ptr<SkDrawable::GpuDrawHandler\\2c\\20std::__2::default_delete<SkDrawable::GpuDrawHandler>>\\29\n10285:GrOpsRenderPass::onDrawIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n10286:GrOpsRenderPass::onDrawIndexedIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n10287:GrOpFlushState::~GrOpFlushState\\28\\29.1\n10288:GrOpFlushState::~GrOpFlushState\\28\\29\n10289:GrOpFlushState::writeView\\28\\29\\20const\n10290:GrOpFlushState::usesMSAASurface\\28\\29\\20const\n10291:GrOpFlushState::tokenTracker\\28\\29\n10292:GrOpFlushState::threadSafeCache\\28\\29\\20const\n10293:GrOpFlushState::strikeCache\\28\\29\\20const\n10294:GrOpFlushState::smallPathAtlasManager\\28\\29\\20const\n10295:GrOpFlushState::sampledProxyArray\\28\\29\n10296:GrOpFlushState::rtProxy\\28\\29\\20const\n10297:GrOpFlushState::resourceProvider\\28\\29\\20const\n10298:GrOpFlushState::renderPassBarriers\\28\\29\\20const\n10299:GrOpFlushState::recordDraw\\28GrGeometryProcessor\\20const*\\2c\\20GrSimpleMesh\\20const*\\2c\\20int\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPrimitiveType\\29\n10300:GrOpFlushState::putBackVertices\\28int\\2c\\20unsigned\\20long\\29\n10301:GrOpFlushState::putBackIndirectDraws\\28int\\29\n10302:GrOpFlushState::putBackIndices\\28int\\29\n10303:GrOpFlushState::putBackIndexedIndirectDraws\\28int\\29\n10304:GrOpFlushState::makeVertexSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n10305:GrOpFlushState::makeVertexSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n10306:GrOpFlushState::makeIndexSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n10307:GrOpFlushState::makeIndexSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n10308:GrOpFlushState::makeDrawIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n10309:GrOpFlushState::makeDrawIndexedIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n10310:GrOpFlushState::dstProxyView\\28\\29\\20const\n10311:GrOpFlushState::colorLoadOp\\28\\29\\20const\n10312:GrOpFlushState::atlasManager\\28\\29\\20const\n10313:GrOpFlushState::appliedClip\\28\\29\\20const\n10314:GrOpFlushState::addInlineUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29\n10315:GrOp::~GrOp\\28\\29\n10316:GrOnFlushCallbackObject::postFlush\\28skgpu::AtlasToken\\29\n10317:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10318:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10319:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const\n10320:GrModulateAtlasCoverageEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10321:GrModulateAtlasCoverageEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10322:GrModulateAtlasCoverageEffect::name\\28\\29\\20const\n10323:GrModulateAtlasCoverageEffect::clone\\28\\29\\20const\n10324:GrMeshDrawOp::onPrepare\\28GrOpFlushState*\\29\n10325:GrMeshDrawOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10326:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10327:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10328:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const\n10329:GrMatrixEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10330:GrMatrixEffect::name\\28\\29\\20const\n10331:GrMatrixEffect::clone\\28\\29\\20const\n10332:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29.1\n10333:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29\n10334:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::$_0::__invoke\\28void\\20const*\\2c\\20void*\\29\n10335:GrImageContext::~GrImageContext\\28\\29.1\n10336:GrImageContext::~GrImageContext\\28\\29\n10337:GrHardClip::apply\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrDrawOp*\\2c\\20GrAAType\\2c\\20GrAppliedClip*\\2c\\20SkRect*\\29\\20const\n10338:GrGpuResource::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n10339:GrGpuBuffer::~GrGpuBuffer\\28\\29\n10340:GrGpuBuffer::unref\\28\\29\\20const\n10341:GrGpuBuffer::getResourceType\\28\\29\\20const\n10342:GrGpuBuffer::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n10343:GrGeometryProcessor::onTextureSampler\\28int\\29\\20const\n10344:GrGeometryProcessor::ProgramImpl::~ProgramImpl\\28\\29\n10345:GrGLVaryingHandler::~GrGLVaryingHandler\\28\\29\n10346:GrGLUniformHandler::~GrGLUniformHandler\\28\\29.1\n10347:GrGLUniformHandler::~GrGLUniformHandler\\28\\29\n10348:GrGLUniformHandler::samplerVariable\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n10349:GrGLUniformHandler::samplerSwizzle\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n10350:GrGLUniformHandler::internalAddUniformArray\\28GrProcessor\\20const*\\2c\\20unsigned\\20int\\2c\\20SkSLType\\2c\\20char\\20const*\\2c\\20bool\\2c\\20int\\2c\\20char\\20const**\\29\n10351:GrGLUniformHandler::getUniformCStr\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n10352:GrGLUniformHandler::appendUniformDecls\\28GrShaderFlags\\2c\\20SkString*\\29\\20const\n10353:GrGLUniformHandler::addSampler\\28GrBackendFormat\\20const&\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\2c\\20GrShaderCaps\\20const*\\29\n10354:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n10355:GrGLTextureRenderTarget::onSetLabel\\28\\29\n10356:GrGLTextureRenderTarget::onRelease\\28\\29\n10357:GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n10358:GrGLTextureRenderTarget::onAbandon\\28\\29\n10359:GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n10360:GrGLTextureRenderTarget::backendFormat\\28\\29\\20const\n10361:GrGLTexture::~GrGLTexture\\28\\29.1\n10362:GrGLTexture::~GrGLTexture\\28\\29\n10363:GrGLTexture::textureParamsModified\\28\\29\n10364:GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29\n10365:GrGLTexture::getBackendTexture\\28\\29\\20const\n10366:GrGLSemaphore::~GrGLSemaphore\\28\\29.1\n10367:GrGLSemaphore::~GrGLSemaphore\\28\\29\n10368:GrGLSemaphore::setIsOwned\\28\\29\n10369:GrGLSemaphore::backendSemaphore\\28\\29\\20const\n10370:GrGLSLVertexBuilder::~GrGLSLVertexBuilder\\28\\29\n10371:GrGLSLVertexBuilder::onFinalize\\28\\29\n10372:GrGLSLUniformHandler::inputSamplerSwizzle\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n10373:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n10374:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n10375:GrGLSLFragmentShaderBuilder::onFinalize\\28\\29\n10376:GrGLSLFragmentShaderBuilder::hasSecondaryOutput\\28\\29\\20const\n10377:GrGLSLFragmentShaderBuilder::forceHighPrecision\\28\\29\n10378:GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\\28skgpu::BlendEquation\\29\n10379:GrGLRenderTarget::~GrGLRenderTarget\\28\\29.1\n10380:GrGLRenderTarget::~GrGLRenderTarget\\28\\29\n10381:GrGLRenderTarget::onGpuMemorySize\\28\\29\\20const\n10382:GrGLRenderTarget::getBackendRenderTarget\\28\\29\\20const\n10383:GrGLRenderTarget::completeStencilAttachment\\28GrAttachment*\\2c\\20bool\\29\n10384:GrGLRenderTarget::canAttemptStencilAttachment\\28bool\\29\\20const\n10385:GrGLRenderTarget::backendFormat\\28\\29\\20const\n10386:GrGLRenderTarget::alwaysClearStencil\\28\\29\\20const\n10387:GrGLProgramDataManager::~GrGLProgramDataManager\\28\\29.1\n10388:GrGLProgramDataManager::~GrGLProgramDataManager\\28\\29\n10389:GrGLProgramDataManager::setMatrix4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n10390:GrGLProgramDataManager::setMatrix4f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n10391:GrGLProgramDataManager::setMatrix3fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n10392:GrGLProgramDataManager::setMatrix3f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n10393:GrGLProgramDataManager::setMatrix2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n10394:GrGLProgramDataManager::setMatrix2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n10395:GrGLProgramDataManager::set4iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n10396:GrGLProgramDataManager::set4i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n10397:GrGLProgramDataManager::set4f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\20const\n10398:GrGLProgramDataManager::set3iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n10399:GrGLProgramDataManager::set3i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n10400:GrGLProgramDataManager::set3fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n10401:GrGLProgramDataManager::set3f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\2c\\20float\\29\\20const\n10402:GrGLProgramDataManager::set2iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n10403:GrGLProgramDataManager::set2i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\29\\20const\n10404:GrGLProgramDataManager::set2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\29\\20const\n10405:GrGLProgramDataManager::set1iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n10406:GrGLProgramDataManager::set1i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\29\\20const\n10407:GrGLProgramDataManager::set1fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n10408:GrGLProgramDataManager::set1f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\29\\20const\n10409:GrGLProgramBuilder::~GrGLProgramBuilder\\28\\29.1\n10410:GrGLProgramBuilder::varyingHandler\\28\\29\n10411:GrGLProgramBuilder::caps\\28\\29\\20const\n10412:GrGLProgram::~GrGLProgram\\28\\29.1\n10413:GrGLOpsRenderPass::~GrGLOpsRenderPass\\28\\29\n10414:GrGLOpsRenderPass::onSetScissorRect\\28SkIRect\\20const&\\29\n10415:GrGLOpsRenderPass::onEnd\\28\\29\n10416:GrGLOpsRenderPass::onDraw\\28int\\2c\\20int\\29\n10417:GrGLOpsRenderPass::onDrawInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10418:GrGLOpsRenderPass::onDrawIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n10419:GrGLOpsRenderPass::onDrawIndexed\\28int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20int\\29\n10420:GrGLOpsRenderPass::onDrawIndexedInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10421:GrGLOpsRenderPass::onDrawIndexedIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n10422:GrGLOpsRenderPass::onClear\\28GrScissorState\\20const&\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n10423:GrGLOpsRenderPass::onClearStencilClip\\28GrScissorState\\20const&\\2c\\20bool\\29\n10424:GrGLOpsRenderPass::onBindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29\n10425:GrGLOpsRenderPass::onBindPipeline\\28GrProgramInfo\\20const&\\2c\\20SkRect\\20const&\\29\n10426:GrGLOpsRenderPass::onBindBuffers\\28sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20GrPrimitiveRestart\\29\n10427:GrGLOpsRenderPass::onBegin\\28\\29\n10428:GrGLOpsRenderPass::inlineUpload\\28GrOpFlushState*\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\29\n10429:GrGLInterface::~GrGLInterface\\28\\29.1\n10430:GrGLInterface::~GrGLInterface\\28\\29\n10431:GrGLGpu::~GrGLGpu\\28\\29.1\n10432:GrGLGpu::xferBarrier\\28GrRenderTarget*\\2c\\20GrXferBarrierType\\29\n10433:GrGLGpu::wrapBackendSemaphore\\28GrBackendSemaphore\\20const&\\2c\\20GrSemaphoreWrapType\\2c\\20GrWrapOwnership\\29\n10434:GrGLGpu::willExecute\\28\\29\n10435:GrGLGpu::waitSemaphore\\28GrSemaphore*\\29\n10436:GrGLGpu::submit\\28GrOpsRenderPass*\\29\n10437:GrGLGpu::stagingBufferManager\\28\\29\n10438:GrGLGpu::refPipelineBuilder\\28\\29\n10439:GrGLGpu::prepareTextureForCrossContextUsage\\28GrTexture*\\29\n10440:GrGLGpu::precompileShader\\28SkData\\20const&\\2c\\20SkData\\20const&\\29\n10441:GrGLGpu::pipelineBuilder\\28\\29\n10442:GrGLGpu::onWritePixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20bool\\29\n10443:GrGLGpu::onWrapRenderableBackendTexture\\28GrBackendTexture\\20const&\\2c\\20int\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\29\n10444:GrGLGpu::onWrapCompressedBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\29\n10445:GrGLGpu::onWrapBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\29\n10446:GrGLGpu::onWrapBackendRenderTarget\\28GrBackendRenderTarget\\20const&\\29\n10447:GrGLGpu::onUpdateCompressedBackendTexture\\28GrBackendTexture\\20const&\\2c\\20sk_sp<skgpu::RefCntedCallback>\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n10448:GrGLGpu::onTransferPixelsTo\\28GrTexture*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n10449:GrGLGpu::onTransferPixelsFrom\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\29\n10450:GrGLGpu::onTransferFromBufferToBuffer\\28sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n10451:GrGLGpu::onSubmitToGpu\\28GrSyncCpu\\29\n10452:GrGLGpu::onResolveRenderTarget\\28GrRenderTarget*\\2c\\20SkIRect\\20const&\\29\n10453:GrGLGpu::onResetTextureBindings\\28\\29\n10454:GrGLGpu::onResetContext\\28unsigned\\20int\\29\n10455:GrGLGpu::onRegenerateMipMapLevels\\28GrTexture*\\29\n10456:GrGLGpu::onReadPixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20void*\\2c\\20unsigned\\20long\\29\n10457:GrGLGpu::onGetOpsRenderPass\\28GrRenderTarget*\\2c\\20bool\\2c\\20GrAttachment*\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\20const&\\2c\\20GrOpsRenderPass::LoadAndStoreInfo\\20const&\\2c\\20GrOpsRenderPass::StencilLoadAndStoreInfo\\20const&\\2c\\20skia_private::TArray<GrSurfaceProxy*\\2c\\20true>\\20const&\\2c\\20GrXferBarrierFlags\\29\n10458:GrGLGpu::onDumpJSON\\28SkJSONWriter*\\29\\20const\n10459:GrGLGpu::onCreateTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n10460:GrGLGpu::onCreateCompressedTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n10461:GrGLGpu::onCreateCompressedBackendTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\29\n10462:GrGLGpu::onCreateBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n10463:GrGLGpu::onCreateBackendTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n10464:GrGLGpu::onCopySurface\\28GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20SkFilterMode\\29\n10465:GrGLGpu::onClearBackendTexture\\28GrBackendTexture\\20const&\\2c\\20sk_sp<skgpu::RefCntedCallback>\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n10466:GrGLGpu::makeStencilAttachment\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\29\n10467:GrGLGpu::makeSemaphore\\28bool\\29\n10468:GrGLGpu::makeMSAAAttachment\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\29\n10469:GrGLGpu::insertSemaphore\\28GrSemaphore*\\29\n10470:GrGLGpu::getPreferredStencilFormat\\28GrBackendFormat\\20const&\\29\n10471:GrGLGpu::finishOutstandingGpuWork\\28\\29\n10472:GrGLGpu::disconnect\\28GrGpu::DisconnectType\\29\n10473:GrGLGpu::deleteBackendTexture\\28GrBackendTexture\\20const&\\29\n10474:GrGLGpu::compile\\28GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\29\n10475:GrGLGpu::checkFinishProcs\\28\\29\n10476:GrGLGpu::addFinishedProc\\28void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n10477:GrGLGpu::ProgramCache::~ProgramCache\\28\\29.1\n10478:GrGLGpu::ProgramCache::~ProgramCache\\28\\29\n10479:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29\n10480:GrGLFunction<void\\20\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10481:GrGLFunction<void\\20\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10482:GrGLFunction<void\\20\\28float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28float\\29\\29::'lambda'\\28void\\20const*\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20float\\29\n10483:GrGLFunction<void\\20\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29>::GrGLFunction\\28void\\20\\28*\\29\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\\29::'lambda'\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29::__invoke\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\n10484:GrGLFunction<void\\20\\28\\29>::GrGLFunction\\28void\\20\\28*\\29\\28\\29\\29::'lambda'\\28void\\20const*\\29::__invoke\\28void\\20const*\\29\n10485:GrGLFunction<unsigned\\20int\\20\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29>::GrGLFunction\\28unsigned\\20int\\20\\28*\\29\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\\29::'lambda'\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29::__invoke\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\n10486:GrGLFunction<unsigned\\20int\\20\\28\\29>::GrGLFunction\\28unsigned\\20int\\20\\28*\\29\\28\\29\\29::'lambda'\\28void\\20const*\\29::__invoke\\28void\\20const*\\29\n10487:GrGLCaps::~GrGLCaps\\28\\29.1\n10488:GrGLCaps::surfaceSupportsReadPixels\\28GrSurface\\20const*\\29\\20const\n10489:GrGLCaps::supportedWritePixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n10490:GrGLCaps::onSurfaceSupportsWritePixels\\28GrSurface\\20const*\\29\\20const\n10491:GrGLCaps::onSupportsDynamicMSAA\\28GrRenderTargetProxy\\20const*\\29\\20const\n10492:GrGLCaps::onSupportedReadPixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n10493:GrGLCaps::onIsWindowRectanglesSupportedForRT\\28GrBackendRenderTarget\\20const&\\29\\20const\n10494:GrGLCaps::onGetReadSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n10495:GrGLCaps::onGetDstSampleFlagsForProxy\\28GrRenderTargetProxy\\20const*\\29\\20const\n10496:GrGLCaps::onGetDefaultBackendFormat\\28GrColorType\\29\\20const\n10497:GrGLCaps::onDumpJSON\\28SkJSONWriter*\\29\\20const\n10498:GrGLCaps::onCanCopySurface\\28GrSurfaceProxy\\20const*\\2c\\20SkIRect\\20const&\\2c\\20GrSurfaceProxy\\20const*\\2c\\20SkIRect\\20const&\\29\\20const\n10499:GrGLCaps::onAreColorTypeAndFormatCompatible\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\29\\20const\n10500:GrGLCaps::onApplyOptionsOverrides\\28GrContextOptions\\20const&\\29\n10501:GrGLCaps::maxRenderTargetSampleCount\\28GrBackendFormat\\20const&\\29\\20const\n10502:GrGLCaps::makeDesc\\28GrRenderTarget*\\2c\\20GrProgramInfo\\20const&\\2c\\20GrCaps::ProgramDescOverrideFlags\\29\\20const\n10503:GrGLCaps::isFormatTexturable\\28GrBackendFormat\\20const&\\2c\\20GrTextureType\\29\\20const\n10504:GrGLCaps::isFormatSRGB\\28GrBackendFormat\\20const&\\29\\20const\n10505:GrGLCaps::isFormatRenderable\\28GrBackendFormat\\20const&\\2c\\20int\\29\\20const\n10506:GrGLCaps::isFormatCopyable\\28GrBackendFormat\\20const&\\29\\20const\n10507:GrGLCaps::isFormatAsColorTypeRenderable\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20int\\29\\20const\n10508:GrGLCaps::getWriteSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n10509:GrGLCaps::getRenderTargetSampleCount\\28int\\2c\\20GrBackendFormat\\20const&\\29\\20const\n10510:GrGLCaps::getDstCopyRestrictions\\28GrRenderTargetProxy\\20const*\\2c\\20GrColorType\\29\\20const\n10511:GrGLCaps::getBackendFormatFromCompressionType\\28SkTextureCompressionType\\29\\20const\n10512:GrGLCaps::computeFormatKey\\28GrBackendFormat\\20const&\\29\\20const\n10513:GrGLBuffer::~GrGLBuffer\\28\\29.1\n10514:GrGLBuffer::~GrGLBuffer\\28\\29\n10515:GrGLBuffer::setMemoryBacking\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\29\\20const\n10516:GrGLBuffer::onUpdateData\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n10517:GrGLBuffer::onUnmap\\28GrGpuBuffer::MapType\\29\n10518:GrGLBuffer::onSetLabel\\28\\29\n10519:GrGLBuffer::onRelease\\28\\29\n10520:GrGLBuffer::onMap\\28GrGpuBuffer::MapType\\29\n10521:GrGLBuffer::onClearToZero\\28\\29\n10522:GrGLBuffer::onAbandon\\28\\29\n10523:GrGLBackendTextureData::~GrGLBackendTextureData\\28\\29.1\n10524:GrGLBackendTextureData::~GrGLBackendTextureData\\28\\29\n10525:GrGLBackendTextureData::isSameTexture\\28GrBackendTextureData\\20const*\\29\\20const\n10526:GrGLBackendTextureData::isProtected\\28\\29\\20const\n10527:GrGLBackendTextureData::getBackendFormat\\28\\29\\20const\n10528:GrGLBackendTextureData::equal\\28GrBackendTextureData\\20const*\\29\\20const\n10529:GrGLBackendTextureData::copyTo\\28SkAnySubclass<GrBackendTextureData\\2c\\20160ul>&\\29\\20const\n10530:GrGLBackendRenderTargetData::isProtected\\28\\29\\20const\n10531:GrGLBackendRenderTargetData::getBackendFormat\\28\\29\\20const\n10532:GrGLBackendRenderTargetData::equal\\28GrBackendRenderTargetData\\20const*\\29\\20const\n10533:GrGLBackendRenderTargetData::copyTo\\28SkAnySubclass<GrBackendRenderTargetData\\2c\\20160ul>&\\29\\20const\n10534:GrGLBackendFormatData::toString\\28\\29\\20const\n10535:GrGLBackendFormatData::stencilBits\\28\\29\\20const\n10536:GrGLBackendFormatData::equal\\28GrBackendFormatData\\20const*\\29\\20const\n10537:GrGLBackendFormatData::desc\\28\\29\\20const\n10538:GrGLBackendFormatData::copyTo\\28SkAnySubclass<GrBackendFormatData\\2c\\2064ul>&\\29\\20const\n10539:GrGLBackendFormatData::compressionType\\28\\29\\20const\n10540:GrGLBackendFormatData::channelMask\\28\\29\\20const\n10541:GrGLBackendFormatData::bytesPerBlock\\28\\29\\20const\n10542:GrGLAttachment::~GrGLAttachment\\28\\29\n10543:GrGLAttachment::setMemoryBacking\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\29\\20const\n10544:GrGLAttachment::onSetLabel\\28\\29\n10545:GrGLAttachment::onRelease\\28\\29\n10546:GrGLAttachment::onAbandon\\28\\29\n10547:GrGLAttachment::backendFormat\\28\\29\\20const\n10548:GrFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10549:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10550:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n10551:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10552:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10553:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::name\\28\\29\\20const\n10554:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10555:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::clone\\28\\29\\20const\n10556:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10557:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::onMakeProgramImpl\\28\\29\\20const\n10558:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::name\\28\\29\\20const\n10559:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::clone\\28\\29\\20const\n10560:GrFragmentProcessor::ProgramImpl::~ProgramImpl\\28\\29\n10561:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10562:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n10563:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::name\\28\\29\\20const\n10564:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::clone\\28\\29\\20const\n10565:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10566:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::onMakeProgramImpl\\28\\29\\20const\n10567:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::name\\28\\29\\20const\n10568:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10569:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::clone\\28\\29\\20const\n10570:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10571:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::onMakeProgramImpl\\28\\29\\20const\n10572:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::name\\28\\29\\20const\n10573:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10574:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::clone\\28\\29\\20const\n10575:GrFixedClip::~GrFixedClip\\28\\29.1\n10576:GrFixedClip::~GrFixedClip\\28\\29\n10577:GrExternalTextureGenerator::onGenerateTexture\\28GrRecordingContext*\\2c\\20SkImageInfo\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n10578:GrEagerDynamicVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n10579:GrDynamicAtlas::~GrDynamicAtlas\\28\\29.1\n10580:GrDynamicAtlas::~GrDynamicAtlas\\28\\29\n10581:GrDrawOp::usesStencil\\28\\29\\20const\n10582:GrDrawOp::usesMSAA\\28\\29\\20const\n10583:GrDrawOp::fixedFunctionFlags\\28\\29\\20const\n10584:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\\28\\29.1\n10585:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\\28\\29\n10586:GrDistanceFieldPathGeoProc::onTextureSampler\\28int\\29\\20const\n10587:GrDistanceFieldPathGeoProc::name\\28\\29\\20const\n10588:GrDistanceFieldPathGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10589:GrDistanceFieldPathGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10590:GrDistanceFieldPathGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10591:GrDistanceFieldPathGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10592:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\\28\\29.1\n10593:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\\28\\29\n10594:GrDistanceFieldLCDTextGeoProc::name\\28\\29\\20const\n10595:GrDistanceFieldLCDTextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10596:GrDistanceFieldLCDTextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10597:GrDistanceFieldLCDTextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10598:GrDistanceFieldLCDTextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10599:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29.1\n10600:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29\n10601:GrDistanceFieldA8TextGeoProc::name\\28\\29\\20const\n10602:GrDistanceFieldA8TextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10603:GrDistanceFieldA8TextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10604:GrDistanceFieldA8TextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10605:GrDistanceFieldA8TextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10606:GrDisableColorXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10607:GrDisableColorXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10608:GrDirectContext::~GrDirectContext\\28\\29.1\n10609:GrDirectContext::releaseResourcesAndAbandonContext\\28\\29\n10610:GrDirectContext::init\\28\\29\n10611:GrDirectContext::abandoned\\28\\29\n10612:GrDirectContext::abandonContext\\28\\29\n10613:GrDeferredProxyUploader::~GrDeferredProxyUploader\\28\\29.1\n10614:GrDeferredProxyUploader::~GrDeferredProxyUploader\\28\\29\n10615:GrCpuVertexAllocator::~GrCpuVertexAllocator\\28\\29.1\n10616:GrCpuVertexAllocator::~GrCpuVertexAllocator\\28\\29\n10617:GrCpuVertexAllocator::unlock\\28int\\29\n10618:GrCpuVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n10619:GrCpuBuffer::unref\\28\\29\\20const\n10620:GrCoverageSetOpXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10621:GrCoverageSetOpXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10622:GrCopyRenderTask::~GrCopyRenderTask\\28\\29.1\n10623:GrCopyRenderTask::onMakeSkippable\\28\\29\n10624:GrCopyRenderTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n10625:GrCopyRenderTask::onExecute\\28GrOpFlushState*\\29\n10626:GrCopyRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n10627:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10628:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10629:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const\n10630:GrConvexPolyEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10631:GrConvexPolyEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10632:GrConvexPolyEffect::name\\28\\29\\20const\n10633:GrConvexPolyEffect::clone\\28\\29\\20const\n10634:GrContext_Base::~GrContext_Base\\28\\29.1\n10635:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\\28\\29.1\n10636:GrContextThreadSafeProxy::isValidCharacterizationForVulkan\\28sk_sp<GrCaps\\20const>\\2c\\20bool\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20bool\\2c\\20bool\\29\n10637:GrConicEffect::name\\28\\29\\20const\n10638:GrConicEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10639:GrConicEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10640:GrConicEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10641:GrConicEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10642:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29.1\n10643:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29\n10644:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10645:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10646:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const\n10647:GrColorSpaceXformEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10648:GrColorSpaceXformEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10649:GrColorSpaceXformEffect::name\\28\\29\\20const\n10650:GrColorSpaceXformEffect::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10651:GrColorSpaceXformEffect::clone\\28\\29\\20const\n10652:GrCaps::~GrCaps\\28\\29\n10653:GrCaps::getDstCopyRestrictions\\28GrRenderTargetProxy\\20const*\\2c\\20GrColorType\\29\\20const\n10654:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\\28\\29.1\n10655:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\\28\\29\n10656:GrBitmapTextGeoProc::onTextureSampler\\28int\\29\\20const\n10657:GrBitmapTextGeoProc::name\\28\\29\\20const\n10658:GrBitmapTextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10659:GrBitmapTextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10660:GrBitmapTextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10661:GrBitmapTextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10662:GrBicubicEffect::onMakeProgramImpl\\28\\29\\20const\n10663:GrBicubicEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10664:GrBicubicEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10665:GrBicubicEffect::name\\28\\29\\20const\n10666:GrBicubicEffect::clone\\28\\29\\20const\n10667:GrBicubicEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10668:GrBicubicEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10669:GrAttachment::onGpuMemorySize\\28\\29\\20const\n10670:GrAttachment::getResourceType\\28\\29\\20const\n10671:GrAttachment::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n10672:GrAtlasManager::~GrAtlasManager\\28\\29.1\n10673:GrAtlasManager::preFlush\\28GrOnFlushResourceProvider*\\29\n10674:GrAtlasManager::postFlush\\28skgpu::AtlasToken\\29\n10675:GrAATriangulator::tessellate\\28GrTriangulator::VertexList\\20const&\\2c\\20GrTriangulator::Comparator\\20const&\\29\n10676:GetRectsForRange\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n10677:GetRectsForPlaceholders\\28skia::textlayout::Paragraph&\\29\n10678:GetLineMetrics\\28skia::textlayout::Paragraph&\\29\n10679:GetLineMetricsAt\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20long\\29\n10680:GetGlyphInfoAt\\28skia::textlayout::Paragraph&\\2c\\20unsigned\\20long\\29\n10681:GetCoeffsFast\n10682:GetCoeffsAlt\n10683:GetClosestGlyphInfoAtCoordinate\\28skia::textlayout::Paragraph&\\2c\\20float\\2c\\20float\\29\n10684:FontMgrRunIterator::~FontMgrRunIterator\\28\\29.1\n10685:FontMgrRunIterator::~FontMgrRunIterator\\28\\29\n10686:FontMgrRunIterator::currentFont\\28\\29\\20const\n10687:FontMgrRunIterator::consume\\28\\29\n10688:ExtractGreen_C\n10689:ExtractAlpha_C\n10690:ExtractAlphaRows\n10691:ExternalWebGLTexture::~ExternalWebGLTexture\\28\\29.1\n10692:ExternalWebGLTexture::~ExternalWebGLTexture\\28\\29\n10693:ExternalWebGLTexture::getBackendTexture\\28\\29\n10694:ExternalWebGLTexture::dispose\\28\\29\n10695:ExportAlphaRGBA4444\n10696:ExportAlpha\n10697:Equals\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n10698:End\n10699:EmitYUV\n10700:EmitSampledRGB\n10701:EmitRescaledYUV\n10702:EmitRescaledRGB\n10703:EmitRescaledAlphaYUV\n10704:EmitRescaledAlphaRGB\n10705:EmitFancyRGB\n10706:EmitAlphaYUV\n10707:EmitAlphaRGBA4444\n10708:EmitAlphaRGB\n10709:EllipticalRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10710:EllipticalRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10711:EllipticalRRectOp::name\\28\\29\\20const\n10712:EllipticalRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10713:EllipseOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10714:EllipseOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10715:EllipseOp::name\\28\\29\\20const\n10716:EllipseOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10717:EllipseGeometryProcessor::name\\28\\29\\20const\n10718:EllipseGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10719:EllipseGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10720:EllipseGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10721:Dual_Project\n10722:DitherCombine8x8_C\n10723:DispatchAlpha_C\n10724:DispatchAlphaToGreen_C\n10725:DisableColorXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n10726:DisableColorXP::name\\28\\29\\20const\n10727:DisableColorXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n10728:DisableColorXP::makeProgramImpl\\28\\29\\20const\n10729:Direct_Move_Y\n10730:Direct_Move_X\n10731:Direct_Move_Orig_Y\n10732:Direct_Move_Orig_X\n10733:Direct_Move_Orig\n10734:Direct_Move\n10735:DefaultGeoProc::name\\28\\29\\20const\n10736:DefaultGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10737:DefaultGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10738:DefaultGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10739:DefaultGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10740:DataFontLoader::loadSystemFonts\\28SkFontScanner\\20const*\\2c\\20skia_private::TArray<sk_sp<SkFontStyleSet_Custom>\\2c\\20true>*\\29\\20const\n10741:DIEllipseOp::~DIEllipseOp\\28\\29.1\n10742:DIEllipseOp::~DIEllipseOp\\28\\29\n10743:DIEllipseOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10744:DIEllipseOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10745:DIEllipseOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10746:DIEllipseOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10747:DIEllipseOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10748:DIEllipseOp::name\\28\\29\\20const\n10749:DIEllipseOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10750:DIEllipseGeometryProcessor::name\\28\\29\\20const\n10751:DIEllipseGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10752:DIEllipseGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10753:DIEllipseGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10754:DC8uv_C\n10755:DC8uvNoTop_C\n10756:DC8uvNoTopLeft_C\n10757:DC8uvNoLeft_C\n10758:DC4_C\n10759:DC16_C\n10760:DC16NoTop_C\n10761:DC16NoTopLeft_C\n10762:DC16NoLeft_C\n10763:CustomXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10764:CustomXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n10765:CustomXP::xferBarrierType\\28GrCaps\\20const&\\29\\20const\n10766:CustomXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n10767:CustomXP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10768:CustomXP::name\\28\\29\\20const\n10769:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n10770:CustomXP::makeProgramImpl\\28\\29\\20const\n10771:CustomTeardown\n10772:CustomSetup\n10773:CustomPut\n10774:Current_Ppem_Stretched\n10775:Current_Ppem\n10776:Cr_z_zcfree\n10777:Cr_z_zcalloc\n10778:CoverageSetOpXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n10779:CoverageSetOpXP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10780:CoverageSetOpXP::name\\28\\29\\20const\n10781:CoverageSetOpXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n10782:CoverageSetOpXP::makeProgramImpl\\28\\29\\20const\n10783:CopyPath\\28SkPath\\20const&\\29\n10784:ConvertRGB24ToY_C\n10785:ConvertBGR24ToY_C\n10786:ConvertARGBToY_C\n10787:ColorTableEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10788:ColorTableEffect::onMakeProgramImpl\\28\\29\\20const\n10789:ColorTableEffect::name\\28\\29\\20const\n10790:ColorTableEffect::clone\\28\\29\\20const\n10791:CircularRRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10792:CircularRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10793:CircularRRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10794:CircularRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10795:CircularRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10796:CircularRRectOp::name\\28\\29\\20const\n10797:CircularRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10798:CircleOp::~CircleOp\\28\\29.1\n10799:CircleOp::~CircleOp\\28\\29\n10800:CircleOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10801:CircleOp::programInfo\\28\\29\n10802:CircleOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10803:CircleOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10804:CircleOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10805:CircleOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10806:CircleOp::name\\28\\29\\20const\n10807:CircleOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10808:CircleGeometryProcessor::name\\28\\29\\20const\n10809:CircleGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10810:CircleGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10811:CircleGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10812:CanInterpolate\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n10813:ButtCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n10814:ButtCapDashedCircleOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10815:ButtCapDashedCircleOp::programInfo\\28\\29\n10816:ButtCapDashedCircleOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10817:ButtCapDashedCircleOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10818:ButtCapDashedCircleOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10819:ButtCapDashedCircleOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10820:ButtCapDashedCircleOp::name\\28\\29\\20const\n10821:ButtCapDashedCircleOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10822:ButtCapDashedCircleGeometryProcessor::name\\28\\29\\20const\n10823:ButtCapDashedCircleGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10824:ButtCapDashedCircleGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10825:ButtCapDashedCircleGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10826:BluntJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n10827:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10828:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10829:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n10830:BlendFragmentProcessor::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n10831:BlendFragmentProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10832:BlendFragmentProcessor::name\\28\\29\\20const\n10833:BlendFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n10834:BlendFragmentProcessor::clone\\28\\29\\20const\n10835:AutoCleanPng::infoCallback\\28unsigned\\20long\\29\n10836:AutoCleanPng::decodeBounds\\28\\29\n10837:ApplyTrim\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n10838:ApplyTransform\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10839:ApplyStroke\\28SkPath&\\2c\\20StrokeOpts\\29\n10840:ApplySimplify\\28SkPath&\\29\n10841:ApplyRewind\\28SkPath&\\29\n10842:ApplyReset\\28SkPath&\\29\n10843:ApplyRQuadTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10844:ApplyRMoveTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n10845:ApplyRLineTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n10846:ApplyRCubicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10847:ApplyRConicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10848:ApplyRArcToArcSize\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n10849:ApplyQuadTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10850:ApplyPathOp\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20SkPathOp\\29\n10851:ApplyMoveTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n10852:ApplyLineTo\\28SkPath&\\2c\\20float\\2c\\20float\\29\n10853:ApplyDash\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10854:ApplyCubicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10855:ApplyConicTo\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10856:ApplyClose\\28SkPath&\\29\n10857:ApplyArcToTangent\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n10858:ApplyArcToArcSize\\28SkPath&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\2c\\20float\\2c\\20float\\29\n10859:ApplyAlphaMultiply_C\n10860:ApplyAlphaMultiply_16b_C\n10861:ApplyAddPath\\28SkPath&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n10862:AlphaReplace_C\n10863:$_3::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\29\n10864:$_2::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\29\n10865:$_1::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\29\n10866:$_0::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\29\n"
  },
  {
    "path": "legacy/dist/canvaskit/skwasm.js",
    "content": "\nvar skwasm = (() => {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n  return (\nfunction(moduleArg = {}) {\n\nfunction aa(){d.buffer!=h.buffer&&l();return h}function p(){d.buffer!=h.buffer&&l();return ca}function q(){d.buffer!=h.buffer&&l();return da}function t(){d.buffer!=h.buffer&&l();return ea}function v(){d.buffer!=h.buffer&&l();return fa}function ha(){d.buffer!=h.buffer&&l();return ia}var w=moduleArg,ja,ka;w.ready=new Promise((a,b)=>{ja=a;ka=b});\nvar la=Object.assign({},w),ma=\"./this.program\",na=(a,b)=>{throw b;},oa=\"object\"==typeof window,pa=\"function\"==typeof importScripts,x=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,A=w.ENVIRONMENT_IS_PTHREAD||!1,C=\"\";function qa(a){return w.locateFile?w.locateFile(a,C):C+a}var ra,sa,ta;\nif(x){var fs=require(\"fs\"),ua=require(\"path\");C=pa?ua.dirname(C)+\"/\":__dirname+\"/\";ra=(b,c)=>{b=b.startsWith(\"file://\")?new URL(b):ua.normalize(b);return fs.readFileSync(b,c?void 0:\"utf8\")};ta=b=>{b=ra(b,!0);b.buffer||(b=new Uint8Array(b));return b};sa=(b,c,e,f=!0)=>{b=b.startsWith(\"file://\")?new URL(b):ua.normalize(b);fs.readFile(b,f?void 0:\"utf8\",(g,k)=>{g?e(g):c(f?k.buffer:k)})};!w.thisProgram&&1<process.argv.length&&(ma=process.argv[1].replace(/\\\\/g,\"/\"));process.argv.slice(2);na=(b,c)=>{process.exitCode=\nb;throw c;};w.inspect=()=>\"[Emscripten Module object]\";let a;try{a=require(\"worker_threads\")}catch(b){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),b;}global.Worker=a.Worker}else if(oa||pa)pa?C=self.location.href:\"undefined\"!=typeof document&&document.currentScript&&(C=document.currentScript.src),_scriptDir&&(C=_scriptDir),0!==C.indexOf(\"blob:\")?C=C.substr(0,C.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):C=\"\",x||(ra=a=>{var b=\nnew XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText},pa&&(ta=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}),sa=(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)});x&&\"undefined\"==typeof performance&&(global.performance=require(\"perf_hooks\").performance);\nvar va=console.log.bind(console),wa=console.error.bind(console);x&&(va=(...a)=>fs.writeSync(1,a.join(\" \")+\"\\n\"),wa=(...a)=>fs.writeSync(2,a.join(\" \")+\"\\n\"));var xa=w.print||va,D=w.printErr||wa;Object.assign(w,la);la=null;w.thisProgram&&(ma=w.thisProgram);w.quit&&(na=w.quit);var ya;w.wasmBinary&&(ya=w.wasmBinary);var noExitRuntime=w.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&za(\"no native wasm support detected\");var d,F,Aa,Ba=!1,Ca,h,ca,Da,Ea,da,ea,fa,ia;\nfunction l(){var a=d.buffer;w.HEAP8=h=new Int8Array(a);w.HEAP16=Da=new Int16Array(a);w.HEAP32=da=new Int32Array(a);w.HEAPU8=ca=new Uint8Array(a);w.HEAPU16=Ea=new Uint16Array(a);w.HEAPU32=ea=new Uint32Array(a);w.HEAPF32=fa=new Float32Array(a);w.HEAPF64=ia=new Float64Array(a)}var Fa=w.INITIAL_MEMORY||16777216;65536<=Fa||za(\"INITIAL_MEMORY should be larger than STACK_SIZE, was \"+Fa+\"! (STACK_SIZE=65536)\");\nif(A)d=w.wasmMemory;else if(w.wasmMemory)d=w.wasmMemory;else if(d=new WebAssembly.Memory({initial:Fa/65536,maximum:32768,shared:!0}),!(d.buffer instanceof SharedArrayBuffer))throw D(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\"),x&&D(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)\"),\nError(\"bad memory\");l();Fa=d.buffer.byteLength;var G,Ga=[],Ha=[],Ia=[],Ja=0;function Ka(){return noExitRuntime||0<Ja}var H=0,La=null,Ma=null;function Na(){H++;w.monitorRunDependencies&&w.monitorRunDependencies(H)}function Oa(){H--;w.monitorRunDependencies&&w.monitorRunDependencies(H);if(0==H&&(null!==La&&(clearInterval(La),La=null),Ma)){var a=Ma;Ma=null;a()}}\nfunction za(a){if(w.onAbort)w.onAbort(a);a=\"Aborted(\"+a+\")\";D(a);Ba=!0;Ca=1;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ka(a);throw a;}function Pa(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var Qa;Qa=\"skwasm.wasm\";Pa(Qa)||(Qa=qa(Qa));function Ra(a){if(a==Qa&&ya)return new Uint8Array(ya);if(ta)return ta(a);throw\"both async and sync fetching of the wasm failed\";}\nfunction Sa(a){if(!ya&&(oa||pa)){if(\"function\"==typeof fetch&&!a.startsWith(\"file://\"))return fetch(a,{credentials:\"same-origin\"}).then(b=>{if(!b.ok)throw\"failed to load wasm binary file at '\"+a+\"'\";return b.arrayBuffer()}).catch(()=>Ra(a));if(sa)return new Promise((b,c)=>{sa(a,e=>b(new Uint8Array(e)),c)})}return Promise.resolve().then(()=>Ra(a))}function Ta(a,b,c){return Sa(a).then(e=>WebAssembly.instantiate(e,b)).then(e=>e).then(c,e=>{D(\"failed to asynchronously prepare wasm: \"+e);za(e)})}\nfunction Ua(a,b){var c=Qa;return ya||\"function\"!=typeof WebAssembly.instantiateStreaming||Pa(c)||c.startsWith(\"file://\")||x||\"function\"!=typeof fetch?Ta(c,a,b):fetch(c,{credentials:\"same-origin\"}).then(e=>WebAssembly.instantiateStreaming(e,a).then(b,function(f){D(\"wasm streaming compile failed: \"+f);D(\"falling back to ArrayBuffer instantiation\");return Ta(c,a,b)}))}function Va(a){this.name=\"ExitStatus\";this.message=`Program terminated with exit(${a})`;this.status=a}\nfunction Wa(a){a.terminate();a.onmessage=()=>{}}function Xa(a){(a=I.g[a])||za();I.Aa(a)}function Ya(a){var b=I.ma();if(!b)return 6;I.u.push(b);I.g[a.m]=b;b.m=a.m;var c={cmd:\"run\",start_routine:a.Ba,arg:a.ka,pthread_ptr:a.m};c.D=a.D;c.S=a.S;x&&b.unref();b.postMessage(c,a.Ha);return 0}\nvar Za=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,$a=(a,b,c)=>{var e=b+c;for(c=b;a[c]&&!(c>=e);)++c;if(16<c-b&&a.buffer&&Za)return Za.decode(a.slice(b,c));for(e=\"\";b<c;){var f=a[b++];if(f&128){var g=a[b++]&63;if(192==(f&224))e+=String.fromCharCode((f&31)<<6|g);else{var k=a[b++]&63;f=224==(f&240)?(f&15)<<12|g<<6|k:(f&7)<<18|g<<12|k<<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},\nJ=(a,b)=>a?$a(p(),a,b):\"\";function ab(a){if(A)return K(1,1,a);Ca=a;if(!Ka()){I.Ca();if(w.onExit)w.onExit(a);Ba=!0}na(a,new Va(a))}\nvar cb=a=>{Ca=a;if(A)throw bb(a),\"unwind\";ab(a)},I={o:[],u:[],ha:[],g:{},R:function(){A?I.ra():I.qa()},qa:function(){for(var a=1;a--;)I.X();Ga.unshift(()=>{Na();I.ta(()=>Oa())})},ra:function(){I.receiveObjectTransfer=I.za;I.threadInitTLS=I.ga;I.setExitStatus=I.fa;noExitRuntime=!1},fa:function(a){Ca=a},Oa:[\"$terminateWorker\"],Ca:function(){for(var a of I.u)Wa(a);for(a of I.o)Wa(a);I.o=[];I.u=[];I.g=[]},Aa:function(a){var b=a.m;delete I.g[b];I.o.push(a);I.u.splice(I.u.indexOf(a),1);a.m=0;db(b)},za:function(a){\"undefined\"!=\ntypeof eb&&(Object.assign(L,a.S),!w.canvas&&a.D&&L[a.D]&&(w.canvas=L[a.D].F,w.canvas.id=a.D))},ga:function(){I.ha.forEach(a=>a())},ba:a=>new Promise(b=>{a.onmessage=g=>{g=g.data;var k=g.cmd;if(g.targetThread&&g.targetThread!=fb()){var n=I.g[g.Na];n?n.postMessage(g,g.transferList):D('Internal error! Worker sent a message \"'+k+'\" to target pthread '+g.targetThread+\", but that thread no longer exists!\")}else if(\"checkMailbox\"===k)gb();else if(\"spawnThread\"===k)Ya(g);else if(\"cleanupThread\"===k)Xa(g.thread);\nelse if(\"killThread\"===k)g=g.thread,k=I.g[g],delete I.g[g],Wa(k),db(g),I.u.splice(I.u.indexOf(k),1),k.m=0;else if(\"cancelThread\"===k)I.g[g.thread].postMessage({cmd:\"cancel\"});else if(\"loaded\"===k)a.loaded=!0,x&&!a.m&&a.unref(),b(a);else if(\"alert\"===k)alert(\"Thread \"+g.threadId+\": \"+g.text);else if(\"setimmediate\"===g.target)a.postMessage(g);else if(\"callHandler\"===k)w[g.handler](...g.args);else k&&D(\"worker sent an unknown command \"+k)};a.onerror=g=>{D(\"worker sent an error! \"+g.filename+\":\"+g.lineno+\n\": \"+g.message);throw g;};x&&(a.on(\"message\",function(g){a.onmessage({data:g})}),a.on(\"error\",function(g){a.onerror(g)}));var c=[],e=[\"onExit\",\"onAbort\",\"print\",\"printErr\"],f;for(f of e)w.hasOwnProperty(f)&&c.push(f);a.postMessage({cmd:\"load\",handlers:c,urlOrBlob:w.mainScriptUrlOrBlob||_scriptDir,wasmMemory:d,wasmModule:Aa})}),ta:function(a){if(A)return a();Promise.all(I.o.map(I.ba)).then(a)},X:function(){var a=qa(\"skwasm.worker.js\");a=new Worker(a);I.o.push(a)},ma:function(){0==I.o.length&&(I.X(),\nI.ba(I.o[0]));return I.o.pop()}};w.PThread=I;var hb=a=>{for(;0<a.length;)a.shift()(w)};w.establishStackSpace=function(){var a=fb(),b=q()[a+52>>2];a=q()[a+56>>2];ib(b,b-a);M(b)};function bb(a){if(A)return K(2,0,a);cb(a)}w.invokeEntryPoint=function(a,b){a=G.get(a)(b);Ka()?I.fa(a):jb(a)};function kb(a){this.C=a-24;this.ua=function(b){t()[this.C+4>>2]=b};this.sa=function(b){t()[this.C+8>>2]=b};this.R=function(b,c){this.na();this.ua(b);this.sa(c)};this.na=function(){t()[this.C+16>>2]=0}}var lb=0,mb=0;\nfunction nb(a,b,c,e){return A?K(3,1,a,b,c,e):ob(a,b,c,e)}\nfunction ob(a,b,c,e){if(\"undefined\"==typeof SharedArrayBuffer)return D(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var f=[],g=0,k=b?t()[b+40>>2]:0;4294967295==k?k=\"#canvas\":k&&(k=J(k).trim());k&&(k=k.split(\",\"));var n={},r=w.canvas?w.canvas.id:\"\",u;for(u in k){var y=k[u].trim();try{if(\"#canvas\"==y){if(!w.canvas){D('pthread_create: could not find canvas with ID \"'+y+'\" to transfer to thread!');g=28;break}y=w.canvas.id}if(L[y]){var V=L[y];L[y]=null;w.canvas instanceof\nOffscreenCanvas&&y===w.canvas.id&&(w.canvas=null)}else if(!A){var E=w.canvas&&w.canvas.id===y?w.canvas:document.querySelector(y);if(!E){D('pthread_create: could not find canvas with ID \"'+y+'\" to transfer to thread!');g=28;break}if(E.Y){D('pthread_create: cannot transfer canvas with ID \"'+y+'\" to thread, since the current thread does not have control over it!');g=63;break}if(E.transferControlToOffscreen)E.h||(E.h=pb(12),q()[E.h>>2]=E.width,q()[E.h+4>>2]=E.height,q()[E.h+8>>2]=0),V={F:E.transferControlToOffscreen(),\nh:E.h,id:E.id},E.Y=!0;else return D('pthread_create: cannot transfer control of canvas \"'+y+'\" to pthread, because current browser does not support OffscreenCanvas!'),D(\"pthread_create: Build with -sOFFSCREEN_FRAMEBUFFER to enable fallback proxying of GL commands from pthread to main thread.\"),52}V&&(f.push(V.F),n[V.id]=V)}catch(m){return D('pthread_create: failed to transfer control of canvas \"'+y+'\" to OffscreenCanvas! Error: '+m),28}}if(A&&(0===f.length||g))return nb(a,b,c,e);if(g)return g;for(E of Object.values(n))q()[E.h+\n8>>2]=a;a={Ba:c,m:a,ka:e,D:r,S:n,Ha:f};return A?(a.Ja=\"spawnThread\",postMessage(a,f),0):Ya(a)}function qb(a,b,c){return A?K(4,1,a,b,c):0}function rb(a,b){if(A)return K(5,1,a,b)}function sb(a,b,c){return A?K(6,1,a,b,c):0}function tb(a,b,c,e){if(A)return K(7,1,a,b,c,e)}var ub=a=>{if(!Ba)try{if(a(),!Ka())try{A?jb(Ca):cb(Ca)}catch(b){b instanceof Va||\"unwind\"==b||na(1,b)}}catch(b){b instanceof Va||\"unwind\"==b||na(1,b)}};\nfunction vb(a){\"function\"===typeof Atomics.Ia&&(Atomics.Ia(q(),a>>2,a).value.then(gb),a+=128,Atomics.store(q(),a>>2,1))}w.__emscripten_thread_mailbox_await=vb;function gb(){var a=fb();a&&(vb(a),ub(()=>wb()))}w.checkMailbox=gb;\nvar xb=a=>{var b=N();a=a();M(b);return a},yb=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},zb=(a,b,c,e)=>{if(!(0<e))return 0;var f=c;e=c+e-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var n=a.charCodeAt(++g);k=65536+((k&1023)<<10)|n&1023}if(127>=k){if(c>=e)break;b[c++]=k}else{if(2047>=k){if(c+1>=e)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=e)break;b[c++]=224|k>>12}else{if(c+3>=e)break;\nb[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-f},Ab=a=>{var b=yb(a)+1,c=pb(b);c&&zb(a,p(),c,b);return c};function Bb(a,b,c,e){b=b?J(b):\"\";xb(function(){var f=Cb(12),g=0;b&&(g=Ab(b));q()[f>>2]=g;q()[f+4>>2]=c;q()[f+8>>2]=e;Db(a,654311424,0,g,f)})}\nfunction Eb(a){var b=a.getExtension(\"ANGLE_instanced_arrays\");b&&(a.vertexAttribDivisor=function(c,e){b.vertexAttribDivisorANGLE(c,e)},a.drawArraysInstanced=function(c,e,f,g){b.drawArraysInstancedANGLE(c,e,f,g)},a.drawElementsInstanced=function(c,e,f,g,k){b.drawElementsInstancedANGLE(c,e,f,g,k)})}\nfunction Fb(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 Gb(a){var b=a.getExtension(\"WEBGL_draw_buffers\");b&&(a.drawBuffers=function(c,e){b.drawBuffersWEBGL(c,e)})}\nfunction Hb(a){a.Z=a.getExtension(\"WEBGL_draw_instanced_base_vertex_base_instance\")}function Ib(a){a.ea=a.getExtension(\"WEBGL_multi_draw_instanced_base_vertex_base_instance\")}function Jb(a){a.Ma=a.getExtension(\"WEBGL_multi_draw\")}var Kb=1,Lb=[],O=[],Mb=[],Nb=[],P=[],Q=[],Ob=[],Pb={},L={},R=[],Qb=[],Rb={},Sb={},Tb=4;function S(a){Ub||(Ub=a)}function Vb(a){for(var b=Kb++,c=a.length;c<b;c++)a[c]=null;return b}\nfunction Wb(a){var b={da:2,alpha:!0,depth:!0,stencil:!0,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:\"default\",failIfMajorPerformanceCaveat:!1,aa:!0};a.C||(a.C=a.getContext,a.getContext=function(e,f){f=a.C(e,f);return\"webgl\"==e==f instanceof WebGLRenderingContext?f:null});var c=1<b.da?a.getContext(\"webgl2\",b):a.getContext(\"webgl\",b);return c?Xb(c,b):0}\nfunction Xb(a,b){var c=pb(8);q()[c+4>>2]=fb();var e={handle:c,attributes:b,version:b.da,s:a};a.canvas&&(a.canvas.I=e);Pb[c]=e;(\"undefined\"==typeof b.aa||b.aa)&&Yb(e);return c}\nfunction Yb(a){a||(a=T);if(!a.pa){a.pa=!0;var b=a.s;Eb(b);Fb(b);Gb(b);Hb(b);Ib(b);2<=a.version&&(b.$=b.getExtension(\"EXT_disjoint_timer_query_webgl2\"));if(2>a.version||!b.$)b.$=b.getExtension(\"EXT_disjoint_timer_query\");Jb(b);(b.getSupportedExtensions()||[]).forEach(function(c){c.includes(\"lose_context\")||c.includes(\"debug\")||b.getExtension(c)})}}var eb={},Ub,T;\nfunction Zb(a){a=2<a?J(a):a;return L[a.substr(1)]||\"canvas\"==a&&Object.keys(L)[0]||\"undefined\"!=typeof document&&document.querySelector(a)}function $b(a,b,c){var e=Zb(a);if(!e)return-4;e.h&&(q()[e.h>>2]=b,q()[e.h+4>>2]=c);if(e.F||!e.Y)e.F&&(e=e.F),a=!1,e.I&&e.I.s&&(a=e.I.s.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===e.width&&a[3]===e.height),e.width=b,e.height=c,a&&e.I.s.viewport(0,0,b,c);else return e.h?(e=q()[e.h+8>>2],Bb(e,a,b,c),1):-4;return 0}\nfunction ac(a,b,c){return A?K(8,1,a,b,c):$b(a,b,c)}function bc(a,b,c,e,f,g,k,n){return A?K(9,1,a,b,c,e,f,g,k,n):-52}function cc(a,b,c,e,f,g,k){if(A)return K(10,1,a,b,c,e,f,g,k)}function dc(a,b){U.bindFramebuffer(a,Mb[b])}function ec(a){U.clear(a)}function fc(a,b,c,e){U.clearColor(a,b,c,e)}function gc(a){U.clearStencil(a)}\nfunction hc(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&S(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=U.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>T.version){S(1282);return}e=2*(U.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>T.version){S(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=U.getParameter(a),typeof f){case \"number\":e=f;break;case \"boolean\":e=f?1:0;break;case \"string\":S(1280);return;case \"object\":if(null===\nf)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:S(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:q()[b+4*a>>2]=f[a];break;case 2:v()[b+4*a>>2]=f[a];break;case 4:aa()[b+a>>0]=f[a]?1:0}return}try{e=f.name|\n0}catch(g){S(1280);D(\"GL_INVALID_ENUM in glGet\"+c+\"v: Unknown object returned from WebGL getParameter(\"+a+\")! (error: \"+g+\")\");return}}break;default:S(1280);D(\"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;t()[b>>2]=c;t()[b+4>>2]=(c-t()[b>>2])/4294967296;break;case 0:q()[b>>2]=e;break;case 2:v()[b>>2]=e;break;case 4:aa()[b>>0]=e?1:0}}else S(1281)}function ic(a,b){hc(a,b,0)}\nfunction K(a,b){var c=arguments.length-2,e=arguments;return xb(()=>{for(var f=Cb(8*c),g=f>>3,k=0;k<c;k++){var n=e[2+k];ha()[g+k]=n}return jc(a,c,f,b)})}\nvar kc=[],lc={},nc=()=>{if(!mc){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\",_:ma||\"./this.program\"},b;for(b in lc)void 0===lc[b]?delete a[b]:a[b]=lc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);mc=c}return mc},mc;\nfunction oc(a,b){if(A)return K(11,1,a,b);var c=0;nc().forEach(function(e,f){var g=b+c;f=t()[a+4*f>>2]=g;for(g=0;g<e.length;++g)aa()[f++>>0]=e.charCodeAt(g);aa()[f>>0]=0;c+=e.length+1});return 0}function pc(a,b){if(A)return K(12,1,a,b);var c=nc();t()[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});t()[b>>2]=e;return 0}function qc(a){return A?K(13,1,a):52}function rc(a,b,c,e,f,g){return A?K(14,1,a,b,c,e,f,g):52}function sc(a,b,c,e){return A?K(15,1,a,b,c,e):52}\nfunction tc(a,b,c,e,f){return A?K(16,1,a,b,c,e,f):70}var uc=[null,[],[]];function vc(a,b,c,e){if(A)return K(17,1,a,b,c,e);for(var f=0,g=0;g<c;g++){var k=t()[b>>2],n=t()[b+4>>2];b+=8;for(var r=0;r<n;r++){var u=p()[k+r],y=uc[a];0===u||10===u?((1===a?xa:D)($a(y,0)),y.length=0):y.push(u)}f+=n}t()[e>>2]=f;return 0}function wc(a){U.bindVertexArray(Ob[a])}function xc(a,b){for(var c=0;c<a;c++){var e=q()[b+4*c>>2];U.deleteVertexArray(Ob[e]);Ob[e]=null}}var yc=[];\nfunction zc(a,b,c,e){U.drawElements(a,b,c,e)}function Ac(a,b,c,e){for(var f=0;f<a;f++){var g=U[c](),k=g&&Vb(e);g?(g.name=k,e[k]=g):S(1282);q()[b+4*f>>2]=k}}function Bc(a,b){Ac(a,b,\"createVertexArray\",Ob)}function Cc(a){return\"]\"==a.slice(-1)&&a.lastIndexOf(\"[\")}function Dc(a){a-=5120;0==a?a=aa():1==a?a=p():2==a?(d.buffer!=h.buffer&&l(),a=Da):4==a?a=q():6==a?a=v():5==a||28922==a||28520==a||30779==a||30782==a?a=t():(d.buffer!=h.buffer&&l(),a=Ea);return a}\nfunction Ec(a,b,c,e,f){a=Dc(a);var g=31-Math.clz32(a.BYTES_PER_ELEMENT),k=Tb;return a.subarray(f>>g,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<<g)+k-1&-k)>>g)}function W(a){var b=U.la;if(b){var c=b.H[a];\"number\"==typeof c&&(b.H[a]=c=U.getUniformLocation(b,b.ia[a]+(0<c?\"[\"+c+\"]\":\"\")));return c}S(1282)}var X=[],Fc=[];function Gc(){}function Hc(){}function Ic(){}function Jc(){}function Lc(){}function Mc(){}function Nc(){}function Oc(){}function Pc(){}\nfunction Qc(){}function Rc(){}var Sc=a=>0===a%4&&(0!==a%100||0===a%400),Tc=[31,29,31,30,31,30,31,31,30,31,30,31],Uc=[31,28,31,30,31,30,31,31,30,31,30,31];function Vc(a){var b=Array(yb(a)+1);zb(a,b,0,b.length);return b}\nvar Wc=(a,b)=>{aa().set(a,b)},Xc=(a,b,c,e)=>{function f(m,z,B){for(m=\"number\"==typeof m?m.toString():m||\"\";m.length<z;)m=B[0]+m;return m}function g(m,z){return f(m,z,\"0\")}function k(m,z){function B(Kc){return 0>Kc?-1:0<Kc?1:0}var ba;0===(ba=B(m.getFullYear()-z.getFullYear()))&&0===(ba=B(m.getMonth()-z.getMonth()))&&(ba=B(m.getDate()-z.getDate()));return ba}function n(m){switch(m.getDay()){case 0:return new Date(m.getFullYear()-1,11,29);case 1:return m;case 2:return new Date(m.getFullYear(),0,3);case 3:return new Date(m.getFullYear(),\n0,2);case 4:return new Date(m.getFullYear(),0,1);case 5:return new Date(m.getFullYear()-1,11,31);case 6:return new Date(m.getFullYear()-1,11,30)}}function r(m){var z=m.v;for(m=new Date((new Date(m.A+1900,0,1)).getTime());0<z;){var B=m.getMonth(),ba=(Sc(m.getFullYear())?Tc:Uc)[B];if(z>ba-m.getDate())z-=ba-m.getDate()+1,m.setDate(1),11>B?m.setMonth(B+1):(m.setMonth(0),m.setFullYear(m.getFullYear()+1));else{m.setDate(m.getDate()+z);break}}B=new Date(m.getFullYear()+1,0,4);z=n(new Date(m.getFullYear(),\n0,4));B=n(B);return 0>=k(z,m)?0>=k(B,m)?m.getFullYear()+1:m.getFullYear():m.getFullYear()-1}var u=q()[e+40>>2];e={Fa:q()[e>>2],Ea:q()[e+4>>2],M:q()[e+8>>2],V:q()[e+12>>2],N:q()[e+16>>2],A:q()[e+20>>2],l:q()[e+24>>2],v:q()[e+28>>2],Pa:q()[e+32>>2],Da:q()[e+36>>2],Ga:u?J(u):\"\"};c=J(c);u={\"%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\",\n\"%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 u)c=c.replace(new RegExp(y,\"g\"),u[y]);var V=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),E=\"January February March April May June July August September October November December\".split(\" \");u={\"%a\":m=>V[m.l].substring(0,3),\"%A\":m=>V[m.l],\"%b\":m=>E[m.N].substring(0,3),\"%B\":m=>E[m.N],\"%C\":m=>g((m.A+1900)/100|\n0,2),\"%d\":m=>g(m.V,2),\"%e\":m=>f(m.V,2,\" \"),\"%g\":m=>r(m).toString().substring(2),\"%G\":m=>r(m),\"%H\":m=>g(m.M,2),\"%I\":m=>{m=m.M;0==m?m=12:12<m&&(m-=12);return g(m,2)},\"%j\":m=>{for(var z=0,B=0;B<=m.N-1;z+=(Sc(m.A+1900)?Tc:Uc)[B++]);return g(m.V+z,3)},\"%m\":m=>g(m.N+1,2),\"%M\":m=>g(m.Ea,2),\"%n\":()=>\"\\n\",\"%p\":m=>0<=m.M&&12>m.M?\"AM\":\"PM\",\"%S\":m=>g(m.Fa,2),\"%t\":()=>\"\\t\",\"%u\":m=>m.l||7,\"%U\":m=>g(Math.floor((m.v+7-m.l)/7),2),\"%V\":m=>{var z=Math.floor((m.v+7-(m.l+6)%7)/7);2>=(m.l+371-m.v-2)%7&&z++;if(z)53==z&&\n(B=(m.l+371-m.v)%7,4==B||3==B&&Sc(m.A)||(z=1));else{z=52;var B=(m.l+7-m.v-1)%7;(4==B||5==B&&Sc(m.A%400-1))&&z++}return g(z,2)},\"%w\":m=>m.l,\"%W\":m=>g(Math.floor((m.v+7-(m.l+6)%7)/7),2),\"%y\":m=>(m.A+1900).toString().substring(2),\"%Y\":m=>m.A+1900,\"%z\":m=>{m=m.Da;var z=0<=m;m=Math.abs(m)/60;return(z?\"+\":\"-\")+String(\"0000\"+(m/60*100+m%60)).slice(-4)},\"%Z\":m=>m.Ga,\"%%\":()=>\"%\"};c=c.replace(/%%/g,\"\\x00\\x00\");for(y in u)c.includes(y)&&(c=c.replace(new RegExp(y,\"g\"),u[y](e)));c=c.replace(/\\0\\0/g,\"%\");y=Vc(c);\nif(y.length>b)return 0;Wc(y,a);return y.length-1},Yc=void 0,Zc=[];I.R();for(var U,Y=0;32>Y;++Y)yc.push(Array(Y));var $c=new Float32Array(288);for(Y=0;288>Y;++Y)X[Y]=$c.subarray(0,Y+1);var ad=new Int32Array(288);for(Y=0;288>Y;++Y)Fc[Y]=ad.subarray(0,Y+1);\n(function(){const a=new Map,b=new Map;let c;Qc=function(e,f,g){I.g[e].postMessage({G:\"setAssociatedObject\",T:f,object:g},[g])};Mc=function(e){return b.get(e)};Rc=function(e){I.g[e].postMessage({G:\"syncTimeOrigin\",timeOrigin:performance.timeOrigin})};Nc=function(e){function f({data:g}){var k=g.G;if(k)switch(k){case \"syncTimeOrigin\":c=performance.timeOrigin-g.timeOrigin;break;case \"renderPictures\":bd(g.U,g.wa,g.va,g.O,performance.now()+c);break;case \"onRenderComplete\":cd(g.U,g.O,{imageBitmaps:g.oa,\nrasterStartMilliseconds:g.ya,rasterEndMilliseconds:g.xa});break;case \"setAssociatedObject\":b.set(g.T,g.object);break;case \"disposeAssociatedObject\":g=g.T;k=b.get(g);k.close&&k.close();b.delete(g);break;default:console.warn(`unrecognized skwasm message: ${k}`)}}e?I.g[e].addEventListener(\"message\",f):addEventListener(\"message\",f)};Jc=function(e,f,g,k,n){I.g[e].postMessage({G:\"renderPictures\",U:f,wa:g,va:k,O:n})};Ic=function(e,f){e=new OffscreenCanvas(e,f);f=Wb(e);a.set(f,e);return f};Oc=function(e,\nf,g){e=a.get(e);e.width=f;e.height=g};Gc=function(e,f,g,k){k||(k=[]);e=a.get(e);k.push(createImageBitmap(e,0,0,f,g));return k};Pc=async function(e,f,g,k){f=f?await Promise.all(f):[];postMessage({G:\"onRenderComplete\",U:e,O:k,oa:f,ya:g,xa:performance.now()+c},[...f])};Hc=function(e,f,g){const k=T.s,n=k.createTexture();k.bindTexture(k.TEXTURE_2D,n);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);k.texImage2D(k.TEXTURE_2D,0,k.RGBA,f,g,0,k.RGBA,k.UNSIGNED_BYTE,e);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,\n!1);k.bindTexture(k.TEXTURE_2D,null);e=Vb(P);P[e]=n;return e};Lc=function(e,f){I.g[e].postMessage({G:\"disposeAssociatedObject\",T:f})}})();\nvar dd=[null,ab,bb,nb,qb,rb,sb,tb,ac,bc,cc,oc,pc,qc,rc,sc,tc,vc],qd={__cxa_throw:function(a,b,c){(new kb(a)).R(b,c);lb=a;mb++;throw lb;},__emscripten_init_main_thread_js:function(a){ed(a,!pa,1,!oa,65536,!1);I.ga()},__emscripten_thread_cleanup:function(a){A?postMessage({cmd:\"cleanupThread\",thread:a}):Xa(a)},__pthread_create_js:ob,__syscall_fcntl64:qb,__syscall_fstat64:rb,__syscall_ioctl:sb,__syscall_openat:tb,_emscripten_get_now_is_monotonic:()=>!0,_emscripten_notify_mailbox_postmessage:function(a,\nb){a==b?setTimeout(()=>gb()):A?postMessage({targetThread:a,cmd:\"checkMailbox\"}):(a=I.g[a])&&a.postMessage({cmd:\"checkMailbox\"})},_emscripten_set_offscreencanvas_size:function(a,b,c){return Zb(a)?$b(a,b,c):ac(a,b,c)},_emscripten_thread_mailbox_await:vb,_emscripten_thread_set_strongref:function(a){x&&I.g[a].ref()},_emscripten_throw_longjmp:()=>{throw Infinity;},_mmap_js:bc,_munmap_js:cc,abort:()=>{za(\"\")},emscripten_check_blocking_allowed:function(){},emscripten_exit_with_live_runtime:()=>{Ja+=1;throw\"unwind\";\n},emscripten_get_now:()=>performance.timeOrigin+performance.now(),emscripten_glBindFramebuffer:dc,emscripten_glClear:ec,emscripten_glClearColor:fc,emscripten_glClearStencil:gc,emscripten_glGetIntegerv:ic,emscripten_receive_on_main_thread_js:function(a,b,c,e){I.La=b;kc.length=c;b=e>>3;for(e=0;e<c;e++)kc[e]=ha()[b+e];return dd[a].apply(null,kc)},emscripten_resize_heap:a=>{var b=p().length;a>>>=0;if(a<=b||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;\ne=Math.max(a,e);a:{f=f.min.call(f,2147483648,e+(65536-e%65536)%65536)-d.buffer.byteLength+65535>>>16;try{d.grow(f);l();var g=1;break a}catch(k){}g=void 0}if(g)return!0}return!1},emscripten_webgl_enable_extension:function(a,b){a=Pb[a];b=J(b);b.startsWith(\"GL_\")&&(b=b.substr(3));\"ANGLE_instanced_arrays\"==b&&Eb(U);\"OES_vertex_array_object\"==b&&Fb(U);\"WEBGL_draw_buffers\"==b&&Gb(U);\"WEBGL_draw_instanced_base_vertex_base_instance\"==b&&Hb(U);\"WEBGL_multi_draw_instanced_base_vertex_base_instance\"==b&&Ib(U);\n\"WEBGL_multi_draw\"==b&&Jb(U);return!!a.s.getExtension(b)},emscripten_webgl_get_current_context:function(){return T?T.handle:0},emscripten_webgl_make_context_current:function(a){T=Pb[a];w.Ka=U=T&&T.s;return!a||U?0:-5},environ_get:oc,environ_sizes_get:pc,exit:cb,fd_close:qc,fd_pread:rc,fd_read:sc,fd_seek:tc,fd_write:vc,glActiveTexture:function(a){U.activeTexture(a)},glAttachShader:function(a,b){U.attachShader(O[a],Q[b])},glBindAttribLocation:function(a,b,c){U.bindAttribLocation(O[a],b,J(c))},glBindBuffer:function(a,\nb){35051==a?U.P=b:35052==a&&(U.B=b);U.bindBuffer(a,Lb[b])},glBindFramebuffer:dc,glBindRenderbuffer:function(a,b){U.bindRenderbuffer(a,Nb[b])},glBindSampler:function(a,b){U.bindSampler(a,R[b])},glBindTexture:function(a,b){U.bindTexture(a,P[b])},glBindVertexArray:wc,glBindVertexArrayOES:wc,glBlendColor:function(a,b,c,e){U.blendColor(a,b,c,e)},glBlendEquation:function(a){U.blendEquation(a)},glBlendFunc:function(a,b){U.blendFunc(a,b)},glBlitFramebuffer:function(a,b,c,e,f,g,k,n,r,u){U.blitFramebuffer(a,\nb,c,e,f,g,k,n,r,u)},glBufferData:function(a,b,c,e){2<=T.version?c&&b?U.bufferData(a,p(),e,c,b):U.bufferData(a,b,e):U.bufferData(a,c?p().subarray(c,c+b):b,e)},glBufferSubData:function(a,b,c,e){2<=T.version?c&&U.bufferSubData(a,b,p(),e,c):U.bufferSubData(a,b,p().subarray(e,e+c))},glCheckFramebufferStatus:function(a){return U.checkFramebufferStatus(a)},glClear:ec,glClearColor:fc,glClearStencil:gc,glClientWaitSync:function(a,b,c,e){return U.clientWaitSync(Qb[a],b,(c>>>0)+4294967296*e)},glColorMask:function(a,\nb,c,e){U.colorMask(!!a,!!b,!!c,!!e)},glCompileShader:function(a){U.compileShader(Q[a])},glCompressedTexImage2D:function(a,b,c,e,f,g,k,n){2<=T.version?U.B||!k?U.compressedTexImage2D(a,b,c,e,f,g,k,n):U.compressedTexImage2D(a,b,c,e,f,g,p(),n,k):U.compressedTexImage2D(a,b,c,e,f,g,n?p().subarray(n,n+k):null)},glCompressedTexSubImage2D:function(a,b,c,e,f,g,k,n,r){2<=T.version?U.B||!n?U.compressedTexSubImage2D(a,b,c,e,f,g,k,n,r):U.compressedTexSubImage2D(a,b,c,e,f,g,k,p(),r,n):U.compressedTexSubImage2D(a,\nb,c,e,f,g,k,r?p().subarray(r,r+n):null)},glCopyBufferSubData:function(a,b,c,e,f){U.copyBufferSubData(a,b,c,e,f)},glCopyTexSubImage2D:function(a,b,c,e,f,g,k,n){U.copyTexSubImage2D(a,b,c,e,f,g,k,n)},glCreateProgram:function(){var a=Vb(O),b=U.createProgram();b.name=a;b.L=b.J=b.K=0;b.W=1;O[a]=b;return a},glCreateShader:function(a){var b=Vb(Q);Q[b]=U.createShader(a);return b},glCullFace:function(a){U.cullFace(a)},glDeleteBuffers:function(a,b){for(var c=0;c<a;c++){var e=q()[b+4*c>>2],f=Lb[e];f&&(U.deleteBuffer(f),\nf.name=0,Lb[e]=null,e==U.P&&(U.P=0),e==U.B&&(U.B=0))}},glDeleteFramebuffers:function(a,b){for(var c=0;c<a;++c){var e=q()[b+4*c>>2],f=Mb[e];f&&(U.deleteFramebuffer(f),f.name=0,Mb[e]=null)}},glDeleteProgram:function(a){if(a){var b=O[a];b?(U.deleteProgram(b),b.name=0,O[a]=null):S(1281)}},glDeleteRenderbuffers:function(a,b){for(var c=0;c<a;c++){var e=q()[b+4*c>>2],f=Nb[e];f&&(U.deleteRenderbuffer(f),f.name=0,Nb[e]=null)}},glDeleteSamplers:function(a,b){for(var c=0;c<a;c++){var e=q()[b+4*c>>2],f=R[e];\nf&&(U.deleteSampler(f),f.name=0,R[e]=null)}},glDeleteShader:function(a){if(a){var b=Q[a];b?(U.deleteShader(b),Q[a]=null):S(1281)}},glDeleteSync:function(a){if(a){var b=Qb[a];b?(U.deleteSync(b),b.name=0,Qb[a]=null):S(1281)}},glDeleteTextures:function(a,b){for(var c=0;c<a;c++){var e=q()[b+4*c>>2],f=P[e];f&&(U.deleteTexture(f),f.name=0,P[e]=null)}},glDeleteVertexArrays:xc,glDeleteVertexArraysOES:xc,glDepthMask:function(a){U.depthMask(!!a)},glDisable:function(a){U.disable(a)},glDisableVertexAttribArray:function(a){U.disableVertexAttribArray(a)},\nglDrawArrays:function(a,b,c){U.drawArrays(a,b,c)},glDrawArraysInstanced:function(a,b,c,e){U.drawArraysInstanced(a,b,c,e)},glDrawArraysInstancedBaseInstanceWEBGL:function(a,b,c,e,f){U.Z.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},glDrawBuffers:function(a,b){for(var c=yc[a],e=0;e<a;e++)c[e]=q()[b+4*e>>2];U.drawBuffers(c)},glDrawElements:zc,glDrawElementsInstanced:function(a,b,c,e,f){U.drawElementsInstanced(a,b,c,e,f)},glDrawElementsInstancedBaseVertexBaseInstanceWEBGL:function(a,b,c,e,f,g,k){U.Z.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,\nb,c,e,f,g,k)},glDrawRangeElements:function(a,b,c,e,f,g){zc(a,e,f,g)},glEnable:function(a){U.enable(a)},glEnableVertexAttribArray:function(a){U.enableVertexAttribArray(a)},glFenceSync:function(a,b){return(a=U.fenceSync(a,b))?(b=Vb(Qb),a.name=b,Qb[b]=a,b):0},glFinish:function(){U.finish()},glFlush:function(){U.flush()},glFramebufferRenderbuffer:function(a,b,c,e){U.framebufferRenderbuffer(a,b,c,Nb[e])},glFramebufferTexture2D:function(a,b,c,e,f){U.framebufferTexture2D(a,b,c,P[e],f)},glFrontFace:function(a){U.frontFace(a)},\nglGenBuffers:function(a,b){Ac(a,b,\"createBuffer\",Lb)},glGenFramebuffers:function(a,b){Ac(a,b,\"createFramebuffer\",Mb)},glGenRenderbuffers:function(a,b){Ac(a,b,\"createRenderbuffer\",Nb)},glGenSamplers:function(a,b){Ac(a,b,\"createSampler\",R)},glGenTextures:function(a,b){Ac(a,b,\"createTexture\",P)},glGenVertexArrays:Bc,glGenVertexArraysOES:Bc,glGenerateMipmap:function(a){U.generateMipmap(a)},glGetBufferParameteriv:function(a,b,c){c?q()[c>>2]=U.getBufferParameter(a,b):S(1281)},glGetError:function(){var a=\nU.getError()||Ub;Ub=0;return a},glGetFloatv:function(a,b){hc(a,b,2)},glGetFramebufferAttachmentParameteriv:function(a,b,c,e){a=U.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;q()[e>>2]=a},glGetIntegerv:ic,glGetProgramInfoLog:function(a,b,c,e){a=U.getProgramInfoLog(O[a]);null===a&&(a=\"(unknown error)\");var f;0<b&&e?f=zb(a,p(),e,b):f=0;b=f;c&&(q()[c>>2]=b)},glGetProgramiv:function(a,b,c){if(c)if(a>=Kb)S(1281);else if(a=O[a],35716==b)a=\nU.getProgramInfoLog(a),null===a&&(a=\"(unknown error)\"),q()[c>>2]=a.length+1;else if(35719==b){if(!a.L)for(b=0;b<U.getProgramParameter(a,35718);++b)a.L=Math.max(a.L,U.getActiveUniform(a,b).name.length+1);q()[c>>2]=a.L}else if(35722==b){if(!a.J)for(b=0;b<U.getProgramParameter(a,35721);++b)a.J=Math.max(a.J,U.getActiveAttrib(a,b).name.length+1);q()[c>>2]=a.J}else if(35381==b){if(!a.K)for(b=0;b<U.getProgramParameter(a,35382);++b)a.K=Math.max(a.K,U.getActiveUniformBlockName(a,b).length+1);q()[c>>2]=a.K}else q()[c>>\n2]=U.getProgramParameter(a,b);else S(1281)},glGetRenderbufferParameteriv:function(a,b,c){c?q()[c>>2]=U.getRenderbufferParameter(a,b):S(1281)},glGetShaderInfoLog:function(a,b,c,e){a=U.getShaderInfoLog(Q[a]);null===a&&(a=\"(unknown error)\");var f;0<b&&e?f=zb(a,p(),e,b):f=0;b=f;c&&(q()[c>>2]=b)},glGetShaderPrecisionFormat:function(a,b,c,e){a=U.getShaderPrecisionFormat(a,b);q()[c>>2]=a.rangeMin;q()[c+4>>2]=a.rangeMax;q()[e>>2]=a.precision},glGetShaderiv:function(a,b,c){c?35716==b?(a=U.getShaderInfoLog(Q[a]),\nnull===a&&(a=\"(unknown error)\"),a=a?a.length+1:0,q()[c>>2]=a):35720==b?(a=(a=U.getShaderSource(Q[a]))?a.length+1:0,q()[c>>2]=a):q()[c>>2]=U.getShaderParameter(Q[a],b):S(1281)},glGetString:function(a){var b=Rb[a];if(!b){switch(a){case 7939:b=U.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return\"GL_\"+e}));b=Ab(b.join(\" \"));break;case 7936:case 7937:case 37445:case 37446:(b=U.getParameter(a))||S(1280);b=b&&Ab(b);break;case 7938:b=U.getParameter(7938);b=2<=T.version?\"OpenGL ES 3.0 (\"+b+\")\":\n\"OpenGL ES 2.0 (\"+b+\")\";b=Ab(b);break;case 35724:b=U.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=Ab(b);break;default:S(1280)}Rb[a]=b}return b},glGetStringi:function(a,b){if(2>T.version)return S(1282),0;var c=Sb[a];if(c)return 0>b||b>=c.length?(S(1281),0):c[b];switch(a){case 7939:return c=U.getSupportedExtensions()||[],c=c.concat(c.map(function(e){return\"GL_\"+e})),c=c.map(function(e){return Ab(e)}),\nc=Sb[a]=c,0>b||b>=c.length?(S(1281),0):c[b];default:return S(1280),0}},glGetUniformLocation:function(a,b){b=J(b);if(a=O[a]){var c=a,e=c.H,f=c.ja,g;if(!e)for(c.H=e={},c.ia={},g=0;g<U.getProgramParameter(c,35718);++g){var k=U.getActiveUniform(c,g);var n=k.name;k=k.size;var r=Cc(n);r=0<r?n.slice(0,r):n;var u=c.W;c.W+=k;f[r]=[k,u];for(n=0;n<k;++n)e[u]=n,c.ia[u++]=r}c=a.H;e=0;f=b;g=Cc(b);0<g&&(e=parseInt(b.slice(g+1))>>>0,f=b.slice(0,g));if((f=a.ja[f])&&e<f[0]&&(e+=f[1],c[e]=c[e]||U.getUniformLocation(a,\nb)))return e}else S(1281);return-1},glInvalidateFramebuffer:function(a,b,c){for(var e=yc[b],f=0;f<b;f++)e[f]=q()[c+4*f>>2];U.invalidateFramebuffer(a,e)},glInvalidateSubFramebuffer:function(a,b,c,e,f,g,k){for(var n=yc[b],r=0;r<b;r++)n[r]=q()[c+4*r>>2];U.invalidateSubFramebuffer(a,n,e,f,g,k)},glIsSync:function(a){return U.isSync(Qb[a])},glIsTexture:function(a){return(a=P[a])?U.isTexture(a):0},glLineWidth:function(a){U.lineWidth(a)},glLinkProgram:function(a){a=O[a];U.linkProgram(a);a.H=0;a.ja={}},glMultiDrawArraysInstancedBaseInstanceWEBGL:function(a,\nb,c,e,f,g){U.ea.multiDrawArraysInstancedBaseInstanceWEBGL(a,q(),b>>2,q(),c>>2,q(),e>>2,t(),f>>2,g)},glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL:function(a,b,c,e,f,g,k,n){U.ea.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,q(),b>>2,c,q(),e>>2,q(),f>>2,q(),g>>2,t(),k>>2,n)},glPixelStorei:function(a,b){3317==a&&(Tb=b);U.pixelStorei(a,b)},glReadBuffer:function(a){U.readBuffer(a)},glReadPixels:function(a,b,c,e,f,g,k){if(2<=T.version)if(U.P)U.readPixels(a,b,c,e,f,g,k);else{var n=Dc(g);\nU.readPixels(a,b,c,e,f,g,n,k>>31-Math.clz32(n.BYTES_PER_ELEMENT))}else(k=Ec(g,f,c,e,k))?U.readPixels(a,b,c,e,f,g,k):S(1280)},glRenderbufferStorage:function(a,b,c,e){U.renderbufferStorage(a,b,c,e)},glRenderbufferStorageMultisample:function(a,b,c,e,f){U.renderbufferStorageMultisample(a,b,c,e,f)},glSamplerParameterf:function(a,b,c){U.samplerParameterf(R[a],b,c)},glSamplerParameteri:function(a,b,c){U.samplerParameteri(R[a],b,c)},glSamplerParameteriv:function(a,b,c){c=q()[c>>2];U.samplerParameteri(R[a],\nb,c)},glScissor:function(a,b,c,e){U.scissor(a,b,c,e)},glShaderSource:function(a,b,c,e){for(var f=\"\",g=0;g<b;++g){var k=e?q()[e+4*g>>2]:-1;f+=J(q()[c+4*g>>2],0>k?void 0:k)}U.shaderSource(Q[a],f)},glStencilFunc:function(a,b,c){U.stencilFunc(a,b,c)},glStencilFuncSeparate:function(a,b,c,e){U.stencilFuncSeparate(a,b,c,e)},glStencilMask:function(a){U.stencilMask(a)},glStencilMaskSeparate:function(a,b){U.stencilMaskSeparate(a,b)},glStencilOp:function(a,b,c){U.stencilOp(a,b,c)},glStencilOpSeparate:function(a,\nb,c,e){U.stencilOpSeparate(a,b,c,e)},glTexImage2D:function(a,b,c,e,f,g,k,n,r){if(2<=T.version)if(U.B)U.texImage2D(a,b,c,e,f,g,k,n,r);else if(r){var u=Dc(n);U.texImage2D(a,b,c,e,f,g,k,n,u,r>>31-Math.clz32(u.BYTES_PER_ELEMENT))}else U.texImage2D(a,b,c,e,f,g,k,n,null);else U.texImage2D(a,b,c,e,f,g,k,n,r?Ec(n,k,e,f,r):null)},glTexParameterf:function(a,b,c){U.texParameterf(a,b,c)},glTexParameterfv:function(a,b,c){c=v()[c>>2];U.texParameterf(a,b,c)},glTexParameteri:function(a,b,c){U.texParameteri(a,b,c)},\nglTexParameteriv:function(a,b,c){c=q()[c>>2];U.texParameteri(a,b,c)},glTexStorage2D:function(a,b,c,e,f){U.texStorage2D(a,b,c,e,f)},glTexSubImage2D:function(a,b,c,e,f,g,k,n,r){if(2<=T.version)if(U.B)U.texSubImage2D(a,b,c,e,f,g,k,n,r);else if(r){var u=Dc(n);U.texSubImage2D(a,b,c,e,f,g,k,n,u,r>>31-Math.clz32(u.BYTES_PER_ELEMENT))}else U.texSubImage2D(a,b,c,e,f,g,k,n,null);else u=null,r&&(u=Ec(n,k,f,g,r)),U.texSubImage2D(a,b,c,e,f,g,k,n,u)},glUniform1f:function(a,b){U.uniform1f(W(a),b)},glUniform1fv:function(a,\nb,c){if(2<=T.version)b&&U.uniform1fv(W(a),v(),c>>2,b);else{if(288>=b)for(var e=X[b-1],f=0;f<b;++f)e[f]=v()[c+4*f>>2];else e=v().subarray(c>>2,c+4*b>>2);U.uniform1fv(W(a),e)}},glUniform1i:function(a,b){U.uniform1i(W(a),b)},glUniform1iv:function(a,b,c){if(2<=T.version)b&&U.uniform1iv(W(a),q(),c>>2,b);else{if(288>=b)for(var e=Fc[b-1],f=0;f<b;++f)e[f]=q()[c+4*f>>2];else e=q().subarray(c>>2,c+4*b>>2);U.uniform1iv(W(a),e)}},glUniform2f:function(a,b,c){U.uniform2f(W(a),b,c)},glUniform2fv:function(a,b,c){if(2<=\nT.version)b&&U.uniform2fv(W(a),v(),c>>2,2*b);else{if(144>=b)for(var e=X[2*b-1],f=0;f<2*b;f+=2)e[f]=v()[c+4*f>>2],e[f+1]=v()[c+(4*f+4)>>2];else e=v().subarray(c>>2,c+8*b>>2);U.uniform2fv(W(a),e)}},glUniform2i:function(a,b,c){U.uniform2i(W(a),b,c)},glUniform2iv:function(a,b,c){if(2<=T.version)b&&U.uniform2iv(W(a),q(),c>>2,2*b);else{if(144>=b)for(var e=Fc[2*b-1],f=0;f<2*b;f+=2)e[f]=q()[c+4*f>>2],e[f+1]=q()[c+(4*f+4)>>2];else e=q().subarray(c>>2,c+8*b>>2);U.uniform2iv(W(a),e)}},glUniform3f:function(a,\nb,c,e){U.uniform3f(W(a),b,c,e)},glUniform3fv:function(a,b,c){if(2<=T.version)b&&U.uniform3fv(W(a),v(),c>>2,3*b);else{if(96>=b)for(var e=X[3*b-1],f=0;f<3*b;f+=3)e[f]=v()[c+4*f>>2],e[f+1]=v()[c+(4*f+4)>>2],e[f+2]=v()[c+(4*f+8)>>2];else e=v().subarray(c>>2,c+12*b>>2);U.uniform3fv(W(a),e)}},glUniform3i:function(a,b,c,e){U.uniform3i(W(a),b,c,e)},glUniform3iv:function(a,b,c){if(2<=T.version)b&&U.uniform3iv(W(a),q(),c>>2,3*b);else{if(96>=b)for(var e=Fc[3*b-1],f=0;f<3*b;f+=3)e[f]=q()[c+4*f>>2],e[f+1]=q()[c+\n(4*f+4)>>2],e[f+2]=q()[c+(4*f+8)>>2];else e=q().subarray(c>>2,c+12*b>>2);U.uniform3iv(W(a),e)}},glUniform4f:function(a,b,c,e,f){U.uniform4f(W(a),b,c,e,f)},glUniform4fv:function(a,b,c){if(2<=T.version)b&&U.uniform4fv(W(a),v(),c>>2,4*b);else{if(72>=b){var e=X[4*b-1],f=v();c>>=2;for(var g=0;g<4*b;g+=4){var k=c+g;e[g]=f[k];e[g+1]=f[k+1];e[g+2]=f[k+2];e[g+3]=f[k+3]}}else e=v().subarray(c>>2,c+16*b>>2);U.uniform4fv(W(a),e)}},glUniform4i:function(a,b,c,e,f){U.uniform4i(W(a),b,c,e,f)},glUniform4iv:function(a,\nb,c){if(2<=T.version)b&&U.uniform4iv(W(a),q(),c>>2,4*b);else{if(72>=b)for(var e=Fc[4*b-1],f=0;f<4*b;f+=4)e[f]=q()[c+4*f>>2],e[f+1]=q()[c+(4*f+4)>>2],e[f+2]=q()[c+(4*f+8)>>2],e[f+3]=q()[c+(4*f+12)>>2];else e=q().subarray(c>>2,c+16*b>>2);U.uniform4iv(W(a),e)}},glUniformMatrix2fv:function(a,b,c,e){if(2<=T.version)b&&U.uniformMatrix2fv(W(a),!!c,v(),e>>2,4*b);else{if(72>=b)for(var f=X[4*b-1],g=0;g<4*b;g+=4)f[g]=v()[e+4*g>>2],f[g+1]=v()[e+(4*g+4)>>2],f[g+2]=v()[e+(4*g+8)>>2],f[g+3]=v()[e+(4*g+12)>>2];else f=\nv().subarray(e>>2,e+16*b>>2);U.uniformMatrix2fv(W(a),!!c,f)}},glUniformMatrix3fv:function(a,b,c,e){if(2<=T.version)b&&U.uniformMatrix3fv(W(a),!!c,v(),e>>2,9*b);else{if(32>=b)for(var f=X[9*b-1],g=0;g<9*b;g+=9)f[g]=v()[e+4*g>>2],f[g+1]=v()[e+(4*g+4)>>2],f[g+2]=v()[e+(4*g+8)>>2],f[g+3]=v()[e+(4*g+12)>>2],f[g+4]=v()[e+(4*g+16)>>2],f[g+5]=v()[e+(4*g+20)>>2],f[g+6]=v()[e+(4*g+24)>>2],f[g+7]=v()[e+(4*g+28)>>2],f[g+8]=v()[e+(4*g+32)>>2];else f=v().subarray(e>>2,e+36*b>>2);U.uniformMatrix3fv(W(a),!!c,f)}},\nglUniformMatrix4fv:function(a,b,c,e){if(2<=T.version)b&&U.uniformMatrix4fv(W(a),!!c,v(),e>>2,16*b);else{if(18>=b){var f=X[16*b-1],g=v();e>>=2;for(var k=0;k<16*b;k+=16){var n=e+k;f[k]=g[n];f[k+1]=g[n+1];f[k+2]=g[n+2];f[k+3]=g[n+3];f[k+4]=g[n+4];f[k+5]=g[n+5];f[k+6]=g[n+6];f[k+7]=g[n+7];f[k+8]=g[n+8];f[k+9]=g[n+9];f[k+10]=g[n+10];f[k+11]=g[n+11];f[k+12]=g[n+12];f[k+13]=g[n+13];f[k+14]=g[n+14];f[k+15]=g[n+15]}}else f=v().subarray(e>>2,e+64*b>>2);U.uniformMatrix4fv(W(a),!!c,f)}},glUseProgram:function(a){a=\nO[a];U.useProgram(a);U.la=a},glVertexAttrib1f:function(a,b){U.vertexAttrib1f(a,b)},glVertexAttrib2fv:function(a,b){U.vertexAttrib2f(a,v()[b>>2],v()[b+4>>2])},glVertexAttrib3fv:function(a,b){U.vertexAttrib3f(a,v()[b>>2],v()[b+4>>2],v()[b+8>>2])},glVertexAttrib4fv:function(a,b){U.vertexAttrib4f(a,v()[b>>2],v()[b+4>>2],v()[b+8>>2],v()[b+12>>2])},glVertexAttribDivisor:function(a,b){U.vertexAttribDivisor(a,b)},glVertexAttribIPointer:function(a,b,c,e,f){U.vertexAttribIPointer(a,b,c,e,f)},glVertexAttribPointer:function(a,\nb,c,e,f,g){U.vertexAttribPointer(a,b,c,!!e,f,g)},glViewport:function(a,b,c,e){U.viewport(a,b,c,e)},glWaitSync:function(a,b,c,e){U.waitSync(Qb[a],b,(c>>>0)+4294967296*e)},invoke_ii:fd,invoke_iii:gd,invoke_iiii:hd,invoke_iiiii:jd,invoke_iiiiiii:kd,invoke_vi:ld,invoke_vii:md,invoke_viii:nd,invoke_viiii:od,invoke_viiiiiii:pd,memory:d||w.wasmMemory,skwasm_captureImageBitmap:Gc,skwasm_createGlTextureFromTextureSource:Hc,skwasm_createOffscreenCanvas:Ic,skwasm_dispatchRenderPictures:Jc,skwasm_disposeAssociatedObjectOnThread:Lc,\nskwasm_getAssociatedObject:Mc,skwasm_registerMessageListener:Nc,skwasm_resizeCanvas:Oc,skwasm_resolveAndPostImages:Pc,skwasm_setAssociatedObjectOnThread:Qc,skwasm_syncTimeOriginForThread:Rc,strftime_l:(a,b,c,e)=>Xc(a,b,c,e)};\n(function(){function a(c,e){F=c=c.exports;w.wasmExports=F;I.ha.push(F._emscripten_tls_init);G=F.__indirect_function_table;Ha.unshift(F.__wasm_call_ctors);Aa=e;Oa();return c}var b={env:qd,wasi_snapshot_preview1:qd};Na();if(w.instantiateWasm)try{return w.instantiateWasm(b,a)}catch(c){D(\"Module.instantiateWasm callback failed with error: \"+c),ka(c)}Ua(b,function(c){a(c.instance,c.module)}).catch(ka);return{}})();w._canvas_saveLayer=(a,b,c,e)=>(w._canvas_saveLayer=F.canvas_saveLayer)(a,b,c,e);\nw._canvas_save=a=>(w._canvas_save=F.canvas_save)(a);w._canvas_restore=a=>(w._canvas_restore=F.canvas_restore)(a);w._canvas_restoreToCount=(a,b)=>(w._canvas_restoreToCount=F.canvas_restoreToCount)(a,b);w._canvas_getSaveCount=a=>(w._canvas_getSaveCount=F.canvas_getSaveCount)(a);w._canvas_translate=(a,b,c)=>(w._canvas_translate=F.canvas_translate)(a,b,c);w._canvas_scale=(a,b,c)=>(w._canvas_scale=F.canvas_scale)(a,b,c);w._canvas_rotate=(a,b)=>(w._canvas_rotate=F.canvas_rotate)(a,b);\nw._canvas_skew=(a,b,c)=>(w._canvas_skew=F.canvas_skew)(a,b,c);w._canvas_transform=(a,b)=>(w._canvas_transform=F.canvas_transform)(a,b);w._canvas_clipRect=(a,b,c,e)=>(w._canvas_clipRect=F.canvas_clipRect)(a,b,c,e);w._canvas_clipRRect=(a,b,c)=>(w._canvas_clipRRect=F.canvas_clipRRect)(a,b,c);w._canvas_clipPath=(a,b,c)=>(w._canvas_clipPath=F.canvas_clipPath)(a,b,c);w._canvas_drawColor=(a,b,c)=>(w._canvas_drawColor=F.canvas_drawColor)(a,b,c);\nw._canvas_drawLine=(a,b,c,e,f,g)=>(w._canvas_drawLine=F.canvas_drawLine)(a,b,c,e,f,g);w._canvas_drawPaint=(a,b)=>(w._canvas_drawPaint=F.canvas_drawPaint)(a,b);w._canvas_drawRect=(a,b,c)=>(w._canvas_drawRect=F.canvas_drawRect)(a,b,c);w._canvas_drawRRect=(a,b,c)=>(w._canvas_drawRRect=F.canvas_drawRRect)(a,b,c);w._canvas_drawDRRect=(a,b,c,e)=>(w._canvas_drawDRRect=F.canvas_drawDRRect)(a,b,c,e);w._canvas_drawOval=(a,b,c)=>(w._canvas_drawOval=F.canvas_drawOval)(a,b,c);\nw._canvas_drawCircle=(a,b,c,e,f)=>(w._canvas_drawCircle=F.canvas_drawCircle)(a,b,c,e,f);w._canvas_drawArc=(a,b,c,e,f,g)=>(w._canvas_drawArc=F.canvas_drawArc)(a,b,c,e,f,g);w._canvas_drawPath=(a,b,c)=>(w._canvas_drawPath=F.canvas_drawPath)(a,b,c);w._canvas_drawShadow=(a,b,c,e,f,g)=>(w._canvas_drawShadow=F.canvas_drawShadow)(a,b,c,e,f,g);w._canvas_drawParagraph=(a,b,c,e)=>(w._canvas_drawParagraph=F.canvas_drawParagraph)(a,b,c,e);\nw._canvas_drawPicture=(a,b)=>(w._canvas_drawPicture=F.canvas_drawPicture)(a,b);w._canvas_drawImage=(a,b,c,e,f,g)=>(w._canvas_drawImage=F.canvas_drawImage)(a,b,c,e,f,g);w._canvas_drawImageRect=(a,b,c,e,f,g)=>(w._canvas_drawImageRect=F.canvas_drawImageRect)(a,b,c,e,f,g);w._canvas_drawImageNine=(a,b,c,e,f,g)=>(w._canvas_drawImageNine=F.canvas_drawImageNine)(a,b,c,e,f,g);w._canvas_drawVertices=(a,b,c,e)=>(w._canvas_drawVertices=F.canvas_drawVertices)(a,b,c,e);\nw._canvas_drawPoints=(a,b,c,e,f)=>(w._canvas_drawPoints=F.canvas_drawPoints)(a,b,c,e,f);w._canvas_drawAtlas=(a,b,c,e,f,g,k,n,r)=>(w._canvas_drawAtlas=F.canvas_drawAtlas)(a,b,c,e,f,g,k,n,r);w._canvas_getTransform=(a,b)=>(w._canvas_getTransform=F.canvas_getTransform)(a,b);w._canvas_getLocalClipBounds=(a,b)=>(w._canvas_getLocalClipBounds=F.canvas_getLocalClipBounds)(a,b);w._canvas_getDeviceClipBounds=(a,b)=>(w._canvas_getDeviceClipBounds=F.canvas_getDeviceClipBounds)(a,b);\nw._contourMeasureIter_create=(a,b,c)=>(w._contourMeasureIter_create=F.contourMeasureIter_create)(a,b,c);w._contourMeasureIter_next=a=>(w._contourMeasureIter_next=F.contourMeasureIter_next)(a);w._contourMeasureIter_dispose=a=>(w._contourMeasureIter_dispose=F.contourMeasureIter_dispose)(a);w._contourMeasure_dispose=a=>(w._contourMeasure_dispose=F.contourMeasure_dispose)(a);w._contourMeasure_length=a=>(w._contourMeasure_length=F.contourMeasure_length)(a);\nw._contourMeasure_isClosed=a=>(w._contourMeasure_isClosed=F.contourMeasure_isClosed)(a);w._contourMeasure_getPosTan=(a,b,c,e)=>(w._contourMeasure_getPosTan=F.contourMeasure_getPosTan)(a,b,c,e);w._contourMeasure_getSegment=(a,b,c,e)=>(w._contourMeasure_getSegment=F.contourMeasure_getSegment)(a,b,c,e);w._skData_create=a=>(w._skData_create=F.skData_create)(a);w._skData_getPointer=a=>(w._skData_getPointer=F.skData_getPointer)(a);w._skData_getConstPointer=a=>(w._skData_getConstPointer=F.skData_getConstPointer)(a);\nw._skData_getSize=a=>(w._skData_getSize=F.skData_getSize)(a);w._skData_dispose=a=>(w._skData_dispose=F.skData_dispose)(a);w._imageFilter_createBlur=(a,b,c)=>(w._imageFilter_createBlur=F.imageFilter_createBlur)(a,b,c);w._imageFilter_createDilate=(a,b)=>(w._imageFilter_createDilate=F.imageFilter_createDilate)(a,b);w._imageFilter_createErode=(a,b)=>(w._imageFilter_createErode=F.imageFilter_createErode)(a,b);\nw._imageFilter_createMatrix=(a,b)=>(w._imageFilter_createMatrix=F.imageFilter_createMatrix)(a,b);w._imageFilter_createFromColorFilter=a=>(w._imageFilter_createFromColorFilter=F.imageFilter_createFromColorFilter)(a);w._imageFilter_compose=(a,b)=>(w._imageFilter_compose=F.imageFilter_compose)(a,b);w._imageFilter_dispose=a=>(w._imageFilter_dispose=F.imageFilter_dispose)(a);w._imageFilter_getFilterBounds=(a,b)=>(w._imageFilter_getFilterBounds=F.imageFilter_getFilterBounds)(a,b);\nw._colorFilter_createMode=(a,b)=>(w._colorFilter_createMode=F.colorFilter_createMode)(a,b);w._colorFilter_createMatrix=a=>(w._colorFilter_createMatrix=F.colorFilter_createMatrix)(a);w._colorFilter_createSRGBToLinearGamma=()=>(w._colorFilter_createSRGBToLinearGamma=F.colorFilter_createSRGBToLinearGamma)();w._colorFilter_createLinearToSRGBGamma=()=>(w._colorFilter_createLinearToSRGBGamma=F.colorFilter_createLinearToSRGBGamma)();\nw._colorFilter_compose=(a,b)=>(w._colorFilter_compose=F.colorFilter_compose)(a,b);w._colorFilter_dispose=a=>(w._colorFilter_dispose=F.colorFilter_dispose)(a);w._maskFilter_createBlur=(a,b)=>(w._maskFilter_createBlur=F.maskFilter_createBlur)(a,b);w._maskFilter_dispose=a=>(w._maskFilter_dispose=F.maskFilter_dispose)(a);w._fontCollection_create=()=>(w._fontCollection_create=F.fontCollection_create)();w._fontCollection_dispose=a=>(w._fontCollection_dispose=F.fontCollection_dispose)(a);\nw._typeface_create=a=>(w._typeface_create=F.typeface_create)(a);w._typeface_dispose=a=>(w._typeface_dispose=F.typeface_dispose)(a);w._typefaces_filterCoveredCodePoints=(a,b,c,e)=>(w._typefaces_filterCoveredCodePoints=F.typefaces_filterCoveredCodePoints)(a,b,c,e);w._fontCollection_registerTypeface=(a,b,c)=>(w._fontCollection_registerTypeface=F.fontCollection_registerTypeface)(a,b,c);w._fontCollection_clearCaches=a=>(w._fontCollection_clearCaches=F.fontCollection_clearCaches)(a);\nw._image_createFromPicture=(a,b,c)=>(w._image_createFromPicture=F.image_createFromPicture)(a,b,c);w._image_createFromPixels=(a,b,c,e,f)=>(w._image_createFromPixels=F.image_createFromPixels)(a,b,c,e,f);w._image_createFromTextureSource=(a,b,c,e)=>(w._image_createFromTextureSource=F.image_createFromTextureSource)(a,b,c,e);w._image_ref=a=>(w._image_ref=F.image_ref)(a);w._image_dispose=a=>(w._image_dispose=F.image_dispose)(a);w._image_getWidth=a=>(w._image_getWidth=F.image_getWidth)(a);\nw._image_getHeight=a=>(w._image_getHeight=F.image_getHeight)(a);w._paint_create=()=>(w._paint_create=F.paint_create)();w._paint_dispose=a=>(w._paint_dispose=F.paint_dispose)(a);w._paint_setBlendMode=(a,b)=>(w._paint_setBlendMode=F.paint_setBlendMode)(a,b);w._paint_setStyle=(a,b)=>(w._paint_setStyle=F.paint_setStyle)(a,b);w._paint_getStyle=a=>(w._paint_getStyle=F.paint_getStyle)(a);w._paint_setStrokeWidth=(a,b)=>(w._paint_setStrokeWidth=F.paint_setStrokeWidth)(a,b);\nw._paint_getStrokeWidth=a=>(w._paint_getStrokeWidth=F.paint_getStrokeWidth)(a);w._paint_setStrokeCap=(a,b)=>(w._paint_setStrokeCap=F.paint_setStrokeCap)(a,b);w._paint_getStrokeCap=a=>(w._paint_getStrokeCap=F.paint_getStrokeCap)(a);w._paint_setStrokeJoin=(a,b)=>(w._paint_setStrokeJoin=F.paint_setStrokeJoin)(a,b);w._paint_getStrokeJoin=a=>(w._paint_getStrokeJoin=F.paint_getStrokeJoin)(a);w._paint_setAntiAlias=(a,b)=>(w._paint_setAntiAlias=F.paint_setAntiAlias)(a,b);\nw._paint_getAntiAlias=a=>(w._paint_getAntiAlias=F.paint_getAntiAlias)(a);w._paint_setColorInt=(a,b)=>(w._paint_setColorInt=F.paint_setColorInt)(a,b);w._paint_getColorInt=a=>(w._paint_getColorInt=F.paint_getColorInt)(a);w._paint_setMiterLimit=(a,b)=>(w._paint_setMiterLimit=F.paint_setMiterLimit)(a,b);w._paint_getMiterLImit=a=>(w._paint_getMiterLImit=F.paint_getMiterLImit)(a);w._paint_setShader=(a,b)=>(w._paint_setShader=F.paint_setShader)(a,b);\nw._paint_setImageFilter=(a,b)=>(w._paint_setImageFilter=F.paint_setImageFilter)(a,b);w._paint_setColorFilter=(a,b)=>(w._paint_setColorFilter=F.paint_setColorFilter)(a,b);w._paint_setMaskFilter=(a,b)=>(w._paint_setMaskFilter=F.paint_setMaskFilter)(a,b);w._path_create=()=>(w._path_create=F.path_create)();w._path_dispose=a=>(w._path_dispose=F.path_dispose)(a);w._path_copy=a=>(w._path_copy=F.path_copy)(a);w._path_setFillType=(a,b)=>(w._path_setFillType=F.path_setFillType)(a,b);\nw._path_getFillType=a=>(w._path_getFillType=F.path_getFillType)(a);w._path_moveTo=(a,b,c)=>(w._path_moveTo=F.path_moveTo)(a,b,c);w._path_relativeMoveTo=(a,b,c)=>(w._path_relativeMoveTo=F.path_relativeMoveTo)(a,b,c);w._path_lineTo=(a,b,c)=>(w._path_lineTo=F.path_lineTo)(a,b,c);w._path_relativeLineTo=(a,b,c)=>(w._path_relativeLineTo=F.path_relativeLineTo)(a,b,c);w._path_quadraticBezierTo=(a,b,c,e,f)=>(w._path_quadraticBezierTo=F.path_quadraticBezierTo)(a,b,c,e,f);\nw._path_relativeQuadraticBezierTo=(a,b,c,e,f)=>(w._path_relativeQuadraticBezierTo=F.path_relativeQuadraticBezierTo)(a,b,c,e,f);w._path_cubicTo=(a,b,c,e,f,g,k)=>(w._path_cubicTo=F.path_cubicTo)(a,b,c,e,f,g,k);w._path_relativeCubicTo=(a,b,c,e,f,g,k)=>(w._path_relativeCubicTo=F.path_relativeCubicTo)(a,b,c,e,f,g,k);w._path_conicTo=(a,b,c,e,f,g)=>(w._path_conicTo=F.path_conicTo)(a,b,c,e,f,g);w._path_relativeConicTo=(a,b,c,e,f,g)=>(w._path_relativeConicTo=F.path_relativeConicTo)(a,b,c,e,f,g);\nw._path_arcToOval=(a,b,c,e,f)=>(w._path_arcToOval=F.path_arcToOval)(a,b,c,e,f);w._path_arcToRotated=(a,b,c,e,f,g,k,n)=>(w._path_arcToRotated=F.path_arcToRotated)(a,b,c,e,f,g,k,n);w._path_relativeArcToRotated=(a,b,c,e,f,g,k,n)=>(w._path_relativeArcToRotated=F.path_relativeArcToRotated)(a,b,c,e,f,g,k,n);w._path_addRect=(a,b)=>(w._path_addRect=F.path_addRect)(a,b);w._path_addOval=(a,b)=>(w._path_addOval=F.path_addOval)(a,b);w._path_addArc=(a,b,c,e)=>(w._path_addArc=F.path_addArc)(a,b,c,e);\nw._path_addPolygon=(a,b,c,e)=>(w._path_addPolygon=F.path_addPolygon)(a,b,c,e);w._path_addRRect=(a,b)=>(w._path_addRRect=F.path_addRRect)(a,b);w._path_addPath=(a,b,c,e)=>(w._path_addPath=F.path_addPath)(a,b,c,e);w._path_close=a=>(w._path_close=F.path_close)(a);w._path_reset=a=>(w._path_reset=F.path_reset)(a);w._path_contains=(a,b,c)=>(w._path_contains=F.path_contains)(a,b,c);w._path_transform=(a,b)=>(w._path_transform=F.path_transform)(a,b);\nw._path_getBounds=(a,b)=>(w._path_getBounds=F.path_getBounds)(a,b);w._path_combine=(a,b,c)=>(w._path_combine=F.path_combine)(a,b,c);w._pictureRecorder_create=()=>(w._pictureRecorder_create=F.pictureRecorder_create)();w._pictureRecorder_dispose=a=>(w._pictureRecorder_dispose=F.pictureRecorder_dispose)(a);w._pictureRecorder_beginRecording=(a,b)=>(w._pictureRecorder_beginRecording=F.pictureRecorder_beginRecording)(a,b);w._pictureRecorder_endRecording=a=>(w._pictureRecorder_endRecording=F.pictureRecorder_endRecording)(a);\nw._picture_getCullRect=(a,b)=>(w._picture_getCullRect=F.picture_getCullRect)(a,b);w._picture_dispose=a=>(w._picture_dispose=F.picture_dispose)(a);w._picture_approximateBytesUsed=a=>(w._picture_approximateBytesUsed=F.picture_approximateBytesUsed)(a);w._shader_createLinearGradient=(a,b,c,e,f,g)=>(w._shader_createLinearGradient=F.shader_createLinearGradient)(a,b,c,e,f,g);w._shader_createRadialGradient=(a,b,c,e,f,g,k,n)=>(w._shader_createRadialGradient=F.shader_createRadialGradient)(a,b,c,e,f,g,k,n);\nw._shader_createConicalGradient=(a,b,c,e,f,g,k,n)=>(w._shader_createConicalGradient=F.shader_createConicalGradient)(a,b,c,e,f,g,k,n);w._shader_createSweepGradient=(a,b,c,e,f,g,k,n,r)=>(w._shader_createSweepGradient=F.shader_createSweepGradient)(a,b,c,e,f,g,k,n,r);w._shader_dispose=a=>(w._shader_dispose=F.shader_dispose)(a);w._runtimeEffect_create=a=>(w._runtimeEffect_create=F.runtimeEffect_create)(a);w._runtimeEffect_dispose=a=>(w._runtimeEffect_dispose=F.runtimeEffect_dispose)(a);\nw._runtimeEffect_getUniformSize=a=>(w._runtimeEffect_getUniformSize=F.runtimeEffect_getUniformSize)(a);w._shader_createRuntimeEffectShader=(a,b,c,e)=>(w._shader_createRuntimeEffectShader=F.shader_createRuntimeEffectShader)(a,b,c,e);w._shader_createFromImage=(a,b,c,e,f)=>(w._shader_createFromImage=F.shader_createFromImage)(a,b,c,e,f);w._skString_allocate=a=>(w._skString_allocate=F.skString_allocate)(a);w._skString_getData=a=>(w._skString_getData=F.skString_getData)(a);\nw._skString_free=a=>(w._skString_free=F.skString_free)(a);w._skString16_allocate=a=>(w._skString16_allocate=F.skString16_allocate)(a);w._skString16_getData=a=>(w._skString16_getData=F.skString16_getData)(a);w._skString16_free=a=>(w._skString16_free=F.skString16_free)(a);var Db=(a,b,c,e,f)=>(Db=F.emscripten_dispatch_to_thread_)(a,b,c,e,f);w._surface_create=()=>(w._surface_create=F.surface_create)();w._surface_getThreadId=a=>(w._surface_getThreadId=F.surface_getThreadId)(a);\nw._surface_setCallbackHandler=(a,b)=>(w._surface_setCallbackHandler=F.surface_setCallbackHandler)(a,b);w._surface_destroy=a=>(w._surface_destroy=F.surface_destroy)(a);w._surface_renderPictures=(a,b,c)=>(w._surface_renderPictures=F.surface_renderPictures)(a,b,c);var bd=w._surface_renderPicturesOnWorker=(a,b,c,e,f)=>(bd=w._surface_renderPicturesOnWorker=F.surface_renderPicturesOnWorker)(a,b,c,e,f);w._surface_rasterizeImage=(a,b,c)=>(w._surface_rasterizeImage=F.surface_rasterizeImage)(a,b,c);\nvar cd=w._surface_onRenderComplete=(a,b,c)=>(cd=w._surface_onRenderComplete=F.surface_onRenderComplete)(a,b,c);w._lineMetrics_create=(a,b,c,e,f,g,k,n,r)=>(w._lineMetrics_create=F.lineMetrics_create)(a,b,c,e,f,g,k,n,r);w._lineMetrics_dispose=a=>(w._lineMetrics_dispose=F.lineMetrics_dispose)(a);w._lineMetrics_getHardBreak=a=>(w._lineMetrics_getHardBreak=F.lineMetrics_getHardBreak)(a);w._lineMetrics_getAscent=a=>(w._lineMetrics_getAscent=F.lineMetrics_getAscent)(a);\nw._lineMetrics_getDescent=a=>(w._lineMetrics_getDescent=F.lineMetrics_getDescent)(a);w._lineMetrics_getUnscaledAscent=a=>(w._lineMetrics_getUnscaledAscent=F.lineMetrics_getUnscaledAscent)(a);w._lineMetrics_getHeight=a=>(w._lineMetrics_getHeight=F.lineMetrics_getHeight)(a);w._lineMetrics_getWidth=a=>(w._lineMetrics_getWidth=F.lineMetrics_getWidth)(a);w._lineMetrics_getLeft=a=>(w._lineMetrics_getLeft=F.lineMetrics_getLeft)(a);w._lineMetrics_getBaseline=a=>(w._lineMetrics_getBaseline=F.lineMetrics_getBaseline)(a);\nw._lineMetrics_getLineNumber=a=>(w._lineMetrics_getLineNumber=F.lineMetrics_getLineNumber)(a);w._lineMetrics_getStartIndex=a=>(w._lineMetrics_getStartIndex=F.lineMetrics_getStartIndex)(a);w._lineMetrics_getEndIndex=a=>(w._lineMetrics_getEndIndex=F.lineMetrics_getEndIndex)(a);w._paragraph_dispose=a=>(w._paragraph_dispose=F.paragraph_dispose)(a);w._paragraph_getWidth=a=>(w._paragraph_getWidth=F.paragraph_getWidth)(a);w._paragraph_getHeight=a=>(w._paragraph_getHeight=F.paragraph_getHeight)(a);\nw._paragraph_getLongestLine=a=>(w._paragraph_getLongestLine=F.paragraph_getLongestLine)(a);w._paragraph_getMinIntrinsicWidth=a=>(w._paragraph_getMinIntrinsicWidth=F.paragraph_getMinIntrinsicWidth)(a);w._paragraph_getMaxIntrinsicWidth=a=>(w._paragraph_getMaxIntrinsicWidth=F.paragraph_getMaxIntrinsicWidth)(a);w._paragraph_getAlphabeticBaseline=a=>(w._paragraph_getAlphabeticBaseline=F.paragraph_getAlphabeticBaseline)(a);w._paragraph_getIdeographicBaseline=a=>(w._paragraph_getIdeographicBaseline=F.paragraph_getIdeographicBaseline)(a);\nw._paragraph_getDidExceedMaxLines=a=>(w._paragraph_getDidExceedMaxLines=F.paragraph_getDidExceedMaxLines)(a);w._paragraph_layout=(a,b)=>(w._paragraph_layout=F.paragraph_layout)(a,b);w._paragraph_getPositionForOffset=(a,b,c,e)=>(w._paragraph_getPositionForOffset=F.paragraph_getPositionForOffset)(a,b,c,e);w._paragraph_getClosestGlyphInfoAtCoordinate=(a,b,c,e,f,g)=>(w._paragraph_getClosestGlyphInfoAtCoordinate=F.paragraph_getClosestGlyphInfoAtCoordinate)(a,b,c,e,f,g);\nw._paragraph_getGlyphInfoAt=(a,b,c,e,f)=>(w._paragraph_getGlyphInfoAt=F.paragraph_getGlyphInfoAt)(a,b,c,e,f);w._paragraph_getWordBoundary=(a,b,c)=>(w._paragraph_getWordBoundary=F.paragraph_getWordBoundary)(a,b,c);w._paragraph_getLineCount=a=>(w._paragraph_getLineCount=F.paragraph_getLineCount)(a);w._paragraph_getLineNumberAt=(a,b)=>(w._paragraph_getLineNumberAt=F.paragraph_getLineNumberAt)(a,b);\nw._paragraph_getLineMetricsAtIndex=(a,b)=>(w._paragraph_getLineMetricsAtIndex=F.paragraph_getLineMetricsAtIndex)(a,b);w._textBoxList_dispose=a=>(w._textBoxList_dispose=F.textBoxList_dispose)(a);w._textBoxList_getLength=a=>(w._textBoxList_getLength=F.textBoxList_getLength)(a);w._textBoxList_getBoxAtIndex=(a,b,c)=>(w._textBoxList_getBoxAtIndex=F.textBoxList_getBoxAtIndex)(a,b,c);w._paragraph_getBoxesForRange=(a,b,c,e,f)=>(w._paragraph_getBoxesForRange=F.paragraph_getBoxesForRange)(a,b,c,e,f);\nw._paragraph_getBoxesForPlaceholders=a=>(w._paragraph_getBoxesForPlaceholders=F.paragraph_getBoxesForPlaceholders)(a);w._paragraph_getUnresolvedCodePoints=(a,b,c)=>(w._paragraph_getUnresolvedCodePoints=F.paragraph_getUnresolvedCodePoints)(a,b,c);w._paragraphBuilder_create=(a,b)=>(w._paragraphBuilder_create=F.paragraphBuilder_create)(a,b);w._paragraphBuilder_dispose=a=>(w._paragraphBuilder_dispose=F.paragraphBuilder_dispose)(a);\nw._paragraphBuilder_addPlaceholder=(a,b,c,e,f,g)=>(w._paragraphBuilder_addPlaceholder=F.paragraphBuilder_addPlaceholder)(a,b,c,e,f,g);w._paragraphBuilder_addText=(a,b)=>(w._paragraphBuilder_addText=F.paragraphBuilder_addText)(a,b);w._paragraphBuilder_getUtf8Text=(a,b)=>(w._paragraphBuilder_getUtf8Text=F.paragraphBuilder_getUtf8Text)(a,b);w._paragraphBuilder_pushStyle=(a,b)=>(w._paragraphBuilder_pushStyle=F.paragraphBuilder_pushStyle)(a,b);w._paragraphBuilder_pop=a=>(w._paragraphBuilder_pop=F.paragraphBuilder_pop)(a);\nw._paragraphBuilder_build=a=>(w._paragraphBuilder_build=F.paragraphBuilder_build)(a);w._unicodePositionBuffer_create=a=>(w._unicodePositionBuffer_create=F.unicodePositionBuffer_create)(a);w._unicodePositionBuffer_getDataPointer=a=>(w._unicodePositionBuffer_getDataPointer=F.unicodePositionBuffer_getDataPointer)(a);w._unicodePositionBuffer_free=a=>(w._unicodePositionBuffer_free=F.unicodePositionBuffer_free)(a);w._lineBreakBuffer_create=a=>(w._lineBreakBuffer_create=F.lineBreakBuffer_create)(a);\nw._lineBreakBuffer_getDataPointer=a=>(w._lineBreakBuffer_getDataPointer=F.lineBreakBuffer_getDataPointer)(a);w._lineBreakBuffer_free=a=>(w._lineBreakBuffer_free=F.lineBreakBuffer_free)(a);w._paragraphBuilder_setGraphemeBreaksUtf16=(a,b)=>(w._paragraphBuilder_setGraphemeBreaksUtf16=F.paragraphBuilder_setGraphemeBreaksUtf16)(a,b);w._paragraphBuilder_setWordBreaksUtf16=(a,b)=>(w._paragraphBuilder_setWordBreaksUtf16=F.paragraphBuilder_setWordBreaksUtf16)(a,b);\nw._paragraphBuilder_setLineBreaksUtf16=(a,b)=>(w._paragraphBuilder_setLineBreaksUtf16=F.paragraphBuilder_setLineBreaksUtf16)(a,b);w._paragraphStyle_create=()=>(w._paragraphStyle_create=F.paragraphStyle_create)();w._paragraphStyle_dispose=a=>(w._paragraphStyle_dispose=F.paragraphStyle_dispose)(a);w._paragraphStyle_setTextAlign=(a,b)=>(w._paragraphStyle_setTextAlign=F.paragraphStyle_setTextAlign)(a,b);\nw._paragraphStyle_setTextDirection=(a,b)=>(w._paragraphStyle_setTextDirection=F.paragraphStyle_setTextDirection)(a,b);w._paragraphStyle_setMaxLines=(a,b)=>(w._paragraphStyle_setMaxLines=F.paragraphStyle_setMaxLines)(a,b);w._paragraphStyle_setHeight=(a,b)=>(w._paragraphStyle_setHeight=F.paragraphStyle_setHeight)(a,b);w._paragraphStyle_setTextHeightBehavior=(a,b,c)=>(w._paragraphStyle_setTextHeightBehavior=F.paragraphStyle_setTextHeightBehavior)(a,b,c);\nw._paragraphStyle_setEllipsis=(a,b)=>(w._paragraphStyle_setEllipsis=F.paragraphStyle_setEllipsis)(a,b);w._paragraphStyle_setStrutStyle=(a,b)=>(w._paragraphStyle_setStrutStyle=F.paragraphStyle_setStrutStyle)(a,b);w._paragraphStyle_setTextStyle=(a,b)=>(w._paragraphStyle_setTextStyle=F.paragraphStyle_setTextStyle)(a,b);w._paragraphStyle_setApplyRoundingHack=(a,b)=>(w._paragraphStyle_setApplyRoundingHack=F.paragraphStyle_setApplyRoundingHack)(a,b);w._strutStyle_create=()=>(w._strutStyle_create=F.strutStyle_create)();\nw._strutStyle_dispose=a=>(w._strutStyle_dispose=F.strutStyle_dispose)(a);w._strutStyle_setFontFamilies=(a,b,c)=>(w._strutStyle_setFontFamilies=F.strutStyle_setFontFamilies)(a,b,c);w._strutStyle_setFontSize=(a,b)=>(w._strutStyle_setFontSize=F.strutStyle_setFontSize)(a,b);w._strutStyle_setHeight=(a,b)=>(w._strutStyle_setHeight=F.strutStyle_setHeight)(a,b);w._strutStyle_setHalfLeading=(a,b)=>(w._strutStyle_setHalfLeading=F.strutStyle_setHalfLeading)(a,b);\nw._strutStyle_setLeading=(a,b)=>(w._strutStyle_setLeading=F.strutStyle_setLeading)(a,b);w._strutStyle_setFontStyle=(a,b,c)=>(w._strutStyle_setFontStyle=F.strutStyle_setFontStyle)(a,b,c);w._strutStyle_setForceStrutHeight=(a,b)=>(w._strutStyle_setForceStrutHeight=F.strutStyle_setForceStrutHeight)(a,b);w._textStyle_create=()=>(w._textStyle_create=F.textStyle_create)();w._textStyle_copy=a=>(w._textStyle_copy=F.textStyle_copy)(a);w._textStyle_dispose=a=>(w._textStyle_dispose=F.textStyle_dispose)(a);\nw._textStyle_setColor=(a,b)=>(w._textStyle_setColor=F.textStyle_setColor)(a,b);w._textStyle_setDecoration=(a,b)=>(w._textStyle_setDecoration=F.textStyle_setDecoration)(a,b);w._textStyle_setDecorationColor=(a,b)=>(w._textStyle_setDecorationColor=F.textStyle_setDecorationColor)(a,b);w._textStyle_setDecorationStyle=(a,b)=>(w._textStyle_setDecorationStyle=F.textStyle_setDecorationStyle)(a,b);\nw._textStyle_setDecorationThickness=(a,b)=>(w._textStyle_setDecorationThickness=F.textStyle_setDecorationThickness)(a,b);w._textStyle_setFontStyle=(a,b,c)=>(w._textStyle_setFontStyle=F.textStyle_setFontStyle)(a,b,c);w._textStyle_setTextBaseline=(a,b)=>(w._textStyle_setTextBaseline=F.textStyle_setTextBaseline)(a,b);w._textStyle_clearFontFamilies=a=>(w._textStyle_clearFontFamilies=F.textStyle_clearFontFamilies)(a);\nw._textStyle_addFontFamilies=(a,b,c)=>(w._textStyle_addFontFamilies=F.textStyle_addFontFamilies)(a,b,c);w._textStyle_setFontSize=(a,b)=>(w._textStyle_setFontSize=F.textStyle_setFontSize)(a,b);w._textStyle_setLetterSpacing=(a,b)=>(w._textStyle_setLetterSpacing=F.textStyle_setLetterSpacing)(a,b);w._textStyle_setWordSpacing=(a,b)=>(w._textStyle_setWordSpacing=F.textStyle_setWordSpacing)(a,b);w._textStyle_setHeight=(a,b)=>(w._textStyle_setHeight=F.textStyle_setHeight)(a,b);\nw._textStyle_setHalfLeading=(a,b)=>(w._textStyle_setHalfLeading=F.textStyle_setHalfLeading)(a,b);w._textStyle_setLocale=(a,b)=>(w._textStyle_setLocale=F.textStyle_setLocale)(a,b);w._textStyle_setBackground=(a,b)=>(w._textStyle_setBackground=F.textStyle_setBackground)(a,b);w._textStyle_setForeground=(a,b)=>(w._textStyle_setForeground=F.textStyle_setForeground)(a,b);w._textStyle_addShadow=(a,b,c,e,f)=>(w._textStyle_addShadow=F.textStyle_addShadow)(a,b,c,e,f);\nw._textStyle_addFontFeature=(a,b,c)=>(w._textStyle_addFontFeature=F.textStyle_addFontFeature)(a,b,c);w._textStyle_setFontVariations=(a,b,c,e)=>(w._textStyle_setFontVariations=F.textStyle_setFontVariations)(a,b,c,e);w._vertices_create=(a,b,c,e,f,g,k)=>(w._vertices_create=F.vertices_create)(a,b,c,e,f,g,k);w._vertices_dispose=a=>(w._vertices_dispose=F.vertices_dispose)(a);var fb=w._pthread_self=()=>(fb=w._pthread_self=F.pthread_self)(),pb=a=>(pb=F.malloc)(a);\nw.__emscripten_tls_init=()=>(w.__emscripten_tls_init=F._emscripten_tls_init)();var ed=w.__emscripten_thread_init=(a,b,c,e,f,g)=>(ed=w.__emscripten_thread_init=F._emscripten_thread_init)(a,b,c,e,f,g);w.__emscripten_thread_crashed=()=>(w.__emscripten_thread_crashed=F._emscripten_thread_crashed)();\nvar jc=(a,b,c,e)=>(jc=F._emscripten_run_in_main_runtime_thread_js)(a,b,c,e),db=a=>(db=F._emscripten_thread_free_data)(a),jb=w.__emscripten_thread_exit=a=>(jb=w.__emscripten_thread_exit=F._emscripten_thread_exit)(a),wb=w.__emscripten_check_mailbox=()=>(wb=w.__emscripten_check_mailbox=F._emscripten_check_mailbox)(),Z=(a,b)=>(Z=F.setThrew)(a,b),ib=(a,b)=>(ib=F.emscripten_stack_set_limits)(a,b),N=()=>(N=F.stackSave)(),M=a=>(M=F.stackRestore)(a),Cb=w.stackAlloc=a=>(Cb=w.stackAlloc=F.stackAlloc)(a);\nfunction gd(a,b,c){var e=N();try{return G.get(a)(b,c)}catch(f){M(e);if(f!==f+0)throw f;Z(1,0)}}function md(a,b,c){var e=N();try{G.get(a)(b,c)}catch(f){M(e);if(f!==f+0)throw f;Z(1,0)}}function fd(a,b){var c=N();try{return G.get(a)(b)}catch(e){M(c);if(e!==e+0)throw e;Z(1,0)}}function nd(a,b,c,e){var f=N();try{G.get(a)(b,c,e)}catch(g){M(f);if(g!==g+0)throw g;Z(1,0)}}function hd(a,b,c,e){var f=N();try{return G.get(a)(b,c,e)}catch(g){M(f);if(g!==g+0)throw g;Z(1,0)}}\nfunction od(a,b,c,e,f){var g=N();try{G.get(a)(b,c,e,f)}catch(k){M(g);if(k!==k+0)throw k;Z(1,0)}}function pd(a,b,c,e,f,g,k,n){var r=N();try{G.get(a)(b,c,e,f,g,k,n)}catch(u){M(r);if(u!==u+0)throw u;Z(1,0)}}function ld(a,b){var c=N();try{G.get(a)(b)}catch(e){M(c);if(e!==e+0)throw e;Z(1,0)}}function kd(a,b,c,e,f,g,k){var n=N();try{return G.get(a)(b,c,e,f,g,k)}catch(r){M(n);if(r!==r+0)throw r;Z(1,0)}}\nfunction jd(a,b,c,e,f){var g=N();try{return G.get(a)(b,c,e,f)}catch(k){M(g);if(k!==k+0)throw k;Z(1,0)}}w.keepRuntimeAlive=Ka;w.wasmMemory=d;w.wasmExports=F;\nw.addFunction=function(a,b){if(!Yc){Yc=new WeakMap;var c=G.length;if(Yc)for(var e=0;e<0+c;e++){var f=G.get(e);f&&Yc.set(f,e)}}if(c=Yc.get(a)||0)return c;if(Zc.length)c=Zc.pop();else{try{G.grow(1)}catch(n){if(!(n instanceof RangeError))throw n;throw\"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\";}c=G.length-1}try{G.set(c,a)}catch(n){if(!(n instanceof TypeError))throw n;if(\"function\"==typeof WebAssembly.Function){e=WebAssembly.Function;f={i:\"i32\",j:\"i64\",f:\"f32\",d:\"f64\",p:\"i32\"};for(var g={parameters:[],\nresults:\"v\"==b[0]?[]:[f[b[0]]]},k=1;k<b.length;++k)g.parameters.push(f[b[k]]);b=new e(g,a)}else{e=[1];f=b.slice(0,1);b=b.slice(1);g={i:127,p:127,j:126,f:125,d:124};e.push(96);k=b.length;128>k?e.push(k):e.push(k%128|128,k>>7);for(k=0;k<b.length;++k)e.push(g[b[k]]);\"v\"==f?e.push(0):e.push(1,g[f]);b=[0,97,115,109,1,0,0,0,1];f=e.length;128>f?b.push(f):b.push(f%128|128,f>>7);b.push.apply(b,e);b.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);b=new WebAssembly.Module(new Uint8Array(b));b=(new WebAssembly.Instance(b,\n{e:{f:a}})).exports.f}G.set(c,b)}Yc.set(a,c);return c};w.ExitStatus=Va;w.PThread=I;var rd;Ma=function sd(){rd||td();rd||(Ma=sd)};\nfunction td(){function a(){if(!rd&&(rd=!0,w.calledRun=!0,!Ba)){A||hb(Ha);ja(w);if(w.onRuntimeInitialized)w.onRuntimeInitialized();if(!A){if(w.postRun)for(\"function\"==typeof w.postRun&&(w.postRun=[w.postRun]);w.postRun.length;){var b=w.postRun.shift();Ia.unshift(b)}hb(Ia)}}}if(!(0<H))if(A)ja(w),A||hb(Ha),startWorker(w);else{if(w.preRun)for(\"function\"==typeof w.preRun&&(w.preRun=[w.preRun]);w.preRun.length;)Ga.unshift(w.preRun.shift());hb(Ga);0<H||(w.setStatus?(w.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){w.setStatus(\"\")},\n1);a()},1)):a())}}if(w.preInit)for(\"function\"==typeof w.preInit&&(w.preInit=[w.preInit]);0<w.preInit.length;)w.preInit.pop()();td();\n\n\n  return moduleArg.ready\n}\n\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n  module.exports = skwasm;\nelse if (typeof define === 'function' && define['amd'])\n  define([], () => skwasm);\n"
  },
  {
    "path": "legacy/dist/canvaskit/skwasm.js.symbols",
    "content": "0:invoke_viii\n1:abort\n2:invoke_vii\n3:invoke_vi\n4:invoke_ii\n5:emscripten_get_now\n6:invoke_iii\n7:__cxa_throw\n8:invoke_viiii\n9:skwasm_registerMessageListener\n10:invoke_viiiiiii\n11:glGetString\n12:glDeleteTextures\n13:emscripten_glGetIntegerv\n14:emscripten_exit_with_live_runtime\n15:__wasi_fd_close\n16:__syscall_fcntl64\n17:strftime_l\n18:skwasm_syncTimeOriginForThread\n19:skwasm_setAssociatedObjectOnThread\n20:skwasm_resolveAndPostImages\n21:skwasm_resizeCanvas\n22:skwasm_getAssociatedObject\n23:skwasm_disposeAssociatedObjectOnThread\n24:skwasm_dispatchRenderPictures\n25:skwasm_createOffscreenCanvas\n26:skwasm_createGlTextureFromTextureSource\n27:skwasm_captureImageBitmap\n28:legalimport$glWaitSync\n29:legalimport$glClientWaitSync\n30:legalimport$_munmap_js\n31:legalimport$_mmap_js\n32:legalimport$__wasi_fd_seek\n33:legalimport$__wasi_fd_pread\n34:invoke_iiiiiii\n35:invoke_iiiii\n36:invoke_iiii\n37:glViewport\n38:glVertexAttribPointer\n39:glVertexAttribIPointer\n40:glVertexAttribDivisor\n41:glVertexAttrib4fv\n42:glVertexAttrib3fv\n43:glVertexAttrib2fv\n44:glVertexAttrib1f\n45:glUseProgram\n46:glUniformMatrix4fv\n47:glUniformMatrix3fv\n48:glUniformMatrix2fv\n49:glUniform4iv\n50:glUniform4i\n51:glUniform4fv\n52:glUniform4f\n53:glUniform3iv\n54:glUniform3i\n55:glUniform3fv\n56:glUniform3f\n57:glUniform2iv\n58:glUniform2i\n59:glUniform2fv\n60:glUniform2f\n61:glUniform1iv\n62:glUniform1i\n63:glUniform1fv\n64:glUniform1f\n65:glTexSubImage2D\n66:glTexStorage2D\n67:glTexParameteriv\n68:glTexParameteri\n69:glTexParameterfv\n70:glTexParameterf\n71:glTexImage2D\n72:glStencilOpSeparate\n73:glStencilOp\n74:glStencilMaskSeparate\n75:glStencilMask\n76:glStencilFuncSeparate\n77:glStencilFunc\n78:glShaderSource\n79:glScissor\n80:glSamplerParameteriv\n81:glSamplerParameteri\n82:glSamplerParameterf\n83:glRenderbufferStorageMultisample\n84:glRenderbufferStorage\n85:glReadPixels\n86:glReadBuffer\n87:glPixelStorei\n88:glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL\n89:glMultiDrawArraysInstancedBaseInstanceWEBGL\n90:glLinkProgram\n91:glLineWidth\n92:glIsTexture\n93:glIsSync\n94:glInvalidateSubFramebuffer\n95:glInvalidateFramebuffer\n96:glGetUniformLocation\n97:glGetStringi\n98:glGetShaderiv\n99:glGetShaderPrecisionFormat\n100:glGetShaderInfoLog\n101:glGetRenderbufferParameteriv\n102:glGetProgramiv\n103:glGetProgramInfoLog\n104:glGetIntegerv\n105:glGetFramebufferAttachmentParameteriv\n106:glGetFloatv\n107:glGetError\n108:glGetBufferParameteriv\n109:glGenerateMipmap\n110:glGenVertexArraysOES\n111:glGenVertexArrays\n112:glGenTextures\n113:glGenSamplers\n114:glGenRenderbuffers\n115:glGenFramebuffers\n116:glGenBuffers\n117:glFrontFace\n118:glFramebufferTexture2D\n119:glFramebufferRenderbuffer\n120:glFlush\n121:glFinish\n122:glFenceSync\n123:glEnableVertexAttribArray\n124:glEnable\n125:glDrawRangeElements\n126:glDrawElementsInstancedBaseVertexBaseInstanceWEBGL\n127:glDrawElementsInstanced\n128:glDrawElements\n129:glDrawBuffers\n130:glDrawArraysInstancedBaseInstanceWEBGL\n131:glDrawArraysInstanced\n132:glDrawArrays\n133:glDisableVertexAttribArray\n134:glDisable\n135:glDepthMask\n136:glDeleteVertexArraysOES\n137:glDeleteVertexArrays\n138:glDeleteSync\n139:glDeleteShader\n140:glDeleteSamplers\n141:glDeleteRenderbuffers\n142:glDeleteProgram\n143:glDeleteFramebuffers\n144:glDeleteBuffers\n145:glCullFace\n146:glCreateShader\n147:glCreateProgram\n148:glCopyTexSubImage2D\n149:glCopyBufferSubData\n150:glCompressedTexSubImage2D\n151:glCompressedTexImage2D\n152:glCompileShader\n153:glColorMask\n154:glClearStencil\n155:glClearColor\n156:glClear\n157:glCheckFramebufferStatus\n158:glBufferSubData\n159:glBufferData\n160:glBlitFramebuffer\n161:glBlendFunc\n162:glBlendEquation\n163:glBlendColor\n164:glBindVertexArrayOES\n165:glBindVertexArray\n166:glBindTexture\n167:glBindSampler\n168:glBindRenderbuffer\n169:glBindFramebuffer\n170:glBindBuffer\n171:glBindAttribLocation\n172:glAttachShader\n173:glActiveTexture\n174:exit\n175:emscripten_webgl_make_context_current\n176:emscripten_webgl_get_current_context\n177:emscripten_webgl_enable_extension\n178:emscripten_resize_heap\n179:emscripten_receive_on_main_thread_js\n180:emscripten_glClearStencil\n181:emscripten_glClearColor\n182:emscripten_glClear\n183:emscripten_glBindFramebuffer\n184:emscripten_check_blocking_allowed\n185:_emscripten_throw_longjmp\n186:_emscripten_thread_set_strongref\n187:_emscripten_thread_mailbox_await\n188:_emscripten_set_offscreencanvas_size\n189:_emscripten_notify_mailbox_postmessage\n190:_emscripten_get_now_is_monotonic\n191:__wasi_fd_write\n192:__wasi_fd_read\n193:__wasi_environ_sizes_get\n194:__wasi_environ_get\n195:__syscall_openat\n196:__syscall_ioctl\n197:__syscall_fstat64\n198:__pthread_create_js\n199:__emscripten_thread_cleanup\n200:__emscripten_init_main_thread_js\n201:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_string\\28\\29\n202:dlfree\n203:sk_sp<SkContourMeasure>::~sk_sp\\28\\29\n204:operator\\20new\\28unsigned\\20long\\29\n205:GrGLSLShaderBuilder::codeAppendf\\28char\\20const*\\2c\\20...\\29\n206:sk_sp<SkVertices>::~sk_sp\\28\\29\n207:void\\20SkSafeUnref<GrSurfaceProxy>\\28GrSurfaceProxy*\\29\\20\\28.4161\\29\n208:void\\20SkSafeUnref<SkImageFilter>\\28SkImageFilter*\\29\\20\\28.2063\\29\n209:operator\\20delete\\28void*\\29\n210:GrGLSLShaderBuilder::codeAppend\\28char\\20const*\\29\n211:SkRasterPipeline::uncheckedAppend\\28SkRasterPipelineOp\\2c\\20void*\\29\n212:void\\20SkSafeUnref<SkString::Rec>\\28SkString::Rec*\\29\n213:__cxa_guard_release\n214:__cxa_guard_acquire\n215:SkSL::GLSLCodeGenerator::write\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n216:SkSL::ErrorReporter::error\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n217:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\2c\\20char\\20const*\\29\n218:hb_blob_destroy\n219:skia_private::TArray<SkRasterPipeline_MemoryCtxInfo\\2c\\20true>::~TArray\\28\\29\n220:SkImageGenerator::onIsProtected\\28\\29\\20const\n221:SkDebugf\\28char\\20const*\\2c\\20...\\29\n222:fmaxf\n223:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\29\n224:SkSL::Type::matches\\28SkSL::Type\\20const&\\29\\20const\n225:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::size\\5babi:v160004\\5d\\28\\29\\20const\n226:std::__2::__function::__value_func<void\\20\\28\\29>::~__value_func\\5babi:v160004\\5d\\28\\29\n227:hb_sanitize_context_t::check_range\\28void\\20const*\\2c\\20unsigned\\20int\\29\\20const\n228:GrShaderVar::~GrShaderVar\\28\\29\n229:void\\20SkSafeUnref<SkPathRef>\\28SkPathRef*\\29\n230:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\29\n231:testSetjmp\n232:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::destroy\\28\\29\n233:hb_buffer_t::message\\28hb_font_t*\\2c\\20char\\20const*\\2c\\20...\\29\n234:GrColorInfo::~GrColorInfo\\28\\29\n235:SkArenaAlloc::allocObject\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n236:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20void>\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n237:SkAnySubclass<GrBackendFormatData\\2c\\2064ul>::reset\\28\\29\n238:fminf\n239:SkPaint::~SkPaint\\28\\29\n240:FT_DivFix\n241:SkMutex::release\\28\\29\n242:strlen\n243:skvx::Vec<4\\2c\\20float>\\20skvx::naive_if_then_else<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20\\28.5768\\29\n244:sk_sp<SkFontStyleSet>::reset\\28SkFontStyleSet*\\29\n245:SkPath::SkPath\\28\\29\n246:std::exception::~exception\\28\\29\n247:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<std::nullptr_t>\\28char\\20const*\\29\n248:skia_private::TArray<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>::~TArray\\28\\29\n249:skia_png_crc_finish\n250:skia_png_chunk_benign_error\n251:hb_buffer_t::next_glyph\\28\\29\n252:SkSL::RP::Generator::pushExpression\\28SkSL::Expression\\20const&\\2c\\20bool\\29\n253:SkSL::Pool::AllocMemory\\28unsigned\\20long\\29\n254:SkSL::RP::Builder::appendInstruction\\28SkSL::RP::BuilderOp\\2c\\20SkSL::RP::Builder::SlotList\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n255:sk_report_container_overflow_and_die\\28\\29\n256:SkMatrix::hasPerspective\\28\\29\\20const\n257:SkSemaphore::wait\\28\\29\n258:skgpu::ganesh::VertexChunkPatchAllocator::append\\28skgpu::tess::LinearTolerances\\20const&\\29\n259:SkString::appendf\\28char\\20const*\\2c\\20...\\29\n260:SkBitmap::~SkBitmap\\28\\29\n261:skgpu::VertexWriter&\\20skgpu::tess::operator<<<\\28skgpu::tess::PatchAttribs\\298\\2c\\20skgpu::VertexColor\\2c\\20false\\2c\\20true>\\28skgpu::VertexWriter&\\2c\\20skgpu::tess::AttribValue<\\28skgpu::tess::PatchAttribs\\298\\2c\\20skgpu::VertexColor\\2c\\20false\\2c\\20true>\\20const&\\29\n262:SkWriter32::write32\\28int\\29\n263:SkContainerAllocator::allocate\\28int\\2c\\20double\\29\n264:\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16::Expand\\28unsigned\\20int\\29\n265:FT_MulDiv\n266:sk_sp<SkImageFilter>::reset\\28SkImageFilter*\\29\n267:SkString::append\\28char\\20const*\\29\n268:SkArenaAlloc::allocObjectWithFooter\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n269:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\5babi:v160004\\5d\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n270:skvx::Vec<4\\2c\\20float>\\20skvx::operator*<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n271:OT::VarStoreInstancer::operator\\28\\29\\28unsigned\\20int\\2c\\20unsigned\\20short\\29\\20const\n272:dlmalloc\n273:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\28char\\20const*\\29\n274:ft_mem_realloc\n275:std::__2::unique_ptr<SkSL::TraceHook\\2c\\20std::__2::default_delete<SkSL::TraceHook>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n276:lang_matches\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n277:SkIRect::intersect\\28SkIRect\\20const&\\29\n278:skia_png_free\n279:SkSL::Parser::expect\\28SkSL::Token::Kind\\2c\\20char\\20const*\\2c\\20SkSL::Token*\\29\n280:SkIntersections::insert\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\n281:skia_private::TArray<SkPoint\\2c\\20true>::push_back\\28SkPoint\\20const&\\29\n282:ft_mem_qrealloc\n283:SkMatrix::invert\\28SkMatrix*\\29\\20const\n284:std::__2::unique_ptr<unsigned\\20short\\20\\5b\\5d\\2c\\20std::__2::default_delete<unsigned\\20short\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n285:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::resize\\28unsigned\\20long\\2c\\20char\\29\n286:sk_sp<SkData>::~sk_sp\\28\\29\n287:sk_sp<GrSurface>::~sk_sp\\28\\29\n288:cf2_stack_popFixed\n289:strcmp\n290:GrTextureGenerator::isTextureGenerator\\28\\29\\20const\n291:subtag_matches\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n292:std::__2::vector<sk_sp<SkShader>\\2c\\20std::__2::allocator<sk_sp<SkShader>>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n293:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n294:cf2_stack_getReal\n295:SkSL::GLSLCodeGenerator::writeExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n296:SkIRect::isEmpty\\28\\29\\20const\n297:SkSL::Type::displayName\\28\\29\\20const\n298:dlcalloc\n299:SkImageGenerator::onGetYUVAPlanes\\28SkYUVAPixmaps\\20const&\\29\n300:SkBitmap::SkBitmap\\28\\29\n301:GrAuditTrail::pushFrame\\28char\\20const*\\29\n302:std::__2::locale::~locale\\28\\29\n303:FT_Stream_Seek\n304:SkPaint::SkPaint\\28SkPaint\\20const&\\29\n305:void\\20SkSafeUnref<SkColorSpace>\\28SkColorSpace*\\29\\20\\28.2018\\29\n306:hb_vector_t<hb_aat_map_t::range_flags_t\\2c\\20true>::fini\\28\\29\n307:SkString::SkString\\28SkString&&\\29\n308:GrGeometryProcessor::Attribute::asShaderVar\\28\\29\\20const\n309:strncmp\n310:std::__2::unique_ptr<GrShaderCaps\\2c\\20std::__2::default_delete<GrShaderCaps>>::reset\\5babi:v160004\\5d\\28GrShaderCaps*\\29\n311:SkBlitter::~SkBlitter\\28\\29.1\n312:std::__2::to_string\\28int\\29\n313:SkTDStorage::~SkTDStorage\\28\\29\n314:SkSL::Parser::peek\\28\\29\n315:std::__2::ios_base::getloc\\28\\29\\20const\n316:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_pointer\\5babi:v160004\\5d\\28\\29\n317:hb_ot_map_builder_t::add_feature\\28unsigned\\20int\\2c\\20hb_ot_map_feature_flags_t\\2c\\20unsigned\\20int\\29\n318:SkWStream::writeText\\28char\\20const*\\29\n319:GrProcessor::operator\\20new\\28unsigned\\20long\\29\n320:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28\\29\n321:skvx::Vec<4\\2c\\20float>\\20skvx::operator*<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n322:SkPath::getBounds\\28\\29\\20const\n323:GrPixmapBase<void\\2c\\20GrPixmap>::~GrPixmapBase\\28\\29\n324:GrGLSLUniformHandler::addUniform\\28GrProcessor\\20const*\\2c\\20unsigned\\20int\\2c\\20SkSLType\\2c\\20char\\20const*\\2c\\20char\\20const**\\29\n325:void\\20SkSafeUnref<SkData\\20const>\\28SkData\\20const*\\29\\20\\28.1144\\29\n326:sk_sp<SkSurface>::~sk_sp\\28\\29\n327:hb_face_t::get_num_glyphs\\28\\29\\20const\n328:SkString::~SkString\\28\\29\n329:GrSurfaceProxyView::operator=\\28GrSurfaceProxyView&&\\29\n330:GrPaint::~GrPaint\\28\\29\n331:FT_Stream_ReadUShort\n332:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\29\n333:__errno_location\n334:SkMakeRuntimeEffect\\28SkRuntimeEffect::Result\\20\\28*\\29\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\\2c\\20char\\20const*\\2c\\20SkRuntimeEffect::Options\\29\n335:std::__2::unique_ptr<skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n336:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n337:skvx::Vec<8\\2c\\20unsigned\\20short>&\\20skvx::operator+=<8\\2c\\20unsigned\\20short>\\28skvx::Vec<8\\2c\\20unsigned\\20short>&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\n338:SkMatrix::SkMatrix\\28\\29\n339:SkIRect::contains\\28SkIRect\\20const&\\29\\20const\n340:SkArenaAlloc::RunDtorsOnBlock\\28char*\\29\n341:skia_png_warning\n342:bool\\20std::__2::operator==\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20const&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n343:SkString::SkString\\28char\\20const*\\29\n344:GrGLContextInfo::hasExtension\\28char\\20const*\\29\\20const\n345:skgpu::Swizzle::Swizzle\\28char\\20const*\\29\n346:hb_sanitize_context_t::start_processing\\28\\29\n347:__shgetc\n348:FT_Stream_GetUShort\n349:std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>::~vector\\5babi:v160004\\5d\\28\\29\n350:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator=\\5babi:v160004\\5d\\28wchar_t\\20const*\\29\n351:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\5babi:v160004\\5d\\28char\\20const*\\29\n352:skia_private::TArray<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>::push_back\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&&\\29\n353:hb_sanitize_context_t::~hb_sanitize_context_t\\28\\29\n354:bool\\20std::__2::operator==\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20const&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20const&\\29\n355:SkMatrix::mapRect\\28SkRect*\\2c\\20SkRect\\20const&\\2c\\20SkApplyPerspectiveClip\\29\\20const\n356:std::__2::shared_ptr<_IO_FILE>::~shared_ptr\\5babi:v160004\\5d\\28\\29\n357:hb_lazy_loader_t<AAT::ltag\\2c\\20hb_table_lazy_loader_t<AAT::ltag\\2c\\2033u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2033u\\2c\\20hb_blob_t>::do_destroy\\28hb_blob_t*\\29\n358:SkSL::Expression::clone\\28\\29\\20const\n359:SkDQuad::set\\28SkPoint\\20const*\\29\n360:std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>::~vector\\5babi:v160004\\5d\\28\\29\n361:skia_private::AutoSTMalloc<17ul\\2c\\20SkPoint\\2c\\20void>::~AutoSTMalloc\\28\\29\n362:FT_Stream_ExitFrame\n363:std::__throw_bad_array_new_length\\5babi:v160004\\5d\\28\\29\n364:skvx::Vec<4\\2c\\20int>\\20skvx::operator&<4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20int>\\20const&\\29\n365:skia_png_error\n366:hb_face_reference_table\n367:SkPixmap::SkPixmap\\28\\29\n368:SkPath::SkPath\\28SkPath\\20const&\\29\n369:skgpu::ganesh::SurfaceDrawContext::addDrawOp\\28GrClip\\20const*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20std::__2::function<void\\20\\28GrOp*\\2c\\20unsigned\\20int\\29>\\20const&\\29\n370:memcmp\n371:hb_buffer_t::unsafe_to_break\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n372:\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16::Expand\\28unsigned\\20long\\20long\\29\n373:\\28anonymous\\20namespace\\29::ColorTypeFilter_8888::Expand\\28unsigned\\20int\\29\n374:\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616::Expand\\28unsigned\\20long\\20long\\29\n375:\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102::Expand\\28unsigned\\20long\\20long\\29\n376:SkRecord::grow\\28\\29\n377:SkPictureRecord::addDraw\\28DrawType\\2c\\20unsigned\\20long*\\29\n378:OT::Layout::Common::Coverage::get_coverage\\28unsigned\\20int\\29\\20const\n379:std::__2::__cloc\\28\\29\n380:sscanf\n381:skvx::Vec<4\\2c\\20int>\\20skvx::operator!<4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\29\n382:skia_png_chunk_error\n383:skia::textlayout::ParagraphImpl::getUTF16Index\\28unsigned\\20long\\29\\20const\n384:__cxa_atexit\n385:SkRect::intersect\\28SkRect\\20const&\\29\n386:SkMatrix::isIdentity\\28\\29\\20const\n387:skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>::STArray\\28skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>&&\\29\n388:hb_blob_get_data_writable\n389:bool\\20hb_sanitize_context_t::check_range<OT::IntType<unsigned\\20char\\2c\\201u>>\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n390:__multf3\n391:SkStringPrintf\\28char\\20const*\\2c\\20...\\29\n392:SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29::operator\\28\\29\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29\\20const\n393:SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0::operator\\28\\29\\28SkSL::FunctionDefinition\\20const*\\2c\\20SkSL::FunctionDefinition\\20const*\\29\\20const\n394:SkSL::GLSLCodeGenerator::writeLine\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n395:SkMatrix::mapPoints\\28SkPoint*\\2c\\20int\\29\\20const\n396:SkIRect::Intersects\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n397:SkChecksum::Hash32\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n398:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n399:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::evaluate_intrinsic<float>\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n400:std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>::compare\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n401:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20char\\20const*\\29\n402:SkSL::String::printf\\28char\\20const*\\2c\\20...\\29\n403:SkSL::Pool::FreeMemory\\28void*\\29\n404:SkRect::outset\\28float\\2c\\20float\\29\n405:SkNullBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n406:SkMatrix::getType\\28\\29\\20const\n407:SkArenaAlloc::makeBytesAlignedTo\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n408:GrGLSLVaryingHandler::addVarying\\28char\\20const*\\2c\\20GrGLSLVarying*\\2c\\20GrGLSLVaryingHandler::Interpolation\\29\n409:GrBackendFormats::AsGLFormat\\28GrBackendFormat\\20const&\\29\n410:FT_Stream_EnterFrame\n411:strstr\n412:std::__2::locale::id::__get\\28\\29\n413:std::__2::locale::facet::facet\\5babi:v160004\\5d\\28unsigned\\20long\\29\n414:skgpu::UniqueKey::~UniqueKey\\28\\29\n415:ft_mem_alloc\n416:SkString::operator=\\28char\\20const*\\29\n417:SkRect::setBoundsCheck\\28SkPoint\\20const*\\2c\\20int\\29\n418:SkDPoint::approximatelyEqual\\28SkDPoint\\20const&\\29\\20const\n419:GrProcessorSet::GrProcessorSet\\28GrPaint&&\\29\n420:GrOpFlushState::bindPipelineAndScissorClip\\28GrProgramInfo\\20const&\\2c\\20SkRect\\20const&\\29\n421:std::__2::locale::__imp::install\\28std::__2::locale::facet*\\2c\\20long\\29\n422:skia_private::TArray<unsigned\\20long\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n423:skia_png_muldiv\n424:f_t_mutex\\28\\29\n425:SkTDStorage::reserve\\28int\\29\n426:SkSL::RP::Builder::discard_stack\\28int\\29\n427:GrStyledShape::~GrStyledShape\\28\\29\n428:GrOp::~GrOp\\28\\29\n429:GrGeometryProcessor::AttributeSet::initImplicit\\28GrGeometryProcessor::Attribute\\20const*\\2c\\20int\\29\n430:void\\20SkSafeUnref<GrSurface>\\28GrSurface*\\29\n431:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::~basic_string\\28\\29\n432:skif::FilterResult::~FilterResult\\28\\29\n433:sk_sp<GrSurfaceProxy>::~sk_sp\\28\\29\n434:hb_buffer_t::unsafe_to_concat\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n435:bool\\20OT::OffsetTo<OT::Layout::Common::Coverage\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n436:SkSL::PipelineStage::PipelineStageCodeGenerator::writeExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::OperatorPrecedence\\29\n437:SkRegion::freeRuns\\28\\29\n438:SkRect::roundOut\\28\\29\\20const\n439:SkPoint::length\\28\\29\\20const\n440:SkPath::~SkPath\\28\\29\n441:SkMatrix::mapPoints\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n442:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n443:skvx::Vec<8\\2c\\20unsigned\\20short>\\20skvx::mulhi<8>\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\n444:hb_ot_map_builder_t::add_gsub_pause\\28bool\\20\\28*\\29\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\\29\n445:cf2_stack_pushFixed\n446:SkSL::RP::Builder::binary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n447:SkRect::contains\\28SkRect\\20const&\\29\\20const\n448:GrTextureEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\29\n449:GrShaderVar::GrShaderVar\\28char\\20const*\\2c\\20SkSLType\\2c\\20int\\29\n450:GrProcessor::operator\\20new\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n451:GrOp::GenID\\28std::__2::atomic<unsigned\\20int>*\\29\n452:GrImageInfo::GrImageInfo\\28GrImageInfo&&\\29\n453:GrGLSLVaryingHandler::addPassThroughAttribute\\28GrShaderVar\\20const&\\2c\\20char\\20const*\\2c\\20GrGLSLVaryingHandler::Interpolation\\29\n454:GrFragmentProcessor::registerChild\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSL::SampleUsage\\29\n455:textStyle_setDecoration\n456:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator*\\5babi:v160004\\5d\\28\\29\\20const\n457:std::__2::basic_streambuf<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::sgetc\\5babi:v160004\\5d\\28\\29\n458:std::__2::__split_buffer<int\\2c\\20std::__2::allocator<int>&>::~__split_buffer\\28\\29\n459:skia_private::THashTable<skia_private::THashMap<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20skia_private::THashMap<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20SkGoodHash>::Pair>::Hash\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\20const&\\29\n460:sk_sp<GrRenderTargetProxy>::~sk_sp\\28\\29\n461:hb_buffer_t::merge_clusters\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n462:dlrealloc\n463:byn$mgfn-shared$decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTriColorShader*\\20SkArenaAlloc::make<SkTriColorShader\\2c\\20bool\\2c\\20bool\\20const&>\\28bool&&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTriColorShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n464:SkSL::Nop::~Nop\\28\\29\n465:SkRecords::FillBounds::updateSaveBounds\\28SkRect\\20const&\\29\n466:SkPoint::normalize\\28\\29\n467:SkPath::lineTo\\28float\\2c\\20float\\29\n468:SkJSONWriter::write\\28char\\20const*\\2c\\20unsigned\\20long\\29\n469:GrSkSLFP::UniformPayloadSize\\28SkRuntimeEffect\\20const*\\29\n470:GrSkSLFP::GrSkSLFP\\28sk_sp<SkRuntimeEffect>\\2c\\20char\\20const*\\2c\\20GrSkSLFP::OptFlags\\29\n471:std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\\2c\\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n472:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::unique_ptr\\5babi:v160004\\5d<true\\2c\\20void>\\28char*\\2c\\20std::__2::__dependent_type<std::__2::__unique_ptr_deleter_sfinae<void\\20\\28*\\29\\28void*\\29>\\2c\\20true>::__good_rval_ref_type\\29\n473:std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n474:std::__2::enable_if<std::has_unique_object_representations<unsigned\\20int>::value\\20&&\\20sizeof\\20\\28unsigned\\20int\\29\\20==\\204\\2c\\20unsigned\\20int>::type\\20SkGoodHash::operator\\28\\29<unsigned\\20int>\\28unsigned\\20int\\20const&\\29\\20const\n475:std::__2::__throw_system_error\\28int\\2c\\20char\\20const*\\29\n476:skia_private::TArray<SkPoint\\2c\\20true>::push_back_raw\\28int\\29\n477:skgpu::UniqueKey::UniqueKey\\28\\29\n478:sk_sp<GrSurface>::reset\\28GrSurface*\\29\n479:__multi3\n480:SkTDArray<SkPoint>::push_back\\28SkPoint\\20const&\\29\n481:SkStrokeRec::getStyle\\28\\29\\20const\n482:SkSL::fold_expression\\28SkSL::Position\\2c\\20double\\2c\\20SkSL::Type\\20const*\\29\n483:SkPath::lineTo\\28SkPoint\\20const&\\29\n484:SkMatrix::mapRect\\28SkRect\\20const&\\2c\\20SkApplyPerspectiveClip\\29\\20const\n485:SkJSONWriter::appendBool\\28char\\20const*\\2c\\20bool\\29\n486:GrTriangulator::Comparator::sweep_lt\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\\20const\n487:CFF::arg_stack_t<CFF::number_t>::pop_uint\\28\\29\n488:std::__2::unique_ptr<unsigned\\20char\\2c\\20SkOverloadedFunctionObject<void\\20\\28void*\\29\\2c\\20&SkMaskBuilder::FreeImage\\28void*\\29>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n489:skia_png_crc_read\n490:SkSpinlock::acquire\\28\\29\n491:SkSL::Parser::rangeFrom\\28SkSL::Position\\29\n492:SkSL::Parser::checkNext\\28SkSL::Token::Kind\\2c\\20SkSL::Token*\\29\n493:SkMatrix::Translate\\28float\\2c\\20float\\29\n494:GrOpFlushState::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29\n495:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n496:std::__2::__throw_bad_function_call\\5babi:v160004\\5d\\28\\29\n497:std::__2::__split_buffer<int\\2c\\20std::__2::allocator<int>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<int>&\\29\n498:skif::FilterResult::FilterResult\\28\\29\n499:sk_malloc_throw\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\n500:sk_malloc_flags\\28unsigned\\20long\\2c\\20unsigned\\20int\\29\n501:hb_paint_funcs_t::pop_transform\\28void*\\29\n502:fma\n503:a_cas\n504:SkStrikeSpec::~SkStrikeSpec\\28\\29\n505:SkSL::SymbolTable::addWithoutOwnershipOrDie\\28SkSL::Symbol*\\29\n506:SkSL::RP::Builder::lastInstruction\\28int\\29\n507:SkMatrix::rectStaysRect\\28\\29\\20const\n508:SkMatrix::isScaleTranslate\\28\\29\\20const\n509:SkColorSpaceXformSteps::SkColorSpaceXformSteps\\28SkColorSpace\\20const*\\2c\\20SkAlphaType\\2c\\20SkColorSpace\\20const*\\2c\\20SkAlphaType\\29\n510:OT::ArrayOf<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n511:hb_draw_funcs_t::start_path\\28void*\\2c\\20hb_draw_state_t&\\29\n512:hb_buffer_t::reverse\\28\\29\n513:SkTDStorage::append\\28\\29\n514:SkTDArray<SkOpSpanBase*>::append\\28\\29\n515:SkString::operator=\\28SkString\\20const&\\29\n516:SkSL::Type::toCompound\\28SkSL::Context\\20const&\\2c\\20int\\2c\\20int\\29\\20const\n517:SkSL::RP::Generator::binaryOp\\28SkSL::Type\\20const&\\2c\\20SkSL::RP::Generator::TypedOps\\20const&\\29\n518:SkRecords::FillBounds::adjustAndMap\\28SkRect\\2c\\20SkPaint\\20const*\\29\\20const\n519:SkPath::operator=\\28SkPath\\20const&\\29\n520:SkMatrix::preConcat\\28SkMatrix\\20const&\\29\n521:SkMatrix::postTranslate\\28float\\2c\\20float\\29\n522:SkMatrix::mapRect\\28SkRect*\\2c\\20SkApplyPerspectiveClip\\29\\20const\n523:SkMatrix::Concat\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n524:SkDCubic::set\\28SkPoint\\20const*\\29\n525:GrStyle::isSimpleFill\\28\\29\\20const\n526:GrGLSLVaryingHandler::emitAttributes\\28GrGeometryProcessor\\20const&\\29\n527:BlockIndexIterator<SkRasterClipStack::Rec&\\2c\\20false\\2c\\20false\\2c\\20&SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::Decrement\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::GetItem\\28SkBlockAllocator::Block*\\2c\\20int\\29>::Item::setIndices\\28\\29\n528:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::reset\\5babi:v160004\\5d\\28unsigned\\20char*\\29\n529:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator++\\5babi:v160004\\5d\\28\\29\n530:skvx::Vec<8\\2c\\20unsigned\\20short>\\20skvx::operator+<8\\2c\\20unsigned\\20short>\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\n531:skgpu::VertexColor::set\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\29\n532:skgpu::ResourceKey::Builder::finish\\28\\29\n533:sk_sp<GrTexture>::~sk_sp\\28\\29\n534:pthread_mutex_unlock\n535:ft_validator_error\n536:_hb_next_syllable\\28hb_buffer_t*\\2c\\20unsigned\\20int\\29\n537:SkSL::Type::MakeAliasType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Type\\20const&\\29\n538:SkSL::Parser::error\\28SkSL::Token\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n539:SkSL::GLSLCodeGenerator::writeIdentifier\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n540:SkSL::ConstantFolder::GetConstantValueForVariable\\28SkSL::Expression\\20const&\\29\n541:SkPictureRecord::addPaintPtr\\28SkPaint\\20const*\\29\n542:SkPath::reset\\28\\29\n543:SkGlyph::rowBytes\\28\\29\\20const\n544:GrSurfaceProxy::backingStoreDimensions\\28\\29\\20const\n545:GrProgramInfo::visitFPProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n546:GrMeshDrawOp::createProgramInfo\\28GrMeshDrawTarget*\\29\n547:GrGpu::handleDirtyContext\\28\\29\n548:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator++\\5babi:v160004\\5d\\28\\29\n549:std::__2::__optional_destruct_base<AutoLayerForImageFilter\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n550:skvx::Vec<4\\2c\\20float>\\20skvx::operator*<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\\20\\28.6907\\29\n551:skvx::Vec<4\\2c\\20float>\\20\\28anonymous\\20namespace\\29::add_121<skvx::Vec<4\\2c\\20float>>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n552:skia_private::TArray<unsigned\\20long\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n553:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n554:pthread_mutex_lock\n555:machine_index_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>>::operator=\\28machine_index_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>>\\20const&\\29\n556:hb_draw_funcs_t::emit_line_to\\28void*\\2c\\20hb_draw_state_t&\\2c\\20float\\2c\\20float\\29\n557:SkWriter32::reserve\\28unsigned\\20long\\29\n558:SkTSect::pointLast\\28\\29\\20const\n559:SkTDArray<int>::push_back\\28int\\20const&\\29\n560:SkStrokeRec::isHairlineStyle\\28\\29\\20const\n561:SkSL::Type::MakeVectorType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20int\\29\n562:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitStatement\\28SkSL::Statement\\20const&\\29\n563:SkRect::join\\28SkRect\\20const&\\29\n564:SkPath::Iter::next\\28SkPoint*\\29\n565:SkMatrix::Scale\\28float\\2c\\20float\\29\n566:FT_Stream_ReadFields\n567:FT_Stream_GetULong\n568:target_from_texture_type\\28GrTextureType\\29\n569:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n570:std::__2::ctype<char>::widen\\5babi:v160004\\5d\\28char\\29\\20const\n571:std::__2::__unique_if<GrGLCaps::ColorTypeInfo::ExternalIOFormats\\20\\5b\\5d>::__unique_array_unknown_bound\\20std::__2::make_unique\\5babi:v160004\\5d<GrGLCaps::ColorTypeInfo::ExternalIOFormats\\20\\5b\\5d>\\28unsigned\\20long\\29\n572:skvx::Vec<4\\2c\\20unsigned\\20short>\\20skvx::operator+<4\\2c\\20unsigned\\20short>\\28skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\29\n573:skvx::Vec<4\\2c\\20unsigned\\20int>\\20skvx::operator+<4\\2c\\20unsigned\\20int>\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\n574:skia::textlayout::TextStyle::~TextStyle\\28\\29\n575:skia::textlayout::TextStyle::TextStyle\\28skia::textlayout::TextStyle\\20const&\\29\n576:png_icc_profile_error\n577:hb_font_t::get_nominal_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\29\n578:SkSL::RP::Program::makeStages\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20SkSpan<float\\20const>\\2c\\20SkSL::RP::Program::SlotData\\20const&\\29\\20const::$_2::operator\\28\\29\\28\\29\\20const\n579:SkSL::ConstructorCompound::MakeFromConstants\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20const*\\29\n580:SkRect::roundOut\\28SkIRect*\\29\\20const\n581:SkPathPriv::Iterate::Iterate\\28SkPath\\20const&\\29\n582:SkMatrix::postConcat\\28SkMatrix\\20const&\\29\n583:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_2::operator\\28\\29\\28SkRasterPipelineOp\\2c\\20SkRasterPipelineOp\\2c\\20\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n584:SkColorSpace::MakeSRGB\\28\\29\n585:SkBitmap::SkBitmap\\28SkBitmap\\20const&\\29\n586:OT::OffsetTo<OT::ColorLine<OT::NoVariable>\\2c\\20OT::IntType<unsigned\\20int\\2c\\203u>\\2c\\20true>::operator\\28\\29\\28void\\20const*\\29\\20const\n587:GrFragmentProcessor::ProgramImpl::invokeChild\\28int\\2c\\20GrFragmentProcessor::ProgramImpl::EmitArgs&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n588:FT_Stream_ReleaseFrame\n589:DefaultGeoProc::Impl::~Impl\\28\\29\n590:std::__2::enable_if<is_move_constructible<skia::textlayout::OneLineShaper::RunBlock>::value\\20&&\\20is_move_assignable<skia::textlayout::OneLineShaper::RunBlock>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<skia::textlayout::OneLineShaper::RunBlock>\\28skia::textlayout::OneLineShaper::RunBlock&\\2c\\20skia::textlayout::OneLineShaper::RunBlock&\\29\n591:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot*>\\28skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::Slot*\\29\n592:sk_srgb_singleton\\28\\29\n593:out\n594:cosf\n595:cf2_stack_popInt\n596:SkSemaphore::~SkSemaphore\\28\\29\n597:SkSL::Type::coerceExpression\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Context\\20const&\\29\\20const\n598:SkSL::Type::MakeGenericType\\28char\\20const*\\2c\\20SkSpan<SkSL::Type\\20const*\\20const>\\2c\\20SkSL::Type\\20const*\\29\n599:SkSL::RP::SlotManager::getVariableSlots\\28SkSL::Variable\\20const&\\29\n600:SkRGBA4f<\\28SkAlphaType\\292>::operator!=\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n601:SkPathStroker::lineTo\\28SkPoint\\20const&\\2c\\20SkPath::Iter\\20const*\\29\n602:SkPath::conicTo\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\29\n603:SkPaint::setColor\\28unsigned\\20int\\29\n604:SkImageInfo::minRowBytes\\28\\29\\20const\n605:SkDrawBase::~SkDrawBase\\28\\29\n606:SkDCubic::ptAtT\\28double\\29\\20const\n607:SkCanvas::internalQuickReject\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\29\n608:GrStyle::~GrStyle\\28\\29\n609:GrShaderVar::operator=\\28GrShaderVar&&\\29\n610:GrProcessor::operator\\20delete\\28void*\\29\n611:GrImageInfo::GrImageInfo\\28SkImageInfo\\20const&\\29\n612:GrColorInfo::GrColorInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\29\n613:GrCaps::getDefaultBackendFormat\\28GrColorType\\2c\\20skgpu::Renderable\\29\\20const\n614:FT_Outline_Translate\n615:std::__2::ctype<char>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::ctype<char>>\\28std::__2::locale\\20const&\\29\n616:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::push_back\\28char\\29\n617:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\5babi:v160004\\5d\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\29\n618:std::__2::__check_grouping\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int&\\29\n619:skvx::Vec<4\\2c\\20int>\\20skvx::operator|<4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20int>\\20const&\\29\n620:skia_private::TArray<int\\2c\\20true>::push_back\\28int&&\\29\n621:skia_png_chunk_report\n622:pad\n623:__memcpy\n624:__ashlti3\n625:SkTCoincident::setPerp\\28SkTCurve\\20const&\\2c\\20double\\2c\\20SkDPoint\\20const&\\2c\\20SkTCurve\\20const&\\29\n626:SkSL::Type::MakeMatrixType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20int\\2c\\20signed\\20char\\29\n627:SkSL::Parser::nextToken\\28\\29\n628:SkSL::Operator::tightOperatorName\\28\\29\\20const\n629:SkSL::Inliner::inlineExpression\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::Expression\\20const&\\29::$_0::operator\\28\\29\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const&\\29\\20const\n630:SkSL::Analysis::HasSideEffects\\28SkSL::Expression\\20const&\\29\n631:SkPath::Iter::setPath\\28SkPath\\20const&\\2c\\20bool\\29\n632:SkDVector::crossCheck\\28SkDVector\\20const&\\29\\20const\n633:SkColorSpaceXformSteps::apply\\28float*\\29\\20const\n634:SkBlitter::~SkBlitter\\28\\29\n635:SkBitmapDevice::drawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n636:GrSimpleMeshDrawOpHelper::~GrSimpleMeshDrawOpHelper\\28\\29\n637:GrSimpleMeshDrawOpHelper::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n638:GrShape::reset\\28\\29\n639:GrShaderVar::appendDecl\\28GrShaderCaps\\20const*\\2c\\20SkString*\\29\\20const\n640:GrQuad::MakeFromRect\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n641:GrOpFlushState::drawMesh\\28GrSimpleMesh\\20const&\\29\n642:GrMatrixEffect::Make\\28SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n643:GrAAConvexTessellator::Ring::index\\28int\\29\\20const\n644:DefaultGeoProc::~DefaultGeoProc\\28\\29\n645:std::__2::unique_ptr<GrShaderCaps\\2c\\20std::__2::default_delete<GrShaderCaps>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n646:skia_private::TArray<unsigned\\20int\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n647:skgpu::ResourceKey::operator==\\28skgpu::ResourceKey\\20const&\\29\\20const\n648:hb_buffer_t::unsafe_to_break_from_outbuffer\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n649:cff2_path_procs_extents_t::curve\\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n650:cff2_path_param_t::cubic_to\\28CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n651:cff1_path_procs_extents_t::curve\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n652:cff1_path_param_t::cubic_to\\28CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n653:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28\\29\\20const\n654:byn$mgfn-shared$std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28\\29\\20const\n655:_hb_glyph_info_get_modified_combining_class\\28hb_glyph_info_t\\20const*\\29\n656:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n657:SkRasterPipeline::extend\\28SkRasterPipeline\\20const&\\29\n658:SkPixmap::operator=\\28SkPixmap\\20const&\\29\n659:SkPath::moveTo\\28SkPoint\\20const&\\29\n660:SkPath::close\\28\\29\n661:SkPath::RangeIter::operator++\\28\\29\n662:SkOpPtT::contains\\28SkOpPtT\\20const*\\29\\20const\n663:SkNullBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n664:SkMatrixPriv::CheapEqual\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n665:SkIRect::intersect\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n666:SkAAClipBlitterWrapper::~SkAAClipBlitterWrapper\\28\\29\n667:OT::hb_paint_context_t::recurse\\28OT::Paint\\20const&\\29\n668:OT::hb_ot_apply_context_t::init_iters\\28\\29\n669:GrTextureProxy::mipmapped\\28\\29\\20const\n670:GrStyledShape::asPath\\28SkPath*\\29\\20const\n671:GrShape::bounds\\28\\29\\20const\n672:GrShaderVar::GrShaderVar\\28char\\20const*\\2c\\20SkSLType\\2c\\20GrShaderVar::TypeModifier\\29\n673:GrGLGpu::setTextureUnit\\28int\\29\n674:GrGLGpu::clearErrorsAndCheckForOOM\\28\\29\n675:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::~Impl\\28\\29\n676:GrCPixmap::GrCPixmap\\28GrImageInfo\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n677:GrAppliedClip::~GrAppliedClip\\28\\29\n678:FT_Load_Glyph\n679:CFF::cff_stack_t<CFF::number_t\\2c\\20513>::pop\\28\\29\n680:void\\20SkOnce::operator\\28\\29<void\\20\\28&\\29\\28SkAlignedSTStorage<1\\2c\\20skgpu::UniqueKey>*\\29\\2c\\20SkAlignedSTStorage<1\\2c\\20skgpu::UniqueKey>*>\\28void\\20\\28&\\29\\28SkAlignedSTStorage<1\\2c\\20skgpu::UniqueKey>*\\29\\2c\\20SkAlignedSTStorage<1\\2c\\20skgpu::UniqueKey>*&&\\29\n681:std::__2::unique_ptr<GrGLCaps::ColorTypeInfo\\20\\5b\\5d\\2c\\20std::__2::default_delete<GrGLCaps::ColorTypeInfo\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n682:std::__2::numpunct<char>::thousands_sep\\5babi:v160004\\5d\\28\\29\\20const\n683:std::__2::numpunct<char>::grouping\\5babi:v160004\\5d\\28\\29\\20const\n684:std::__2::ctype<wchar_t>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::ctype<wchar_t>>\\28std::__2::locale\\20const&\\29\n685:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__move_assign\\5babi:v160004\\5d\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::integral_constant<bool\\2c\\20true>\\29\n686:std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>::__throw_length_error\\5babi:v160004\\5d\\28\\29\\20const\n687:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator<<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n688:skgpu::ResourceKey::Builder::Builder\\28skgpu::ResourceKey*\\2c\\20unsigned\\20int\\2c\\20int\\29\n689:rewind\\28GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n690:hb_sanitize_context_t::end_processing\\28\\29\n691:hb_buffer_t::move_to\\28unsigned\\20int\\29\n692:ft_mem_qalloc\n693:_output_with_dotted_circle\\28hb_buffer_t*\\29\n694:SkTSpan::pointLast\\28\\29\\20const\n695:SkTDStorage::resize\\28int\\29\n696:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitExpression\\28SkSL::Expression\\20const&\\29\n697:SkSL::Parser::rangeFrom\\28SkSL::Token\\29\n698:SkSL::FunctionDeclaration::description\\28\\29\\20const\n699:SkPathRef::isFinite\\28\\29\\20const\n700:SkMatrix::mapXY\\28float\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n701:SkDrawable::getFlattenableType\\28\\29\\20const\n702:SkDPoint::ApproximatelyEqual\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n703:SkBlockAllocator::reset\\28\\29\n704:GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20bool*\\29\n705:GrGeometryProcessor::ProgramImpl::SetTransform\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix*\\29\n706:GrGLSLVertexGeoBuilder::insertFunction\\28char\\20const*\\29\n707:GrDrawingManager::flushIfNecessary\\28\\29\n708:FT_Stream_ExtractFrame\n709:Cr_z_crc32\n710:std::__2::enable_if<_CheckArrayPointerConversion<GrGLCaps::ColorTypeInfo*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<GrGLCaps::ColorTypeInfo\\20\\5b\\5d\\2c\\20std::__2::default_delete<GrGLCaps::ColorTypeInfo\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<GrGLCaps::ColorTypeInfo*>\\28GrGLCaps::ColorTypeInfo*\\29\n711:std::__2::ctype<wchar_t>::widen\\5babi:v160004\\5d\\28char\\29\\20const\n712:std::__2::char_traits<char>::assign\\28char&\\2c\\20char\\20const&\\29\n713:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_long_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n714:std::__2::__unique_if<GrGLCaps::ColorTypeInfo\\20\\5b\\5d>::__unique_array_unknown_bound\\20std::__2::make_unique\\5babi:v160004\\5d<GrGLCaps::ColorTypeInfo\\20\\5b\\5d>\\28unsigned\\20long\\29\n715:std::__2::__compressed_pair_elem<void\\20\\28*\\29\\28void*\\29\\2c\\201\\2c\\20false>::__compressed_pair_elem\\5babi:v160004\\5d<void\\20\\28*\\29\\28void*\\29\\2c\\20void>\\28void\\20\\28*&&\\29\\28void*\\29\\29\n716:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator<<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n717:skia_private::TArray<int\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n718:skgpu::tess::StrokeIterator::enqueue\\28skgpu::tess::StrokeIterator::Verb\\2c\\20SkPoint\\20const*\\2c\\20float\\20const*\\29\n719:skgpu::ganesh::SurfaceFillContext::getOpsTask\\28\\29\n720:skgpu::ganesh::AsView\\28GrRecordingContext*\\2c\\20SkImage\\20const*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n721:fmodf\n722:__addtf3\n723:SkSL::RP::Builder::push_constant_i\\28int\\2c\\20int\\29\n724:SkSL::RP::Builder::label\\28int\\29\n725:SkPathRef::Editor::Editor\\28sk_sp<SkPathRef>*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n726:SkPath::isConvex\\28\\29\\20const\n727:SkPaintToGrPaint\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n728:SkPaint::asBlendMode\\28\\29\\20const\n729:SkMatrix::preTranslate\\28float\\2c\\20float\\29\n730:SkImageInfo::operator=\\28SkImageInfo\\20const&\\29\n731:SkImageInfo::MakeA8\\28int\\2c\\20int\\29\n732:SkImageGenerator::onIsValid\\28GrRecordingContext*\\29\\20const\n733:SkImageGenerator::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageGenerator::Options\\20const&\\29\n734:SkDevice::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n735:SkCanvas::aboutToDraw\\28SkPaint\\20const&\\2c\\20SkRect\\20const*\\29\n736:GrSkSLFP::addChild\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20bool\\29\n737:GrProcessorSet::~GrProcessorSet\\28\\29\n738:GrGeometryProcessor::Attribute&\\20skia_private::TArray<GrGeometryProcessor::Attribute\\2c\\20true>::emplace_back<char\\20const\\20\\28&\\29\\20\\5b10\\5d\\2c\\20GrVertexAttribType\\2c\\20SkSLType>\\28char\\20const\\20\\28&\\29\\20\\5b10\\5d\\2c\\20GrVertexAttribType&&\\2c\\20SkSLType&&\\29\n739:GrGLGpu::bindBuffer\\28GrGpuBufferType\\2c\\20GrBuffer\\20const*\\29\n740:GrFragmentProcessor::ProgramImpl::invokeChild\\28int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrFragmentProcessor::ProgramImpl::EmitArgs&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n741:FT_Stream_ReadByte\n742:ubidi_getParaLevelAtIndex_skia\n743:std::__2::char_traits<char>::copy\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n744:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::begin\\5babi:v160004\\5d\\28\\29\n745:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_short_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n746:std::__2::__libcpp_snprintf_l\\28char*\\2c\\20unsigned\\20long\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n747:skia_private::TArray<bool\\2c\\20true>::push_back\\28bool&&\\29\n748:skia::textlayout::OneLineShaper::RunBlock::operator=\\28skia::textlayout::OneLineShaper::RunBlock&&\\29\n749:skia::textlayout::Cluster::run\\28\\29\\20const\n750:skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::AddTrianglesWhenChopping\\2c\\20skgpu::tess::DiscardFlatCurves>::accountForCurve\\28float\\29\n751:skgpu::ganesh::SurfaceContext::PixelTransferResult::~PixelTransferResult\\28\\29\n752:is_equal\\28std::type_info\\20const*\\2c\\20std::type_info\\20const*\\2c\\20bool\\29\n753:hb_ot_map_t::get_1_mask\\28unsigned\\20int\\29\\20const\n754:hb_font_get_glyph\n755:hb_draw_funcs_t::emit_quadratic_to\\28void*\\2c\\20hb_draw_state_t&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n756:hb_buffer_t::unsafe_to_concat_from_outbuffer\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n757:cff_index_get_sid_string\n758:_hb_font_funcs_set_middle\\28hb_font_funcs_t*\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\29\\29\n759:__floatsitf\n760:SkWriter32::writeScalar\\28float\\29\n761:SkTDArray<\\28anonymous\\20namespace\\29::YOffset>::append\\28\\29\n762:SkString::data\\28\\29\n763:SkSL::RP::Generator::pushVectorizedExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n764:SkSL::RP::Builder::swizzle\\28int\\2c\\20SkSpan<signed\\20char\\20const>\\29\n765:SkSL::Parser::error\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n766:SkSL::Nop::Make\\28\\29\n767:SkRegion::setRect\\28SkIRect\\20const&\\29\n768:SkMatrix::getMaxScale\\28\\29\\20const\n769:SkJSONWriter::appendHexU32\\28char\\20const*\\2c\\20unsigned\\20int\\29\n770:SkBlender::Mode\\28SkBlendMode\\29\n771:SkBitmap::tryAllocPixels\\28SkImageInfo\\20const&\\29\n772:SkBitmap::setInfo\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n773:SkArenaAlloc::SkArenaAlloc\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n774:OT::hb_ot_apply_context_t::skipping_iterator_t::next\\28unsigned\\20int*\\29\n775:OT::VarSizedBinSearchArrayOf<AAT::LookupSegmentArray<OT::HBGlyphID16>>::get_length\\28\\29\\20const\n776:GrMeshDrawTarget::allocMesh\\28\\29\n777:GrGLGpu::bindTextureToScratchUnit\\28unsigned\\20int\\2c\\20int\\29\n778:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n779:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::~SwizzleFragmentProcessor\\28\\29\n780:GrCaps::getReadSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n781:GrBackendFormat::GrBackendFormat\\28GrBackendFormat\\20const&\\29\n782:CFF::cff1_cs_opset_t<cff1_cs_opset_extents_t\\2c\\20cff1_extents_param_t\\2c\\20cff1_path_procs_extents_t>::check_width\\28unsigned\\20int\\2c\\20CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\29\n783:AutoFTAccess::AutoFTAccess\\28SkTypeface_FreeType\\20const*\\29\n784:void\\20SkSafeUnref<SharedGenerator>\\28SharedGenerator*\\29\n785:strchr\n786:std::__2::vector<int\\2c\\20std::__2::allocator<int>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<int\\2c\\20std::__2::allocator<int>&>&\\29\n787:std::__2::ctype<char>::is\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20char\\29\\20const\n788:std::__2::__function::__value_func<void\\20\\28\\29>::__value_func\\5babi:v160004\\5d\\28std::__2::__function::__value_func<void\\20\\28\\29>&&\\29\n789:skif::Context::~Context\\28\\29\n790:skia_private::TArray<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>::reserve_exact\\28int\\29\n791:skia_png_get_uint_32\n792:skia::textlayout::OneLineShaper::clusterIndex\\28unsigned\\20long\\29\n793:skgpu::ganesh::SurfaceDrawContext::chooseAAType\\28GrAA\\29\n794:skgpu::UniqueKey::GenerateDomain\\28\\29\n795:hb_buffer_t::sync_so_far\\28\\29\n796:hb_buffer_t::sync\\28\\29\n797:em_task_queue_is_empty\n798:compute_side\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n799:cff_parse_num\n800:byn$mgfn-shared$skia_private::TArray<SkNoPixelsDevice::ClipState\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n801:SkWriter32::writeRect\\28SkRect\\20const&\\29\n802:SkSL::Type::clone\\28SkSL::Context\\20const&\\2c\\20SkSL::SymbolTable*\\29\\20const\n803:SkSL::SymbolTable::find\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n804:SkSL::RP::Generator::writeStatement\\28SkSL::Statement\\20const&\\29\n805:SkSL::RP::Builder::unary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n806:SkSL::Parser::operatorRight\\28SkSL::Parser::AutoDepth&\\2c\\20SkSL::OperatorKind\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20\\28SkSL::Parser::*\\29\\28\\29\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&\\29\n807:SkSL::Parser::expression\\28\\29\n808:SkRecords::FillBounds::pushControl\\28\\29\n809:SkRasterClip::~SkRasterClip\\28\\29\n810:SkRGBA4f<\\28SkAlphaType\\293>::FromColor\\28unsigned\\20int\\29\n811:SkPath::moveTo\\28float\\2c\\20float\\29\n812:SkPaint::setBlendMode\\28SkBlendMode\\29\n813:SkM44::asM33\\28\\29\\20const\n814:SkImageFilter_Base::getFlattenableType\\28\\29\\20const\n815:SkIRect::makeOutset\\28int\\2c\\20int\\29\\20const\n816:SkDQuad::ptAtT\\28double\\29\\20const\n817:SkDConic::ptAtT\\28double\\29\\20const\n818:SkArenaAlloc::~SkArenaAlloc\\28\\29\n819:SkAAClip::setEmpty\\28\\29\n820:OT::hb_ot_apply_context_t::skipping_iterator_t::reset\\28unsigned\\20int\\29\n821:GrTriangulator::Line::intersect\\28GrTriangulator::Line\\20const&\\2c\\20SkPoint*\\29\\20const\n822:GrImageInfo::GrImageInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkISize\\20const&\\29\n823:GrGpuBuffer::unmap\\28\\29\n824:GrGeometryProcessor::ProgramImpl::WriteLocalCoord\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20GrShaderVar\\2c\\20SkMatrix\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n825:GrGeometryProcessor::ProgramImpl::ComputeMatrixKey\\28GrShaderCaps\\20const&\\2c\\20SkMatrix\\20const&\\29\n826:GrFragmentProcessors::Make\\28SkShader\\20const*\\2c\\20GrFPArgs\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\n827:GrFragmentProcessor::GrFragmentProcessor\\28GrFragmentProcessor\\20const&\\29\n828:void\\20SkSafeUnref<SkMipmap>\\28SkMipmap*\\29\n829:ubidi_getMemory_skia\n830:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::~vector\\5babi:v160004\\5d\\28\\29\n831:std::__2::unique_ptr<SkSL::ConstructorArrayCast\\2c\\20std::__2::default_delete<SkSL::ConstructorArrayCast>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n832:std::__2::optional<SkBlendMode>::value\\5babi:v160004\\5d\\28\\29\\20const\\20&\n833:std::__2::numpunct<char>::truename\\5babi:v160004\\5d\\28\\29\\20const\n834:std::__2::numpunct<char>::falsename\\5babi:v160004\\5d\\28\\29\\20const\n835:std::__2::numpunct<char>::decimal_point\\5babi:v160004\\5d\\28\\29\\20const\n836:std::__2::moneypunct<char\\2c\\20false>::do_grouping\\28\\29\\20const\n837:std::__2::ctype<wchar_t>::is\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20wchar_t\\29\\20const\n838:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::empty\\5babi:v160004\\5d\\28\\29\\20const\n839:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_long_cap\\5babi:v160004\\5d\\28unsigned\\20long\\29\n840:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__is_long\\5babi:v160004\\5d\\28\\29\\20const\n841:skvx::Vec<4\\2c\\20float>\\20skvx::operator-<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n842:skvx::Vec<4\\2c\\20float>\\20skvx::operator*<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n843:skif::LayerSpace<SkIRect>::outset\\28skif::LayerSpace<SkISize>\\20const&\\29\n844:skif::Context::Context\\28skif::Context\\20const&\\29\n845:skia_private::THashTable<skia_private::THashMap<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20skia_private::THashMap<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20SkGoodHash>::Pair&&\\29\n846:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::Hash\\28SkImageFilter\\20const*\\20const&\\29\n847:skia_private::TArray<float\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n848:skia_private::TArray<GrGeometryProcessor::Attribute\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n849:skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>::STArray\\28skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>&&\\29\n850:skia_png_reciprocal\n851:skia_png_malloc_warn\n852:skia::textlayout::\\28anonymous\\20namespace\\29::relax\\28float\\29\n853:skgpu::ganesh::SurfaceFillContext::arenaAlloc\\28\\29\n854:skgpu::ganesh::SurfaceContext::readPixels\\28GrDirectContext*\\2c\\20GrPixmap\\2c\\20SkIPoint\\29\n855:skgpu::Swizzle::RGBA\\28\\29\n856:sk_sp<SkData>::reset\\28SkData*\\29\n857:sk_sp<GrXferProcessor\\20const>::~sk_sp\\28\\29\n858:operator==\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n859:crc32_z\n860:__unlockfile\n861:__lockfile\n862:SkTSect::SkTSect\\28SkTCurve\\20const&\\29\n863:SkSL::String::Separator\\28\\29\n864:SkSL::RP::Generator::pushIntrinsic\\28SkSL::RP::BuilderOp\\2c\\20SkSL::Expression\\20const&\\29\n865:SkSL::ProgramConfig::strictES2Mode\\28\\29\\20const\n866:SkSL::Parser::layoutInt\\28\\29\n867:SkRegion::Cliperator::next\\28\\29\n868:SkRegion::Cliperator::Cliperator\\28SkRegion\\20const&\\2c\\20SkIRect\\20const&\\29\n869:SkPathRef::growForVerb\\28int\\2c\\20float\\29\n870:SkPath::transform\\28SkMatrix\\20const&\\2c\\20SkPath*\\2c\\20SkApplyPerspectiveClip\\29\\20const\n871:SkPaint::setColor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkColorSpace*\\29\n872:SkMipmap::ComputeLevelCount\\28int\\2c\\20int\\29\n873:SkMatrix::MakeAll\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n874:SkImageInfo::operator=\\28SkImageInfo&&\\29\n875:SkDLine::nearPoint\\28SkDPoint\\20const&\\2c\\20bool*\\29\\20const\n876:SkChopQuadAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\29\n877:SkBaseShadowTessellator::appendTriangle\\28unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n878:SkAutoConicToQuads::computeQuads\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\29\n879:OT::hb_ot_apply_context_t::~hb_ot_apply_context_t\\28\\29\n880:OT::hb_ot_apply_context_t::hb_ot_apply_context_t\\28unsigned\\20int\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20hb_blob_t*\\29\n881:OT::ClassDef::get_class\\28unsigned\\20int\\29\\20const\n882:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::$_4::operator\\28\\29\\28char\\20const*\\29\\20const\n883:GrSimpleMeshDrawOpHelper::isCompatible\\28GrSimpleMeshDrawOpHelper\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\29\\20const\n884:GrShaderVar::GrShaderVar\\28GrShaderVar\\20const&\\29\n885:GrQuad::writeVertex\\28int\\2c\\20skgpu::VertexWriter&\\29\\20const\n886:GrOpFlushState::bindBuffers\\28sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20GrPrimitiveRestart\\29\n887:GrGLGpu::getErrorAndCheckForOOM\\28\\29\n888:GrGLFunction<void\\20\\28int\\2c\\20int\\2c\\20float\\20const*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20int\\2c\\20float\\20const*\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20float\\20const*\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20float\\20const*\\29\n889:GrColorInfo::GrColorInfo\\28SkColorInfo\\20const&\\29\n890:GrAAConvexTessellator::addTri\\28int\\2c\\20int\\2c\\20int\\29\n891:FT_Stream_ReadULong\n892:FT_Get_Module\n893:AlmostBequalUlps\\28double\\2c\\20double\\29\n894:tt_face_get_name\n895:std::__2::vector<SkRuntimeEffect::ChildPtr\\2c\\20std::__2::allocator<SkRuntimeEffect::ChildPtr>>::~vector\\5babi:v160004\\5d\\28\\29\n896:std::__2::unique_ptr<void\\2c\\20SkAutoMalloc::WrapFree>::reset\\5babi:v160004\\5d\\28void*\\29\n897:std::__2::optional<MaskValue>::value\\5babi:v160004\\5d\\28\\29\\20&\n898:std::__2::optional<GrStyledShape>::value\\5babi:v160004\\5d\\28\\29\\20&\n899:std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29\n900:std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29\n901:std::__2::__libcpp_locale_guard::~__libcpp_locale_guard\\5babi:v160004\\5d\\28\\29\n902:std::__2::__libcpp_locale_guard::__libcpp_locale_guard\\5babi:v160004\\5d\\28__locale_struct*&\\29\n903:skvx::Vec<4\\2c\\20float>&\\20skvx::operator+=<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20\\28.5786\\29\n904:skvx::Vec<2\\2c\\20float>\\20skvx::max<2\\2c\\20float>\\28skvx::Vec<2\\2c\\20float>\\20const&\\2c\\20skvx::Vec<2\\2c\\20float>\\20const&\\29\n905:sk_sp<SkTypeface>::operator=\\28sk_sp<SkTypeface>\\20const&\\29\n906:sk_sp<SkTypeface>&\\20skia_private::TArray<sk_sp<SkTypeface>\\2c\\20true>::emplace_back<sk_sp<SkTypeface>>\\28sk_sp<SkTypeface>&&\\29\n907:skData_getConstPointer\n908:sinf\n909:path_cubicTo\n910:inflateStateCheck\n911:hb_vector_t<unsigned\\20int\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n912:hb_user_data_array_t::fini\\28\\29\n913:hb_iter_t<machine_index_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>>::operator+\\28unsigned\\20int\\29\\20const\n914:hb_indic_would_substitute_feature_t::would_substitute\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20hb_face_t*\\29\\20const\n915:hb_font_t::get_glyph_h_advance\\28unsigned\\20int\\29\n916:hb_draw_funcs_t::emit_close_path\\28void*\\2c\\20hb_draw_state_t&\\29\n917:ft_module_get_service\n918:degenerate_vector\\28SkPoint\\20const&\\29\n919:byn$mgfn-shared$skia_private::TArray<sk_sp<SkShader>\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n920:bool\\20hb_sanitize_context_t::check_array<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20unsigned\\20int\\29\\20const\n921:__sindf\n922:__shlim\n923:__cosdf\n924:SkWriter32::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n925:SkString::equals\\28SkString\\20const&\\29\\20const\n926:SkSL::evaluate_pairwise_intrinsic\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n927:SkSL::StringStream::str\\28\\29\\20const\n928:SkSL::RP::Generator::makeLValue\\28SkSL::Expression\\20const&\\2c\\20bool\\29\n929:SkSL::Parser::expressionOrPoison\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n930:SkSL::GLSLCodeGenerator::getTypeName\\28SkSL::Type\\20const&\\29\n931:SkSL::BinaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n932:SkRegion::setEmpty\\28\\29\n933:SkRect::round\\28\\29\\20const\n934:SkPixmap::SkPixmap\\28SkPixmap\\20const&\\29\n935:SkPaint::getAlpha\\28\\29\\20const\n936:SkMatrix::preScale\\28float\\2c\\20float\\29\n937:SkIRect::makeOffset\\28int\\2c\\20int\\29\\20const\n938:SkIRect::join\\28SkIRect\\20const&\\29\n939:SkDrawBase::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\\20const\n940:SkDevice::makeSpecial\\28SkBitmap\\20const&\\29\n941:SkData::PrivateNewWithCopy\\28void\\20const*\\2c\\20unsigned\\20long\\29\n942:SkData::MakeUninitialized\\28unsigned\\20long\\29\n943:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\29\n944:SkCanvas::concat\\28SkMatrix\\20const&\\29\n945:SkCanvas::checkForDeferredSave\\28\\29\n946:SkBitmapCache::Rec::getKey\\28\\29\\20const\n947:SkAAClip::Builder::addRun\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n948:GrTriangulator::Line::Line\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n949:GrTriangulator::Edge::isRightOf\\28GrTriangulator::Vertex\\20const&\\29\\20const\n950:GrStyledShape::GrStyledShape\\28GrStyledShape\\20const&\\29\n951:GrShape::setType\\28GrShape::Type\\29\n952:GrPixmapBase<void\\2c\\20GrPixmap>::GrPixmapBase\\28GrPixmapBase<void\\2c\\20GrPixmap>\\20const&\\29\n953:GrMakeUncachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29\n954:GrIORef<GrGpuResource>::unref\\28\\29\\20const\n955:GrGeometryProcessor::TextureSampler::reset\\28GrSamplerState\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n956:GrGLSLShaderBuilder::getMangledFunctionName\\28char\\20const*\\29\n957:GrGLGpu::deleteFramebuffer\\28unsigned\\20int\\29\n958:GrGLExtensions::has\\28char\\20const*\\29\\20const\n959:GrBackendFormats::MakeGL\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n960:vsnprintf\n961:top12\n962:std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>::erase\\28std::__2::__wrap_iter<SkSL::ProgramElement\\20const*\\20const*>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const*\\20const*>\\29\n963:std::__2::unique_ptr<SkPicture\\20const*\\2c\\20SkOverloadedFunctionObject<void\\20\\28void*\\29\\2c\\20&sk_free\\28void*\\29>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n964:std::__2::to_string\\28long\\20long\\29\n965:std::__2::pair<std::__2::__unwrap_ref_decay<char\\20const*>::type\\2c\\20std::__2::__unwrap_ref_decay<char*>::type>\\20std::__2::make_pair\\5babi:v160004\\5d<char\\20const*\\2c\\20char*>\\28char\\20const*&&\\2c\\20char*&&\\29\n966:std::__2::optional<SkMask>::value\\5babi:v160004\\5d\\28\\29\\20&\n967:std::__2::locale::use_facet\\28std::__2::locale::id&\\29\\20const\n968:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator=\\5babi:v160004\\5d\\28std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&&\\29\n969:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n970:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__init\\28char\\20const*\\2c\\20unsigned\\20long\\29\n971:std::__2::__throw_bad_optional_access\\5babi:v160004\\5d\\28\\29\n972:std::__2::__split_buffer<SkString\\2c\\20std::__2::allocator<SkString>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkString>&\\29\n973:std::__2::__num_put_base::__identify_padding\\28char*\\2c\\20char*\\2c\\20std::__2::ios_base\\20const&\\29\n974:std::__2::__num_get_base::__get_base\\28std::__2::ios_base&\\29\n975:std::__2::__libcpp_asprintf_l\\28char**\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n976:skvx::Vec<4\\2c\\20float>\\20skvx::abs<4>\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n977:skvx::Vec<2\\2c\\20float>\\20skvx::min<2\\2c\\20float>\\28skvx::Vec<2\\2c\\20float>\\20const&\\2c\\20skvx::Vec<2\\2c\\20float>\\20const&\\29\n978:sktext::gpu::BagOfBytes::allocateBytes\\28int\\2c\\20int\\29\n979:skia_private::TArray<unsigned\\20long\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n980:skia_private::TArray<SkString\\2c\\20true>::~TArray\\28\\29\n981:skia_private::TArray<SkPoint\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n982:skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n983:skia_png_malloc_base\n984:skia::textlayout::TextLine::iterateThroughVisualRuns\\28bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>\\20const&\\29\\20const\n985:skgpu::ganesh::SurfaceDrawContext::numSamples\\28\\29\\20const\n986:sk_sp<skgpu::RefCntedCallback>::~sk_sp\\28\\29\n987:sk_sp<GrBufferAllocPool::CpuBufferCache>::~sk_sp\\28\\29\n988:round\n989:qsort\n990:path_quadraticBezierTo\n991:operator==\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n992:is_one_of\\28hb_glyph_info_t\\20const&\\2c\\20unsigned\\20int\\29\n993:int\\20std::__2::__get_up_to_n_digits\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20int\\29\n994:int\\20std::__2::__get_up_to_n_digits\\5babi:v160004\\5d<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20int\\29\n995:hb_lazy_loader_t<OT::OS2\\2c\\20hb_table_lazy_loader_t<OT::OS2\\2c\\206u\\2c\\20true>\\2c\\20hb_face_t\\2c\\206u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n996:hb_font_t::has_glyph\\28unsigned\\20int\\29\n997:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n998:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n999:bool\\20std::__2::operator!=\\5babi:v160004\\5d<char*>\\28std::__2::__wrap_iter<char*>\\20const&\\2c\\20std::__2::__wrap_iter<char*>\\20const&\\29\n1000:bool\\20hb_sanitize_context_t::check_array<OT::HBGlyphID16>\\28OT::HBGlyphID16\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1001:bool\\20OT::OffsetTo<OT::Device\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1002:bool\\20OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20false>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1003:bool\\20OT::Layout::Common::Coverage::collect_coverage<hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>>\\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>*\\29\\20const\n1004:addPoint\\28UBiDi*\\2c\\20int\\2c\\20int\\29\n1005:__extenddftf2\n1006:\\28anonymous\\20namespace\\29::extension_compare\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\n1007:\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n1008:\\28anonymous\\20namespace\\29::colrv1_transform\\28FT_FaceRec_*\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkCanvas*\\2c\\20SkMatrix*\\29\n1009:SkUTF::NextUTF8\\28char\\20const**\\2c\\20char\\20const*\\29\n1010:SkUTF::NextUTF8WithReplacement\\28char\\20const**\\2c\\20char\\20const*\\29\n1011:SkTInternalLList<sktext::gpu::TextBlob>::addToHead\\28sktext::gpu::TextBlob*\\29\n1012:SkTDStorage::removeShuffle\\28int\\29\n1013:SkTDArray<void*>::push_back\\28void*\\20const&\\29\n1014:SkTCopyOnFirstWrite<SkPaint>::writable\\28\\29\n1015:SkSL::cast_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n1016:SkSL::StringStream::~StringStream\\28\\29\n1017:SkSL::RP::LValue::~LValue\\28\\29\n1018:SkSL::RP::Generator::pushIntrinsic\\28SkSL::RP::Generator::TypedOps\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n1019:SkSL::InlineCandidateAnalyzer::visitExpression\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\29\n1020:SkSL::GLSLCodeGenerator::writeType\\28SkSL::Type\\20const&\\29\n1021:SkSL::GLSLCodeGenerator::writeStatement\\28SkSL::Statement\\20const&\\29\n1022:SkSL::Expression::isBoolLiteral\\28\\29\\20const\n1023:SkSL::Analysis::IsCompileTimeConstant\\28SkSL::Expression\\20const&\\29\n1024:SkRasterPipelineBlitter::appendLoadDst\\28SkRasterPipeline*\\29\\20const\n1025:SkPoint::Distance\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1026:SkPathRef::getBounds\\28\\29\\20const\n1027:SkPath::isRect\\28SkRect*\\2c\\20bool*\\2c\\20SkPathDirection*\\29\\20const\n1028:SkPath::injectMoveToIfNeeded\\28\\29\n1029:SkNVRefCnt<SkData>::unref\\28\\29\\20const\n1030:SkMatrix::setScaleTranslate\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n1031:SkMatrix::postScale\\28float\\2c\\20float\\29\n1032:SkMatrix::mapVector\\28float\\2c\\20float\\29\\20const\n1033:SkMatrix::isSimilarity\\28float\\29\\20const\n1034:SkJSONWriter::endArray\\28\\29\n1035:SkJSONWriter::beginArray\\28char\\20const*\\2c\\20bool\\29\n1036:SkJSONWriter::appendS32\\28char\\20const*\\2c\\20int\\29\n1037:SkJSONWriter::appendName\\28char\\20const*\\29\n1038:SkIntersections::removeOne\\28int\\29\n1039:SkImages::RasterFromBitmap\\28SkBitmap\\20const&\\29\n1040:SkImage_Ganesh::SkImage_Ganesh\\28sk_sp<GrImageContext>\\2c\\20unsigned\\20int\\2c\\20GrSurfaceProxyView\\2c\\20SkColorInfo\\29\n1041:SkImageInfo::Make\\28int\\2c\\20int\\2c\\20SkColorType\\2c\\20SkAlphaType\\29\n1042:SkImageFilter_Base::getChildInputLayerBounds\\28int\\2c\\20skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n1043:SkGlyph::iRect\\28\\29\\20const\n1044:SkFindUnitQuadRoots\\28float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n1045:SkColorSpaceXformSteps::Flags::mask\\28\\29\\20const\n1046:SkBlockAllocator::BlockIter<false\\2c\\20false>::Item::operator++\\28\\29\n1047:SkBitmap::peekPixels\\28SkPixmap*\\29\\20const\n1048:SkAAClip::freeRuns\\28\\29\n1049:OT::hb_ot_apply_context_t::set_lookup_mask\\28unsigned\\20int\\2c\\20bool\\29\n1050:OT::cmap::find_subtable\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n1051:GrWindowRectangles::~GrWindowRectangles\\28\\29\n1052:GrTriangulator::EdgeList::remove\\28GrTriangulator::Edge*\\29\n1053:GrTriangulator::Edge::isLeftOf\\28GrTriangulator::Vertex\\20const&\\29\\20const\n1054:GrStyle::SimpleFill\\28\\29\n1055:GrSimpleMeshDrawOpHelper::createProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n1056:GrResourceAllocator::addInterval\\28GrSurfaceProxy*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20GrResourceAllocator::ActualUse\\2c\\20GrResourceAllocator::AllowRecycling\\29\n1057:GrRenderTask::makeClosed\\28GrRecordingContext*\\29\n1058:GrOpFlushState::allocator\\28\\29\n1059:GrGLGpu::prepareToDraw\\28GrPrimitiveType\\29\n1060:GrBackendFormatToCompressionType\\28GrBackendFormat\\20const&\\29\n1061:FT_Stream_Skip\n1062:FT_Outline_Get_CBox\n1063:Cr_z_adler32\n1064:BlockIndexIterator<GrShaderVar\\20const&\\2c\\20true\\2c\\20true\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Increment\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::GetItem\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29>::end\\28\\29\\20const\n1065:BlockIndexIterator<GrShaderVar\\20const&\\2c\\20true\\2c\\20true\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Increment\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::GetItem\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29>::begin\\28\\29\\20const\n1066:AlmostDequalUlps\\28double\\2c\\20double\\29\n1067:write_tag_size\\28SkWriteBuffer&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\n1068:void\\20skgpu::VertexWriter::writeQuad<skgpu::VertexWriter::TriFan<float>\\2c\\20skgpu::VertexColor\\2c\\20skgpu::VertexWriter::Conditional<float>>\\28skgpu::VertexWriter::TriFan<float>\\20const&\\2c\\20skgpu::VertexColor\\20const&\\2c\\20skgpu::VertexWriter::Conditional<float>\\20const&\\29\n1069:uprv_free_skia\n1070:strcpy\n1071:std::__2::unique_ptr<hb_font_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_font_t*\\29\\2c\\20&hb_font_destroy>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1072:std::__2::unique_ptr<SkSL::Program\\2c\\20std::__2::default_delete<SkSL::Program>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1073:std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>::operator=\\5babi:v160004\\5d\\28std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>&&\\29\n1074:std::__2::unique_ptr<SkSL::Module\\2c\\20std::__2::default_delete<SkSL::Module>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1075:std::__2::unique_ptr<GrSkSLFP\\2c\\20std::__2::default_delete<GrSkSLFP>>\\20GrSkSLFP::Make<>\\28SkRuntimeEffect\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrSkSLFP::OptFlags\\29\n1076:std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\20GrBlendFragmentProcessor::Make<\\28SkBlendMode\\2913>\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1077:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n1078:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n1079:std::__2::optional<SkPath>::value\\5babi:v160004\\5d\\28\\29\\20&\n1080:std::__2::enable_if<true\\2c\\20void>::type\\20skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::AddTrianglesWhenChopping\\2c\\20skgpu::tess::DiscardFlatCurves>::writeTriangleStack<void>\\28skgpu::tess::MiddleOutPolygonTriangulator::PoppedTriangleStack&&\\29\n1081:std::__2::ctype<wchar_t>::widen\\5babi:v160004\\5d\\28char\\20const*\\2c\\20char\\20const*\\2c\\20wchar_t*\\29\\20const\n1082:std::__2::__tuple_impl<std::__2::__tuple_indices<0ul\\2c\\201ul>\\2c\\20GrSurfaceProxyView\\2c\\20sk_sp<SkData>>::~__tuple_impl\\28\\29\n1083:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator>=<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\\20\\28.5772\\29\n1084:skvx::Vec<4\\2c\\20float>&\\20skvx::operator*=<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1085:skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20int\\2c\\20SkGoodHash>::find\\28SkSL::FunctionDeclaration\\20const*\\20const&\\29\\20const\n1086:skia_private::TArray<sk_sp<SkIDChangeListener>\\2c\\20true>::destroyAll\\28\\29\n1087:skia_private::TArray<SkPoint\\2c\\20true>::push_back_n\\28int\\2c\\20SkPoint\\20const*\\29\n1088:skia::textlayout::Run::placeholderStyle\\28\\29\\20const\n1089:skgpu::skgpu_init_static_unique_key_once\\28SkAlignedSTStorage<1\\2c\\20skgpu::UniqueKey>*\\29\n1090:skgpu::ganesh::\\28anonymous\\20namespace\\29::update_degenerate_test\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::DegenerateTestData*\\2c\\20SkPoint\\20const&\\29\n1091:skgpu::VertexWriter&\\20skgpu::operator<<<skgpu::VertexColor>\\28skgpu::VertexWriter&\\2c\\20skgpu::VertexColor\\20const&\\29\n1092:skgpu::ResourceKey::ResourceKey\\28\\29\n1093:sk_sp<GrThreadSafeCache::VertexData>::reset\\28GrThreadSafeCache::VertexData*\\29\n1094:sk_sp<GrSurfaceProxy>::reset\\28GrSurfaceProxy*\\29\n1095:scalbn\n1096:rowcol3\\28float\\20const*\\2c\\20float\\20const*\\29\n1097:ps_parser_skip_spaces\n1098:paragraphBuilder_build\n1099:isdigit\n1100:is_joiner\\28hb_glyph_info_t\\20const&\\29\n1101:hb_paint_funcs_t::push_translate\\28void*\\2c\\20float\\2c\\20float\\29\n1102:hb_lazy_loader_t<OT::MVAR\\2c\\20hb_table_lazy_loader_t<OT::MVAR\\2c\\2022u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2022u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1103:hb_iter_t<machine_index_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>>::operator--\\28int\\29\n1104:hb_aat_map_t::range_flags_t*\\20hb_vector_t<hb_aat_map_t::range_flags_t\\2c\\20true>::push<hb_aat_map_t::range_flags_t>\\28hb_aat_map_t::range_flags_t&&\\29\n1105:get_gsubgpos_table\\28hb_face_t*\\2c\\20unsigned\\20int\\29\n1106:emscripten_longjmp\n1107:contourMeasure_dispose\n1108:cff2_path_procs_extents_t::line\\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\2c\\20CFF::point_t\\20const&\\29\n1109:cff2_path_param_t::line_to\\28CFF::point_t\\20const&\\29\n1110:cff1_path_procs_extents_t::line\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\2c\\20CFF::point_t\\20const&\\29\n1111:cff1_path_param_t::line_to\\28CFF::point_t\\20const&\\29\n1112:cf2_stack_pushInt\n1113:cf2_buf_readByte\n1114:byn$mgfn-shared$GrGLProgramDataManager::set4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n1115:bool\\20hb_bsearch_impl<void\\20const\\2c\\20unsigned\\20int>\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29\n1116:_hb_draw_funcs_set_preamble\\28hb_draw_funcs_t*\\2c\\20bool\\2c\\20void**\\2c\\20void\\20\\28**\\29\\28void*\\29\\29\n1117:__wake\n1118:__unlock\n1119:__memset\n1120:\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n1121:SkWStream::writeDecAsText\\28int\\29\n1122:SkTDStorage::append\\28void\\20const*\\2c\\20int\\29\n1123:SkSurface_Base::getCachedCanvas\\28\\29\n1124:SkString::reset\\28\\29\n1125:SkStrikeSpec::SkStrikeSpec\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n1126:SkStrike::unlock\\28\\29\n1127:SkStrike::lock\\28\\29\n1128:SkSL::String::appendf\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20char\\20const*\\2c\\20...\\29\n1129:SkSL::RP::Builder::lastInstructionOnAnyStack\\28int\\29\n1130:SkSL::ProgramUsage::get\\28SkSL::Variable\\20const&\\29\\20const\n1131:SkSL::Parser::expectIdentifier\\28SkSL::Token*\\29\n1132:SkSL::Parser::AutoDepth::increase\\28\\29\n1133:SkSL::Inliner::inlineStatement\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Analysis::ReturnComplexity\\2c\\20SkSL::Statement\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20bool\\29::$_3::operator\\28\\29\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const&\\29\\20const\n1134:SkSL::Inliner::inlineStatement\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Analysis::ReturnComplexity\\2c\\20SkSL::Statement\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20bool\\29::$_2::operator\\28\\29\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\20const&\\29\\20const\n1135:SkSL::GLSLCodeGenerator::finishLine\\28\\29\n1136:SkSL::ConstructorSplat::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1137:SkSL::ConstructorScalarCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1138:SkRegion::SkRegion\\28SkIRect\\20const&\\29\n1139:SkRasterPipeline::run\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n1140:SkRasterPipeline::appendTransferFunction\\28skcms_TransferFunction\\20const&\\29\n1141:SkRasterPipeline::appendConstantColor\\28SkArenaAlloc*\\2c\\20float\\20const*\\29\n1142:SkRRect::checkCornerContainment\\28float\\2c\\20float\\29\\20const\n1143:SkPointPriv::DistanceToLineSegmentBetweenSqd\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1144:SkPoint::setLength\\28float\\29\n1145:SkPathPriv::AllPointsEq\\28SkPoint\\20const*\\2c\\20int\\29\n1146:SkPathBuilder::~SkPathBuilder\\28\\29\n1147:SkPathBuilder::lineTo\\28SkPoint\\29\n1148:SkPathBuilder::detach\\28\\29\n1149:SkPathBuilder::SkPathBuilder\\28\\29\n1150:SkPath::transform\\28SkMatrix\\20const&\\2c\\20SkApplyPerspectiveClip\\29\n1151:SkOpCoincidence::release\\28SkCoincidentSpans*\\2c\\20SkCoincidentSpans*\\29\n1152:SkJSONWriter::endObject\\28\\29\n1153:SkJSONWriter::beginObject\\28char\\20const*\\2c\\20bool\\29\n1154:SkJSONWriter::appendCString\\28char\\20const*\\2c\\20char\\20const*\\29\n1155:SkIntersections::hasT\\28double\\29\\20const\n1156:SkImageFilter_Base::getChildOutput\\28int\\2c\\20skif::Context\\20const&\\29\\20const\n1157:SkDLine::ptAtT\\28double\\29\\20const\n1158:SkColorSpace::Equals\\28SkColorSpace\\20const*\\2c\\20SkColorSpace\\20const*\\29\n1159:SkCanvas::translate\\28float\\2c\\20float\\29\n1160:SkCanvas::restoreToCount\\28int\\29\n1161:SkCachedData::unref\\28\\29\\20const\n1162:SkBlurMaskFilterImpl::computeXformedSigma\\28SkMatrix\\20const&\\29\\20const\n1163:SkAutoSMalloc<1024ul>::~SkAutoSMalloc\\28\\29\n1164:SkAutoCanvasRestore::~SkAutoCanvasRestore\\28\\29\n1165:SkArenaAlloc::SkArenaAlloc\\28unsigned\\20long\\29\n1166:SkAAClipBlitterWrapper::init\\28SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1167:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\\28SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1168:OT::Offset<OT::IntType<unsigned\\20int\\2c\\203u>\\2c\\20true>::is_null\\28\\29\\20const\n1169:OT::MVAR::get_var\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1170:MaskAdditiveBlitter::getRow\\28int\\29\n1171:GrTriangulator::EdgeList::insert\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\29\n1172:GrTextureEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\29\n1173:GrTextureEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\29\n1174:GrTessellationShader::MakeProgram\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrTessellationShader\\20const*\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\29\n1175:GrScissorState::enabled\\28\\29\\20const\n1176:GrRecordingContextPriv::recordTimeAllocator\\28\\29\n1177:GrQuad::bounds\\28\\29\\20const\n1178:GrProxyProvider::createProxy\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\29\n1179:GrPixmapBase<void\\20const\\2c\\20GrCPixmap>::operator=\\28GrPixmapBase<void\\20const\\2c\\20GrCPixmap>&&\\29\n1180:GrOpFlushState::detachAppliedClip\\28\\29\n1181:GrGLSLShaderBuilder::appendTextureLookup\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n1182:GrGLGpu::disableWindowRectangles\\28\\29\n1183:GrGLFormatFromGLEnum\\28unsigned\\20int\\29\n1184:GrFragmentProcessors::Make\\28GrRecordingContext*\\2c\\20SkColorFilter\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1185:GrFragmentProcessor::~GrFragmentProcessor\\28\\29\n1186:GrClip::GetPixelIBounds\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20GrClip::BoundsType\\29\n1187:GrBackendTexture::getBackendFormat\\28\\29\\20const\n1188:CFF::interp_env_t<CFF::number_t>::fetch_op\\28\\29\n1189:BlockIndexIterator<GrShaderVar&\\2c\\20true\\2c\\20false\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Increment\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::GetItem\\28SkBlockAllocator::Block*\\2c\\20int\\29>::Item::setIndices\\28\\29\n1190:AlmostEqualUlps\\28double\\2c\\20double\\29\n1191:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20void>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n1192:AAT::StateTable<AAT::ExtendedTypes\\2c\\20AAT::LigatureEntry<true>::EntryData>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n1193:void\\20sktext::gpu::fill3D<sktext::gpu::ARGB3DVertex\\20\\5b4\\5d\\2c\\20SkPoint>\\28SkZip<sktext::gpu::ARGB3DVertex\\20\\5b4\\5d\\2c\\20sktext::gpu::Glyph\\20const*\\2c\\20SkPoint\\20const>\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28float\\2c\\20float\\29::operator\\28\\29\\28float\\2c\\20float\\29\\20const\n1194:tt_face_lookup_table\n1195:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1196:std::__2::unique_ptr<skia::textlayout::Run\\2c\\20std::__2::default_delete<skia::textlayout::Run>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1197:std::__2::unique_ptr<SkSL::VariableReference\\2c\\20std::__2::default_delete<SkSL::VariableReference>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1198:std::__2::unique_ptr<SkSL::Module\\20const\\2c\\20std::__2::default_delete<SkSL::Module\\20const>>::reset\\5babi:v160004\\5d\\28SkSL::Module\\20const*\\29\n1199:std::__2::optional<SkMatrix>::value\\5babi:v160004\\5d\\28\\29\\20&\n1200:std::__2::optional<SkMaskFilterBase::NinePatch>::value\\5babi:v160004\\5d\\28\\29\\20&\n1201:std::__2::moneypunct<char\\2c\\20true>::negative_sign\\5babi:v160004\\5d\\28\\29\\20const\n1202:std::__2::moneypunct<char\\2c\\20true>::neg_format\\5babi:v160004\\5d\\28\\29\\20const\n1203:std::__2::moneypunct<char\\2c\\20false>::do_pos_format\\28\\29\\20const\n1204:std::__2::iterator_traits<unsigned\\20int\\20const*>::difference_type\\20std::__2::__distance\\5babi:v160004\\5d<unsigned\\20int\\20const*>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20std::__2::random_access_iterator_tag\\29\n1205:std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\20const\n1206:std::__2::ctype<char>::widen\\5babi:v160004\\5d\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n1207:std::__2::char_traits<wchar_t>::copy\\28wchar_t*\\2c\\20wchar_t\\20const*\\2c\\20unsigned\\20long\\29\n1208:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::end\\5babi:v160004\\5d\\28\\29\n1209:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::end\\5babi:v160004\\5d\\28\\29\n1210:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__set_size\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1211:std::__2::__split_buffer<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>&>::~__split_buffer\\28\\29\n1212:std::__2::__split_buffer<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkRTree::Branch>&\\29\n1213:std::__2::__optional_destruct_base<SkPaint\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n1214:std::__2::__itoa::__append2\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1215:std::__2::__exception_guard_exceptions<std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>::__destroy_vector>::~__exception_guard_exceptions\\5babi:v160004\\5d\\28\\29\n1216:skvx::Vec<4\\2c\\20unsigned\\20int>\\20\\28anonymous\\20namespace\\29::shift_right<skvx::Vec<4\\2c\\20unsigned\\20int>>\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\2c\\20int\\29\n1217:skvx::Vec<4\\2c\\20float>\\20skvx::naive_if_then_else<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1218:sktext::gpu::BagOfBytes::~BagOfBytes\\28\\29\n1219:skif::FilterResult::operator=\\28skif::FilterResult&&\\29\n1220:skia_private::TArray<signed\\20char\\2c\\20true>::push_back\\28signed\\20char&&\\29\n1221:skia_private::TArray<float\\2c\\20true>::push_back\\28float\\20const&\\29\n1222:skia_private::TArray<SkJSONWriter::Scope\\2c\\20true>::push_back\\28SkJSONWriter::Scope&&\\29\n1223:skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\20const&\\29\n1224:skia_png_gamma_correct\n1225:skia_png_gamma_8bit_correct\n1226:skia::textlayout::TextStyle::operator=\\28skia::textlayout::TextStyle\\20const&\\29\n1227:skia::textlayout::Run::positionX\\28unsigned\\20long\\29\\20const\n1228:skia::textlayout::ParagraphImpl::codeUnitHasProperty\\28unsigned\\20long\\2c\\20SkUnicode::CodeUnitFlags\\29\\20const\n1229:skgpu::ganesh::SurfaceDrawContext::Make\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\2c\\20SkISize\\2c\\20SkSurfaceProps\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1230:skgpu::UniqueKey::UniqueKey\\28skgpu::UniqueKey\\20const&\\29\n1231:sk_sp<GrBuffer\\20const>::operator=\\28sk_sp<GrBuffer\\20const>&&\\29\n1232:sk_realloc_throw\\28void*\\2c\\20unsigned\\20long\\29\n1233:powf_\n1234:png_read_buffer\n1235:isspace\n1236:interp_cubic_coords\\28double\\20const*\\2c\\20double\\29\n1237:int\\20_hb_cmp_method<unsigned\\20int\\2c\\20AAT::LookupSegmentSingle<OT::HBGlyphID16>>\\28void\\20const*\\2c\\20void\\20const*\\29\n1238:hb_paint_funcs_t::push_transform\\28void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n1239:hb_font_t::parent_scale_y_distance\\28int\\29\n1240:hb_font_t::parent_scale_x_distance\\28int\\29\n1241:hb_face_t::get_upem\\28\\29\\20const\n1242:hb_buffer_destroy\n1243:emscripten_futex_wake\n1244:double_to_clamped_scalar\\28double\\29\n1245:conic_eval_numerator\\28double\\20const*\\2c\\20float\\2c\\20double\\29\n1246:cff_index_init\n1247:cf2_glyphpath_hintPoint\n1248:byn$mgfn-shared$skia_private::AutoSTArray<32\\2c\\20unsigned\\20short>::reset\\28int\\29\n1249:bool\\20hb_buffer_t::replace_glyphs<unsigned\\20int>\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\29\n1250:bool\\20OT::OffsetTo<OT::ClassDef\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1251:a_inc\n1252:\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16::Compact\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n1253:\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16::Compact\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n1254:\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16::Compact\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n1255:\\28anonymous\\20namespace\\29::ColorTypeFilter_8888::Compact\\28skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\29\n1256:\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616::Compact\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\n1257:\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102::Compact\\28unsigned\\20long\\20long\\29\n1258:TT_MulFix14\n1259:Skwasm::createMatrix\\28float\\20const*\\29\n1260:SkWriter32::writeBool\\28bool\\29\n1261:SkTDStorage::append\\28int\\29\n1262:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::setIndex\\28int\\29\n1263:SkSurface_Base::refCachedImage\\28\\29\n1264:SkSpotShadowTessellator::addToClip\\28SkPoint\\20const&\\29\n1265:SkSL::Type::MakeTextureType\\28char\\20const*\\2c\\20SpvDim_\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkSL::Type::TextureAccess\\29\n1266:SkSL::Type::MakeSpecialType\\28char\\20const*\\2c\\20char\\20const*\\2c\\20SkSL::Type::TypeKind\\29\n1267:SkSL::Swizzle::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29\n1268:SkSL::RP::Builder::push_slots_or_immutable\\28SkSL::RP::SlotRange\\2c\\20SkSL::RP::BuilderOp\\29\n1269:SkSL::RP::Builder::push_duplicates\\28int\\29\n1270:SkSL::RP::Builder::push_constant_f\\28float\\29\n1271:SkSL::RP::Builder::push_clone\\28int\\2c\\20int\\29\n1272:SkSL::Parser::statementOrNop\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n1273:SkSL::Literal::Make\\28SkSL::Position\\2c\\20double\\2c\\20SkSL::Type\\20const*\\29\n1274:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mul\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n1275:SkSL::InlineCandidateAnalyzer::visitStatement\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>*\\2c\\20bool\\29\n1276:SkSL::GLSLCodeGenerator::writeModifiers\\28SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20bool\\29\n1277:SkSL::Expression::isIntLiteral\\28\\29\\20const\n1278:SkSL::ConstructorCompound::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n1279:SkSL::ConstantFolder::IsConstantSplat\\28SkSL::Expression\\20const&\\2c\\20double\\29\n1280:SkSL::AliasType::resolve\\28\\29\\20const\n1281:SkResourceCache::Find\\28SkResourceCache::Key\\20const&\\2c\\20bool\\20\\28*\\29\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\\2c\\20void*\\29\n1282:SkResourceCache::Add\\28SkResourceCache::Rec*\\2c\\20void*\\29\n1283:SkRectPriv::HalfWidth\\28SkRect\\20const&\\29\n1284:SkRect::isFinite\\28\\29\\20const\n1285:SkRasterPipeline_<256ul>::SkRasterPipeline_\\28\\29\n1286:SkRasterClip::setRect\\28SkIRect\\20const&\\29\n1287:SkRasterClip::quickContains\\28SkIRect\\20const&\\29\\20const\n1288:SkRRect::setRect\\28SkRect\\20const&\\29\n1289:SkRRect::MakeRect\\28SkRect\\20const&\\29\n1290:SkRRect::MakeOval\\28SkRect\\20const&\\29\n1291:SkPathWriter::isClosed\\28\\29\\20const\n1292:SkPathStroker::addDegenerateLine\\28SkQuadConstruct\\20const*\\29\n1293:SkPathBuilder::moveTo\\28SkPoint\\29\n1294:SkPath::swap\\28SkPath&\\29\n1295:SkPath::getGenerationID\\28\\29\\20const\n1296:SkPath::addPoly\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\29\n1297:SkOpSegment::existing\\28double\\2c\\20SkOpSegment\\20const*\\29\\20const\n1298:SkOpSegment::addT\\28double\\29\n1299:SkOpSegment::addCurveTo\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\2c\\20SkPathWriter*\\29\\20const\n1300:SkOpPtT::find\\28SkOpSegment\\20const*\\29\\20const\n1301:SkOpContourBuilder::flush\\28\\29\n1302:SkMipmap::getLevel\\28int\\2c\\20SkMipmap::Level*\\29\\20const\n1303:SkMatrix::isFinite\\28\\29\\20const\n1304:SkMatrix::MakeRectToRect\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix::ScaleToFit\\29\n1305:SkM44::setConcat\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\29\n1306:SkImage_Picture::type\\28\\29\\20const\n1307:SkImageInfoIsValid\\28SkImageInfo\\20const&\\29\n1308:SkImageInfo::makeColorType\\28SkColorType\\29\\20const\n1309:SkImageInfo::computeByteSize\\28unsigned\\20long\\29\\20const\n1310:SkImageInfo::SkImageInfo\\28SkImageInfo\\20const&\\29\n1311:SkImageFilter_Base::SkImageFilter_Base\\28sk_sp<SkImageFilter>\\20const*\\2c\\20int\\2c\\20std::__2::optional<bool>\\29\n1312:SkIRect::offset\\28int\\2c\\20int\\29\n1313:SkGlyph::imageSize\\28\\29\\20const\n1314:SkColorSpaceXformSteps::apply\\28SkRasterPipeline*\\29\\20const\n1315:SkColorSpace::gammaIsLinear\\28\\29\\20const\n1316:SkColorFilterBase::affectsTransparentBlack\\28\\29\\20const\n1317:SkCanvas::~SkCanvas\\28\\29\n1318:SkCanvas::save\\28\\29\n1319:SkCanvas::predrawNotify\\28bool\\29\n1320:SkBulkGlyphMetrics::~SkBulkGlyphMetrics\\28\\29\n1321:SkBlockAllocator::SkBlockAllocator\\28SkBlockAllocator::GrowthPolicy\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n1322:SkBlockAllocator::BlockIter<false\\2c\\20false>::begin\\28\\29\\20const\n1323:SkBitmap::reset\\28\\29\n1324:SkBitmap::installPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29\n1325:ScalarToAlpha\\28float\\29\n1326:OT::Layout::GSUB_impl::SubstLookupSubTable*\\20hb_serialize_context_t::push<OT::Layout::GSUB_impl::SubstLookupSubTable>\\28\\29\n1327:OT::Layout::GPOS_impl::PosLookupSubTable\\20const&\\20OT::Lookup::get_subtable<OT::Layout::GPOS_impl::PosLookupSubTable>\\28unsigned\\20int\\29\\20const\n1328:OT::ArrayOf<OT::Offset<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>*\\20hb_serialize_context_t::extend_size<OT::ArrayOf<OT::Offset<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>>\\28OT::ArrayOf<OT::Offset<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n1329:GrTriangulator::makeConnectingEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeType\\2c\\20GrTriangulator::Comparator\\20const&\\2c\\20int\\29\n1330:GrTriangulator::appendPointToContour\\28SkPoint\\20const&\\2c\\20GrTriangulator::VertexList*\\29\\20const\n1331:GrSurface::ComputeSize\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20bool\\29\n1332:GrStyledShape::writeUnstyledKey\\28unsigned\\20int*\\29\\20const\n1333:GrStyledShape::unstyledKeySize\\28\\29\\20const\n1334:GrStyle::operator=\\28GrStyle\\20const&\\29\n1335:GrStyle::GrStyle\\28SkStrokeRec\\20const&\\2c\\20sk_sp<SkPathEffect>\\29\n1336:GrStyle::GrStyle\\28SkPaint\\20const&\\29\n1337:GrSimpleMesh::setIndexed\\28sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20GrPrimitiveRestart\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\29\n1338:GrRecordingContextPriv::makeSFCWithFallback\\28GrImageInfo\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n1339:GrRecordingContextPriv::makeSC\\28GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n1340:GrQuad::MakeFromSkQuad\\28SkPoint\\20const*\\2c\\20SkMatrix\\20const&\\29\n1341:GrProcessorSet::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n1342:GrProcessorSet::finalize\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrAppliedClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\29\n1343:GrGpuResource::isPurgeable\\28\\29\\20const\n1344:GrGpuResource::gpuMemorySize\\28\\29\\20const\n1345:GrGpuBuffer::updateData\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n1346:GrGetColorTypeDesc\\28GrColorType\\29\n1347:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\\28GrGLSLVertexBuilder*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20char\\20const*\\29\n1348:GrGLSLShaderBuilder::~GrGLSLShaderBuilder\\28\\29\n1349:GrGLSLShaderBuilder::declAppend\\28GrShaderVar\\20const&\\29\n1350:GrGLGpu::flushScissorTest\\28GrScissorTest\\29\n1351:GrGLGpu::didDrawTo\\28GrRenderTarget*\\29\n1352:GrGLGpu::bindFramebuffer\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1353:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int*\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\29\n1354:GrGLCaps::maxRenderTargetSampleCount\\28GrGLFormat\\29\\20const\n1355:GrDefaultGeoProcFactory::Make\\28SkArenaAlloc*\\2c\\20GrDefaultGeoProcFactory::Color\\20const&\\2c\\20GrDefaultGeoProcFactory::Coverage\\20const&\\2c\\20GrDefaultGeoProcFactory::LocalCoords\\20const&\\2c\\20SkMatrix\\20const&\\29\n1356:GrCaps::validateSurfaceParams\\28SkISize\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrTextureType\\29\\20const\n1357:GrBlurUtils::GaussianBlur\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20SkBackingFit\\29::$_0::operator\\28\\29\\28SkIRect\\2c\\20SkIRect\\29\\20const\n1358:GrBackendTexture::~GrBackendTexture\\28\\29\n1359:GrAppliedClip::GrAppliedClip\\28GrAppliedClip&&\\29\n1360:GrAAConvexTessellator::Ring::origEdgeID\\28int\\29\\20const\n1361:FT_GlyphLoader_CheckPoints\n1362:FT_Get_Sfnt_Table\n1363:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n1364:BlockIndexIterator<skgpu::ganesh::ClipStack::RawElement&\\2c\\20false\\2c\\20false\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Decrement\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::GetItem\\28SkBlockAllocator::Block*\\2c\\20int\\29>::end\\28\\29\\20const\n1365:BlockIndexIterator<GrGLProgramDataManager::GLUniformInfo\\20const&\\2c\\20true\\2c\\20true\\2c\\20&SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::Increment\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::GetItem\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29>::Item::operator++\\28\\29\n1366:AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n1367:void\\20std::__2::reverse\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\29\n1368:void\\20std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::__rehash<true>\\28unsigned\\20long\\29\n1369:void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29::operator\\28\\29\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29\\20const\n1370:void\\20SkSafeUnref<GrThreadSafeCache::VertexData>\\28GrThreadSafeCache::VertexData*\\29\n1371:unsigned\\20int\\20hb_buffer_t::group_end<bool\\20\\28hb_glyph_info_t\\20const&\\2c\\20hb_glyph_info_t\\20const&\\29>\\28unsigned\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28hb_glyph_info_t\\20const&\\2c\\20hb_glyph_info_t\\20const&\\29\\29\\20const\n1372:std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>::push_back\\5babi:v160004\\5d\\28std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>&&\\29\n1373:std::__2::vector<sk_sp<SkFontMgr>\\2c\\20std::__2::allocator<sk_sp<SkFontMgr>>>::~vector\\5babi:v160004\\5d\\28\\29\n1374:std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1375:std::__2::unique_ptr<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::default_delete<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1376:std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>::reset\\5babi:v160004\\5d\\28SkSL::SymbolTable*\\29\n1377:std::__2::unique_ptr<SkSL::Block\\2c\\20std::__2::default_delete<SkSL::Block>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1378:std::__2::unique_ptr<SkLatticeIter\\2c\\20std::__2::default_delete<SkLatticeIter>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1379:std::__2::unique_ptr<GrGLGpu::SamplerObjectCache::UnitState\\20\\5b\\5d\\2c\\20std::__2::default_delete<GrGLGpu::SamplerObjectCache::UnitState\\20\\5b\\5d>>::reset\\5babi:v160004\\5d\\28std::nullptr_t\\29\n1380:std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\20std::__2::__pad_and_output\\5babi:v160004\\5d<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\29\n1381:std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\20std::__2::__pad_and_output\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>>\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::ios_base&\\2c\\20char\\29\n1382:std::__2::optional<SkPaint>::value\\5babi:v160004\\5d\\28\\29\\20&\n1383:std::__2::hash<GrFragmentProcessor\\20const*>::operator\\28\\29\\5babi:v160004\\5d\\28GrFragmentProcessor\\20const*\\29\\20const\n1384:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n1385:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d<char*\\2c\\20void>\\28char*\\2c\\20char*\\2c\\20std::__2::allocator<char>\\20const&\\29\n1386:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::append\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1387:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_long_cap\\5babi:v160004\\5d\\28\\29\\20const\n1388:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::setstate\\5babi:v160004\\5d\\28unsigned\\20int\\29\n1389:std::__2::allocator<unsigned\\20long>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1390:skvx::Vec<4\\2c\\20unsigned\\20short>\\20\\28anonymous\\20namespace\\29::add_121<skvx::Vec<4\\2c\\20unsigned\\20short>>\\28skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\29\n1391:skvx::Vec<4\\2c\\20unsigned\\20int>\\20\\28anonymous\\20namespace\\29::add_121<skvx::Vec<4\\2c\\20unsigned\\20int>>\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\n1392:skvx::Vec<4\\2c\\20float>\\20unchecked_mix<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1393:skvx::Vec<4\\2c\\20float>\\20skvx::operator/<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1394:skvx::Vec<4\\2c\\20float>\\20skvx::min<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1395:skvx::Vec<2\\2c\\20float>\\20skvx::naive_if_then_else<2\\2c\\20float>\\28skvx::Vec<2\\2c\\20skvx::Mask<float>::type>\\20const&\\2c\\20skvx::Vec<2\\2c\\20float>\\20const&\\2c\\20skvx::Vec<2\\2c\\20float>\\20const&\\29\n1396:skip_spaces\n1397:skif::\\28anonymous\\20namespace\\29::is_nearly_integer_translation\\28skif::LayerSpace<SkMatrix>\\20const&\\2c\\20skif::LayerSpace<SkIPoint>*\\29\n1398:skif::FilterResult::FilterResult\\28skif::FilterResult\\20const&\\29\n1399:skia_private::TArray<unsigned\\20char\\2c\\20true>::push_back\\28unsigned\\20char&&\\29\n1400:skia_private::TArray<unsigned\\20char\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n1401:skia_private::TArray<SkSL::Variable*\\2c\\20true>::TArray\\28skia_private::TArray<SkSL::Variable*\\2c\\20true>&&\\29\n1402:skia_private::TArray<SkSL::Field\\2c\\20true>::TArray\\28skia_private::TArray<SkSL::Field\\2c\\20true>&&\\29\n1403:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n1404:skia_private::TArray<SkPoint\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n1405:skia_private::TArray<SkPoint\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n1406:skia_private::AutoSTMalloc<4ul\\2c\\20int\\2c\\20void>::AutoSTMalloc\\28unsigned\\20long\\29\n1407:skia_png_safecat\n1408:skia_png_malloc\n1409:skia_png_colorspace_sync\n1410:skia_png_chunk_warning\n1411:skia::textlayout::TextWrapper::TextStretch::extend\\28skia::textlayout::TextWrapper::TextStretch&\\29\n1412:skia::textlayout::TextLine::iterateThroughSingleRunByStyles\\28skia::textlayout::TextLine::TextAdjustment\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::StyleType\\2c\\20std::__2::function<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\20const&\\29\\20const\n1413:skia::textlayout::ParagraphStyle::~ParagraphStyle\\28\\29\n1414:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\\28\\29\n1415:skgpu::ganesh::SurfaceFillContext::fillWithFP\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1416:skgpu::ganesh::OpsTask::OpChain::List::popHead\\28\\29\n1417:skgpu::SkSLToGLSL\\28SkSL::ShaderCaps\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20SkSL::ProgramKind\\2c\\20SkSL::ProgramSettings\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20SkSL::ProgramInterface*\\2c\\20skgpu::ShaderErrorHandler*\\29\n1418:skgpu::ResourceKey::reset\\28\\29\n1419:skcms_TransferFunction_getType\n1420:skcms_TransferFunction_eval\n1421:sk_sp<SkTypeface>::operator=\\28sk_sp<SkTypeface>&&\\29\n1422:sk_sp<SkTextBlob\\20const>::~sk_sp\\28\\29\n1423:sk_sp<SkString::Rec>::reset\\28SkString::Rec*\\29\n1424:sk_sp<SkLocalMatrixShader>\\20sk_make_sp<SkLocalMatrixShader\\2c\\20sk_sp<SkShader>\\2c\\20SkMatrix\\20const&>\\28sk_sp<SkShader>&&\\2c\\20SkMatrix\\20const&\\29\n1425:sk_sp<GrSurfaceProxy>::sk_sp<GrTextureProxy\\2c\\20void>\\28sk_sp<GrTextureProxy>\\20const&\\29\n1426:operator!=\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n1427:non-virtual\\20thunk\\20to\\20GrOpFlushState::allocator\\28\\29\n1428:is_halant\\28hb_glyph_info_t\\20const&\\29\n1429:hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>::__next__\\28\\29\n1430:hb_serialize_context_t::pop_pack\\28bool\\29\n1431:hb_sanitize_context_t::init\\28hb_blob_t*\\29\n1432:hb_lazy_loader_t<OT::vhea\\2c\\20hb_table_lazy_loader_t<OT::vhea\\2c\\2011u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2011u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1433:hb_lazy_loader_t<OT::hhea\\2c\\20hb_table_lazy_loader_t<OT::hhea\\2c\\204u\\2c\\20true>\\2c\\20hb_face_t\\2c\\204u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n1434:hb_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\2025u>\\2c\\20hb_face_t\\2c\\2025u\\2c\\20OT::GSUB_accelerator_t>::get_stored\\28\\29\\20const\n1435:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::alloc\\28unsigned\\20int\\29\n1436:hb_font_t::scale_glyph_extents\\28hb_glyph_extents_t*\\29\n1437:hb_extents_t::add_point\\28float\\2c\\20float\\29\n1438:hb_draw_funcs_t::emit_cubic_to\\28void*\\2c\\20hb_draw_state_t&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n1439:hb_buffer_t::reverse_range\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1440:hb_buffer_t::replace_glyph\\28unsigned\\20int\\29\n1441:hb_buffer_t::merge_out_clusters\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1442:hb_buffer_append\n1443:cos\n1444:cleanup_program\\28GrGLGpu*\\2c\\20unsigned\\20int\\2c\\20SkTDArray<unsigned\\20int>\\20const&\\29\n1445:cff_index_done\n1446:cf2_glyphpath_curveTo\n1447:byn$mgfn-shared$skia_private::TArray<SkPoint\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n1448:bool\\20hb_array_t<unsigned\\20char\\20const>::sanitize<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n1449:bool\\20OT::OffsetTo<OT::Layout::GPOS_impl::Anchor\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1450:afm_parser_read_vals\n1451:afm_parser_next_key\n1452:__lshrti3\n1453:__lock\n1454:__letf2\n1455:\\28anonymous\\20namespace\\29::skhb_position\\28float\\29\n1456:SkWriter32::reservePad\\28unsigned\\20long\\29\n1457:SkWriteBuffer::writeDataAsByteArray\\28SkData\\20const*\\29\n1458:SkTSpan::removeBounded\\28SkTSpan\\20const*\\29\n1459:SkTSpan::initBounds\\28SkTCurve\\20const&\\29\n1460:SkTSpan::addBounded\\28SkTSpan*\\2c\\20SkArenaAlloc*\\29\n1461:SkTSect::tail\\28\\29\n1462:SkTInternalLList<SkLRUCache<unsigned\\20int\\2c\\20std::__2::unique_ptr<hb_font_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_font_t*\\29\\2c\\20&hb_font_destroy>>\\2c\\20SkGoodHash>::Entry>::remove\\28SkLRUCache<unsigned\\20int\\2c\\20std::__2::unique_ptr<hb_font_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_font_t*\\29\\2c\\20&hb_font_destroy>>\\2c\\20SkGoodHash>::Entry*\\29\n1463:SkTDStorage::reset\\28\\29\n1464:SkString::printf\\28char\\20const*\\2c\\20...\\29\n1465:SkString::insert\\28unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1466:SkSpecialImages::MakeDeferredFromGpu\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20unsigned\\20int\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n1467:SkShaderUtils::GLSLPrettyPrint::newline\\28\\29\n1468:SkShaderUtils::GLSLPrettyPrint::hasToken\\28char\\20const*\\29\n1469:SkSamplingOptions::operator==\\28SkSamplingOptions\\20const&\\29\\20const\n1470:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_5::operator\\28\\29\\28int\\2c\\20int\\29\\20const\n1471:SkSL::is_constant_value\\28SkSL::Expression\\20const&\\2c\\20double\\29\n1472:SkSL::compile_and_shrink\\28SkSL::Compiler*\\2c\\20SkSL::ProgramKind\\2c\\20char\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::Module\\20const*\\29\n1473:SkSL::\\28anonymous\\20namespace\\29::ReturnsOnAllPathsVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n1474:SkSL::Type::MakeScalarType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20char\\20const*\\2c\\20SkSL::Type::NumberKind\\2c\\20signed\\20char\\2c\\20signed\\20char\\29\n1475:SkSL::SymbolTable::addWithoutOwnership\\28SkSL::Context\\20const&\\2c\\20SkSL::Symbol*\\29\n1476:SkSL::RP::Generator::push\\28SkSL::RP::LValue&\\29\n1477:SkSL::Parser::statement\\28bool\\29\n1478:SkSL::ModifierFlags::description\\28\\29\\20const\n1479:SkSL::Layout::paddedDescription\\28\\29\\20const\n1480:SkSL::ConstructorCompoundCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1481:SkSL::Analysis::UpdateVariableRefKind\\28SkSL::Expression*\\2c\\20SkSL::VariableRefKind\\2c\\20SkSL::ErrorReporter*\\29\n1482:SkSL::Analysis::IsSameExpressionTree\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n1483:SkRuntimeEffect::Uniform::sizeInBytes\\28\\29\\20const\n1484:SkRegion::setRegion\\28SkRegion\\20const&\\29\n1485:SkRegion::Iterator::next\\28\\29\n1486:SkRect::round\\28SkIRect*\\29\\20const\n1487:SkRect::makeSorted\\28\\29\\20const\n1488:SkRect::intersects\\28SkRect\\20const&\\29\\20const\n1489:SkReadBuffer::readInt\\28\\29\n1490:SkReadBuffer::readBool\\28\\29\n1491:SkRasterPipeline_<256ul>::~SkRasterPipeline_\\28\\29\n1492:SkRasterClip::updateCacheAndReturnNonEmpty\\28bool\\29\n1493:SkRasterClip::quickReject\\28SkIRect\\20const&\\29\\20const\n1494:SkRGBA4f<\\28SkAlphaType\\293>::toSkColor\\28\\29\\20const\n1495:SkPixmap::addr\\28int\\2c\\20int\\29\\20const\n1496:SkPath::quadTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n1497:SkPath::incReserve\\28int\\2c\\20int\\2c\\20int\\29\n1498:SkPath::arcTo\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n1499:SkPath::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\29\n1500:SkPath::addRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\29\n1501:SkPaint*\\20SkRecorder::copy<SkPaint>\\28SkPaint\\20const*\\29\n1502:SkOpSegment::ptAtT\\28double\\29\\20const\n1503:SkOpSegment::dPtAtT\\28double\\29\\20const\n1504:SkNoPixelsDevice::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n1505:SkMemoryStream::getPosition\\28\\29\\20const\n1506:SkMatrix::setConcat\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n1507:SkMatrix::mapRadius\\28float\\29\\20const\n1508:SkMask::getAddr8\\28int\\2c\\20int\\29\\20const\n1509:SkJSONWriter::appendString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1510:SkIntersectionHelper::segmentType\\28\\29\\20const\n1511:SkImageFilter_Base::flatten\\28SkWriteBuffer&\\29\\20const\n1512:SkGoodHash::operator\\28\\29\\28SkString\\20const&\\29\\20const\n1513:SkGlyph::rect\\28\\29\\20const\n1514:SkFont::SkFont\\28sk_sp<SkTypeface>\\2c\\20float\\29\n1515:SkDrawBase::SkDrawBase\\28\\29\n1516:SkDQuad::RootsValidT\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n1517:SkConvertPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n1518:SkCanvas::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n1519:SkCanvas::aboutToDraw\\28SkPaint\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkEnumBitMask<SkCanvas::PredrawFlags>\\29\n1520:SkCanvas::AutoUpdateQRBounds::~AutoUpdateQRBounds\\28\\29\n1521:SkCachedData::ref\\28\\29\\20const\n1522:SkBulkGlyphMetrics::SkBulkGlyphMetrics\\28SkStrikeSpec\\20const&\\29\n1523:SkBitmap::setPixelRef\\28sk_sp<SkPixelRef>\\2c\\20int\\2c\\20int\\29\n1524:SkBitmap::installPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\29\n1525:SkAutoPixmapStorage::~SkAutoPixmapStorage\\28\\29\n1526:SkAnySubclass<GrBackendRenderTargetData\\2c\\20160ul>::reset\\28\\29\n1527:SkAlphaRuns::Break\\28short*\\2c\\20unsigned\\20char*\\2c\\20int\\2c\\20int\\29\n1528:OT::VariationStore::get_delta\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20float*\\29\\20const\n1529:OT::GSUBGPOS::get_lookup\\28unsigned\\20int\\29\\20const\n1530:OT::GDEF::get_glyph_props\\28unsigned\\20int\\29\\20const\n1531:OT::CmapSubtable::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n1532:GrTextureEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20float\\20const*\\2c\\20bool\\29\n1533:GrSurfaceProxyView::mipmapped\\28\\29\\20const\n1534:GrSurfaceProxy::backingStoreBoundsRect\\28\\29\\20const\n1535:GrStyledShape::knownToBeConvex\\28\\29\\20const\n1536:GrStyledShape::GrStyledShape\\28SkPath\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n1537:GrSimpleMeshDrawOpHelperWithStencil::isCompatible\\28GrSimpleMeshDrawOpHelperWithStencil\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\29\\20const\n1538:GrShape::asPath\\28SkPath*\\2c\\20bool\\29\\20const\n1539:GrScissorState::set\\28SkIRect\\20const&\\29\n1540:GrRenderTask::~GrRenderTask\\28\\29\n1541:GrPixmap::Allocate\\28GrImageInfo\\20const&\\29\n1542:GrMakeCachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skgpu::Mipmapped\\29\n1543:GrImageInfo::makeColorType\\28GrColorType\\29\\20const\n1544:GrGpuResource::CacheAccess::release\\28\\29\n1545:GrGpuBuffer::map\\28\\29\n1546:GrGpu::didWriteToSurface\\28GrSurface*\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1547:GrGeometryProcessor::TextureSampler::TextureSampler\\28\\29\n1548:GrGeometryProcessor::AttributeSet::begin\\28\\29\\20const\n1549:GrGeometryProcessor::AttributeSet::Iter::operator++\\28\\29\n1550:GrGLFunction<void\\20\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n1551:GrFragmentProcessors::Make\\28SkShader\\20const*\\2c\\20GrFPArgs\\20const&\\2c\\20SkMatrix\\20const&\\29\n1552:GrFragmentProcessor::MakeColor\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n1553:GrConvertPixels\\28GrPixmap\\20const&\\2c\\20GrCPixmap\\20const&\\2c\\20bool\\29\n1554:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\29\n1555:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrColorInfo\\20const&\\2c\\20GrColorInfo\\20const&\\29\n1556:GrAtlasManager::getAtlas\\28skgpu::MaskFormat\\29\\20const\n1557:FT_Get_Char_Index\n1558:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::operator\\5b\\5d\\28unsigned\\20int\\29\\20const\n1559:wrapper_cmp\n1560:void\\20std::__2::vector<SkFontArguments::VariationPosition::Coordinate\\2c\\20std::__2::allocator<SkFontArguments::VariationPosition::Coordinate>>::__construct_at_end<SkFontArguments::VariationPosition::Coordinate*\\2c\\200>\\28SkFontArguments::VariationPosition::Coordinate*\\2c\\20SkFontArguments::VariationPosition::Coordinate*\\2c\\20unsigned\\20long\\29\n1561:void\\20std::__2::__memberwise_forward_assign\\5babi:v160004\\5d<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo\\2c\\200ul\\2c\\201ul>\\28std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>&\\2c\\20std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>&&\\2c\\20std::__2::__tuple_types<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::__tuple_indices<0ul\\2c\\201ul>\\29\n1562:void\\20std::__2::__double_or_nothing\\5babi:v160004\\5d<unsigned\\20int>\\28std::__2::unique_ptr<unsigned\\20int\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int*&\\29\n1563:void\\20hb_sanitize_context_t::set_object<AAT::ChainSubtable<AAT::ExtendedTypes>>\\28AAT::ChainSubtable<AAT::ExtendedTypes>\\20const*\\29\n1564:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n1565:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n1566:unsigned\\20int\\20std::__2::__sort3\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n1567:toupper\n1568:top12.2\n1569:store\\28unsigned\\20char*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20int\\29\n1570:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1571:std::__2::vector<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n1572:std::__2::unique_ptr<sktext::gpu::SubRunContainer\\2c\\20sktext::gpu::SubRunAllocator::Destroyer>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1573:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1574:std::__2::unique_ptr<skia::textlayout::Run\\2c\\20std::__2::default_delete<skia::textlayout::Run>>::reset\\5babi:v160004\\5d\\28skia::textlayout::Run*\\29\n1575:std::__2::unique_ptr<SkSL::VarDeclaration\\2c\\20std::__2::default_delete<SkSL::VarDeclaration>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1576:std::__2::unique_ptr<SkSL::PrefixExpression\\2c\\20std::__2::default_delete<SkSL::PrefixExpression>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1577:std::__2::unique_ptr<SkSL::ConstructorArray\\2c\\20std::__2::default_delete<SkSL::ConstructorArray>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1578:std::__2::numpunct<wchar_t>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::numpunct<wchar_t>>\\28std::__2::locale\\20const&\\29\n1579:std::__2::numpunct<char>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::numpunct<char>>\\28std::__2::locale\\20const&\\29\n1580:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::istreambuf_iterator\\5babi:v160004\\5d\\28\\29\n1581:std::__2::enable_if<std::is_base_of<GrGpuResource\\2c\\20GrSurface>::value\\2c\\20sk_sp<GrSurface>>::type\\20GrResourceProvider::findByUniqueKey<GrSurface>\\28skgpu::UniqueKey\\20const&\\29\n1582:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::end\\5babi:v160004\\5d\\28\\29\n1583:std::__2::ctype<wchar_t>::narrow\\5babi:v160004\\5d\\28wchar_t\\2c\\20char\\29\\20const\n1584:std::__2::ctype<char>::narrow\\5babi:v160004\\5d\\28char\\2c\\20char\\29\\20const\n1585:std::__2::char_traits<char>::to_int_type\\28char\\29\n1586:std::__2::char_traits<char>::compare\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1587:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1588:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20std::__2::operator+\\5babi:v160004\\5d<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\2c\\20char\\29\n1589:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::clear\\5babi:v160004\\5d\\28\\29\n1590:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1591:std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>::~basic_string\\28\\29\n1592:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sputn\\5babi:v160004\\5d\\28char\\20const*\\2c\\20long\\29\n1593:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setg\\5babi:v160004\\5d\\28char*\\2c\\20char*\\2c\\20char*\\29\n1594:std::__2::allocator<SkUnicode::LineBreakBefore>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n1595:std::__2::__tree<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::__map_value_compare<unsigned\\20long\\2c\\20std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::less<unsigned\\20long>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>>>::~__tree\\28\\29\n1596:std::__2::__optional_destruct_base<SkPath\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n1597:std::__2::__num_get<wchar_t>::__stage2_int_loop\\28wchar_t\\2c\\20int\\2c\\20char*\\2c\\20char*&\\2c\\20unsigned\\20int&\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20wchar_t\\20const*\\29\n1598:std::__2::__num_get<char>::__stage2_int_loop\\28char\\2c\\20int\\2c\\20char*\\2c\\20char*&\\2c\\20unsigned\\20int&\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20char\\20const*\\29\n1599:std::__2::__next_prime\\28unsigned\\20long\\29\n1600:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<wchar_t>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::allocator<wchar_t>>\\28std::__2::allocator<wchar_t>&\\2c\\20unsigned\\20long\\29\n1601:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<char>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::allocator<char>>\\28std::__2::allocator<char>&\\2c\\20unsigned\\20long\\29\n1602:src_p\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\n1603:sort_r_swap\\28char*\\2c\\20char*\\2c\\20unsigned\\20long\\29\n1604:snprintf\n1605:skvx::Vec<4\\2c\\20float>\\20skvx::operator+<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n1606:sktext::SkStrikePromise::SkStrikePromise\\28sktext::SkStrikePromise&&\\29\n1607:skif::FilterResult::resolve\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20bool\\29\\20const\n1608:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n1609:skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair&&\\29\n1610:skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::contains\\28SkSL::Variable\\20const*\\20const&\\29\\20const\n1611:skia_private::TArray<unsigned\\20char\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n1612:skia_private::TArray<skia::textlayout::Cluster\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n1613:skia_private::TArray<sk_sp<sktext::gpu::Slug\\20const>\\2c\\20true>::~TArray\\28\\29\n1614:skia_private::TArray<SkPoint\\2c\\20true>::resize_back\\28int\\29\n1615:skia_private::AutoTMalloc<unsigned\\20char\\2c\\20void>::AutoTMalloc\\28unsigned\\20long\\29\n1616:skia_private::AutoSTArray<4\\2c\\20float>::reset\\28int\\29\n1617:skia_png_free_data\n1618:skia::textlayout::TextStyle::TextStyle\\28\\29\n1619:skia::textlayout::Run::Run\\28skia::textlayout::ParagraphImpl*\\2c\\20SkShaper::RunHandler::RunInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20bool\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20float\\29\n1620:skia::textlayout::InternalLineMetrics::delta\\28\\29\\20const\n1621:skia::textlayout::Cluster::Cluster\\28skia::textlayout::ParagraphImpl*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkSpan<char\\20const>\\2c\\20float\\2c\\20float\\29\n1622:skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Required<\\28skgpu::tess::PatchAttribs\\291>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\294>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::ReplicateLineEndPoints\\2c\\20skgpu::tess::TrackJoinControlPoints>::chopAndWriteCubics\\28skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20skvx::Vec<2\\2c\\20float>\\2c\\20int\\29\n1623:skgpu::ganesh::SurfaceDrawContext::fillRectToRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n1624:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::RawElement\\20const&\\29\\20const\n1625:skgpu::VertexWriter&\\20skgpu::operator<<<4\\2c\\20SkPoint>\\28skgpu::VertexWriter&\\2c\\20skgpu::VertexWriter::RepeatDesc<4\\2c\\20SkPoint>\\20const&\\29\n1626:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::addCpuPlane\\28sk_sp<SkData>\\2c\\20unsigned\\20long\\29\n1627:sk_sp<SkVertices>::reset\\28SkVertices*\\29\n1628:sk_sp<SkPathRef>::reset\\28SkPathRef*\\29\n1629:sk_sp<SkMeshPriv::VB\\20const>::reset\\28SkMeshPriv::VB\\20const*\\29\n1630:sk_sp<SkColorSpace>::reset\\28SkColorSpace*\\29\n1631:sk_malloc_throw\\28unsigned\\20long\\29\n1632:sk_doubles_nearly_equal_ulps\\28double\\2c\\20double\\2c\\20unsigned\\20char\\29\n1633:sbrk\n1634:saveSetjmp\n1635:remove_node\\28OffsetEdge\\20const*\\2c\\20OffsetEdge**\\29\n1636:quick_div\\28int\\2c\\20int\\29\n1637:pt_to_line\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1638:processPropertySeq\\28UBiDi*\\2c\\20LevState*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20int\\29\n1639:left\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1640:inversion\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n1641:interp_quad_coords\\28double\\20const*\\2c\\20double\\29\n1642:hb_vector_t<contour_point_t\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n1643:hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>::may_have\\28unsigned\\20int\\29\\20const\n1644:hb_serialize_context_t::object_t::fini\\28\\29\n1645:hb_ot_map_builder_t::add_feature\\28hb_ot_map_feature_t\\20const&\\29\n1646:hb_lazy_loader_t<OT::glyf_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::glyf_accelerator_t\\2c\\2015u>\\2c\\20hb_face_t\\2c\\2015u\\2c\\20OT::glyf_accelerator_t>::get_stored\\28\\29\\20const\n1647:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::fini\\28\\29\n1648:hb_buffer_t::make_room_for\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n1649:hb_buffer_t::ensure\\28unsigned\\20int\\29\n1650:hairquad\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n1651:fmt_u\n1652:float*\\20SkArenaAlloc::allocUninitializedArray<float>\\28unsigned\\20long\\29\n1653:emscripten_futex_wait\n1654:duplicate_pt\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1655:compute_quad_level\\28SkPoint\\20const*\\29\n1656:char*\\20const&\\20std::__2::max\\5babi:v160004\\5d<char*>\\28char*\\20const&\\2c\\20char*\\20const&\\29\n1657:cff2_extents_param_t::update_bounds\\28CFF::point_t\\20const&\\29\n1658:cf2_arrstack_getPointer\n1659:cbrtf\n1660:can_add_curve\\28SkPath::Verb\\2c\\20SkPoint*\\29\n1661:call_hline_blitter\\28SkBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n1662:byn$mgfn-shared$std::__2::__unique_if<SkSL::ConstructorArrayCast>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArrayCast\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n1663:byn$mgfn-shared$GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n1664:bounds_t::update\\28CFF::point_t\\20const&\\29\n1665:bool\\20hb_sanitize_context_t::check_array<OT::IntType<unsigned\\20int\\2c\\204u>>\\28OT::IntType<unsigned\\20int\\2c\\204u>\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1666:bool\\20hb_sanitize_context_t::check_array<OT::IntType<unsigned\\20char\\2c\\201u>>\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\2c\\20unsigned\\20int\\29\\20const\n1667:bool\\20OT::OffsetTo<OT::Paint\\2c\\20OT::IntType<unsigned\\20int\\2c\\203u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1668:bool\\20OT::OffsetTo<OT::DeltaSetIndexMap\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1669:blit_trapezoid_row\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n1670:auto\\20std::__2::__unwrap_range\\5babi:v160004\\5d<char\\20const*\\2c\\20char\\20const*>\\28char\\20const*\\2c\\20char\\20const*\\29\n1671:auto\\20sktext::gpu::VertexFiller::fillVertexData\\28int\\2c\\20int\\2c\\20SkSpan<sktext::gpu::Glyph\\20const*>\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\2c\\20void*\\29\\20const::$_0::operator\\28\\29<sktext::gpu::Mask2DVertex\\20\\28*\\29\\20\\5b4\\5d>\\28sktext::gpu::Mask2DVertex\\20\\28*\\29\\20\\5b4\\5d\\29\\20const\n1672:atan2f\n1673:af_shaper_get_cluster\n1674:_hb_ot_metrics_get_position_common\\28hb_font_t*\\2c\\20hb_ot_metrics_tag_t\\2c\\20int*\\29\n1675:__wait\n1676:__tandf\n1677:__pthread_setcancelstate\n1678:__floatunsitf\n1679:__cxa_allocate_exception\n1680:\\28anonymous\\20namespace\\29::subtract\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n1681:\\28anonymous\\20namespace\\29::MeshOp::fixedFunctionFlags\\28\\29\\20const\n1682:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::fixedFunctionFlags\\28\\29\\20const\n1683:Update_Max\n1684:TT_Get_MM_Var\n1685:SkUTF::UTF8ToUTF16\\28unsigned\\20short*\\2c\\20int\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n1686:SkTextBlob::RunRecord::textSize\\28\\29\\20const\n1687:SkTSpan::resetBounds\\28SkTCurve\\20const&\\29\n1688:SkTSect::removeSpan\\28SkTSpan*\\29\n1689:SkTSect::BinarySearch\\28SkTSect*\\2c\\20SkTSect*\\2c\\20SkIntersections*\\29\n1690:SkTInternalLList<skgpu::Plot>::remove\\28skgpu::Plot*\\29\n1691:SkTDArray<SkAAClip::Builder::Row>::append\\28\\29\n1692:SkTDArray<GrAAConvexTessellator::Ring::PointData>::append\\28\\29\n1693:SkTConic::operator\\5b\\5d\\28int\\29\\20const\n1694:SkTBlockList<GrShaderVar\\2c\\201>::~SkTBlockList\\28\\29\n1695:SkStrokeRec::needToApply\\28\\29\\20const\n1696:SkString::set\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1697:SkString::SkString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n1698:SkStrikeSpec::findOrCreateStrike\\28\\29\\20const\n1699:SkShaders::MatrixRec::applyForFragmentProcessor\\28SkMatrix\\20const&\\29\\20const\n1700:SkShaders::Color\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20sk_sp<SkColorSpace>\\29\n1701:SkScan::FillRect\\28SkRect\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n1702:SkScalerContext_FreeType::setupSize\\28\\29\n1703:SkScalarsAreFinite\\28float\\20const*\\2c\\20int\\29\n1704:SkSL::type_is_valid_for_color\\28SkSL::Type\\20const&\\29\n1705:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_4::operator\\28\\29\\28int\\29\\20const\n1706:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_3::operator\\28\\29\\28int\\29\\20const\n1707:SkSL::optimize_comparison\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20bool\\20\\28*\\29\\28double\\2c\\20double\\29\\29\n1708:SkSL::VariableReference::Make\\28SkSL::Position\\2c\\20SkSL::Variable\\20const*\\2c\\20SkSL::VariableRefKind\\29\n1709:SkSL::Variable*\\20SkSL::SymbolTable::add<SkSL::Variable>\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\29\n1710:SkSL::Type::coercionCost\\28SkSL::Type\\20const&\\29\\20const\n1711:SkSL::SymbolTable::addArrayDimension\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20int\\29\n1712:SkSL::RP::VariableLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n1713:SkSL::RP::Program::appendCopySlotsUnmasked\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\\20const\n1714:SkSL::RP::Generator::pushBinaryExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n1715:SkSL::RP::Generator::emitTraceLine\\28SkSL::Position\\29\n1716:SkSL::RP::AutoStack::enter\\28\\29\n1717:SkSL::PipelineStage::PipelineStageCodeGenerator::writeStatement\\28SkSL::Statement\\20const&\\29\n1718:SkSL::PipelineStage::PipelineStageCodeGenerator::writeLine\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1719:SkSL::Operator::determineBinaryType\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const**\\2c\\20SkSL::Type\\20const**\\2c\\20SkSL::Type\\20const**\\29\\20const\n1720:SkSL::Literal::MakeBool\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20bool\\29\n1721:SkSL::GLSLCodeGenerator::getTypePrecision\\28SkSL::Type\\20const&\\29\n1722:SkSL::ExpressionStatement::Make\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1723:SkSL::ConstructorDiagonalMatrix::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1724:SkSL::ConstructorArrayCast::~ConstructorArrayCast\\28\\29\n1725:SkSL::ConstantFolder::MakeConstantValueForVariable\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n1726:SkSBlockAllocator<64ul>::SkSBlockAllocator\\28SkBlockAllocator::GrowthPolicy\\2c\\20unsigned\\20long\\29\n1727:SkRuntimeEffect::uniformSize\\28\\29\\20const\n1728:SkRuntimeEffect::findUniform\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n1729:SkResourceCache::Key::init\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20unsigned\\20long\\29\n1730:SkRegion::op\\28SkRegion\\20const&\\2c\\20SkRegion::Op\\29\n1731:SkRasterPipelineBlitter::appendStore\\28SkRasterPipeline*\\29\\20const\n1732:SkRasterPipeline::compile\\28\\29\\20const\n1733:SkRasterPipeline::appendClampIfNormalized\\28SkImageInfo\\20const&\\29\n1734:SkRasterClipStack::writable_rc\\28\\29\n1735:SkRRect::transform\\28SkMatrix\\20const&\\2c\\20SkRRect*\\29\\20const\n1736:SkPointPriv::EqualsWithinTolerance\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n1737:SkPoint::Length\\28float\\2c\\20float\\29\n1738:SkPixmap::operator=\\28SkPixmap&&\\29\n1739:SkPathWriter::matchedLast\\28SkOpPtT\\20const*\\29\\20const\n1740:SkPathWriter::finishContour\\28\\29\n1741:SkPathRef::atVerb\\28int\\29\\20const\n1742:SkPathEdgeIter::next\\28\\29\n1743:SkPathBuilder::ensureMove\\28\\29\n1744:SkPathBuilder::close\\28\\29\n1745:SkPath::addPath\\28SkPath\\20const&\\2c\\20SkPath::AddPathMode\\29\n1746:SkPaint::isSrcOver\\28\\29\\20const\n1747:SkOpSpanBase::contains\\28SkOpSegment\\20const*\\29\\20const\n1748:SkOpSegment::updateWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n1749:SkOpAngle::linesOnOriginalSide\\28SkOpAngle\\20const*\\29\n1750:SkNoPixelsDevice::writableClip\\28\\29\n1751:SkNextID::ImageID\\28\\29\n1752:SkNVRefCnt<SkVertices>::unref\\28\\29\\20const\n1753:SkMatrixPriv::MapRect\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\29\n1754:SkMatrix::mapVectors\\28SkPoint*\\2c\\20int\\29\\20const\n1755:SkMaskBuilder::AllocImage\\28unsigned\\20long\\2c\\20SkMaskBuilder::AllocType\\29\n1756:SkMask::computeImageSize\\28\\29\\20const\n1757:SkMask::AlphaIter<\\28SkMask::Format\\294>::operator*\\28\\29\\20const\n1758:SkMakeImageFromRasterBitmap\\28SkBitmap\\20const&\\2c\\20SkCopyPixelsMode\\29\n1759:SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_2D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n1760:SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_1D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n1761:SkKnownRuntimeEffects::GetKnownRuntimeEffect\\28SkKnownRuntimeEffects::StableKey\\29\n1762:SkJSONWriter::beginValue\\28bool\\29\n1763:SkIntersections::flip\\28\\29\n1764:SkImageFilter::getInput\\28int\\29\\20const\n1765:SkIRect::inset\\28int\\2c\\20int\\29\n1766:SkIDChangeListener::List::changed\\28\\29\n1767:SkFont::unicharToGlyph\\28int\\29\\20const\n1768:SkDrawTiler::~SkDrawTiler\\28\\29\n1769:SkDrawTiler::next\\28\\29\n1770:SkDrawTiler::SkDrawTiler\\28SkBitmapDevice*\\2c\\20SkRect\\20const*\\29\n1771:SkDrawBase::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n1772:SkDescriptor::operator==\\28SkDescriptor\\20const&\\29\\20const\n1773:SkData::MakeEmpty\\28\\29\n1774:SkDRect::add\\28SkDPoint\\20const&\\29\n1775:SkDCubic::FindExtrema\\28double\\20const*\\2c\\20double*\\29\n1776:SkConic::chopAt\\28float\\2c\\20SkConic*\\29\\20const\n1777:SkColorInfo::isOpaque\\28\\29\\20const\n1778:SkColorFilters::Blend\\28unsigned\\20int\\2c\\20SkBlendMode\\29\n1779:SkColorFilter::makeComposed\\28sk_sp<SkColorFilter>\\29\\20const\n1780:SkCanvas::saveLayer\\28SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n1781:SkCanvas::getTotalMatrix\\28\\29\\20const\n1782:SkCanvas::computeDeviceClipBounds\\28bool\\29\\20const\n1783:SkBlockAllocator::ByteRange\\20SkBlockAllocator::allocate<4ul\\2c\\200ul>\\28unsigned\\20long\\29\n1784:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\\28\\29\n1785:SkAutoSMalloc<1024ul>::SkAutoSMalloc\\28unsigned\\20long\\29\n1786:SkAutoCanvasRestore::SkAutoCanvasRestore\\28SkCanvas*\\2c\\20bool\\29\n1787:RunBasedAdditiveBlitter::checkY\\28int\\29\n1788:RoughlyEqualUlps\\28double\\2c\\20double\\29\n1789:PS_Conv_ToFixed\n1790:OT::post::accelerator_t::cmp_gids\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void*\\29\n1791:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::get_advance_without_var_unscaled\\28unsigned\\20int\\29\\20const\n1792:OT::Layout::GPOS_impl::ValueFormat::apply_value\\28OT::hb_ot_apply_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20hb_glyph_position_t&\\29\\20const\n1793:GrTriangulator::VertexList::remove\\28GrTriangulator::Vertex*\\29\n1794:GrTriangulator::Vertex*\\20SkArenaAlloc::make<GrTriangulator::Vertex\\2c\\20SkPoint&\\2c\\20int>\\28SkPoint&\\2c\\20int&&\\29\n1795:GrTriangulator::Poly::addEdge\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Side\\2c\\20GrTriangulator*\\29\n1796:GrSurface::invokeReleaseProc\\28\\29\n1797:GrSurface::GrSurface\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n1798:GrStyledShape::operator=\\28GrStyledShape\\20const&\\29\n1799:GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n1800:GrSimpleMeshDrawOpHelper::CreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrGeometryProcessor*\\2c\\20GrProcessorSet&&\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\2c\\20GrPipeline::InputFlags\\2c\\20GrUserStencilSettings\\20const*\\29\n1801:GrShape::setRRect\\28SkRRect\\20const&\\29\n1802:GrShape::reset\\28GrShape::Type\\29\n1803:GrResourceProvider::findOrCreatePatternedIndexBuffer\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::UniqueKey\\20const&\\29\n1804:GrResourceProvider::createBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\2c\\20GrResourceProvider::ZeroInit\\29\n1805:GrResourceProvider::assignUniqueKeyToResource\\28skgpu::UniqueKey\\20const&\\2c\\20GrGpuResource*\\29\n1806:GrRenderTask::addDependency\\28GrRenderTask*\\29\n1807:GrRenderTask::GrRenderTask\\28\\29\n1808:GrRenderTarget::onRelease\\28\\29\n1809:GrQuadUtils::TessellationHelper::Vertices::asGrQuads\\28GrQuad*\\2c\\20GrQuad::Type\\2c\\20GrQuad*\\2c\\20GrQuad::Type\\29\\20const\n1810:GrProxyProvider::findOrCreateProxyByUniqueKey\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxy::UseAllocator\\29\n1811:GrProxyProvider::assignUniqueKeyToProxy\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\29\n1812:GrPaint::setCoverageFragmentProcessor\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1813:GrMeshDrawOp::QuadHelper::QuadHelper\\28GrMeshDrawTarget*\\2c\\20unsigned\\20long\\2c\\20int\\29\n1814:GrIsStrokeHairlineOrEquivalent\\28GrStyle\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n1815:GrImageInfo::minRowBytes\\28\\29\\20const\n1816:GrGpuResource::CacheAccess::isUsableAsScratch\\28\\29\\20const\n1817:GrGeometryProcessor::ProgramImpl::setupUniformColor\\28GrGLSLFPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n1818:GrGLSLUniformHandler::addUniformArray\\28GrProcessor\\20const*\\2c\\20unsigned\\20int\\2c\\20SkSLType\\2c\\20char\\20const*\\2c\\20int\\2c\\20char\\20const**\\29\n1819:GrGLSLShaderBuilder::emitFunction\\28SkSLType\\2c\\20char\\20const*\\2c\\20SkSpan<GrShaderVar\\20const>\\2c\\20char\\20const*\\29\n1820:GrGLSLShaderBuilder::code\\28\\29\n1821:GrGLOpsRenderPass::bindVertexBuffer\\28GrBuffer\\20const*\\2c\\20int\\29\n1822:GrGLGpu::unbindSurfaceFBOForPixelOps\\28GrSurface*\\2c\\20int\\2c\\20unsigned\\20int\\29\n1823:GrGLGpu::flushRenderTarget\\28GrGLRenderTarget*\\2c\\20bool\\29\n1824:GrGLGpu::bindSurfaceFBOForPixelOps\\28GrSurface*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20GrGLGpu::TempFBOTarget\\29\n1825:GrGLCompileAndAttachShader\\28GrGLContext\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20bool\\2c\\20GrThreadSafePipelineBuilder::Stats*\\2c\\20skgpu::ShaderErrorHandler*\\29\n1826:GrFragmentProcessor::visitTextureEffects\\28std::__2::function<void\\20\\28GrTextureEffect\\20const&\\29>\\20const&\\29\\20const\n1827:GrDirectContextPriv::flushSurface\\28GrSurfaceProxy*\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n1828:GrBlendFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkBlendMode\\2c\\20bool\\29\n1829:GrBackendFormat::operator=\\28GrBackendFormat\\20const&\\29\n1830:GrAAConvexTessellator::addPt\\28SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20GrAAConvexTessellator::CurveState\\29\n1831:FT_Outline_Transform\n1832:CFF::parsed_values_t<CFF::op_str_t>::add_op\\28unsigned\\20int\\2c\\20CFF::byte_str_ref_t\\20const&\\2c\\20CFF::op_str_t\\20const&\\29\n1833:CFF::dict_opset_t::process_op\\28unsigned\\20int\\2c\\20CFF::interp_env_t<CFF::number_t>&\\29\n1834:CFF::cs_opset_t<CFF::number_t\\2c\\20cff2_cs_opset_extents_t\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>\\2c\\20cff2_extents_param_t\\2c\\20cff2_path_procs_extents_t>::process_post_move\\28unsigned\\20int\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\29\n1835:CFF::cs_opset_t<CFF::number_t\\2c\\20cff1_cs_opset_extents_t\\2c\\20CFF::cff1_cs_interp_env_t\\2c\\20cff1_extents_param_t\\2c\\20cff1_path_procs_extents_t>::process_post_move\\28unsigned\\20int\\2c\\20CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\29\n1836:CFF::cs_interp_env_t<CFF::number_t\\2c\\20CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>>::determine_hintmask_size\\28\\29\n1837:BlockIndexIterator<skgpu::ganesh::ClipStack::RawElement&\\2c\\20false\\2c\\20false\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Decrement\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::GetItem\\28SkBlockAllocator::Block*\\2c\\20int\\29>::begin\\28\\29\\20const\n1838:AlmostBetweenUlps\\28double\\2c\\20double\\2c\\20double\\29\n1839:ActiveEdgeList::SingleRotation\\28ActiveEdge*\\2c\\20int\\29\n1840:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n1841:AAT::StateTable<AAT::ExtendedTypes\\2c\\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n1842:AAT::ContextualSubtable<AAT::ObsoleteTypes>::driver_context_t::is_actionable\\28AAT::StateTableDriver<AAT::ObsoleteTypes\\2c\\20AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData>*\\2c\\20AAT::Entry<AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData>\\20const&\\29\n1843:void\\20std::__2::__stable_sort<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\2c\\20long\\29\n1844:void\\20std::__2::__memberwise_forward_assign\\5babi:v160004\\5d<std::__2::tuple<bool&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>&>\\2c\\20std::__2::tuple<bool\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\2c\\20bool\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\200ul\\2c\\201ul>\\28std::__2::tuple<bool&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>&>&\\2c\\20std::__2::tuple<bool\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>&&\\2c\\20std::__2::__tuple_types<bool\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\2c\\20std::__2::__tuple_indices<0ul\\2c\\201ul>\\29\n1845:void\\20extend_pts<\\28SkPaint::Cap\\292>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n1846:void\\20extend_pts<\\28SkPaint::Cap\\291>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n1847:void\\20SkSafeUnref<SkTextBlob>\\28SkTextBlob*\\29\n1848:void\\20SkSafeUnref<GrTextureProxy>\\28GrTextureProxy*\\29\n1849:unsigned\\20int*\\20SkRecorder::copy<unsigned\\20int>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20long\\29\n1850:tt_cmap14_ensure\n1851:tanf\n1852:std::__2::vector<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>>>::push_back\\5babi:v160004\\5d\\28std::__2::unique_ptr<SkSL::Symbol\\2c\\20std::__2::default_delete<SkSL::Symbol>>&&\\29\n1853:std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>::~vector\\5babi:v160004\\5d\\28\\29\n1854:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n1855:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::vector\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\29\n1856:std::__2::unique_ptr<std::__2::unique_ptr<GrSemaphore\\2c\\20std::__2::default_delete<GrSemaphore>>\\20\\5b\\5d\\2c\\20std::__2::default_delete<std::__2::unique_ptr<GrSemaphore\\2c\\20std::__2::default_delete<GrSemaphore>>\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1857:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1858:std::__2::unique_ptr<SkSL::SwitchCase\\2c\\20std::__2::default_delete<SkSL::SwitchCase>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1859:std::__2::unique_ptr<SkSL::FunctionDeclaration\\2c\\20std::__2::default_delete<SkSL::FunctionDeclaration>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1860:std::__2::unique_ptr<SkDrawableList\\2c\\20std::__2::default_delete<SkDrawableList>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1861:std::__2::unique_ptr<GrDrawOpAtlas\\2c\\20std::__2::default_delete<GrDrawOpAtlas>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n1862:std::__2::unique_ptr<GrDrawOpAtlas\\2c\\20std::__2::default_delete<GrDrawOpAtlas>>::reset\\5babi:v160004\\5d\\28GrDrawOpAtlas*\\29\n1863:std::__2::enable_if<__is_cpp17_forward_iterator<std::__2::move_iterator<skia::textlayout::OneLineShaper::RunBlock**>>::value\\2c\\20void>::type\\20std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>&>::__construct_at_end<std::__2::move_iterator<skia::textlayout::OneLineShaper::RunBlock**>>\\28std::__2::move_iterator<skia::textlayout::OneLineShaper::RunBlock**>\\2c\\20std::__2::move_iterator<skia::textlayout::OneLineShaper::RunBlock**>\\29\n1864:std::__2::codecvt<char32_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_unshift\\28__mbstate_t&\\2c\\20char8_t*\\2c\\20char8_t*\\2c\\20char8_t*&\\29\\20const\n1865:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__grow_by_and_replace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20char\\20const*\\29\n1866:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_external\\28char\\20const*\\29\n1867:std::__2::array<sk_sp<GrSurfaceProxy>\\2c\\204ul>::~array\\28\\29\n1868:std::__2::__wrap_iter<wchar_t*>::operator++\\5babi:v160004\\5d\\28\\29\n1869:std::__2::__wrap_iter<char*>::operator++\\5babi:v160004\\5d\\28\\29\n1870:std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__copy_constructor\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29\n1871:std::__2::__shared_count::__release_shared\\5babi:v160004\\5d\\28\\29\n1872:std::__2::__num_get<wchar_t>::__stage2_int_prep\\28std::__2::ios_base&\\2c\\20wchar_t&\\29\n1873:std::__2::__num_get<wchar_t>::__do_widen\\28std::__2::ios_base&\\2c\\20wchar_t*\\29\\20const\n1874:std::__2::__num_get<char>::__stage2_int_prep\\28std::__2::ios_base&\\2c\\20char&\\29\n1875:std::__2::__itoa::__append1\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n1876:std::__2::__function::__value_func<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::operator=\\5babi:v160004\\5d\\28std::__2::__function::__value_func<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>&&\\29\n1877:std::__2::__function::__value_func<void\\20\\28SkIRect\\20const&\\29>::operator\\28\\29\\5babi:v160004\\5d\\28SkIRect\\20const&\\29\\20const\n1878:sqrtf\n1879:skvx::Vec<4\\2c\\20unsigned\\20int>&\\20skvx::operator-=<4\\2c\\20unsigned\\20int>\\28skvx::Vec<4\\2c\\20unsigned\\20int>&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\n1880:skvx::Vec<4\\2c\\20unsigned\\20int>&\\20skvx::operator+=<4\\2c\\20unsigned\\20int>\\28skvx::Vec<4\\2c\\20unsigned\\20int>&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\n1881:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator><4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1882:skvx::Vec<4\\2c\\20float>\\20skvx::operator+<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\\20\\28.5784\\29\n1883:skvx::Vec<4\\2c\\20float>\\20skvx::operator+<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20\\28.640\\29\n1884:skvx::Vec<4\\2c\\20float>\\20skvx::max<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20\\28.7601\\29\n1885:skvx::Vec<4\\2c\\20float>\\20skvx::max<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n1886:sktext::gpu::VertexFiller::vertexStride\\28SkMatrix\\20const&\\29\\20const\n1887:sktext::gpu::SubRunList::append\\28std::__2::unique_ptr<sktext::gpu::SubRun\\2c\\20sktext::gpu::SubRunAllocator::Destroyer>\\29\n1888:sktext::gpu::SubRun::~SubRun\\28\\29\n1889:sktext::gpu::GlyphVector::~GlyphVector\\28\\29\n1890:skif::LayerSpace<SkRect>::roundOut\\28\\29\\20const\n1891:skif::FilterResult::FilterResult\\28sk_sp<SkSpecialImage>\\2c\\20skif::LayerSpace<SkIPoint>\\20const&\\29\n1892:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::findOrNull\\28skgpu::UniqueKey\\20const&\\29\\20const\n1893:skia_private::TArray<int\\2c\\20true>::reset\\28int\\29\n1894:skia_private::TArray<float\\2c\\20true>::push_back_raw\\28int\\29\n1895:skia_private::TArray<SkString\\2c\\20true>::push_back\\28\\29\n1896:skia_private::TArray<SkSL::Variable*\\2c\\20true>::push_back\\28SkSL::Variable*&&\\29\n1897:skia_private::TArray<SkRuntimeEffect::ChildPtr\\2c\\20true>::~TArray\\28\\29\n1898:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n1899:skia_private::AutoSTArray<8\\2c\\20unsigned\\20int>::reset\\28int\\29\n1900:skia_private::AutoSTArray<24\\2c\\20unsigned\\20int>::~AutoSTArray\\28\\29\n1901:skia_png_reciprocal2\n1902:skia::textlayout::Run::~Run\\28\\29\n1903:skia::textlayout::Run::posX\\28unsigned\\20long\\29\\20const\n1904:skia::textlayout::ParagraphStyle::ParagraphStyle\\28skia::textlayout::ParagraphStyle\\20const&\\29\n1905:skia::textlayout::InternalLineMetrics::runTop\\28skia::textlayout::Run\\20const*\\2c\\20skia::textlayout::LineMetricStyle\\29\\20const\n1906:skia::textlayout::InternalLineMetrics::height\\28\\29\\20const\n1907:skia::textlayout::InternalLineMetrics::add\\28skia::textlayout::Run*\\29\n1908:skia::textlayout::FontCollection::findTypefaces\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\2c\\20SkFontStyle\\2c\\20std::__2::optional<skia::textlayout::FontArguments>\\20const&\\29\n1909:skgpu::ganesh::TextureOp::BatchSizeLimiter::createOp\\28GrTextureSetEntry*\\2c\\20int\\2c\\20GrAAType\\29\n1910:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\\28SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1911:skgpu::ganesh::SurfaceFillContext::fillRectToRectWithFP\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n1912:skgpu::ganesh::SurfaceDrawContext::drawShapeUsingPathRenderer\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape&&\\2c\\20bool\\29\n1913:skgpu::ganesh::SurfaceDrawContext::drawRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const*\\29\n1914:skgpu::ganesh::SurfaceDrawContext::drawRRect\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20GrStyle\\20const&\\29\n1915:skgpu::ganesh::SurfaceDrawContext::drawFilledQuad\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\29\n1916:skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0::~$_0\\28\\29\n1917:skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29\n1918:skgpu::ganesh::SurfaceContext::PixelTransferResult::PixelTransferResult\\28skgpu::ganesh::SurfaceContext::PixelTransferResult&&\\29\n1919:skgpu::ganesh::SoftwarePathRenderer::DrawNonAARect\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n1920:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::vertexSize\\28\\29\\20const\n1921:skgpu::ganesh::OpsTask::OpChain::List::List\\28skgpu::ganesh::OpsTask::OpChain::List&&\\29\n1922:skgpu::ganesh::LockTextureProxyView\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20GrImageTexGenPolicy\\2c\\20skgpu::Mipmapped\\29::$_0::operator\\28\\29\\28GrSurfaceProxyView\\20const&\\29\\20const\n1923:skgpu::ganesh::Device::targetProxy\\28\\29\n1924:skgpu::ganesh::ClipStack::getConservativeBounds\\28\\29\\20const\n1925:skgpu::UniqueKeyInvalidatedMessage::UniqueKeyInvalidatedMessage\\28skgpu::UniqueKeyInvalidatedMessage\\20const&\\29\n1926:skgpu::UniqueKey::operator=\\28skgpu::UniqueKey\\20const&\\29\n1927:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::addTransferResult\\28skgpu::ganesh::SurfaceContext::PixelTransferResult\\20const&\\2c\\20SkISize\\2c\\20unsigned\\20long\\2c\\20skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>*\\29\n1928:skgpu::Swizzle::asString\\28\\29\\20const\n1929:skgpu::GetApproxSize\\28SkISize\\29\n1930:sk_srgb_linear_singleton\\28\\29\n1931:sk_sp<GrGpuBuffer>::reset\\28GrGpuBuffer*\\29\n1932:sk_sp<GrGLTextureParameters>\\20sk_make_sp<GrGLTextureParameters>\\28\\29\n1933:sfnt_get_name_id\n1934:set_glyph\\28hb_glyph_info_t&\\2c\\20hb_font_t*\\29\n1935:resource_cache_mutex\\28\\29\n1936:ps_parser_to_token\n1937:precisely_between\\28double\\2c\\20double\\2c\\20double\\29\n1938:powf\n1939:next_char\\28hb_buffer_t*\\2c\\20unsigned\\20int\\29\n1940:memchr\n1941:log2f\n1942:log\n1943:less_or_equal_ulps\\28float\\2c\\20float\\2c\\20int\\29\n1944:is_consonant\\28hb_glyph_info_t\\20const&\\29\n1945:int\\20const*\\20std::__2::find\\5babi:v160004\\5d<int\\20const*\\2c\\20int>\\28int\\20const*\\2c\\20int\\20const*\\2c\\20int\\20const&\\29\n1946:hb_vector_t<hb_aat_map_builder_t::feature_range_t\\2c\\20true>::push\\28\\29\n1947:hb_vector_t<contour_point_t\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n1948:hb_unicode_funcs_destroy\n1949:hb_serialize_context_t::pop_discard\\28\\29\n1950:hb_paint_funcs_t::pop_clip\\28void*\\29\n1951:hb_ot_map_t::feature_map_t\\20const*\\20hb_vector_t<hb_ot_map_t::feature_map_t\\2c\\20true>::bsearch<unsigned\\20int\\2c\\20true\\2c\\20\\28void*\\290>\\28unsigned\\20int\\20const&\\2c\\20hb_ot_map_t::feature_map_t\\20const*\\29\\20const\n1952:hb_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\2024u>\\2c\\20hb_face_t\\2c\\2024u\\2c\\20OT::GDEF_accelerator_t>::get_stored\\28\\29\\20const\n1953:hb_indic_would_substitute_feature_t::init\\28hb_ot_map_t\\20const*\\2c\\20unsigned\\20int\\2c\\20bool\\29\n1954:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::del\\28unsigned\\20int\\20const&\\29\n1955:hb_font_t::get_glyph_v_advance\\28unsigned\\20int\\29\n1956:hb_font_t::get_glyph_extents\\28unsigned\\20int\\2c\\20hb_glyph_extents_t*\\29\n1957:hb_buffer_t::_set_glyph_flags\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n1958:hb_buffer_create_similar\n1959:gray_set_cell\n1960:getenv\n1961:ft_service_list_lookup\n1962:fseek\n1963:fillcheckrect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkBlitter*\\29\n1964:fflush\n1965:fclose\n1966:expm1\n1967:expf\n1968:crc_word\n1969:clean_paint_for_drawImage\\28SkPaint\\20const*\\29\n1970:classify\\28skcms_TransferFunction\\20const&\\2c\\20TF_PQish*\\2c\\20TF_HLGish*\\29\n1971:choose_bmp_texture_colortype\\28GrCaps\\20const*\\2c\\20SkBitmap\\20const&\\29\n1972:char*\\20sktext::gpu::BagOfBytes::allocateBytesFor<SkPoint>\\28int\\29\n1973:cff_parse_fixed\n1974:cf2_interpT2CharString\n1975:cf2_hintmap_insertHint\n1976:cf2_hintmap_build\n1977:cf2_glyphpath_moveTo\n1978:cf2_glyphpath_lineTo\n1979:byn$mgfn-shared$std::__2::__split_buffer<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>&>::~__split_buffer\\28\\29\n1980:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n1981:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n1982:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n1983:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n1984:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n1985:byn$mgfn-shared$skgpu::ganesh::PathStencilCoverOp::ClassID\\28\\29\n1986:byn$mgfn-shared$format_alignment\\28SkMask::Format\\29\n1987:byn$mgfn-shared$SkFibBlockSizes<4294967295u>::SkFibBlockSizes\\28unsigned\\20int\\2c\\20unsigned\\20int\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n1988:bool\\20std::__2::operator==\\5babi:v160004\\5d<SkString\\2c\\20std::__2::allocator<SkString>>\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\2c\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\29\n1989:bool\\20OT::OffsetTo<OT::ArrayOf<AAT::Anchor\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20false>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n1990:blit_saved_trapezoid\\28SkAnalyticEdge*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20AdditiveBlitter*\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20int\\2c\\20int\\29\n1991:append_multitexture_lookup\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20int\\2c\\20GrGLSLVarying\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n1992:afm_tokenize\n1993:af_glyph_hints_reload\n1994:a_dec\n1995:_hb_glyph_info_set_unicode_props\\28hb_glyph_info_t*\\2c\\20hb_buffer_t*\\29\n1996:_hb_draw_funcs_set_middle\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\29\\29\n1997:__syscall_ret\n1998:__sin\n1999:__cos\n2000:\\28anonymous\\20namespace\\29::valid_unit_divide\\28float\\2c\\20float\\2c\\20float*\\29\n2001:\\28anonymous\\20namespace\\29::draw_stencil_rect\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrHardClip\\20const&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\29\n2002:\\28anonymous\\20namespace\\29::can_reorder\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n2003:\\28anonymous\\20namespace\\29::SkBlurImageFilter::~SkBlurImageFilter\\28\\29\n2004:\\28anonymous\\20namespace\\29::FillRectOpImpl::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n2005:Skwasm::samplingOptionsForQuality\\28Skwasm::FilterQuality\\29\n2006:Skwasm::createRRect\\28float\\20const*\\29\n2007:SkWriter32::writeSampling\\28SkSamplingOptions\\20const&\\29\n2008:SkWriter32::writePad\\28void\\20const*\\2c\\20unsigned\\20long\\29\n2009:SkTextBlobRunIterator::next\\28\\29\n2010:SkTextBlobBuilder::make\\28\\29\n2011:SkTSect::addOne\\28\\29\n2012:SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::remove\\28skgpu::ScratchKey\\20const&\\2c\\20GrGpuResource\\20const*\\29\n2013:SkTLazy<SkPath>::set\\28SkPath\\20const&\\29\n2014:SkTDArray<unsigned\\20char>::append\\28\\29\n2015:SkStrokeRec::isFillStyle\\28\\29\\20const\n2016:SkStrokeRec::SkStrokeRec\\28SkPaint\\20const&\\2c\\20float\\29\n2017:SkString::appendU32\\28unsigned\\20int\\29\n2018:SkStrike::digestFor\\28skglyph::ActionType\\2c\\20SkPackedGlyphID\\29\n2019:SkSpecialImages::MakeFromRaster\\28SkIRect\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n2020:SkShaders::Blend\\28SkBlendMode\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkShader>\\29\n2021:SkSemaphore::signal\\28int\\29\n2022:SkScopeExit::~SkScopeExit\\28\\29\n2023:SkScan::FillPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkBlitter*\\29\n2024:SkSL::is_scalar_op_matrix\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n2025:SkSL::evaluate_n_way_intrinsic\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n2026:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitType\\28SkSL::Type\\20const&\\29\n2027:SkSL::Variable::initialValue\\28\\29\\20const\n2028:SkSL::Variable*\\20SkSL::SymbolTable::takeOwnershipOfSymbol<SkSL::Variable>\\28std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\29\n2029:SkSL::Type::canCoerceTo\\28SkSL::Type\\20const&\\2c\\20bool\\29\\20const\n2030:SkSL::SymbolTable::takeOwnershipOfString\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n2031:SkSL::RP::pack_nybbles\\28SkSpan<signed\\20char\\20const>\\29\n2032:SkSL::RP::Generator::foldComparisonOp\\28SkSL::Operator\\2c\\20int\\29\n2033:SkSL::RP::Generator::createStack\\28\\29\n2034:SkSL::RP::Builder::trace_var\\28int\\2c\\20SkSL::RP::SlotRange\\29\n2035:SkSL::RP::Builder::jump\\28int\\29\n2036:SkSL::RP::Builder::dot_floats\\28int\\29\n2037:SkSL::RP::Builder::branch_if_no_lanes_active\\28int\\29\n2038:SkSL::RP::AutoStack::~AutoStack\\28\\29\n2039:SkSL::RP::AutoStack::pushClone\\28int\\29\n2040:SkSL::Position::rangeThrough\\28SkSL::Position\\29\\20const\n2041:SkSL::PipelineStage::PipelineStageCodeGenerator::AutoOutputBuffer::~AutoOutputBuffer\\28\\29\n2042:SkSL::Parser::type\\28SkSL::Modifiers*\\29\n2043:SkSL::Parser::parseArrayDimensions\\28SkSL::Position\\2c\\20SkSL::Type\\20const**\\29\n2044:SkSL::Parser::modifiers\\28\\29\n2045:SkSL::Parser::assignmentExpression\\28\\29\n2046:SkSL::Parser::arraySize\\28long\\20long*\\29\n2047:SkSL::ModifierFlags::paddedDescription\\28\\29\\20const\n2048:SkSL::Inliner::inlineExpression\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::Expression\\20const&\\29::$_1::operator\\28\\29\\28SkSL::ExpressionArray\\20const&\\29\\20const\n2049:SkSL::IRHelpers::Swizzle\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29\\20const\n2050:SkSL::GLSLCodeGenerator::writeTypePrecision\\28SkSL::Type\\20const&\\29\n2051:SkSL::FunctionDeclaration::getMainCoordsParameter\\28\\29\\20const\n2052:SkSL::ExpressionArray::clone\\28\\29\\20const\n2053:SkSL::ConstantFolder::GetConstantValue\\28SkSL::Expression\\20const&\\2c\\20double*\\29\n2054:SkSL::ConstantFolder::GetConstantInt\\28SkSL::Expression\\20const&\\2c\\20long\\20long*\\29\n2055:SkSL::Compiler::~Compiler\\28\\29\n2056:SkSL::Compiler::errorText\\28bool\\29\n2057:SkSL::Compiler::Compiler\\28\\29\n2058:SkSL::Analysis::IsTrivialExpression\\28SkSL::Expression\\20const&\\29\n2059:SkRuntimeEffectPriv::TransformUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkColorSpace\\20const*\\29\n2060:SkRegion::setPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\29\n2061:SkRegion::Iterator::Iterator\\28SkRegion\\20const&\\29\n2062:SkReduceOrder::Quad\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2063:SkRect::sort\\28\\29\n2064:SkRect::joinPossiblyEmptyRect\\28SkRect\\20const&\\29\n2065:SkRasterPipelineBlitter::appendClipScale\\28SkRasterPipeline*\\29\\20const\n2066:SkRasterPipelineBlitter::appendClipLerp\\28SkRasterPipeline*\\29\\20const\n2067:SkRRect::setRectRadii\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\29\n2068:SkRGBA4f<\\28SkAlphaType\\292>::toBytes_RGBA\\28\\29\\20const\n2069:SkRGBA4f<\\28SkAlphaType\\292>::fitsInBytes\\28\\29\\20const\n2070:SkPointPriv::EqualsWithinTolerance\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\29\n2071:SkPoint*\\20SkRecorder::copy<SkPoint>\\28SkPoint\\20const*\\2c\\20unsigned\\20long\\29\n2072:SkPoint*\\20SkArenaAlloc::allocUninitializedArray<SkPoint>\\28unsigned\\20long\\29\n2073:SkPixmap::reset\\28\\29\n2074:SkPixmap::computeByteSize\\28\\29\\20const\n2075:SkPictureRecord::addImage\\28SkImage\\20const*\\29\n2076:SkPathRef::SkPathRef\\28int\\2c\\20int\\2c\\20int\\29\n2077:SkPathPriv::ComputeFirstDirection\\28SkPath\\20const&\\29\n2078:SkPath::isLine\\28SkPoint*\\29\\20const\n2079:SkPaintPriv::ComputeLuminanceColor\\28SkPaint\\20const&\\29\n2080:SkPaint::operator=\\28SkPaint\\20const&\\29\n2081:SkPaint::nothingToDraw\\28\\29\\20const\n2082:SkOpSpan::release\\28SkOpPtT\\20const*\\29\n2083:SkOpContourBuilder::addCurve\\28SkPath::Verb\\2c\\20SkPoint\\20const*\\2c\\20float\\29\n2084:SkMipmap::Build\\28SkPixmap\\20const&\\2c\\20SkDiscardableMemory*\\20\\28*\\29\\28unsigned\\20long\\29\\2c\\20bool\\29\n2085:SkMeshSpecification::Varying::Varying\\28SkMeshSpecification::Varying&&\\29\n2086:SkMatrix::mapOrigin\\28\\29\\20const\n2087:SkMatrix::decomposeScale\\28SkSize*\\2c\\20SkMatrix*\\29\\20const\n2088:SkMaskFilter::MakeBlur\\28SkBlurStyle\\2c\\20float\\2c\\20bool\\29\n2089:SkM44::SkM44\\28SkMatrix\\20const&\\29\n2090:SkIntersections::insertNear\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\2c\\20SkDPoint\\20const&\\29\n2091:SkImageShader::Make\\28sk_sp<SkImage>\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\n2092:SkImageGenerator::onRefEncodedData\\28\\29\n2093:SkGradientBaseShader::flatten\\28SkWriteBuffer&\\29\\20const\n2094:SkFont::getMetrics\\28SkFontMetrics*\\29\\20const\n2095:SkFont::SkFont\\28\\29\n2096:SkFindQuadMaxCurvature\\28SkPoint\\20const*\\29\n2097:SkFDot6Div\\28int\\2c\\20int\\29\n2098:SkEvalQuadAt\\28SkPoint\\20const*\\2c\\20float\\29\n2099:SkEvalCubicAt\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n2100:SkEdgeClipper::appendVLine\\28float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n2101:SkDrawShadowMetrics::GetSpotParams\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float*\\2c\\20float*\\2c\\20SkPoint*\\29\n2102:SkDraw::SkDraw\\28\\29\n2103:SkDevice::setGlobalCTM\\28SkM44\\20const&\\29\n2104:SkDevice::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n2105:SkDLine::exactPoint\\28SkDPoint\\20const&\\29\\20const\n2106:SkColorSpace::MakeSRGBLinear\\28\\29\n2107:SkChopCubicAtHalf\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2108:SkCanvas::getLocalClipBounds\\28\\29\\20const\n2109:SkCanvas::drawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n2110:SkBulkGlyphMetrics::glyphs\\28SkSpan<unsigned\\20short\\20const>\\29\n2111:SkBlockAllocator::releaseBlock\\28SkBlockAllocator::Block*\\29\n2112:SkBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n2113:SkBlendMode_AppendStages\\28SkBlendMode\\2c\\20SkRasterPipeline*\\29\n2114:SkBitmap::tryAllocPixels\\28SkBitmap::Allocator*\\29\n2115:SkBitmap::readPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\20const\n2116:SkBitmap::operator=\\28SkBitmap\\20const&\\29\n2117:SkBitmap::getGenerationID\\28\\29\\20const\n2118:SkAutoPixmapStorage::SkAutoPixmapStorage\\28\\29\n2119:SkAAClipBlitter::~SkAAClipBlitter\\28\\29\n2120:SkAAClip::setRegion\\28SkRegion\\20const&\\29::$_0::operator\\28\\29\\28unsigned\\20char\\2c\\20int\\29\\20const\n2121:SkAAClip::findX\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n2122:SkAAClip::findRow\\28int\\2c\\20int*\\29\\20const\n2123:SkAAClip::Builder::Blitter::~Blitter\\28\\29\n2124:RoughlyEqualUlps\\28float\\2c\\20float\\29\n2125:R\n2126:PS_Conv_ToInt\n2127:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::get_leading_bearing_without_var_unscaled\\28unsigned\\20int\\2c\\20int*\\29\\20const\n2128:OT::hb_ot_apply_context_t::replace_glyph\\28unsigned\\20int\\29\n2129:OT::fvar::get_axes\\28\\29\\20const\n2130:OT::Layout::GPOS_impl::ValueFormat::sanitize_values_stride_unsafe\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n2131:OT::DeltaSetIndexMap::map\\28unsigned\\20int\\29\\20const\n2132:Normalize\n2133:Ins_Goto_CodeRange\n2134:GrTriangulator::setBottom\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2135:GrTriangulator::VertexList::append\\28GrTriangulator::VertexList\\20const&\\29\n2136:GrTriangulator::Line::normalize\\28\\29\n2137:GrTriangulator::Edge::disconnect\\28\\29\n2138:GrThreadSafeCache::find\\28skgpu::UniqueKey\\20const&\\29\n2139:GrThreadSafeCache::add\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29\n2140:GrTextureEffect::texture\\28\\29\\20const\n2141:GrTextureEffect::GrTextureEffect\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20GrTextureEffect::Sampling\\20const&\\29\n2142:GrSurfaceProxyView::Copy\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Mipmapped\\2c\\20SkIRect\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n2143:GrSurfaceProxyPriv::doLazyInstantiation\\28GrResourceProvider*\\29\n2144:GrSurface::~GrSurface\\28\\29\n2145:GrStyledShape::simplify\\28\\29\n2146:GrStyle::applies\\28\\29\\20const\n2147:GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags\\28\\29\\20const\n2148:GrSimpleMeshDrawOpHelper::finalizeProcessors\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrClampType\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrProcessorAnalysisColor*\\29\n2149:GrSimpleMeshDrawOpHelper::detachProcessorSet\\28\\29\n2150:GrSimpleMeshDrawOpHelper::CreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrPipeline\\20const*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrGeometryProcessor*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\2c\\20GrUserStencilSettings\\20const*\\29\n2151:GrSimpleMesh::setIndexedPatterned\\28sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\29\n2152:GrShape::setRect\\28SkRect\\20const&\\29\n2153:GrShape::GrShape\\28GrShape\\20const&\\29\n2154:GrShaderVar::addModifier\\28char\\20const*\\29\n2155:GrSWMaskHelper::~GrSWMaskHelper\\28\\29\n2156:GrResourceProvider::findOrMakeStaticBuffer\\28GrGpuBufferType\\2c\\20unsigned\\20long\\2c\\20void\\20const*\\2c\\20skgpu::UniqueKey\\20const&\\29\n2157:GrResourceProvider::findOrMakeStaticBuffer\\28GrGpuBufferType\\2c\\20unsigned\\20long\\2c\\20skgpu::UniqueKey\\20const&\\2c\\20void\\20\\28*\\29\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\\29\n2158:GrResourceCache::purgeAsNeeded\\28\\29\n2159:GrRenderTask::addDependency\\28GrDrawingManager*\\2c\\20GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n2160:GrRecordingContextPriv::makeSFC\\28GrImageInfo\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n2161:GrQuad::asRect\\28SkRect*\\29\\20const\n2162:GrProcessorSet::operator!=\\28GrProcessorSet\\20const&\\29\\20const\n2163:GrPixmapBase<void\\20const\\2c\\20GrCPixmap>::GrPixmapBase\\28GrImageInfo\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n2164:GrPipeline::getXferProcessor\\28\\29\\20const\n2165:GrPathUtils::generateQuadraticPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint**\\2c\\20unsigned\\20int\\29\n2166:GrPathUtils::generateCubicPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint**\\2c\\20unsigned\\20int\\29\n2167:GrNativeRect::asSkIRect\\28\\29\\20const\n2168:GrGeometryProcessor::ProgramImpl::~ProgramImpl\\28\\29\n2169:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\2c\\20char\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n2170:GrGLSLShaderBuilder::defineConstant\\28char\\20const*\\2c\\20float\\29\n2171:GrGLSLShaderBuilder::addFeature\\28unsigned\\20int\\2c\\20char\\20const*\\29\n2172:GrGLSLProgramBuilder::nameVariable\\28char\\2c\\20char\\20const*\\2c\\20bool\\29\n2173:GrGLSLColorSpaceXformHelper::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrColorSpaceXform\\20const*\\29\n2174:GrGLSLColorSpaceXformHelper::emitCode\\28GrGLSLUniformHandler*\\2c\\20GrColorSpaceXform\\20const*\\2c\\20unsigned\\20int\\29\n2175:GrGLGpu::flushColorWrite\\28bool\\29\n2176:GrGLGpu::bindTexture\\28int\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20GrGLTexture*\\29\n2177:GrFragmentProcessor::visitWithImpls\\28std::__2::function<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\20const\n2178:GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n2179:GrFragmentProcessor::ColorMatrix\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20float\\20const*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n2180:GrDstProxyView::operator=\\28GrDstProxyView\\20const&\\29\n2181:GrDrawingManager::closeActiveOpsTask\\28\\29\n2182:GrDrawingManager::appendTask\\28sk_sp<GrRenderTask>\\29\n2183:GrColorSpaceXformEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20sk_sp<GrColorSpaceXform>\\29\n2184:GrColorSpaceXform::XformKey\\28GrColorSpaceXform\\20const*\\29\n2185:GrColorSpaceXform::Make\\28GrColorInfo\\20const&\\2c\\20GrColorInfo\\20const&\\29\n2186:GrColorInfo::GrColorInfo\\28GrColorInfo\\20const&\\29\n2187:GrCaps::isFormatCompressed\\28GrBackendFormat\\20const&\\29\\20const\n2188:GrBufferAllocPool::~GrBufferAllocPool\\28\\29\n2189:GrBufferAllocPool::putBack\\28unsigned\\20long\\29\n2190:GrBlurUtils::convolve_gaussian\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\29::$_1::operator\\28\\29\\28SkIRect\\29\\20const\n2191:GrAAConvexTessellator::lineTo\\28SkPoint\\20const&\\2c\\20GrAAConvexTessellator::CurveState\\29\n2192:FwDCubicEvaluator::restart\\28int\\29\n2193:FT_Vector_Transform\n2194:FT_Stream_Read\n2195:FT_Select_Charmap\n2196:FT_Lookup_Renderer\n2197:FT_Get_Module_Interface\n2198:CFF::opset_t<CFF::number_t>::process_op\\28unsigned\\20int\\2c\\20CFF::interp_env_t<CFF::number_t>&\\29\n2199:CFF::arg_stack_t<CFF::number_t>::push_int\\28int\\29\n2200:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::offset_at\\28unsigned\\20int\\29\\20const\n2201:BlockIndexIterator<skgpu::ganesh::ClipStack::RawElement&\\2c\\20false\\2c\\20false\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Decrement\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::GetItem\\28SkBlockAllocator::Block*\\2c\\20int\\29>::Item::operator++\\28\\29\n2202:ActiveEdge::intersect\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\\20const\n2203:AAT::hb_aat_apply_context_t::~hb_aat_apply_context_t\\28\\29\n2204:AAT::hb_aat_apply_context_t::hb_aat_apply_context_t\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20hb_blob_t*\\29\n2205:void\\20std::__2::reverse\\5babi:v160004\\5d<unsigned\\20int*>\\28unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n2206:void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29\n2207:void\\20skgpu::ganesh::SurfaceFillContext::clear<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n2208:void\\20hb_serialize_context_t::add_link<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>>\\28OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>&\\2c\\20unsigned\\20int\\2c\\20hb_serialize_context_t::whence_t\\2c\\20unsigned\\20int\\29\n2209:void\\20SkSafeUnref<GrArenas>\\28GrArenas*\\29\n2210:void\\20SkSL::RP::unpack_nybbles_to_offsets<unsigned\\20short>\\28unsigned\\20int\\2c\\20SkSpan<unsigned\\20short>\\29\n2211:unlock\n2212:ubidi_setPara_skia\n2213:ubidi_getCustomizedClass_skia\n2214:tt_set_mm_blend\n2215:tt_face_get_ps_name\n2216:trinkle\n2217:t1_builder_check_points\n2218:subdivide\\28SkConic\\20const&\\2c\\20SkPoint*\\2c\\20int\\29\n2219:std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>&>&\\29\n2220:std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>::__clear\\5babi:v160004\\5d\\28\\29\n2221:std::__2::vector<std::__2::unique_ptr<GrFragmentProcessor::ProgramImpl\\2c\\20std::__2::default_delete<GrFragmentProcessor::ProgramImpl>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<GrFragmentProcessor::ProgramImpl\\2c\\20std::__2::default_delete<GrFragmentProcessor::ProgramImpl>>>>::~vector\\5babi:v160004\\5d\\28\\29\n2222:std::__2::vector<skia::textlayout::TextShadow\\2c\\20std::__2::allocator<skia::textlayout::TextShadow>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n2223:std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n2224:std::__2::vector<sk_sp<SkFontMgr>\\2c\\20std::__2::allocator<sk_sp<SkFontMgr>>>::push_back\\5babi:v160004\\5d\\28sk_sp<SkFontMgr>\\20const&\\29\n2225:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::push_back\\5babi:v160004\\5d\\28float&&\\29\n2226:std::__2::vector<char\\20const*\\2c\\20std::__2::allocator<char\\20const*>>::push_back\\5babi:v160004\\5d\\28char\\20const*&&\\29\n2227:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__move_assign\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>&\\2c\\20std::__2::integral_constant<bool\\2c\\20true>\\29\n2228:std::__2::vector<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>&>&\\29\n2229:std::__2::unordered_map<GrTriangulator::Vertex*\\2c\\20SSVertex*\\2c\\20std::__2::hash<GrTriangulator::Vertex*>\\2c\\20std::__2::equal_to<GrTriangulator::Vertex*>\\2c\\20std::__2::allocator<std::__2::pair<GrTriangulator::Vertex*\\20const\\2c\\20SSVertex*>>>::operator\\5b\\5d\\28GrTriangulator::Vertex*\\20const&\\29\n2230:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2231:std::__2::unique_ptr<skia_private::THashTable<long\\20long\\2c\\20long\\20long\\2c\\20skia_private::THashSet<long\\20long\\2c\\20SkGoodHash>::Traits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<long\\20long\\2c\\20long\\20long\\2c\\20skia_private::THashSet<long\\20long\\2c\\20SkGoodHash>::Traits>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2232:std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\\2c\\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>::reset\\5babi:v160004\\5d\\28skgpu::ganesh::SurfaceDrawContext*\\29\n2233:std::__2::unique_ptr<skgpu::ganesh::PathRendererChain\\2c\\20std::__2::default_delete<skgpu::ganesh::PathRendererChain>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2234:std::__2::unique_ptr<skgpu::ganesh::PathRendererChain\\2c\\20std::__2::default_delete<skgpu::ganesh::PathRendererChain>>::reset\\5babi:v160004\\5d\\28skgpu::ganesh::PathRendererChain*\\29\n2235:std::__2::unique_ptr<hb_face_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_face_t*\\29\\2c\\20&hb_face_destroy>>::reset\\5babi:v160004\\5d\\28hb_face_t*\\29\n2236:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::release\\5babi:v160004\\5d\\28\\29\n2237:std::__2::unique_ptr<SkSL::Program\\20const\\2c\\20std::__2::default_delete<SkSL::Program\\20const>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2238:std::__2::unique_ptr<SkSL::Pool\\2c\\20std::__2::default_delete<SkSL::Pool>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2239:std::__2::unique_ptr<SkSL::ChildCall\\2c\\20std::__2::default_delete<SkSL::ChildCall>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2240:std::__2::unique_ptr<SkPerlinNoiseShader::PaintingData\\2c\\20std::__2::default_delete<SkPerlinNoiseShader::PaintingData>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2241:std::__2::unique_ptr<SkFontData\\2c\\20std::__2::default_delete<SkFontData>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2242:std::__2::unique_ptr<FT_FaceRec_\\2c\\20SkOverloadedFunctionObject<int\\20\\28FT_FaceRec_*\\29\\2c\\20&FT_Done_Face>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2243:std::__2::mutex::unlock\\28\\29\n2244:std::__2::mutex::lock\\28\\29\n2245:std::__2::moneypunct<wchar_t\\2c\\20false>::do_decimal_point\\28\\29\\20const\n2246:std::__2::moneypunct<char\\2c\\20true>::pos_format\\5babi:v160004\\5d\\28\\29\\20const\n2247:std::__2::moneypunct<char\\2c\\20false>::do_decimal_point\\28\\29\\20const\n2248:std::__2::locale::locale\\28std::__2::locale\\20const&\\29\n2249:std::__2::locale::classic\\28\\29\n2250:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::istreambuf_iterator\\5babi:v160004\\5d\\28std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>&\\29\n2251:std::__2::function<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n2252:std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>::operator\\28\\29\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29\\20const\n2253:std::__2::enable_if<is_move_constructible<unsigned\\20int>::value\\20&&\\20is_move_assignable<unsigned\\20int>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<unsigned\\20int>\\28unsigned\\20int&\\2c\\20unsigned\\20int&\\29\n2254:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::Slot*>\\28skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::Slot*\\29\n2255:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot*>\\28skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot*\\29\n2256:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::pop_front\\28\\29\n2257:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::begin\\5babi:v160004\\5d\\28\\29\n2258:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot*\\29\\20const\n2259:std::__2::ctype<char>::toupper\\5babi:v160004\\5d\\28char\\29\\20const\n2260:std::__2::chrono::duration<long\\20long\\2c\\20std::__2::ratio<1ll\\2c\\201ll>>::duration\\5babi:v160004\\5d<long\\20long>\\28long\\20long\\20const&\\2c\\20std::__2::enable_if<is_convertible<long\\20long\\20const&\\2c\\20long\\20long>::value\\20&&\\20\\28std::__2::integral_constant<bool\\2c\\20false>::value\\20||\\20!treat_as_floating_point<long\\20long>::value\\29\\2c\\20void>::type*\\29\n2261:std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>::find\\5babi:v160004\\5d\\28char\\2c\\20unsigned\\20long\\29\\20const\n2262:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\20std::__2::__scan_keyword\\5babi:v160004\\5d<std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::ctype<wchar_t>>\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const*\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n2263:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::operator\\5b\\5d\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n2264:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__fits_in_sso\\5babi:v160004\\5d\\28unsigned\\20long\\29\n2265:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\20std::__2::__scan_keyword\\5babi:v160004\\5d<std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::ctype<char>>\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20unsigned\\20int&\\2c\\20bool\\29\n2266:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator=\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n2267:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__get_short_size\\5babi:v160004\\5d\\28\\29\\20const\n2268:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__fits_in_sso\\5babi:v160004\\5d\\28unsigned\\20long\\29\n2269:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__assign_external\\28char\\20const*\\2c\\20unsigned\\20long\\29\n2270:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::__pbump\\5babi:v160004\\5d\\28long\\29\n2271:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::operator\\20bool\\5babi:v160004\\5d\\28\\29\\20const\n2272:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n2273:std::__2::__unique_if<SkSL::PrefixExpression>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::PrefixExpression\\2c\\20SkSL::Position&\\2c\\20SkSL::OperatorKind\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::OperatorKind&&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n2274:std::__2::__tuple_impl<std::__2::__tuple_indices<0ul\\2c\\201ul>\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\2c\\20sk_sp<SkData>>::~__tuple_impl\\28\\29\n2275:std::__2::__tuple_impl<std::__2::__tuple_indices<0ul\\2c\\201ul>\\2c\\20GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>::__tuple_impl\\28std::__2::__tuple_impl<std::__2::__tuple_indices<0ul\\2c\\201ul>\\2c\\20GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>&&\\29\n2276:std::__2::__tree<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::__map_value_compare<unsigned\\20long\\2c\\20std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20std::__2::less<unsigned\\20long>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>>>::destroy\\28std::__2::__tree_node<std::__2::__value_type<unsigned\\20long\\2c\\20skia::textlayout::StyleMetrics>\\2c\\20void*>*\\29\n2277:std::__2::__throw_bad_variant_access\\5babi:v160004\\5d\\28\\29\n2278:std::__2::__split_buffer<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>&>::~__split_buffer\\28\\29\n2279:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_front\\28skia::textlayout::OneLineShaper::RunBlock*&&\\29\n2280:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_back\\5babi:v160004\\5d\\28skia::textlayout::OneLineShaper::RunBlock*\\20const&\\29\n2281:std::__2::__split_buffer<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>&>::~__split_buffer\\28\\29\n2282:std::__2::__split_buffer<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>&\\29\n2283:std::__2::__split_buffer<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>&\\29\n2284:std::__2::__shared_count::__add_shared\\5babi:v160004\\5d\\28\\29\n2285:std::__2::__optional_destruct_base<SkSL::RP::AutoStack\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n2286:std::__2::__optional_destruct_base<SkPath\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n2287:std::__2::__num_put_base::__format_int\\28char*\\2c\\20char\\20const*\\2c\\20bool\\2c\\20unsigned\\20int\\29\n2288:std::__2::__num_put_base::__format_float\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20int\\29\n2289:std::__2::__itoa::__append8\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n2290:skvx::Vec<8\\2c\\20unsigned\\20short>\\20skvx::operator+<8\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20void>\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20short\\29\n2291:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator>=<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n2292:skvx::Vec<4\\2c\\20float>\\20skvx::operator*<4\\2c\\20float\\2c\\20double\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20double\\29\n2293:sktext::gpu::VertexFiller::deviceRectAndCheckTransform\\28SkMatrix\\20const&\\29\\20const\n2294:sktext::gpu::GlyphVector::packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\n2295:sktext::SkStrikePromise::strike\\28\\29\n2296:skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29\n2297:skif::RoundOut\\28SkRect\\29\n2298:skif::Mapping::applyOrigin\\28skif::LayerSpace<SkIPoint>\\20const&\\29\n2299:skif::LayerSpace<SkRect>\\20skif::Mapping::paramToLayer<SkRect>\\28skif::ParameterSpace<SkRect>\\20const&\\29\\20const\n2300:skif::LayerSpace<SkMatrix>::mapRect\\28skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n2301:skif::FilterResult::analyzeBounds\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::FilterResult::BoundsScope\\29\\20const\n2302:skif::FilterResult::Builder::add\\28skif::FilterResult\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\2c\\20SkEnumBitMask<skif::FilterResult::ShaderFlags>\\2c\\20SkSamplingOptions\\20const&\\29\n2303:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair&&\\29\n2304:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::uncheckedSet\\28skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair&&\\29\n2305:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair&&\\29\n2306:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Hash\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n2307:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n2308:skia_private::THashTable<skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::FunctionDeclaration\\20const*\\2c\\20skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair&&\\29\n2309:skia_private::THashTable<long\\20long\\2c\\20long\\20long\\2c\\20skia_private::THashSet<long\\20long\\2c\\20SkGoodHash>::Traits>::uncheckedSet\\28long\\20long&&\\29\n2310:skia_private::THashTable<int\\2c\\20int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>::Traits>::uncheckedSet\\28int&&\\29\n2311:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n2312:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::find\\28unsigned\\20int\\20const&\\29\\20const\n2313:skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::find\\28unsigned\\20int\\20const&\\29\\20const\n2314:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::operator\\5b\\5d\\28SkSL::Variable\\20const*\\20const&\\29\n2315:skia_private::TArray<unsigned\\20char\\2c\\20true>::push_back_raw\\28int\\29\n2316:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>::destroyAll\\28\\29\n2317:skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20true>::push_back\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>&&\\29\n2318:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::preallocateNewData\\28int\\2c\\20double\\29\n2319:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n2320:skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>::~TArray\\28\\29\n2321:skia_private::TArray<skia::textlayout::Cluster\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n2322:skia_private::TArray<skia::textlayout::Block\\2c\\20true>::~TArray\\28\\29\n2323:skia_private::TArray<sk_sp<SkImage\\20const>\\2c\\20true>::~TArray\\28\\29\n2324:skia_private::TArray<float\\2c\\20true>::reserve_exact\\28int\\29\n2325:skia_private::TArray<\\28anonymous\\20namespace\\29::MeshOp::Mesh\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n2326:skia_private::TArray<\\28anonymous\\20namespace\\29::MeshOp::Mesh\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n2327:skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>::copy\\28SkUnicode::CodeUnitFlags\\20const*\\29\n2328:skia_private::TArray<SkString\\2c\\20true>::clear\\28\\29\n2329:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>::operator=\\28skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>&&\\29\n2330:skia_private::TArray<SkPath\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n2331:skia_private::TArray<SkPaint\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n2332:skia_private::TArray<GrRenderTask*\\2c\\20true>::push_back\\28GrRenderTask*&&\\29\n2333:skia_private::TArray<ButtCapDashedCircleOp::Circle\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n2334:skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>&&\\29\n2335:skia_private::AutoSTMalloc<4ul\\2c\\20SkFontArguments::Palette::Override\\2c\\20void>::AutoSTMalloc\\28unsigned\\20long\\29\n2336:skia_private::AutoSTArray<24\\2c\\20unsigned\\20int>::reset\\28int\\29\n2337:skia_png_zstream_error\n2338:skia_png_read_data\n2339:skia_png_get_int_32\n2340:skia_png_chunk_unknown_handling\n2341:skia_png_calloc\n2342:skia_png_benign_error\n2343:skia::textlayout::TextWrapper::getClustersTrimmedWidth\\28\\29\n2344:skia::textlayout::TextWrapper::TextStretch::startFrom\\28skia::textlayout::Cluster*\\2c\\20unsigned\\20long\\29\n2345:skia::textlayout::TextWrapper::TextStretch::extend\\28skia::textlayout::Cluster*\\29\n2346:skia::textlayout::TextLine::measureTextInsideOneRun\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20skia::textlayout::TextLine::TextAdjustment\\29\\20const\n2347:skia::textlayout::TextLine::isLastLine\\28\\29\\20const\n2348:skia::textlayout::Run::calculateHeight\\28skia::textlayout::LineMetricStyle\\2c\\20skia::textlayout::LineMetricStyle\\29\\20const\n2349:skia::textlayout::Run::Run\\28skia::textlayout::Run\\20const&\\29\n2350:skia::textlayout::ParagraphImpl::getLineNumberAt\\28unsigned\\20long\\29\\20const\n2351:skia::textlayout::ParagraphImpl::findPreviousGraphemeBoundary\\28unsigned\\20long\\29\\20const\n2352:skia::textlayout::ParagraphCacheKey::~ParagraphCacheKey\\28\\29\n2353:skia::textlayout::ParagraphBuilderImpl::startStyledBlock\\28\\29\n2354:skia::textlayout::OneLineShaper::RunBlock&\\20std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::emplace_back<skia::textlayout::OneLineShaper::RunBlock&>\\28skia::textlayout::OneLineShaper::RunBlock&\\29\n2355:skia::textlayout::OneLineShaper::FontKey::FontKey\\28skia::textlayout::OneLineShaper::FontKey&&\\29\n2356:skia::textlayout::InternalLineMetrics::updateLineMetrics\\28skia::textlayout::InternalLineMetrics&\\29\n2357:skia::textlayout::FontCollection::getFontManagerOrder\\28\\29\\20const\n2358:skia::textlayout::Decorations::calculateGaps\\28skia::textlayout::TextLine::ClipContext\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n2359:skia::textlayout::Cluster::runOrNull\\28\\29\\20const\n2360:skgpu::tess::PatchStride\\28skgpu::tess::PatchAttribs\\29\n2361:skgpu::tess::MiddleOutPolygonTriangulator::MiddleOutPolygonTriangulator\\28int\\2c\\20SkPoint\\29\n2362:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::fixedFunctionFlags\\28\\29\\20const\n2363:skgpu::ganesh::SurfaceFillContext::~SurfaceFillContext\\28\\29\n2364:skgpu::ganesh::SurfaceFillContext::replaceOpsTask\\28\\29\n2365:skgpu::ganesh::SurfaceDrawContext::fillPixelsWithLocalMatrix\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n2366:skgpu::ganesh::SurfaceDrawContext::drawShape\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape&&\\29\n2367:skgpu::ganesh::SurfaceDrawContext::drawPaint\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\29\n2368:skgpu::ganesh::SurfaceDrawContext::MakeWithFallback\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\2c\\20SkISize\\2c\\20SkSurfaceProps\\20const&\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Budgeted\\29\n2369:skgpu::ganesh::SurfaceContext::~SurfaceContext\\28\\29\n2370:skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0::$_0\\28$_0&&\\29\n2371:skgpu::ganesh::SurfaceContext::PixelTransferResult::operator=\\28skgpu::ganesh::SurfaceContext::PixelTransferResult&&\\29\n2372:skgpu::ganesh::SupportedTextureFormats\\28GrImageContext\\20const&\\29::$_0::operator\\28\\29\\28SkYUVAPixmapInfo::DataType\\2c\\20int\\29\\20const\n2373:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29\n2374:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::coverageMode\\28\\29\\20const\n2375:skgpu::ganesh::PathInnerTriangulateOp::pushFanFillProgram\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n2376:skgpu::ganesh::OpsTask::deleteOps\\28\\29\n2377:skgpu::ganesh::OpsTask::OpChain::List::operator=\\28skgpu::ganesh::OpsTask::OpChain::List&&\\29\n2378:skgpu::ganesh::Device::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29::$_0::operator\\28\\29\\28int\\29\\20const\n2379:skgpu::ganesh::ClipStack::clipRect\\28SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n2380:skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage::BufferFinishedMessage\\28skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage&&\\29\n2381:skgpu::Swizzle::Concat\\28skgpu::Swizzle\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n2382:skgpu::Swizzle::CToI\\28char\\29\n2383:sk_sp<SkShader>::operator=\\28sk_sp<SkShader>\\20const&\\29\n2384:sk_sp<SkShader>::operator=\\28sk_sp<SkShader>&&\\29\n2385:sk_sp<SkMipmap>::reset\\28SkMipmap*\\29\n2386:sk_sp<SkMeshPriv::IB>::~sk_sp\\28\\29\n2387:sk_sp<GrThreadSafeCache::VertexData>::~sk_sp\\28\\29\n2388:sk_sp<GrArenas>::~sk_sp\\28\\29\n2389:shr\n2390:shl\n2391:set_result_path\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkPathFillType\\29\n2392:sect_with_horizontal\\28SkPoint\\20const*\\2c\\20float\\29\n2393:roughly_between\\28double\\2c\\20double\\2c\\20double\\29\n2394:psh_calc_max_height\n2395:ps_mask_set_bit\n2396:ps_dimension_set_mask_bits\n2397:ps_builder_check_points\n2398:ps_builder_add_point\n2399:png_colorspace_endpoints_match\n2400:path_is_trivial\\28SkPath\\20const&\\29::Trivializer::addTrivialContourPoint\\28SkPoint\\20const&\\29\n2401:output_char\\28hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n2402:operator!=\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n2403:nearly_equal\\28double\\2c\\20double\\29\n2404:mbrtowc\n2405:mask_gamma_cache_mutex\\28\\29\n2406:map_rect_perspective\\28SkRect\\20const&\\2c\\20float\\20const*\\29::$_0::operator\\28\\29\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20const\n2407:lock.9130\n2408:lineMetrics_getEndIndex\n2409:is_smooth_enough\\28SkAnalyticEdge*\\2c\\20SkAnalyticEdge*\\2c\\20int\\29\n2410:is_ICC_signature_char\n2411:interpolate_local\\28float\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n2412:int\\20_hb_cmp_method<unsigned\\20int\\2c\\20AAT::LookupSingle<OT::HBGlyphID16>>\\28void\\20const*\\2c\\20void\\20const*\\29\n2413:init_file_lock\n2414:image_filter_color_type\\28SkImageInfo\\29\n2415:ilogbf\n2416:hb_vector_t<hb_aat_map_builder_t::feature_info_t\\2c\\20true>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n2417:hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::fini\\28\\29\n2418:hb_unicode_funcs_t::compose\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n2419:hb_syllabic_insert_dotted_circles\\28hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\n2420:hb_shape_full\n2421:hb_serialize_context_t::~hb_serialize_context_t\\28\\29\n2422:hb_serialize_context_t::hb_serialize_context_t\\28void*\\2c\\20unsigned\\20int\\29\n2423:hb_serialize_context_t::end_serialize\\28\\29\n2424:hb_paint_funcs_t::push_scale\\28void*\\2c\\20float\\2c\\20float\\29\n2425:hb_paint_extents_context_t::paint\\28\\29\n2426:hb_ot_map_builder_t::disable_feature\\28unsigned\\20int\\29\n2427:hb_map_iter_t<hb_array_t<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>\\20const>\\2c\\20hb_partial_t<2u\\2c\\20$_9\\20const*\\2c\\20OT::ChainRuleSet<OT::Layout::SmallTypes>\\20const*>\\2c\\20\\28hb_function_sortedness_t\\290\\2c\\20\\28void*\\290>::__item__\\28\\29\\20const\n2428:hb_lazy_loader_t<OT::vmtx_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::vmtx_accelerator_t\\2c\\2012u>\\2c\\20hb_face_t\\2c\\2012u\\2c\\20OT::vmtx_accelerator_t>::get_stored\\28\\29\\20const\n2429:hb_lazy_loader_t<OT::sbix_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::sbix_accelerator_t\\2c\\2038u>\\2c\\20hb_face_t\\2c\\2038u\\2c\\20OT::sbix_accelerator_t>::do_destroy\\28OT::sbix_accelerator_t*\\29\n2430:hb_lazy_loader_t<OT::hmtx_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::hmtx_accelerator_t\\2c\\205u>\\2c\\20hb_face_t\\2c\\205u\\2c\\20OT::hmtx_accelerator_t>::do_destroy\\28OT::hmtx_accelerator_t*\\29\n2431:hb_lazy_loader_t<OT::cff1_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cff1_accelerator_t\\2c\\2016u>\\2c\\20hb_face_t\\2c\\2016u\\2c\\20OT::cff1_accelerator_t>::get_stored\\28\\29\\20const\n2432:hb_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GSUB_accelerator_t\\2c\\2025u>\\2c\\20hb_face_t\\2c\\2025u\\2c\\20OT::GSUB_accelerator_t>::do_destroy\\28OT::GSUB_accelerator_t*\\29\n2433:hb_lazy_loader_t<OT::GPOS_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GPOS_accelerator_t\\2c\\2026u>\\2c\\20hb_face_t\\2c\\2026u\\2c\\20OT::GPOS_accelerator_t>::get_stored\\28\\29\\20const\n2434:hb_lazy_loader_t<AAT::feat\\2c\\20hb_table_lazy_loader_t<AAT::feat\\2c\\2034u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2034u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n2435:hb_language_from_string\n2436:hb_iter_t<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>\\2c\\20OT::HBGlyphID16&>::operator*\\28\\29\n2437:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::add\\28unsigned\\20int\\20const&\\29\n2438:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::alloc\\28unsigned\\20int\\29\n2439:hb_font_t::parent_scale_position\\28int*\\2c\\20int*\\29\n2440:hb_font_t::get_h_extents_with_fallback\\28hb_font_extents_t*\\29\n2441:hb_buffer_t::output_glyph\\28unsigned\\20int\\29\n2442:hb_buffer_t::copy_glyph\\28\\29\n2443:hb_buffer_t::clear_positions\\28\\29\n2444:hb_bounds_t*\\20hb_vector_t<hb_bounds_t\\2c\\20false>::push<hb_bounds_t>\\28hb_bounds_t&&\\29\n2445:hb_blob_create_sub_blob\n2446:hb_blob_create\n2447:get_cache\\28\\29\n2448:ftell\n2449:ft_var_readpackedpoints\n2450:ft_glyphslot_free_bitmap\n2451:filter_to_gl_mag_filter\\28SkFilterMode\\29\n2452:extractMaskSubset\\28SkMask\\20const&\\2c\\20SkIRect\\2c\\20int\\2c\\20int\\29\n2453:exp\n2454:equal_ulps\\28float\\2c\\20float\\2c\\20int\\2c\\20int\\29\n2455:edges_too_close\\28SkAnalyticEdge*\\2c\\20SkAnalyticEdge*\\2c\\20int\\29\n2456:direct_blur_y\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n2457:derivative_at_t\\28double\\20const*\\2c\\20double\\29\n2458:crop_rect_edge\\28SkRect\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n2459:cleanup_program\\28GrGLGpu*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n2460:clean_paint_for_drawVertices\\28SkPaint\\29\n2461:check_edge_against_rect\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPathFirstDirection\\29\n2462:checkOnCurve\\28float\\2c\\20float\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n2463:char*\\20sktext::gpu::BagOfBytes::allocateBytesFor<sktext::gpu::GlyphVector::Variant>\\28int\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n2464:cff_strcpy\n2465:cff_size_get_globals_funcs\n2466:cff_index_forget_element\n2467:cf2_stack_setReal\n2468:cf2_hint_init\n2469:cf2_doStems\n2470:cf2_doFlex\n2471:calculate_path_gap\\28float\\2c\\20float\\2c\\20SkPath\\20const&\\29::$_4::operator\\28\\29\\28float\\29\\20const\n2472:byn$mgfn-shared$tt_cmap6_get_info\n2473:byn$mgfn-shared$tt_cmap13_get_info\n2474:byn$mgfn-shared$std::__2::__time_get_c_storage<wchar_t>::__c\\28\\29\\20const\n2475:byn$mgfn-shared$std::__2::__time_get_c_storage<char>::__c\\28\\29\\20const\n2476:byn$mgfn-shared$std::__2::__split_buffer<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkRTree::Branch>&\\29\n2477:byn$mgfn-shared$skia::textlayout::ParagraphBuilderImpl::ensureUTF16Mapping\\28\\29::$_0::operator\\28\\29\\28\\29\\20const::'lambda'\\28unsigned\\20long\\29::operator\\28\\29\\28unsigned\\20long\\29\\20const\n2478:byn$mgfn-shared$SkSL::Tracer::line\\28int\\29\n2479:byn$mgfn-shared$SkImage_Base::isGraphiteBacked\\28\\29\\20const\n2480:byn$mgfn-shared$OT::PaintSkewAroundCenter::sanitize\\28hb_sanitize_context_t*\\29\\20const\n2481:buffer_verify_error\\28hb_buffer_t*\\2c\\20hb_font_t*\\2c\\20char\\20const*\\2c\\20...\\29\n2482:bool\\20hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::has<unsigned\\20int>\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20int**\\29\\20const\n2483:bool\\20hb_buffer_t::replace_glyphs<OT::HBGlyphID16>\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20OT::HBGlyphID16\\20const*\\29\n2484:bool\\20OT::match_input<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool\\20\\28*\\29\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\2c\\20void\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n2485:bool\\20OT::OffsetTo<OT::VariationStore\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n2486:bool\\20OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned\\20short\\2c\\202u>>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20false>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n2487:blur_y_rect\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20unsigned\\20short*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n2488:blur_column\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29::$_0::operator\\28\\29\\28unsigned\\20char*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\\20const\n2489:blitClippedMask\\28SkBlitter*\\2c\\20SkMask\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n2490:approx_arc_length\\28SkPoint\\20const*\\2c\\20int\\29\n2491:antifillrect\\28SkIRect\\20const&\\2c\\20SkBlitter*\\29\n2492:afm_parser_read_int\n2493:af_sort_pos\n2494:af_latin_hints_compute_segments\n2495:_hb_glyph_info_get_lig_num_comps\\28hb_glyph_info_t\\20const*\\29\n2496:__wasi_syscall_ret\n2497:__uselocale\n2498:__math_xflow\n2499:__cxxabiv1::__base_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n2500:\\28anonymous\\20namespace\\29::make_vertices_spec\\28bool\\2c\\20bool\\29\n2501:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::~TransformedMaskSubRun\\28\\29\n2502:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28unsigned\\20int\\20const*\\29::operator\\28\\29\\28unsigned\\20int\\20const*\\29\\20const\n2503:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n2504:\\28anonymous\\20namespace\\29::SkBlurImageFilter::kernelBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20bool\\29\\20const\n2505:\\28anonymous\\20namespace\\29::RunIteratorQueue::insert\\28SkShaper::RunIterator*\\2c\\20int\\29\n2506:\\28anonymous\\20namespace\\29::RunIteratorQueue::CompareEntry\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\n2507:\\28anonymous\\20namespace\\29::PathGeoBuilder::ensureSpace\\28int\\2c\\20int\\2c\\20SkPoint\\20const*\\29\n2508:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::getMangledName\\28char\\20const*\\29\n2509:\\28anonymous\\20namespace\\29::GaussPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29::'lambda'\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n2510:\\28anonymous\\20namespace\\29::FillRectOpImpl::vertexSpec\\28\\29\\20const\n2511:\\28anonymous\\20namespace\\29::CacheImpl::removeInternal\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*\\29\n2512:TT_Load_Context\n2513:Skwasm::makeCurrent\\28int\\29\n2514:SkipCode\n2515:SkYUVAPixmaps::~SkYUVAPixmaps\\28\\29\n2516:SkYUVAPixmaps::operator=\\28SkYUVAPixmaps\\20const&\\29\n2517:SkYUVAPixmaps::SkYUVAPixmaps\\28\\29\n2518:SkWriter32::writeRRect\\28SkRRect\\20const&\\29\n2519:SkWriter32::writeMatrix\\28SkMatrix\\20const&\\29\n2520:SkWriter32::snapshotAsData\\28\\29\\20const\n2521:SkWBuffer::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n2522:SkVertices::approximateSize\\28\\29\\20const\n2523:SkTextBlobBuilder::~SkTextBlobBuilder\\28\\29\n2524:SkTextBlob::RunRecord::textBuffer\\28\\29\\20const\n2525:SkTextBlob::RunRecord::clusterBuffer\\28\\29\\20const\n2526:SkTextBlob::RunRecord::StorageSize\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SkTextBlob::GlyphPositioning\\2c\\20SkSafeMath*\\29\n2527:SkTextBlob::RunRecord::Next\\28SkTextBlob::RunRecord\\20const*\\29\n2528:SkTSpan::oppT\\28double\\29\\20const\n2529:SkTSpan::closestBoundedT\\28SkDPoint\\20const&\\29\\20const\n2530:SkTSect::updateBounded\\28SkTSpan*\\2c\\20SkTSpan*\\2c\\20SkTSpan*\\29\n2531:SkTSect::trim\\28SkTSpan*\\2c\\20SkTSect*\\29\n2532:SkTSect::removeSpanRange\\28SkTSpan*\\2c\\20SkTSpan*\\29\n2533:SkTSect::removeCoincident\\28SkTSpan*\\2c\\20bool\\29\n2534:SkTSect::deleteEmptySpans\\28\\29\n2535:SkTInternalLList<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry>::remove\\28SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\29\n2536:SkTInternalLList<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry>::remove\\28SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\29\n2537:SkTInternalLList<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry>::remove\\28SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\29\n2538:SkTDStorage::insert\\28int\\2c\\20int\\2c\\20void\\20const*\\29\n2539:SkTDStorage::insert\\28int\\29\n2540:SkTDStorage::erase\\28int\\2c\\20int\\29\n2541:SkTBlockList<GrShaderVar\\2c\\201>::pushItem\\28\\29\n2542:SkSurfaces::RenderTarget\\28GrRecordingContext*\\2c\\20skgpu::Budgeted\\2c\\20SkImageInfo\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const*\\2c\\20bool\\2c\\20bool\\29\n2543:SkSurfaces::Raster\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const*\\29\n2544:SkStrokeRec::applyToPath\\28SkPath*\\2c\\20SkPath\\20const&\\29\\20const\n2545:SkString::set\\28char\\20const*\\29\n2546:SkString::Rec::Make\\28char\\20const*\\2c\\20unsigned\\20long\\29\n2547:SkStrikeSpec::MakeCanonicalized\\28SkFont\\20const&\\2c\\20SkPaint\\20const*\\29\n2548:SkStrikeCache::GlobalStrikeCache\\28\\29\n2549:SkStrike::glyph\\28SkPackedGlyphID\\29\n2550:SkSpriteBlitter::~SkSpriteBlitter\\28\\29\n2551:SkShadowTessellator::MakeSpot\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n2552:SkShaders::MatrixRec::apply\\28SkStageRec\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n2553:SkShaderBase::appendRootStages\\28SkStageRec\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n2554:SkScan::FillIRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n2555:SkScalerContext_FreeType::emboldenIfNeeded\\28FT_FaceRec_*\\2c\\20FT_GlyphSlotRec_*\\2c\\20unsigned\\20short\\29\n2556:SkScaleToSides::AdjustRadii\\28double\\2c\\20double\\2c\\20float*\\2c\\20float*\\29\n2557:SkSTArenaAlloc<3332ul>::SkSTArenaAlloc\\28unsigned\\20long\\29\n2558:SkSTArenaAlloc<1024ul>::SkSTArenaAlloc\\28unsigned\\20long\\29\n2559:SkSL::write_stringstream\\28SkSL::StringStream\\20const&\\2c\\20SkSL::OutputStream&\\29\n2560:SkSL::evaluate_3_way_intrinsic\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n2561:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\\28\\29\n2562:SkSL::calculate_count\\28double\\2c\\20double\\2c\\20double\\2c\\20bool\\2c\\20bool\\29\n2563:SkSL::append_rtadjust_fixup_to_vertex_main\\28SkSL::Context\\20const&\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::Block&\\29::AppendRTAdjustFixupHelper::Pos\\28\\29\\20const\n2564:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n2565:SkSL::VarDeclaration::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::VariableStorage\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2566:SkSL::Type::priority\\28\\29\\20const\n2567:SkSL::Type::checkForOutOfRangeLiteral\\28SkSL::Context\\20const&\\2c\\20double\\2c\\20SkSL::Position\\29\\20const\n2568:SkSL::Transform::EliminateDeadFunctions\\28SkSL::Program&\\29::$_0::operator\\28\\29\\28std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\20const&\\29\\20const\n2569:SkSL::SymbolTable::lookup\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n2570:SkSL::SymbolTable::isType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n2571:SkSL::Swizzle::MaskString\\28skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\20const&\\29\n2572:SkSL::RP::SlotManager::mapVariableToSlots\\28SkSL::Variable\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n2573:SkSL::RP::Program::appendStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkSL::RP::Callbacks*\\2c\\20SkSpan<float\\20const>\\29\\20const::$_0::operator\\28\\29\\28\\29\\20const\n2574:SkSL::RP::Program::appendCopy\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20std::byte*\\2c\\20SkSL::RP::ProgramOp\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\\20const\n2575:SkSL::RP::Generator::store\\28SkSL::RP::LValue&\\29\n2576:SkSL::RP::Generator::popToSlotRangeUnmasked\\28SkSL::RP::SlotRange\\29\n2577:SkSL::RP::Generator::emitTraceScope\\28int\\29\n2578:SkSL::RP::DynamicIndexLValue::dynamicSlotRange\\28\\29\n2579:SkSL::RP::Builder::ternary_op\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n2580:SkSL::RP::Builder::simplifyPopSlotsUnmasked\\28SkSL::RP::SlotRange*\\29\n2581:SkSL::RP::Builder::push_zeros\\28int\\29\n2582:SkSL::RP::Builder::push_loop_mask\\28\\29\n2583:SkSL::RP::Builder::pad_stack\\28int\\29\n2584:SkSL::RP::Builder::exchange_src\\28\\29\n2585:SkSL::ProgramVisitor::visit\\28SkSL::Program\\20const&\\29\n2586:SkSL::ProgramUsage::remove\\28SkSL::Statement\\20const*\\29\n2587:SkSL::PrefixExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2588:SkSL::PipelineStage::PipelineStageCodeGenerator::typedVariable\\28SkSL::Type\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n2589:SkSL::PipelineStage::PipelineStageCodeGenerator::typeName\\28SkSL::Type\\20const&\\29\n2590:SkSL::Parser::parseInitializer\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\29\n2591:SkSL::Parser::nextRawToken\\28\\29\n2592:SkSL::Parser::arrayType\\28SkSL::Type\\20const*\\2c\\20int\\2c\\20SkSL::Position\\29\n2593:SkSL::Parser::AutoSymbolTable::AutoSymbolTable\\28SkSL::Parser*\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>*\\2c\\20bool\\29\n2594:SkSL::LiteralType::priority\\28\\29\\20const\n2595:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sub\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n2596:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_dot\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n2597:SkSL::InterfaceBlock::arraySize\\28\\29\\20const\n2598:SkSL::IndexExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n2599:SkSL::GLSLCodeGenerator::writeExtension\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\29\n2600:SkSL::FieldAccess::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20int\\2c\\20SkSL::FieldAccessOwnerKind\\29\n2601:SkSL::DoStatement::~DoStatement\\28\\29\n2602:SkSL::ConstructorArray::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n2603:SkSL::Compiler::convertProgram\\28SkSL::ProgramKind\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::ProgramSettings\\20const&\\29\n2604:SkSL::Block::isEmpty\\28\\29\\20const\n2605:SkSL::Block::Make\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2606:SkSL::Block::MakeBlock\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n2607:SkSL::Analysis::DetectVarDeclarationWithoutScope\\28SkSL::Statement\\20const&\\2c\\20SkSL::ErrorReporter*\\29\n2608:SkRuntimeEffectBuilder::writableUniformData\\28\\29\n2609:SkRuntimeEffect::Result::~Result\\28\\29\n2610:SkResourceCache::remove\\28SkResourceCache::Rec*\\29\n2611:SkRegion::writeToMemory\\28void*\\29\\20const\n2612:SkRegion::getBoundaryPath\\28SkPath*\\29\\20const\n2613:SkRegion::SkRegion\\28SkRegion\\20const&\\29\n2614:SkRect::set\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n2615:SkRect::offset\\28SkPoint\\20const&\\29\n2616:SkRect::center\\28\\29\\20const\n2617:SkRecords::Optional<SkPaint>::~Optional\\28\\29\n2618:SkRecords::NoOp*\\20SkRecord::replace<SkRecords::NoOp>\\28int\\29\n2619:SkReadBuffer::skip\\28unsigned\\20long\\29\n2620:SkRasterPipeline_ConstantCtx*\\20SkArenaAlloc::make<SkRasterPipeline_ConstantCtx\\2c\\20SkRasterPipeline_ConstantCtx\\20const&>\\28SkRasterPipeline_ConstantCtx\\20const&\\29\n2621:SkRasterPipeline::tailPointer\\28\\29\n2622:SkRasterPipeline::appendMatrix\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\29\n2623:SkRasterPipeline::addMemoryContext\\28SkRasterPipeline_MemoryCtx*\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n2624:SkRasterClip::SkRasterClip\\28SkIRect\\20const&\\29\n2625:SkRRect::setOval\\28SkRect\\20const&\\29\n2626:SkRRect::initializeRect\\28SkRect\\20const&\\29\n2627:SkRRect::MakeRectXY\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n2628:SkRGBA4f<\\28SkAlphaType\\293>::operator==\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\\20const\n2629:SkQuads::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2630:SkPixelRef::~SkPixelRef\\28\\29\n2631:SkPixelRef::SkPixelRef\\28int\\2c\\20int\\2c\\20void*\\2c\\20unsigned\\20long\\29\n2632:SkPictureRecord::~SkPictureRecord\\28\\29\n2633:SkPictureRecord::recordRestoreOffsetPlaceholder\\28\\29\n2634:SkPathStroker::quadStroke\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n2635:SkPathStroker::preJoinTo\\28SkPoint\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20bool\\29\n2636:SkPathStroker::intersectRay\\28SkQuadConstruct*\\2c\\20SkPathStroker::IntersectRayType\\29\\20const\n2637:SkPathStroker::cubicStroke\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n2638:SkPathStroker::cubicPerpRay\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n2639:SkPathStroker::conicStroke\\28SkConic\\20const&\\2c\\20SkQuadConstruct*\\29\n2640:SkPathRef::computeBounds\\28\\29\\20const\n2641:SkPathEdgeIter::SkPathEdgeIter\\28SkPath\\20const&\\29\n2642:SkPathBuilder::incReserve\\28int\\2c\\20int\\29\n2643:SkPathBuilder::conicTo\\28SkPoint\\2c\\20SkPoint\\2c\\20float\\29\n2644:SkPath::rewind\\28\\29\n2645:SkPath::hasOnlyMoveTos\\28\\29\\20const\n2646:SkPath::getPoint\\28int\\29\\20const\n2647:SkPath::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n2648:SkPaint::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n2649:SkPaint::canComputeFastBounds\\28\\29\\20const\n2650:SkPaint::SkPaint\\28SkPaint&&\\29\n2651:SkOpSpanBase::mergeMatches\\28SkOpSpanBase*\\29\n2652:SkOpSpanBase::addOpp\\28SkOpSpanBase*\\29\n2653:SkOpSegment::updateOppWinding\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\29\\20const\n2654:SkOpSegment::subDivide\\28SkOpSpanBase\\20const*\\2c\\20SkOpSpanBase\\20const*\\2c\\20SkDCurve*\\29\\20const\n2655:SkOpSegment::setUpWindings\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int*\\2c\\20int*\\2c\\20int*\\2c\\20int*\\2c\\20int*\\2c\\20int*\\29\n2656:SkOpSegment::nextChase\\28SkOpSpanBase**\\2c\\20int*\\2c\\20SkOpSpan**\\2c\\20SkOpSpanBase**\\29\\20const\n2657:SkOpSegment::markAndChaseDone\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkOpSpanBase**\\29\n2658:SkOpSegment::isSimple\\28SkOpSpanBase**\\2c\\20int*\\29\\20const\n2659:SkOpSegment::init\\28SkPoint*\\2c\\20float\\2c\\20SkOpContour*\\2c\\20SkPath::Verb\\29\n2660:SkOpEdgeBuilder::complete\\28\\29\n2661:SkOpContour::appendSegment\\28\\29\n2662:SkOpCoincidence::overlap\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20double*\\2c\\20double*\\29\\20const\n2663:SkOpCoincidence::add\\28SkOpPtT*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT*\\29\n2664:SkOpCoincidence::addIfMissing\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20double\\2c\\20double\\2c\\20SkOpSegment*\\2c\\20SkOpSegment*\\2c\\20bool*\\29\n2665:SkOpCoincidence::addExpanded\\28\\29\n2666:SkOpCoincidence::addEndMovedSpans\\28SkOpPtT\\20const*\\29\n2667:SkOpCoincidence::TRange\\28SkOpPtT\\20const*\\2c\\20double\\2c\\20SkOpSegment\\20const*\\29\n2668:SkOpAngle::set\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n2669:SkOpAngle::loopCount\\28\\29\\20const\n2670:SkOpAngle::insert\\28SkOpAngle*\\29\n2671:SkOpAngle*\\20SkArenaAlloc::make<SkOpAngle>\\28\\29\n2672:SkNoPixelsDevice::ClipState::op\\28SkClipOp\\2c\\20SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20bool\\29\n2673:SkMipmap*\\20SkSafeRef<SkMipmap>\\28SkMipmap*\\29\n2674:SkMeshSpecification::Varying::Varying\\28SkMeshSpecification::Varying\\20const&\\29\n2675:SkMatrixPriv::DifferentialAreaScale\\28SkMatrix\\20const&\\2c\\20SkPoint\\20const&\\29\n2676:SkMatrix::setRotate\\28float\\29\n2677:SkMatrix::mapVectors\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n2678:SkMatrix::mapHomogeneousPoints\\28SkPoint3*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\\20const\n2679:SkMaskFilterBase::getFlattenableType\\28\\29\\20const\n2680:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n2681:SkM44::setConcat\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\29::$_0::operator\\28\\29\\28skvx::Vec<4\\2c\\20float>\\29\\20const\n2682:SkM44::normalizePerspective\\28\\29\n2683:SkLineClipper::IntersectLine\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkPoint*\\29\n2684:SkJSONWriter::scope\\28\\29\\20const\n2685:SkImage_Ganesh::makeView\\28GrRecordingContext*\\29\\20const\n2686:SkImage_Base::~SkImage_Base\\28\\29\n2687:SkImage_Base::isGaneshBacked\\28\\29\\20const\n2688:SkImage_Base::SkImage_Base\\28SkImageInfo\\20const&\\2c\\20unsigned\\20int\\29\n2689:SkImageInfo::validRowBytes\\28unsigned\\20long\\29\\20const\n2690:SkImageInfo::MakeUnknown\\28int\\2c\\20int\\29\n2691:SkImageGenerator::~SkImageGenerator\\28\\29\n2692:SkImageFilters::Crop\\28SkRect\\20const&\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\29\n2693:SkImageFilter_Base::~SkImageFilter_Base\\28\\29\n2694:SkImage::makeRasterImage\\28GrDirectContext*\\2c\\20SkImage::CachingHint\\29\\20const\n2695:SkIRect\\20skif::Mapping::map<SkIRect>\\28SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\29\n2696:SkHalfToFloat\\28unsigned\\20short\\29\n2697:SkGradientBaseShader::commonAsAGradient\\28SkShaderBase::GradientInfo*\\29\\20const\n2698:SkGradientBaseShader::ValidGradient\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\29\n2699:SkGradientBaseShader::SkGradientBaseShader\\28SkGradientBaseShader::Descriptor\\20const&\\2c\\20SkMatrix\\20const&\\29\n2700:SkGradientBaseShader::MakeDegenerateGradient\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkTileMode\\29\n2701:SkGlyph::setPath\\28SkArenaAlloc*\\2c\\20SkPath\\20const*\\2c\\20bool\\29\n2702:SkGetPolygonWinding\\28SkPoint\\20const*\\2c\\20int\\29\n2703:SkFontMgr::RefEmpty\\28\\29\n2704:SkFont::setTypeface\\28sk_sp<SkTypeface>\\29\n2705:SkEmptyFontMgr::onMakeFromStreamIndex\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n2706:SkEdgeBuilder::~SkEdgeBuilder\\28\\29\n2707:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\\28\\29\n2708:SkDrawable::draw\\28SkCanvas*\\2c\\20SkMatrix\\20const*\\29\n2709:SkDrawBase::drawPathCoverage\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkBlitter*\\29\\20const\n2710:SkDevice::~SkDevice\\28\\29\n2711:SkDevice::setLocalToDevice\\28SkM44\\20const&\\29\n2712:SkDevice::scalerContextFlags\\28\\29\\20const\n2713:SkDevice::accessPixels\\28SkPixmap*\\29\n2714:SkData::MakeWithProc\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20void\\20\\28*\\29\\28void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n2715:SkDQuad::dxdyAtT\\28double\\29\\20const\n2716:SkDQuad::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2717:SkDPoint::distance\\28SkDPoint\\20const&\\29\\20const\n2718:SkDLine::NearPointV\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n2719:SkDLine::NearPointH\\28SkDPoint\\20const&\\2c\\20double\\2c\\20double\\2c\\20double\\29\n2720:SkDCubic::dxdyAtT\\28double\\29\\20const\n2721:SkDCubic::RootsValidT\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n2722:SkDConic::dxdyAtT\\28double\\29\\20const\n2723:SkConicalGradient::~SkConicalGradient\\28\\29\n2724:SkComputeRadialSteps\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float*\\2c\\20float*\\2c\\20int*\\29\n2725:SkColorSpace::serialize\\28\\29\\20const\n2726:SkColorFilters::Compose\\28sk_sp<SkColorFilter>\\20const&\\2c\\20sk_sp<SkColorFilter>\\29\n2727:SkColorFilterPriv::MakeGaussian\\28\\29\n2728:SkColorFilter::filterColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkColorSpace*\\2c\\20SkColorSpace*\\29\\20const\n2729:SkColorConverter::SkColorConverter\\28unsigned\\20int\\20const*\\2c\\20int\\29\n2730:SkCoincidentSpans::correctOneEnd\\28SkOpPtT\\20const*\\20\\28SkCoincidentSpans::*\\29\\28\\29\\20const\\2c\\20void\\20\\28SkCoincidentSpans::*\\29\\28SkOpPtT\\20const*\\29\\29\n2731:SkClosestRecord::findEnd\\28SkTSpan\\20const*\\2c\\20SkTSpan\\20const*\\2c\\20int\\2c\\20int\\29\n2732:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\20const*\\2c\\20int\\29\n2733:SkChopCubicAtYExtrema\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n2734:SkCanvas::restore\\28\\29\n2735:SkCanvas::init\\28sk_sp<SkDevice>\\29\n2736:SkCanvas::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n2737:SkCanvas::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n2738:SkCanvas::concat\\28SkM44\\20const&\\29\n2739:SkCanvas::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n2740:SkCachedData::detachFromCacheAndUnref\\28\\29\\20const\n2741:SkCachedData::attachToCacheAndRef\\28\\29\\20const\n2742:SkBitmap::pixelRefOrigin\\28\\29\\20const\n2743:SkBitmap::notifyPixelsChanged\\28\\29\\20const\n2744:SkBitmap::extractSubset\\28SkBitmap*\\2c\\20SkIRect\\20const&\\29\\20const\n2745:SkBinaryWriteBuffer::writeByteArray\\28void\\20const*\\2c\\20unsigned\\20long\\29\n2746:SkBaseShadowTessellator::~SkBaseShadowTessellator\\28\\29\n2747:SkAutoPixmapStorage::tryAlloc\\28SkImageInfo\\20const&\\29\n2748:SkAutoDeviceTransformRestore::~SkAutoDeviceTransformRestore\\28\\29\n2749:SkAutoDeviceTransformRestore::SkAutoDeviceTransformRestore\\28SkDevice*\\2c\\20SkMatrix\\20const&\\29\n2750:SkAutoBlitterChoose::SkAutoBlitterChoose\\28SkDrawBase\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n2751:SkArenaAllocWithReset::SkArenaAllocWithReset\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2752:SkAAClip::setPath\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n2753:SkAAClip::quickContains\\28SkIRect\\20const&\\29\\20const\n2754:SkAAClip::op\\28SkAAClip\\20const&\\2c\\20SkClipOp\\29\n2755:SkAAClip::Builder::flushRowH\\28SkAAClip::Builder::Row*\\29\n2756:SkAAClip::Builder::Blitter::checkForYGap\\28int\\29\n2757:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\\28\\29\n2758:OT::post::accelerator_t::find_glyph_name\\28unsigned\\20int\\29\\20const\n2759:OT::hb_ot_layout_lookup_accelerator_t::apply\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n2760:OT::hb_ot_apply_context_t::skipping_iterator_t::match\\28hb_glyph_info_t&\\29\n2761:OT::hb_ot_apply_context_t::_set_glyph_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\29\n2762:OT::glyf_accelerator_t::glyph_for_gid\\28unsigned\\20int\\2c\\20bool\\29\\20const\n2763:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::std_code_to_glyph\\28unsigned\\20int\\29\\20const\n2764:OT::apply_lookup\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20OT::LookupRecord\\20const*\\2c\\20unsigned\\20int\\29\n2765:OT::VariationStore::create_cache\\28\\29\\20const\n2766:OT::VarRegionList::evaluate\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20float*\\29\\20const\n2767:OT::Lookup::get_props\\28\\29\\20const\n2768:OT::Layout::GSUB_impl::SubstLookup*\\20hb_serialize_context_t::copy<OT::Layout::GSUB_impl::SubstLookup>\\28\\29\\20const\n2769:OT::Layout::GPOS_impl::ValueFormat::get_device\\28OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool*\\2c\\20void\\20const*\\2c\\20hb_sanitize_context_t&\\29\n2770:OT::Layout::GPOS_impl::Anchor::get_anchor\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20float*\\2c\\20float*\\29\\20const\n2771:OT::IntType<unsigned\\20short\\2c\\202u>*\\20hb_serialize_context_t::extend_min<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::IntType<unsigned\\20short\\2c\\202u>*\\29\n2772:OT::GSUBGPOS::get_script\\28unsigned\\20int\\29\\20const\n2773:OT::GSUBGPOS::get_feature_tag\\28unsigned\\20int\\29\\20const\n2774:OT::GSUBGPOS::find_script_index\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n2775:OT::ArrayOf<OT::HBGlyphID16\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>*\\20hb_serialize_context_t::extend_size<OT::ArrayOf<OT::HBGlyphID16\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>>\\28OT::ArrayOf<OT::HBGlyphID16\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n2776:Move_Zp2_Point\n2777:Modify_CVT_Check\n2778:GrYUVATextureProxies::operator=\\28GrYUVATextureProxies&&\\29\n2779:GrYUVATextureProxies::GrYUVATextureProxies\\28\\29\n2780:GrXPFactory::FromBlendMode\\28SkBlendMode\\29\n2781:GrWindowRectangles::operator=\\28GrWindowRectangles\\20const&\\29\n2782:GrTriangulator::~GrTriangulator\\28\\29\n2783:GrTriangulator::simplify\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n2784:GrTriangulator::setTop\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2785:GrTriangulator::mergeCollinearEdges\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2786:GrTriangulator::mergeCoincidentVertices\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n2787:GrTriangulator::emitTriangle\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20int\\2c\\20skgpu::VertexWriter\\29\\20const\n2788:GrTriangulator::allocateEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20int\\2c\\20GrTriangulator::EdgeType\\29\n2789:GrTriangulator::FindEnclosingEdges\\28GrTriangulator::Vertex\\20const&\\2c\\20GrTriangulator::EdgeList\\20const&\\2c\\20GrTriangulator::Edge**\\2c\\20GrTriangulator::Edge**\\29\n2790:GrTriangulator::Edge::dist\\28SkPoint\\20const&\\29\\20const\n2791:GrTriangulator::Edge::Edge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20int\\2c\\20GrTriangulator::EdgeType\\29\n2792:GrThreadSafeCache::remove\\28skgpu::UniqueKey\\20const&\\29\n2793:GrThreadSafeCache::internalFind\\28skgpu::UniqueKey\\20const&\\29\n2794:GrThreadSafeCache::internalAdd\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29\n2795:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n2796:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29\n2797:GrTessellationShader::MakePipeline\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAAType\\2c\\20GrAppliedClip&&\\2c\\20GrProcessorSet&&\\29\n2798:GrSurfaceProxyView::operator!=\\28GrSurfaceProxyView\\20const&\\29\\20const\n2799:GrSurfaceProxyView::concatSwizzle\\28skgpu::Swizzle\\29\n2800:GrSurfaceProxy::~GrSurfaceProxy\\28\\29\n2801:GrSurfaceProxy::isFunctionallyExact\\28\\29\\20const\n2802:GrSurfaceProxy::gpuMemorySize\\28\\29\\20const\n2803:GrSurfaceProxy::createSurfaceImpl\\28GrResourceProvider*\\2c\\20int\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\29\\20const\n2804:GrSurfaceProxy::Copy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Mipmapped\\2c\\20SkIRect\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20GrSurfaceProxy::RectsMustMatch\\2c\\20sk_sp<GrRenderTask>*\\29\n2805:GrSurfaceProxy::Copy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20sk_sp<GrRenderTask>*\\29\n2806:GrStyledShape::hasUnstyledKey\\28\\29\\20const\n2807:GrStyledShape::GrStyledShape\\28GrStyledShape\\20const&\\2c\\20GrStyle::Apply\\2c\\20float\\29\n2808:GrStyle::GrStyle\\28GrStyle\\20const&\\29\n2809:GrSkSLFP::setInput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n2810:GrSimpleMeshDrawOpHelper::CreatePipeline\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20skgpu::Swizzle\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrProcessorSet&&\\2c\\20GrPipeline::InputFlags\\29\n2811:GrSimpleMesh::set\\28sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\29\n2812:GrShape::simplifyRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n2813:GrShape::simplifyRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n2814:GrShape::simplifyPoint\\28SkPoint\\20const&\\2c\\20unsigned\\20int\\29\n2815:GrShape::simplifyLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\29\n2816:GrShape::setInverted\\28bool\\29\n2817:GrSWMaskHelper::init\\28SkIRect\\20const&\\29\n2818:GrSWMaskHelper::GrSWMaskHelper\\28SkAutoPixmapStorage*\\29\n2819:GrResourceProvider::refNonAAQuadIndexBuffer\\28\\29\n2820:GrRenderTask::addTarget\\28GrDrawingManager*\\2c\\20sk_sp<GrSurfaceProxy>\\29\n2821:GrRenderTarget::~GrRenderTarget\\28\\29\n2822:GrQuadUtils::WillUseHairline\\28GrQuad\\20const&\\2c\\20GrAAType\\2c\\20GrQuadAAFlags\\29\n2823:GrQuadBuffer<\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA>::unpackQuad\\28GrQuad::Type\\2c\\20float\\20const*\\2c\\20GrQuad*\\29\\20const\n2824:GrQuadBuffer<\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA>::MetadataIter::next\\28\\29\n2825:GrProxyProvider::processInvalidUniqueKey\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\2c\\20GrProxyProvider::InvalidateGPUResource\\29\n2826:GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0::~$_0\\28\\29\n2827:GrProgramInfo::GrProgramInfo\\28GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrGeometryProcessor\\20const*\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n2828:GrPipeline::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n2829:GrPipeline::getFragmentProcessor\\28int\\29\\20const\n2830:GrPathUtils::scaleToleranceToSrc\\28float\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\29\n2831:GrPathUtils::cubicPointCount\\28SkPoint\\20const*\\2c\\20float\\29\n2832:GrPaint::GrPaint\\28GrPaint\\20const&\\29\n2833:GrOpsRenderPass::prepareToDraw\\28\\29\n2834:GrOpFlushState::~GrOpFlushState\\28\\29\n2835:GrOpFlushState::drawInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n2836:GrOpFlushState::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const&\\2c\\20GrPipeline\\20const&\\29\n2837:GrOp::uniqueID\\28\\29\\20const\n2838:GrNativeRect::MakeIRectRelativeTo\\28GrSurfaceOrigin\\2c\\20int\\2c\\20SkIRect\\29\n2839:GrMeshDrawOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n2840:GrMapRectPoints\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20int\\29\n2841:GrMakeKeyFromImageID\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\2c\\20SkIRect\\20const&\\29\n2842:GrGradientShader::MakeGradientFP\\28SkGradientBaseShader\\20const&\\2c\\20GrFPArgs\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkMatrix\\20const*\\29\n2843:GrGpuResource::setUniqueKey\\28skgpu::UniqueKey\\20const&\\29\n2844:GrGpuResource::registerWithCache\\28skgpu::Budgeted\\29\n2845:GrGpu::writePixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20bool\\29\n2846:GrGpu::submitToGpu\\28GrSyncCpu\\29\n2847:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n2848:GrGLTexture::onSetLabel\\28\\29\n2849:GrGLTexture::onAbandon\\28\\29\n2850:GrGLTexture::backendFormat\\28\\29\\20const\n2851:GrGLSLVaryingHandler::appendDecls\\28SkTBlockList<GrShaderVar\\2c\\201>\\20const&\\2c\\20SkString*\\29\\20const\n2852:GrGLSLShaderBuilder::newTmpVarName\\28char\\20const*\\29\n2853:GrGLSLShaderBuilder::definitionAppend\\28char\\20const*\\29\n2854:GrGLSLProgramBuilder::invokeFP\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n2855:GrGLSLProgramBuilder::advanceStage\\28\\29\n2856:GrGLSLFragmentShaderBuilder::dstColor\\28\\29\n2857:GrGLRenderTarget::bindInternal\\28unsigned\\20int\\2c\\20bool\\29\n2858:GrGLGpu::unbindXferBuffer\\28GrGpuBufferType\\29\n2859:GrGLGpu::resolveRenderFBOs\\28GrGLRenderTarget*\\2c\\20SkIRect\\20const&\\2c\\20GrGLRenderTarget::ResolveDirection\\2c\\20bool\\29\n2860:GrGLGpu::flushBlendAndColorWrite\\28skgpu::BlendInfo\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n2861:GrGLGpu::currentProgram\\28\\29\n2862:GrGLGpu::SamplerObjectCache::Sampler::~Sampler\\28\\29\n2863:GrGLGpu::HWVertexArrayState::setVertexArrayID\\28GrGLGpu*\\2c\\20unsigned\\20int\\29\n2864:GrGLGetVersionFromString\\28char\\20const*\\29\n2865:GrGLFunction<void\\20\\28unsigned\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\29\n2866:GrGLFunction<unsigned\\20char\\20const*\\20\\28unsigned\\20int\\29>::GrGLFunction\\28unsigned\\20char\\20const*\\20\\28*\\29\\28unsigned\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\29\n2867:GrGLFinishCallbacks::callAll\\28bool\\29\n2868:GrGLCheckLinkStatus\\28GrGLGpu\\20const*\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20skgpu::ShaderErrorHandler*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const**\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\29\n2869:GrGLAttribArrayState::set\\28GrGLGpu*\\2c\\20int\\2c\\20GrBuffer\\20const*\\2c\\20GrVertexAttribType\\2c\\20SkSLType\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20int\\29\n2870:GrFragmentProcessors::Make\\28SkBlenderBase\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrFPArgs\\20const&\\29\n2871:GrFragmentProcessor::isEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n2872:GrFragmentProcessor::Rect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRect\\29\n2873:GrFragmentProcessor::ModulateRGBA\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n2874:GrDstProxyView::setProxyView\\28GrSurfaceProxyView\\29\n2875:GrDrawingManager::getPathRenderer\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\2c\\20bool\\2c\\20skgpu::ganesh::PathRendererChain::DrawType\\2c\\20skgpu::ganesh::PathRenderer::StencilSupport*\\29\n2876:GrDrawingManager::getLastRenderTask\\28GrSurfaceProxy\\20const*\\29\\20const\n2877:GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29::\\28'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\20const&\\29\n2878:GrDrawOpAtlas::processEvictionAndResetRects\\28skgpu::Plot*\\29\n2879:GrDeferredProxyUploader::~GrDeferredProxyUploader\\28\\29\n2880:GrDeferredProxyUploader::wait\\28\\29\n2881:GrCpuBuffer::Make\\28unsigned\\20long\\29\n2882:GrContext_Base::~GrContext_Base\\28\\29\n2883:GrColorSpaceXform::Make\\28SkColorSpace*\\2c\\20SkAlphaType\\2c\\20SkColorSpace*\\2c\\20SkAlphaType\\29\n2884:GrColorInfo::operator=\\28GrColorInfo\\20const&\\29\n2885:GrClip::IsPixelAligned\\28SkRect\\20const&\\29\n2886:GrClip::GetPixelIBounds\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20GrClip::BoundsType\\29::'lambda0'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n2887:GrClip::GetPixelIBounds\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20GrClip::BoundsType\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n2888:GrCaps::supportedReadPixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n2889:GrCaps::getFallbackColorTypeAndFormat\\28GrColorType\\2c\\20int\\29\\20const\n2890:GrCaps::areColorTypeAndFormatCompatible\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\29\\20const\n2891:GrBufferAllocPool::~GrBufferAllocPool\\28\\29.1\n2892:GrBufferAllocPool::makeSpace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n2893:GrBufferAllocPool::GrBufferAllocPool\\28GrGpu*\\2c\\20GrGpuBufferType\\2c\\20sk_sp<GrBufferAllocPool::CpuBufferCache>\\29\n2894:GrBlurUtils::GaussianBlur\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20float\\2c\\20float\\2c\\20SkTileMode\\2c\\20SkBackingFit\\29\n2895:GrBlurUtils::DrawShapeWithMaskFilter\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\29\n2896:GrBaseContextPriv::getShaderErrorHandler\\28\\29\\20const\n2897:GrBackendTexture::GrBackendTexture\\28GrBackendTexture\\20const&\\29\n2898:GrBackendRenderTarget::getBackendFormat\\28\\29\\20const\n2899:GrAAConvexTessellator::createOuterRing\\28GrAAConvexTessellator::Ring\\20const&\\2c\\20float\\2c\\20float\\2c\\20GrAAConvexTessellator::Ring*\\29\n2900:GrAAConvexTessellator::createInsetRings\\28GrAAConvexTessellator::Ring&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20GrAAConvexTessellator::Ring**\\29\n2901:GrAAConvexTessellator::Ring::init\\28GrAAConvexTessellator\\20const&\\29\n2902:FwDCubicEvaluator::FwDCubicEvaluator\\28SkPoint\\20const*\\29\n2903:FT_Stream_ReadAt\n2904:FT_Set_Charmap\n2905:FT_New_Size\n2906:FT_Load_Sfnt_Table\n2907:FT_List_Find\n2908:FT_GlyphLoader_Add\n2909:FT_Get_Next_Char\n2910:FT_Get_Color_Glyph_Layer\n2911:FT_Done_Face\n2912:FT_CMap_New\n2913:Current_Ratio\n2914:Compute_Funcs\n2915:CircleOp::Circle&\\20skia_private::TArray<CircleOp::Circle\\2c\\20true>::emplace_back<CircleOp::Circle>\\28CircleOp::Circle&&\\29\n2916:CFF::path_procs_t<cff2_path_procs_path_t\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>\\2c\\20cff2_path_param_t>::curve2\\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_path_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n2917:CFF::path_procs_t<cff2_path_procs_extents_t\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>\\2c\\20cff2_extents_param_t>::curve2\\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n2918:CFF::path_procs_t<cff1_path_procs_path_t\\2c\\20CFF::cff1_cs_interp_env_t\\2c\\20cff1_path_param_t>::curve2\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_path_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n2919:CFF::path_procs_t<cff1_path_procs_extents_t\\2c\\20CFF::cff1_cs_interp_env_t\\2c\\20cff1_extents_param_t>::curve2\\28CFF::cff1_cs_interp_env_t&\\2c\\20cff1_extents_param_t&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\2c\\20CFF::point_t\\20const&\\29\n2920:CFF::parsed_values_t<CFF::dict_val_t>::operator=\\28CFF::parsed_values_t<CFF::dict_val_t>&&\\29\n2921:CFF::cs_interp_env_t<CFF::number_t\\2c\\20CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>>::return_from_subr\\28\\29\n2922:CFF::cs_interp_env_t<CFF::number_t\\2c\\20CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>>::in_error\\28\\29\\20const\n2923:CFF::cs_interp_env_t<CFF::number_t\\2c\\20CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>>::call_subr\\28CFF::biased_subrs_t<CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>>\\20const&\\2c\\20CFF::cs_type_t\\29\n2924:CFF::cs_interp_env_t<CFF::number_t\\2c\\20CFF::Subrs<OT::IntType<unsigned\\20int\\2c\\204u>>>::call_subr\\28CFF::biased_subrs_t<CFF::Subrs<OT::IntType<unsigned\\20int\\2c\\204u>>>\\20const&\\2c\\20CFF::cs_type_t\\29\n2925:CFF::byte_str_ref_t::operator\\5b\\5d\\28int\\29\n2926:CFF::arg_stack_t<CFF::number_t>::push_fixed_from_substr\\28CFF::byte_str_ref_t&\\29\n2927:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n2928:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::operator\\5b\\5d\\28unsigned\\20int\\29\\20const\n2929:CFF::CFFIndex<OT::IntType<unsigned\\20int\\2c\\204u>>::offset_at\\28unsigned\\20int\\29\\20const\n2930:AlmostLessOrEqualUlps\\28float\\2c\\20float\\29\n2931:AlmostEqualUlps_Pin\\28double\\2c\\20double\\29\n2932:ActiveEdge::intersect\\28ActiveEdge\\20const*\\29\n2933:AAT::Lookup<OT::HBGlyphID16>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n2934:AAT::ClassTable<OT::IntType<unsigned\\20short\\2c\\202u>>::get_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n2935:zero_length\\28SkPoint\\20const&\\2c\\20float\\29\n2936:wcrtomb\n2937:void\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__construct_at_end<unsigned\\20long*\\2c\\200>\\28unsigned\\20long*\\2c\\20unsigned\\20long*\\2c\\20unsigned\\20long\\29\n2938:void\\20std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::__construct_at_end<skia::textlayout::FontFeature*\\2c\\200>\\28skia::textlayout::FontFeature*\\2c\\20skia::textlayout::FontFeature*\\2c\\20unsigned\\20long\\29\n2939:void\\20std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__construct_at_end<SkString*\\2c\\200>\\28SkString*\\2c\\20SkString*\\2c\\20unsigned\\20long\\29\n2940:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20std::__2::iterator_traits<skia::textlayout::OneLineShaper::RunBlock*>::difference_type\\29\n2941:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20std::__2::iterator_traits<SkSL::ProgramElement\\20const**>::difference_type\\29\n2942:void\\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20std::__2::iterator_traits<SkSL::FunctionDefinition\\20const**>::difference_type\\29\n2943:void\\20std::__2::__inplace_merge<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\2c\\20long\\29\n2944:void\\20skgpu::VertexWriter::writeQuad<GrQuad>\\28GrQuad\\20const&\\29\n2945:void\\20merge_sort<&sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\29\n2946:void\\20merge_sort<&sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\29\n2947:void\\20hb_stable_sort<OT::HBGlyphID16\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20unsigned\\20int>\\28OT::HBGlyphID16*\\2c\\20unsigned\\20int\\2c\\20int\\20\\28*\\29\\28OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\29\\2c\\20unsigned\\20int*\\29\n2948:void\\20SkSafeUnref<sktext::gpu::TextStrike>\\28sktext::gpu::TextStrike*\\29\n2949:void\\20SkSafeUnref<SkMeshSpecification>\\28SkMeshSpecification*\\29\n2950:void\\20SkSafeUnref<SkMeshPriv::VB\\20const>\\28SkMeshPriv::VB\\20const*\\29\n2951:void\\20SkSafeUnref<GrTexture>\\28GrTexture*\\29\\20\\28.4382\\29\n2952:void\\20SkSafeUnref<GrCpuBuffer>\\28GrCpuBuffer*\\29\n2953:vfprintf\n2954:valid_args\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long*\\29\n2955:uprv_malloc_skia\n2956:update_offset_to_base\\28char\\20const*\\2c\\20long\\29\n2957:unsigned\\20long\\20std::__2::__str_find\\5babi:v160004\\5d<char\\2c\\20unsigned\\20long\\2c\\20std::__2::char_traits<char>\\2c\\204294967295ul>\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n2958:unsigned\\20long\\20const&\\20std::__2::min\\5babi:v160004\\5d<unsigned\\20long>\\28unsigned\\20long\\20const&\\2c\\20unsigned\\20long\\20const&\\29\n2959:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n2960:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n2961:unsigned\\20int\\20std::__2::__sort5_wrap_policy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n2962:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n2963:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n2964:unsigned\\20int\\20std::__2::__sort4\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n2965:ubidi_getRuns_skia\n2966:u_charMirror_skia\n2967:tt_size_reset\n2968:tt_sbit_decoder_load_metrics\n2969:tt_glyphzone_done\n2970:tt_face_get_location\n2971:tt_face_find_bdf_prop\n2972:tt_delta_interpolate\n2973:tt_cmap14_find_variant\n2974:tt_cmap14_char_map_nondef_binary\n2975:tt_cmap14_char_map_def_binary\n2976:tolower\n2977:t1_cmap_unicode_done\n2978:subdivide_cubic_to\\28SkPath*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n2979:strtox\n2980:strtoull_l\n2981:std::logic_error::~logic_error\\28\\29.1\n2982:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::vector\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\20const&\\29\n2983:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__destroy_vector::operator\\28\\29\\5babi:v160004\\5d\\28\\29\n2984:std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>::erase\\28std::__2::__wrap_iter<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\20const*>\\2c\\20std::__2::__wrap_iter<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\20const*>\\29\n2985:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__alloc\\5babi:v160004\\5d\\28\\29\n2986:std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::~vector\\5babi:v160004\\5d\\28\\29\n2987:std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::vector\\28std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>\\20const&\\29\n2988:std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>::vector\\5babi:v160004\\5d\\28std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>&&\\29\n2989:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<float\\2c\\20std::__2::allocator<float>&>&\\29\n2990:std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n2991:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::push_back\\5babi:v160004\\5d\\28SkString\\20const&\\29\n2992:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkString\\2c\\20std::__2::allocator<SkString>&>&\\29\n2993:std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>::push_back\\5babi:v160004\\5d\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n2994:std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n2995:std::__2::vector<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>>::push_back\\5babi:v160004\\5d\\28SkMeshSpecification::Attribute&&\\29\n2996:std::__2::unique_ptr<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20void*>\\2c\\20std::__2::__hash_node_destructor<std::__2::allocator<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20void*>>>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2997:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2998:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n2999:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3000:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3001:std::__2::unique_ptr<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3002:std::__2::unique_ptr<hb_buffer_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_buffer_t*\\29\\2c\\20&hb_buffer_destroy>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3003:std::__2::unique_ptr<SkTypeface_FreeType::FaceRec\\2c\\20std::__2::default_delete<SkTypeface_FreeType::FaceRec>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3004:std::__2::unique_ptr<SkTypeface_FreeType::FaceRec\\2c\\20std::__2::default_delete<SkTypeface_FreeType::FaceRec>>::reset\\5babi:v160004\\5d\\28SkTypeface_FreeType::FaceRec*\\29\n3005:std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>::reset\\5babi:v160004\\5d\\28SkStrikeSpec*\\29\n3006:std::__2::unique_ptr<SkSL::RP::LValueSlice\\2c\\20std::__2::default_delete<SkSL::RP::LValueSlice>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3007:std::__2::unique_ptr<SkSL::ProgramUsage\\2c\\20std::__2::default_delete<SkSL::ProgramUsage>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3008:std::__2::unique_ptr<SkSL::Pool\\2c\\20std::__2::default_delete<SkSL::Pool>>::reset\\5babi:v160004\\5d\\28SkSL::Pool*\\29\n3009:std::__2::unique_ptr<SkSL::Block\\2c\\20std::__2::default_delete<SkSL::Block>>::reset\\5babi:v160004\\5d\\28SkSL::Block*\\29\n3010:std::__2::unique_ptr<SkDrawableList\\2c\\20std::__2::default_delete<SkDrawableList>>::reset\\5babi:v160004\\5d\\28SkDrawableList*\\29\n3011:std::__2::unique_ptr<SkContourMeasureIter::Impl\\2c\\20std::__2::default_delete<SkContourMeasureIter::Impl>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3012:std::__2::unique_ptr<SkContourMeasureIter::Impl\\2c\\20std::__2::default_delete<SkContourMeasureIter::Impl>>::reset\\5babi:v160004\\5d\\28SkContourMeasureIter::Impl*\\29\n3013:std::__2::unique_ptr<SkCanvas::Layer\\2c\\20std::__2::default_delete<SkCanvas::Layer>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3014:std::__2::unique_ptr<SkCanvas::BackImage\\2c\\20std::__2::default_delete<SkCanvas::BackImage>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3015:std::__2::unique_ptr<SkBigPicture::SnapshotArray\\2c\\20std::__2::default_delete<SkBigPicture::SnapshotArray>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3016:std::__2::unique_ptr<GrGLGpu::SamplerObjectCache\\2c\\20std::__2::default_delete<GrGLGpu::SamplerObjectCache>>::reset\\5babi:v160004\\5d\\28GrGLGpu::SamplerObjectCache*\\29\n3017:std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\20GrBlendFragmentProcessor::Make<\\28SkBlendMode\\296>\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3018:std::__2::unique_ptr<GrDrawingManager\\2c\\20std::__2::default_delete<GrDrawingManager>>::reset\\5babi:v160004\\5d\\28GrDrawingManager*\\29\n3019:std::__2::unique_ptr<GrClientMappedBufferManager\\2c\\20std::__2::default_delete<GrClientMappedBufferManager>>::reset\\5babi:v160004\\5d\\28GrClientMappedBufferManager*\\29\n3020:std::__2::unique_ptr<FT_SizeRec_\\2c\\20SkOverloadedFunctionObject<int\\20\\28FT_SizeRec_*\\29\\2c\\20&FT_Done_Size>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3021:std::__2::unique_ptr<FT_FaceRec_\\2c\\20SkOverloadedFunctionObject<int\\20\\28FT_FaceRec_*\\29\\2c\\20&FT_Done_Face>>::reset\\5babi:v160004\\5d\\28FT_FaceRec_*\\29\n3022:std::__2::tuple<GrSurfaceProxyView&\\2c\\20SkIRect&>&\\20std::__2::tuple<GrSurfaceProxyView&\\2c\\20SkIRect&>::operator=\\5babi:v160004\\5d<GrSurfaceProxyView\\2c\\20SkIRect\\2c\\200>\\28std::__2::pair<GrSurfaceProxyView\\2c\\20SkIRect>&&\\29\n3023:std::__2::time_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::~time_put\\28\\29\n3024:std::__2::pair<float\\2c\\20float>\\20std::__2::minmax\\5babi:v160004\\5d<float\\2c\\20std::__2::__less<float\\2c\\20float>>\\28std::initializer_list<float>\\2c\\20std::__2::__less<float\\2c\\20float>\\29\n3025:std::__2::pair<char\\20const*\\2c\\20char*>\\20std::__2::__copy_trivial::operator\\28\\29\\5babi:v160004\\5d<char\\20const\\2c\\20char\\2c\\200>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n3026:std::__2::locale::locale\\28\\29\n3027:std::__2::iterator_traits<unsigned\\20int\\20const*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<unsigned\\20int\\20const*>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n3028:std::__2::ios_base::~ios_base\\28\\29\n3029:std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::operator\\28\\29\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29\\20const\n3030:std::__2::function<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const\n3031:std::__2::fpos<__mbstate_t>::fpos\\5babi:v160004\\5d\\28long\\20long\\29\n3032:std::__2::enable_if<is_convertible_v<decltype\\28std::declval<skia::textlayout::FontArguments\\20const&>\\28\\29\\20==\\20std::declval<skia::textlayout::FontArguments\\20const&>\\28\\29\\29\\2c\\20bool>\\2c\\20bool>::type\\20std::__2::operator==\\5babi:v160004\\5d<skia::textlayout::FontArguments\\2c\\20skia::textlayout::FontArguments>\\28std::__2::optional<skia::textlayout::FontArguments>\\20const&\\2c\\20std::__2::optional<skia::textlayout::FontArguments>\\20const&\\29\n3033:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__back_spare\\5babi:v160004\\5d\\28\\29\\20const\n3034:std::__2::default_delete<skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::Slot>\\28skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::Slot*\\29\\20const\n3035:std::__2::chrono::__libcpp_steady_clock_now\\28\\29\n3036:std::__2::char_traits<char>::move\\28char*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n3037:std::__2::char_traits<char>::assign\\28char*\\2c\\20unsigned\\20long\\2c\\20char\\29\n3038:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n3039:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringbuf\\28\\29\n3040:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::push_back\\28wchar_t\\29\n3041:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n3042:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d<std::nullptr_t>\\28wchar_t\\20const*\\29\n3043:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28std::__2::__uninitialized_size_tag\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<char>\\20const&\\29\n3044:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__make_iterator\\5babi:v160004\\5d\\28char*\\29\n3045:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__grow_by\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3046:std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>::basic_string\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n3047:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::~basic_streambuf\\28\\29\n3048:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setp\\5babi:v160004\\5d\\28char*\\2c\\20char*\\29\n3049:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sbumpc\\5babi:v160004\\5d\\28\\29\n3050:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29\n3051:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::sentry::sentry\\28std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20bool\\29\n3052:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n3053:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::~basic_ios\\28\\29\n3054:std::__2::array<float\\2c\\204ul>\\20skgpu::ganesh::SurfaceFillContext::adjustColorAlphaType<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\\20const\n3055:std::__2::allocator<char16_t>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3056:std::__2::allocator<SkMeshSpecification::Attribute>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n3057:std::__2::__wrap_iter<wchar_t*>::operator+\\5babi:v160004\\5d\\28long\\29\\20const\n3058:std::__2::__wrap_iter<char*>::operator+\\5babi:v160004\\5d\\28long\\29\\20const\n3059:std::__2::__unique_if<skgpu::ganesh::SurfaceFillContext>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<skgpu::ganesh::SurfaceFillContext\\2c\\20GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&>\\28GrRecordingContext*&&\\2c\\20GrSurfaceProxyView&&\\2c\\20GrSurfaceProxyView&&\\2c\\20GrColorInfo\\20const&\\29\n3060:std::__2::__unique_if<skgpu::ganesh::PathRendererChain>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<skgpu::ganesh::PathRendererChain\\2c\\20GrRecordingContext*&\\2c\\20skgpu::ganesh::PathRendererChain::Options&>\\28GrRecordingContext*&\\2c\\20skgpu::ganesh::PathRendererChain::Options&\\29\n3061:std::__2::__unique_if<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>\\2c\\20GrDirectContext::DirectContextID>\\28GrDirectContext::DirectContextID&&\\29\n3062:std::__2::__unique_if<SkSL::SymbolTable>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::SymbolTable\\2c\\20SkSL::SymbolTable*&\\2c\\20bool&>\\28SkSL::SymbolTable*&\\2c\\20bool&\\29\n3063:std::__2::__tuple_impl<std::__2::__tuple_indices<0ul\\2c\\201ul>\\2c\\20GrSurfaceProxyView\\2c\\20sk_sp<GrThreadSafeCache::Trampoline>>::~__tuple_impl\\28\\29\n3064:std::__2::__split_buffer<SkString\\2c\\20std::__2::allocator<SkString>&>::~__split_buffer\\28\\29\n3065:std::__2::__optional_destruct_base<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n3066:std::__2::__optional_destruct_base<skia::textlayout::FontArguments\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n3067:std::__2::__optional_destruct_base<SkSL::RP::AutoStack\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n3068:std::__2::__optional_destruct_base<SkMaskFilterBase::NinePatch\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n3069:std::__2::__optional_destruct_base<SkCanvas\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n3070:std::__2::__optional_destruct_base<GrStyledShape\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n3071:std::__2::__optional_copy_base<skia::textlayout::FontArguments\\2c\\20false>::__optional_copy_base\\5babi:v160004\\5d\\28std::__2::__optional_copy_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&\\29\n3072:std::__2::__num_get<wchar_t>::__stage2_float_prep\\28std::__2::ios_base&\\2c\\20wchar_t*\\2c\\20wchar_t&\\2c\\20wchar_t&\\29\n3073:std::__2::__num_get<wchar_t>::__stage2_float_loop\\28wchar_t\\2c\\20bool&\\2c\\20char&\\2c\\20char*\\2c\\20char*&\\2c\\20wchar_t\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int&\\2c\\20wchar_t*\\29\n3074:std::__2::__num_get<char>::__stage2_float_prep\\28std::__2::ios_base&\\2c\\20char*\\2c\\20char&\\2c\\20char&\\29\n3075:std::__2::__num_get<char>::__stage2_float_loop\\28char\\2c\\20bool&\\2c\\20char&\\2c\\20char*\\2c\\20char*&\\2c\\20char\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*&\\2c\\20unsigned\\20int&\\2c\\20char*\\29\n3076:std::__2::__murmur2_or_cityhash<unsigned\\20long\\2c\\2032ul>::operator\\28\\29\\28void\\20const*\\2c\\20unsigned\\20long\\29\n3077:std::__2::__libcpp_wcrtomb_l\\5babi:v160004\\5d\\28char*\\2c\\20wchar_t\\2c\\20__mbstate_t*\\2c\\20__locale_struct*\\29\n3078:std::__2::__less<unsigned\\20int\\2c\\20unsigned\\20long>::operator\\28\\29\\5babi:v160004\\5d\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20long\\20const&\\29\\20const\n3079:std::__2::__itoa::__base_10_u32\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n3080:std::__2::__itoa::__append6\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n3081:std::__2::__itoa::__append4\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20int\\29\n3082:std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::__unordered_map_hasher<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>>>::~__hash_table\\28\\29\n3083:std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::~__hash_table\\28\\29\n3084:std::__2::__function::__value_func<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\5babi:v160004\\5d\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\\20const\n3085:std::__2::__function::__value_func<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\5babi:v160004\\5d\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const\n3086:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrBackendTexture\\29>*\\29\\20const\n3087:skvx::Vec<4\\2c\\20unsigned\\20short>\\20skvx::to_half<4>\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n3088:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator<=<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n3089:skvx::Vec<4\\2c\\20int>\\20skvx::operator~<4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\29\n3090:skvx::Vec<4\\2c\\20int>\\20skvx::operator&<4\\2c\\20int\\2c\\20int\\2c\\20void>\\28skvx::Vec<4\\2c\\20int>\\20const&\\2c\\20int\\29\n3091:skvx::Vec<4\\2c\\20float>&\\20skvx::operator+=<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n3092:sktext::gpu::VertexFiller::flatten\\28SkWriteBuffer&\\29\\20const\n3093:sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry::find\\28sktext::gpu::TextBlob::Key\\20const&\\29\\20const\n3094:sktext::gpu::SubRunAllocator::SubRunAllocator\\28char*\\2c\\20int\\2c\\20int\\29\n3095:sktext::gpu::GlyphVector::flatten\\28SkWriteBuffer&\\29\\20const\n3096:sktext::gpu::GlyphVector::Make\\28sktext::SkStrikePromise&&\\2c\\20SkSpan<SkPackedGlyphID\\20const>\\2c\\20sktext::gpu::SubRunAllocator*\\29\n3097:sktext::gpu::GlyphVector::GlyphVector\\28sktext::gpu::GlyphVector&&\\29\n3098:sktext::gpu::BagOfBytes::PlatformMinimumSizeWithOverhead\\28int\\2c\\20int\\29\n3099:sktext::SkStrikePromise::flatten\\28SkWriteBuffer&\\29\\20const\n3100:sktext::GlyphRunList::sourceBoundsWithOrigin\\28\\29\\20const\n3101:skpaint_to_grpaint_impl\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\2c\\20SkBlender*\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n3102:skip_literal_string\n3103:skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.1\n3104:skif::Mapping::adjustLayerSpace\\28SkMatrix\\20const&\\29\n3105:skif::Mapping::Mapping\\28\\29\n3106:skif::LayerSpace<SkSize>::ceil\\28\\29\\20const\n3107:skif::LayerSpace<SkMatrix>\\20skif::Mapping::paramToLayer<SkMatrix>\\28skif::ParameterSpace<SkMatrix>\\20const&\\29\\20const\n3108:skif::LayerSpace<SkIRect>\\20skif::Mapping::deviceToLayer<SkIRect>\\28skif::DeviceSpace<SkIRect>\\20const&\\29\\20const\n3109:skif::LayerSpace<SkIRect>::relevantSubset\\28skif::LayerSpace<SkIRect>\\2c\\20SkTileMode\\29\\20const\n3110:skif::LayerSpace<SkIRect>::offset\\28skif::LayerSpace<skif::IVector>\\20const&\\29\n3111:skif::FilterResult::operator=\\28skif::FilterResult\\20const&\\29\n3112:skif::FilterResult::getAnalyzedShaderView\\28skif::Context\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkEnumBitMask<skif::FilterResult::BoundsAnalysis>\\29\\20const\n3113:skif::FilterResult::analyzeBounds\\28SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20skif::FilterResult::BoundsScope\\29\\20const\n3114:skif::FilterResult::FilterResult\\28sk_sp<SkSpecialImage>\\2c\\20skif::LayerSpace<SkIPoint>\\20const&\\2c\\20skif::FilterResult::PixelBoundary\\29\n3115:skif::FilterResult::Builder::~Builder\\28\\29\n3116:skif::FilterResult::AutoSurface::snap\\28\\29\n3117:skif::FilterResult::AutoSurface::AutoSurface\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::FilterResult::PixelBoundary\\2c\\20bool\\2c\\20SkSurfaceProps\\20const*\\29\n3118:skif::Backend::~Backend\\28\\29\n3119:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot::reset\\28\\29\n3120:skia_private::THashTable<skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Symbol\\20const*\\2c\\20skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::Pair>::firstPopulatedSlot\\28\\29\\20const\n3121:skia_private::THashTable<skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Symbol\\20const*\\2c\\20skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::Pair>::Iter<std::__2::pair<SkSL::Symbol\\20const*\\2c\\20int>>::operator++\\28\\29\n3122:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::Slot::reset\\28\\29\n3123:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::Hash\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n3124:skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::Slot::reset\\28\\29\n3125:skia_private::THashTable<long\\20long\\2c\\20long\\20long\\2c\\20skia_private::THashSet<long\\20long\\2c\\20SkGoodHash>::Traits>::Hash\\28long\\20long\\20const&\\29\n3126:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::Hash\\28SkImageFilterCacheKey\\20const&\\29\n3127:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::findOrNull\\28skgpu::ScratchKey\\20const&\\29\\20const\n3128:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::set\\28SkSL::Variable\\20const*\\29\n3129:skia_private::THashTable<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\2c\\20unsigned\\20int\\2c\\20SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Traits>::uncheckedSet\\28SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*&&\\29\n3130:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::Hash\\28GrProgramDesc\\20const&\\29\n3131:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::removeIfExists\\28skgpu::UniqueKey\\20const&\\29\n3132:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::Hash\\28FT_Opaque_Paint_\\20const&\\29\n3133:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::set\\28SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n3134:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::find\\28SkSL::Variable\\20const*\\20const&\\29\\20const\n3135:skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::operator\\5b\\5d\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\n3136:skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::find\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n3137:skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::find\\28SkSL::IRNode\\20const*\\20const&\\29\\20const\n3138:skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20unsigned\\20long\\2c\\20SkGoodHash>::set\\28SkSL::FunctionDeclaration\\20const*\\2c\\20unsigned\\20long\\29\n3139:skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::find\\28SkImageFilter\\20const*\\20const&\\29\\20const\n3140:skia_private::TArray<unsigned\\20short\\2c\\20true>::resize_back\\28int\\29\n3141:skia_private::TArray<unsigned\\20int\\2c\\20true>::push_back_raw\\28int\\29\n3142:skia_private::TArray<unsigned\\20int\\2c\\20true>::operator==\\28skia_private::TArray<unsigned\\20int\\2c\\20true>\\20const&\\29\\20const\n3143:skia_private::TArray<unsigned\\20char\\2c\\20true>::reserve_exact\\28int\\29\n3144:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n3145:skia_private::TArray<std::__2::array<unsigned\\20short\\2c\\203ul>\\2c\\20true>::push_back\\28std::__2::array<unsigned\\20short\\2c\\203ul>&&\\29\n3146:skia_private::TArray<skia::textlayout::TextLine\\2c\\20false>::clear\\28\\29\n3147:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::clear\\28\\29\n3148:skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>::TArray\\28skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>\\20const&\\29\n3149:skia_private::TArray<skia::textlayout::Block\\2c\\20true>::TArray\\28skia_private::TArray<skia::textlayout::Block\\2c\\20true>\\20const&\\29\n3150:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::~TArray\\28\\29\n3151:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::move\\28void*\\29\n3152:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::~TArray\\28\\29\n3153:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::move\\28void*\\29\n3154:skia_private::TArray<sk_sp<GrRenderTask>\\2c\\20true>::push_back\\28sk_sp<GrRenderTask>&&\\29\n3155:skia_private::TArray<int\\2c\\20true>::reserve_exact\\28int\\29\n3156:skia_private::TArray<int\\2c\\20true>::push_back_n\\28int\\2c\\20int\\20const&\\29\n3157:skia_private::TArray<float\\2c\\20true>::operator=\\28skia_private::TArray<float\\2c\\20true>&&\\29\n3158:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n3159:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n3160:skia_private::TArray<SkPoint\\2c\\20true>::reserve_exact\\28int\\29\n3161:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::~TArray\\28\\29\n3162:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::move\\28void*\\29\n3163:skia_private::AutoSTMalloc<8ul\\2c\\20unsigned\\20int\\2c\\20void>::reset\\28unsigned\\20long\\29\n3164:skia_private::AutoSTArray<20\\2c\\20SkGlyph\\20const*>::reset\\28int\\29\n3165:skia_private::AutoSTArray<16\\2c\\20SkRect>::reset\\28int\\29\n3166:skia_private::AutoSTArray<128\\2c\\20unsigned\\20char>::reset\\28int\\29\n3167:skia_png_sig_cmp\n3168:skia_png_set_text_2\n3169:skia_png_realloc_array\n3170:skia_png_get_uint_31\n3171:skia_png_check_fp_string\n3172:skia_png_check_fp_number\n3173:skia_png_app_warning\n3174:skia_png_app_error\n3175:skia::textlayout::\\28anonymous\\20namespace\\29::intersected\\28skia::textlayout::SkRange<unsigned\\20long>\\20const&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\20const&\\29\n3176:skia::textlayout::\\28anonymous\\20namespace\\29::draw_line_as_rect\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n3177:skia::textlayout::TypefaceFontStyleSet::createTypeface\\28int\\29\n3178:skia::textlayout::TextStyle::setForegroundColor\\28SkPaint\\29\n3179:skia::textlayout::TextStyle::setBackgroundColor\\28SkPaint\\29\n3180:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::~ShapeHandler\\28\\29\n3181:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::$_0::operator\\28\\29\\28sk_sp<SkTypeface>\\2c\\20sk_sp<SkFontMgr>\\29\\20const\n3182:skia::textlayout::TextLine::iterateThroughSingleRunByStyles\\28skia::textlayout::TextLine::TextAdjustment\\2c\\20skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::StyleType\\2c\\20std::__2::function<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\20const&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\29\\20const\n3183:skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const\n3184:skia::textlayout::TextBox&\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>::emplace_back<SkRect&\\2c\\20skia::textlayout::TextDirection>\\28SkRect&\\2c\\20skia::textlayout::TextDirection&&\\29\n3185:skia::textlayout::StrutStyle::StrutStyle\\28skia::textlayout::StrutStyle\\20const&\\29\n3186:skia::textlayout::Run::isResolved\\28\\29\\20const\n3187:skia::textlayout::Run::copyTo\\28SkTextBlobBuilder&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n3188:skia::textlayout::Run::calculateWidth\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\\20const\n3189:skia::textlayout::ParagraphStyle::ParagraphStyle\\28skia::textlayout::ParagraphStyle&&\\29\n3190:skia::textlayout::ParagraphImpl::getGlyphPositionAtCoordinate\\28float\\2c\\20float\\29\n3191:skia::textlayout::ParagraphImpl::findNextGraphemeBoundary\\28unsigned\\20long\\29\\20const\n3192:skia::textlayout::ParagraphImpl::findAllBlocks\\28skia::textlayout::SkRange<unsigned\\20long>\\29\n3193:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\\28\\29::$_0::operator\\28\\29\\28\\29\\20const::'lambda'\\28unsigned\\20long\\29::operator\\28\\29\\28unsigned\\20long\\29\\20const\n3194:skia::textlayout::ParagraphImpl::buildClusterTable\\28\\29\n3195:skia::textlayout::ParagraphCacheKey::operator==\\28skia::textlayout::ParagraphCacheKey\\20const&\\29\\20const\n3196:skia::textlayout::ParagraphBuilderImpl::ensureUTF16Mapping\\28\\29::$_0::operator\\28\\29\\28\\29\\20const::'lambda'\\28unsigned\\20long\\29::operator\\28\\29\\28unsigned\\20long\\29\\20const\n3197:skia::textlayout::ParagraphBuilderImpl::ensureUTF16Mapping\\28\\29\n3198:skia::textlayout::ParagraphBuilderImpl::endRunIfNeeded\\28\\29\n3199:skia::textlayout::OneLineShaper::~OneLineShaper\\28\\29\n3200:skia::textlayout::LineMetrics::LineMetrics\\28\\29\n3201:skia::textlayout::FontCollection::FamilyKey::~FamilyKey\\28\\29\n3202:skia::textlayout::Cluster::isSoftBreak\\28\\29\\20const\n3203:skia::textlayout::Block::Block\\28skia::textlayout::Block\\20const&\\29\n3204:skgpu::ganesh::\\28anonymous\\20namespace\\29::add_quad_segment\\28SkPoint\\20const*\\2c\\20skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::Segment\\2c\\20true>*\\29\n3205:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::Entry::Entry\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::Entry&&\\29\n3206:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::~Impl\\28\\29\n3207:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::programInfo\\28\\29\n3208:skgpu::ganesh::SurfaceFillContext::internalClear\\28SkIRect\\20const*\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20bool\\29\n3209:skgpu::ganesh::SurfaceFillContext::discard\\28\\29\n3210:skgpu::ganesh::SurfaceFillContext::addOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n3211:skgpu::ganesh::SurfaceDrawContext::wrapsVkSecondaryCB\\28\\29\\20const\n3212:skgpu::ganesh::SurfaceDrawContext::stencilRect\\28GrClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix\\20const*\\29\n3213:skgpu::ganesh::SurfaceDrawContext::fillQuadWithEdgeAA\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrQuadAAFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkPoint\\20const*\\29\n3214:skgpu::ganesh::SurfaceDrawContext::drawPath\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrStyle\\20const&\\29\n3215:skgpu::ganesh::SurfaceDrawContext::attemptQuadOptimization\\28GrClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20DrawQuad*\\2c\\20GrPaint*\\29\n3216:skgpu::ganesh::SurfaceDrawContext::Make\\28GrRecordingContext*\\2c\\20GrColorType\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\29\n3217:skgpu::ganesh::SurfaceContext::rescale\\28GrImageInfo\\20const&\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29\n3218:skgpu::ganesh::SurfaceContext::rescaleInto\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29::$_0::operator\\28\\29\\28GrSurfaceProxyView\\2c\\20SkIRect\\29\\20const\n3219:skgpu::ganesh::SurfaceContext::SurfaceContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n3220:skgpu::ganesh::SmallPathShapeDataKey::operator==\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\\20const\n3221:skgpu::ganesh::QuadPerEdgeAA::MinColorType\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n3222:skgpu::ganesh::PathTessellator::~PathTessellator\\28\\29\n3223:skgpu::ganesh::PathCurveTessellator::draw\\28GrOpFlushState*\\29\\20const\n3224:skgpu::ganesh::OpsTask::~OpsTask\\28\\29\n3225:skgpu::ganesh::OpsTask::recordOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const*\\2c\\20GrCaps\\20const&\\29\n3226:skgpu::ganesh::FilterAndMipmapHaveNoEffect\\28GrQuad\\20const&\\2c\\20GrQuad\\20const&\\29\n3227:skgpu::ganesh::FillRectOp::MakeNonAARect\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n3228:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::can_use_hw_derivatives_with_coverage\\28skvx::Vec<2\\2c\\20float>\\20const&\\2c\\20skvx::Vec<2\\2c\\20float>\\20const&\\29\n3229:skgpu::ganesh::FillRRectOp::Make\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrAA\\29\n3230:skgpu::ganesh::Device::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n3231:skgpu::ganesh::Device::drawImageQuadDirect\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n3232:skgpu::ganesh::Device::Make\\28std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\\2c\\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>\\2c\\20SkAlphaType\\2c\\20skgpu::ganesh::Device::InitContents\\29\n3233:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::setup_dashed_rect\\28SkRect\\20const&\\2c\\20skgpu::VertexWriter&\\2c\\20SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashCap\\29\n3234:skgpu::ganesh::ClipStack::~ClipStack\\28\\29\n3235:skgpu::ganesh::ClipStack::writableSaveRecord\\28bool*\\29\n3236:skgpu::ganesh::ClipStack::end\\28\\29\\20const\n3237:skgpu::ganesh::ClipStack::clip\\28skgpu::ganesh::ClipStack::RawElement&&\\29\n3238:skgpu::ganesh::ClipStack::clipState\\28\\29\\20const\n3239:skgpu::ganesh::ClipStack::SaveRecord::invalidateMasks\\28GrProxyProvider*\\2c\\20SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>*\\29\n3240:skgpu::ganesh::ClipStack::SaveRecord::genID\\28\\29\\20const\n3241:skgpu::ganesh::ClipStack::RawElement::operator=\\28skgpu::ganesh::ClipStack::RawElement&&\\29\n3242:skgpu::ganesh::ClipStack::RawElement::contains\\28skgpu::ganesh::ClipStack::SaveRecord\\20const&\\29\\20const\n3243:skgpu::ganesh::ClipStack::RawElement::RawElement\\28SkMatrix\\20const&\\2c\\20GrShape\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n3244:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29\n3245:skgpu::Swizzle::apply\\28SkRasterPipeline*\\29\\20const\n3246:skgpu::Swizzle::applyTo\\28std::__2::array<float\\2c\\204ul>\\29\\20const\n3247:skgpu::StringKeyBuilder::~StringKeyBuilder\\28\\29\n3248:skgpu::ScratchKey::GenerateResourceType\\28\\29\n3249:skgpu::RectanizerSkyline::reset\\28\\29\n3250:skgpu::Plot::addSubImage\\28int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n3251:skgpu::BlurSigmaRadius\\28float\\29\n3252:sk_sp<SkMeshSpecification>::~sk_sp\\28\\29\n3253:sk_sp<SkMeshSpecification>::reset\\28SkMeshSpecification*\\29\n3254:sk_sp<SkData>::operator=\\28sk_sp<SkData>&&\\29\n3255:sk_sp<GrTextureProxy>::reset\\28GrTextureProxy*\\29\n3256:sk_sp<GrTexture>::reset\\28GrTexture*\\29\n3257:sk_sp<GrSurfaceProxy>::operator=\\28sk_sp<GrSurfaceProxy>&&\\29\n3258:sk_sp<GrCpuBuffer>::reset\\28GrCpuBuffer*\\29\n3259:sk_sp<GrBuffer\\20const>&\\20sk_sp<GrBuffer\\20const>::operator=<GrGpuBuffer\\20const\\2c\\20void>\\28sk_sp<GrGpuBuffer\\20const>&&\\29\n3260:sk_sp<GrBuffer\\20const>&\\20sk_sp<GrBuffer\\20const>::operator=<GrBuffer\\2c\\20void>\\28sk_sp<GrBuffer>\\20const&\\29\n3261:skData_getSize\n3262:sift\n3263:set_initial_texture_params\\28GrGLInterface\\20const*\\2c\\20GrGLCaps\\20const&\\2c\\20unsigned\\20int\\29\n3264:setRegionCheck\\28SkRegion*\\2c\\20SkRegion\\20const&\\29\n3265:setLevelsOutsideIsolates\\28UBiDi*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n3266:sect_with_vertical\\28SkPoint\\20const*\\2c\\20float\\29\n3267:sampler_key\\28GrTextureType\\2c\\20skgpu::Swizzle\\20const&\\2c\\20GrCaps\\20const&\\29\n3268:round\\28SkPoint*\\29\n3269:read_color_line\n3270:quick_inverse\\28int\\29\n3271:quad_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3272:psh_globals_set_scale\n3273:ps_tofixedarray\n3274:ps_parser_skip_PS_token\n3275:ps_mask_test_bit\n3276:ps_mask_table_alloc\n3277:ps_mask_ensure\n3278:ps_dimension_reset_mask\n3279:ps_builder_init\n3280:ps_builder_done\n3281:pow\n3282:portable::uniform_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3283:portable::parametric_k\\28skcms_TransferFunction\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::byte*&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n3284:portable::hsl_to_rgb_k\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::byte*&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n3285:portable::gamma__k\\28float\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::byte*&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n3286:portable::PQish_k\\28skcms_TransferFunction\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::byte*&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n3287:portable::HLGish_k\\28skcms_TransferFunction\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::byte*&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n3288:portable::HLGinvish_k\\28skcms_TransferFunction\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::byte*&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\2c\\20float&\\29::'lambda'\\28float\\29::operator\\28\\29\\28float\\29\\20const\n3289:points_are_colinear_and_b_is_middle\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float*\\29\n3290:png_zlib_inflate\n3291:png_inflate_read\n3292:png_inflate_claim\n3293:png_build_8bit_table\n3294:png_build_16bit_table\n3295:picture_approximateBytesUsed\n3296:path_addOval\n3297:paragraph_dispose\n3298:operator==\\28SkPath\\20const&\\2c\\20SkPath\\20const&\\29\n3299:operator!=\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\n3300:operator!=\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n3301:normalize\n3302:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::glyphCount\\28\\29\\20const\n3303:non-virtual\\20thunk\\20to\\20GrOpFlushState::deferredUploadTarget\\28\\29\n3304:nextafterf\n3305:move_nearby\\28SkOpContourHead*\\29\n3306:make_unpremul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n3307:machine_index_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>>::operator==\\28machine_index_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>>\\20const&\\29\\20const\n3308:long\\20std::__2::__libcpp_atomic_refcount_decrement\\5babi:v160004\\5d<long>\\28long&\\29\n3309:long\\20const&\\20std::__2::min\\5babi:v160004\\5d<long>\\28long\\20const&\\2c\\20long\\20const&\\29\n3310:log1p\n3311:load_truetype_glyph\n3312:load\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\29\n3313:line_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3314:lineMetrics_getStartIndex\n3315:just_solid_color\\28SkPaint\\20const&\\29\n3316:is_reflex_vertex\\28SkPoint\\20const*\\2c\\20int\\2c\\20float\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n3317:inner_scanline\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkBlitter*\\29\n3318:inflate_table\n3319:hb_vector_t<hb_serialize_context_t::object_t::link_t\\2c\\20false>::push\\28\\29\n3320:hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::shrink_vector\\28unsigned\\20int\\29\n3321:hb_utf8_t::next\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\29\n3322:hb_shape_plan_destroy\n3323:hb_serialize_context_t::object_t::hash\\28\\29\\20const\n3324:hb_script_get_horizontal_direction\n3325:hb_pool_t<hb_serialize_context_t::object_t\\2c\\2032u>::alloc\\28\\29\n3326:hb_paint_funcs_t::push_clip_rectangle\\28void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3327:hb_paint_funcs_t::push_clip_glyph\\28void*\\2c\\20unsigned\\20int\\2c\\20hb_font_t*\\29\n3328:hb_paint_funcs_t::image\\28void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\29\n3329:hb_paint_funcs_t::color\\28void*\\2c\\20int\\2c\\20unsigned\\20int\\29\n3330:hb_paint_extents_context_t::push_clip\\28hb_extents_t\\29\n3331:hb_ot_map_t::get_mask\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n3332:hb_lazy_loader_t<OT::maxp\\2c\\20hb_table_lazy_loader_t<OT::maxp\\2c\\202u\\2c\\20true>\\2c\\20hb_face_t\\2c\\202u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3333:hb_lazy_loader_t<OT::kern\\2c\\20hb_table_lazy_loader_t<OT::kern\\2c\\2023u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2023u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3334:hb_lazy_loader_t<OT::head\\2c\\20hb_table_lazy_loader_t<OT::head\\2c\\201u\\2c\\20true>\\2c\\20hb_face_t\\2c\\201u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3335:hb_lazy_loader_t<OT::fvar\\2c\\20hb_table_lazy_loader_t<OT::fvar\\2c\\2018u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2018u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n3336:hb_lazy_loader_t<OT::cmap_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cmap_accelerator_t\\2c\\203u>\\2c\\20hb_face_t\\2c\\203u\\2c\\20OT::cmap_accelerator_t>::get_stored\\28\\29\\20const\n3337:hb_iter_t<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>\\2c\\20OT::HBGlyphID16&>::end\\28\\29\\20const\n3338:hb_iter_t<hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>::operator++\\28\\29\\20&\n3339:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::item_t::operator==\\28hb_serialize_context_t::object_t\\20const*\\20const&\\29\\20const\n3340:hb_font_t::mults_changed\\28\\29\n3341:hb_font_t::has_glyph_h_origin_func\\28\\29\n3342:hb_font_t::has_func\\28unsigned\\20int\\29\n3343:hb_font_t::get_nominal_glyphs\\28unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\29\n3344:hb_font_t::get_glyph_v_origin\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n3345:hb_font_t::get_glyph_v_advances\\28unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\29\n3346:hb_font_t::get_glyph_h_origin_with_fallback\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n3347:hb_font_t::get_glyph_h_origin\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n3348:hb_font_t::get_glyph_h_advances\\28unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\29\n3349:hb_font_t::get_glyph_contour_point_for_origin\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20int*\\2c\\20int*\\29\n3350:hb_font_funcs_destroy\n3351:hb_draw_cubic_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n3352:hb_buffer_t::output_info\\28hb_glyph_info_t\\20const&\\29\n3353:hb_buffer_t::digest\\28\\29\\20const\n3354:hb_buffer_t::_infos_set_glyph_flags\\28hb_glyph_info_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3355:hb_buffer_t::_infos_find_min_cluster\\28hb_glyph_info_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n3356:hb_buffer_set_length\n3357:hb_buffer_create\n3358:hb_blob_ptr_t<OT::Layout::GPOS>::destroy\\28\\29\n3359:haircubic\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n3360:gray_render_line\n3361:gl_target_to_gr_target\\28unsigned\\20int\\29\n3362:gl_target_to_binding_index\\28unsigned\\20int\\29\n3363:get_vendor\\28char\\20const*\\29\n3364:get_renderer\\28char\\20const*\\2c\\20GrGLExtensions\\20const&\\29\n3365:get_joining_type\\28unsigned\\20int\\2c\\20hb_unicode_general_category_t\\29\n3366:get_child_table_pointer\n3367:generate_distance_field_from_image\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\29\n3368:gaussianIntegral\\28float\\29\n3369:ft_var_readpackeddeltas\n3370:ft_var_done_item_variation_store\n3371:ft_glyphslot_alloc_bitmap\n3372:ft_face_get_mm_service\n3373:freelocale\n3374:fputc\n3375:fp_barrierf\n3376:float*\\20SkArenaAlloc::makeArray<float>\\28unsigned\\20long\\29\n3377:fixN0c\\28BracketData*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n3378:filter_to_gl_min_filter\\28SkFilterMode\\2c\\20SkMipmapMode\\29\n3379:emscripten_dispatch_to_thread_\n3380:emscripten_async_run_in_main_thread\n3381:em_task_queue_execute\n3382:em_queued_call_malloc\n3383:dquad_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3384:do_scanline\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkBlitter*\\29\n3385:do_anti_hairline\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkIRect\\20const*\\2c\\20SkBlitter*\\29\n3386:dline_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3387:directionFromFlags\\28UBiDi*\\29\n3388:destroy_face\n3389:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::DashOp::AAMode\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::$_0>\\28skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::DashOp::AAMode\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::$_0&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3390:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrProgramInfo*\\20SkArenaAlloc::make<GrProgramInfo\\2c\\20GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool&\\2c\\20GrPipeline*&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20\\28anonymous\\20namespace\\29::DrawAtlasPathShader*&\\2c\\20GrPrimitiveType\\2c\\20GrXferBarrierFlags&\\2c\\20GrLoadOp&>\\28GrCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool&\\2c\\20GrPipeline*&\\2c\\20GrUserStencilSettings\\20const*&&\\2c\\20\\28anonymous\\20namespace\\29::DrawAtlasPathShader*&\\2c\\20GrPrimitiveType&&\\2c\\20GrXferBarrierFlags&\\2c\\20GrLoadOp&\\29::'lambda'\\28void*\\29>\\28GrProgramInfo&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n3391:dcubic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3392:dconic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n3393:cubic_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3394:conic_intersect_ray\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n3395:cleanup_shaders\\28GrGLGpu*\\2c\\20SkTDArray<unsigned\\20int>\\20const&\\29\n3396:chop_mono_cubic_at_y\\28SkPoint*\\2c\\20float\\2c\\20SkPoint*\\29\n3397:check_inverse_on_empty_return\\28SkRegion*\\2c\\20SkPath\\20const&\\2c\\20SkRegion\\20const&\\29\n3398:check_intersection\\28SkAnalyticEdge\\20const*\\2c\\20int\\2c\\20int*\\29\n3399:char\\20const*\\20std::__2::find\\5babi:v160004\\5d<char\\20const*\\2c\\20char>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const&\\29\n3400:cff_parse_real\n3401:cff_parse_integer\n3402:cff_index_read_offset\n3403:cff_index_get_pointers\n3404:cff_index_access_element\n3405:cff2_path_param_t::move_to\\28CFF::point_t\\20const&\\29\n3406:cff1_path_param_t::move_to\\28CFF::point_t\\20const&\\29\n3407:cf2_hintmap_map\n3408:cf2_glyphpath_pushPrevElem\n3409:cf2_glyphpath_computeOffset\n3410:cf2_glyphpath_closeOpenPath\n3411:can_layer_be_drawn_as_sprite\\28SkMatrix\\20const&\\2c\\20SkISize\\20const&\\29\n3412:calculate_path_gap\\28float\\2c\\20float\\2c\\20SkPath\\20const&\\29::$_1::operator\\28\\29\\28int\\29\\20const\n3413:calc_dot_cross_cubic\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n3414:cached_mask_gamma\\28float\\2c\\20float\\2c\\20float\\29\n3415:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3416:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3417:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3418:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3419:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3420:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3421:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3422:byn$mgfn-shared$void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n3423:byn$mgfn-shared$void\\20GrGLProgramDataManager::setMatrices<2>\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n3424:byn$mgfn-shared$std::__2::vector<skia::textlayout::TextShadow\\2c\\20std::__2::allocator<skia::textlayout::TextShadow>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n3425:byn$mgfn-shared$std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__recommend\\5babi:v160004\\5d\\28unsigned\\20long\\29\\20const\n3426:byn$mgfn-shared$std::__2::unique_ptr<SkSL::SwitchCase\\2c\\20std::__2::default_delete<SkSL::SwitchCase>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n3427:byn$mgfn-shared$std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArray\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n3428:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n3429:byn$mgfn-shared$skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::find\\28int\\20const&\\29\\20const\n3430:byn$mgfn-shared$skia_private::TArray<unsigned\\20long\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n3431:byn$mgfn-shared$skia_private::TArray<\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::Geometry\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n3432:byn$mgfn-shared$skia_private::TArray<OffsetEdge\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n3433:byn$mgfn-shared$skia_private::AutoSTMalloc<4ul\\2c\\20int\\2c\\20void>::AutoSTMalloc\\28unsigned\\20long\\29\n3434:byn$mgfn-shared$skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n3435:byn$mgfn-shared$skgpu::Swizzle::RGBA\\28\\29\n3436:byn$mgfn-shared$resource_cache_mutex\\28\\29\n3437:byn$mgfn-shared$portable::sub_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3438:byn$mgfn-shared$portable::sub_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3439:byn$mgfn-shared$portable::mul_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3440:byn$mgfn-shared$portable::mul_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3441:byn$mgfn-shared$portable::mod_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3442:byn$mgfn-shared$portable::mix_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3443:byn$mgfn-shared$portable::mix_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3444:byn$mgfn-shared$portable::min_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3445:byn$mgfn-shared$portable::min_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3446:byn$mgfn-shared$portable::min_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3447:byn$mgfn-shared$portable::max_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3448:byn$mgfn-shared$portable::max_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3449:byn$mgfn-shared$portable::max_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3450:byn$mgfn-shared$portable::invsqrt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3451:byn$mgfn-shared$portable::floor_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3452:byn$mgfn-shared$portable::div_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3453:byn$mgfn-shared$portable::div_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3454:byn$mgfn-shared$portable::div_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3455:byn$mgfn-shared$portable::cmpne_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3456:byn$mgfn-shared$portable::cmpne_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3457:byn$mgfn-shared$portable::cmplt_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3458:byn$mgfn-shared$portable::cmplt_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3459:byn$mgfn-shared$portable::cmplt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3460:byn$mgfn-shared$portable::cmple_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3461:byn$mgfn-shared$portable::cmple_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3462:byn$mgfn-shared$portable::cmple_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3463:byn$mgfn-shared$portable::cmpeq_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3464:byn$mgfn-shared$portable::cmpeq_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3465:byn$mgfn-shared$portable::ceil_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3466:byn$mgfn-shared$portable::cast_to_uint_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3467:byn$mgfn-shared$portable::cast_to_int_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3468:byn$mgfn-shared$portable::cast_to_float_from_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3469:byn$mgfn-shared$portable::cast_to_float_from_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3470:byn$mgfn-shared$portable::bitwise_xor_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3471:byn$mgfn-shared$portable::bitwise_or_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3472:byn$mgfn-shared$portable::bitwise_and_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3473:byn$mgfn-shared$portable::add_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3474:byn$mgfn-shared$portable::add_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3475:byn$mgfn-shared$portable::abs_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3476:byn$mgfn-shared$paint_setColorFilter\n3477:byn$mgfn-shared$SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::pushItem\\28\\29\n3478:byn$mgfn-shared$SkRuntimeEffect::MakeForShader\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n3479:byn$mgfn-shared$Round_To_Grid\n3480:byn$mgfn-shared$LineQuadraticIntersections::addLineNearEndPoints\\28\\29\n3481:byn$mgfn-shared$GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const\n3482:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29\n3483:byn$mgfn-shared$DefaultGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n3484:bracketProcessBoundary\\28BracketData*\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n3485:bracketAddOpening\\28BracketData*\\2c\\20char16_t\\2c\\20int\\29\n3486:bool\\20std::__2::equal\\5babi:v160004\\5d<float\\20const*\\2c\\20float\\20const*\\2c\\20std::__2::__equal_to>\\28float\\20const*\\2c\\20float\\20const*\\2c\\20float\\20const*\\2c\\20std::__2::__equal_to\\29\n3487:bool\\20OT::would_match_input<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::hb_would_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool\\20\\28*\\29\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\2c\\20void\\20const*\\29\n3488:bool\\20OT::match_lookahead<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool\\20\\28*\\29\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\2c\\20void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n3489:bool\\20OT::match_backtrack<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20bool\\20\\28*\\29\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\2c\\20void\\20const*\\2c\\20unsigned\\20int*\\29\n3490:bool\\20OT::glyf_impl::Glyph::get_points<OT::glyf_accelerator_t>\\28hb_font_t*\\2c\\20OT::glyf_accelerator_t\\20const&\\2c\\20contour_point_vector_t&\\2c\\20contour_point_vector_t*\\2c\\20head_maxp_info_t*\\2c\\20unsigned\\20int*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20hb_array_t<int>\\2c\\20hb_map_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n3491:bool\\20OT::glyf_accelerator_t::get_points<OT::glyf_accelerator_t::points_aggregator_t>\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20OT::glyf_accelerator_t::points_aggregator_t\\29\\20const\n3492:bool\\20OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n3493:bool\\20OT::OffsetTo<OT::ColorLine<OT::Variable>\\2c\\20OT::IntType<unsigned\\20int\\2c\\203u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n3494:bool\\20OT::OffsetTo<OT::ColorLine<OT::NoVariable>\\2c\\20OT::IntType<unsigned\\20int\\2c\\203u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n3495:bool\\20OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned\\20char\\2c\\201u>>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20false>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n3496:blitrect\\28SkBlitter*\\2c\\20SkIRect\\20const&\\29\n3497:blit_single_alpha\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n3498:blit_aaa_trapezoid_row\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n3499:atan\n3500:append_index_uv_varyings\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrGLSLVarying*\\2c\\20GrGLSLVarying*\\2c\\20GrGLSLVarying*\\29\n3501:antifillrect\\28SkRect\\20const&\\2c\\20SkBlitter*\\29\n3502:af_property_get_face_globals\n3503:af_latin_hints_link_segments\n3504:af_latin_compute_stem_width\n3505:af_latin_align_linked_edge\n3506:af_iup_interp\n3507:af_glyph_hints_save\n3508:af_glyph_hints_done\n3509:af_cjk_align_linked_edge\n3510:add_quad\\28SkPoint\\20const*\\2c\\20skia_private::TArray<PathSegment\\2c\\20true>*\\29\n3511:acosf\n3512:acos\n3513:aaa_fill_path\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n3514:a_swap\n3515:a_store\n3516:a_cas_p.9042\n3517:_iup_worker_interpolate\n3518:_hb_head_t<bool\\2c\\20decltype\\28impl\\28std::forward<find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29&>\\28fp\\29\\2c\\20std::forward<hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>\\28fp0\\29\\2c\\20\\28hb_priority<16u>\\29\\28\\29\\29\\29>::type\\20$_14::operator\\28\\29<find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29&\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>\\28find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29&\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>&&\\29\\20const\n3519:_hb_font_adopt_var_coords\\28hb_font_t*\\2c\\20int*\\2c\\20float*\\2c\\20unsigned\\20int\\29\n3520:_get_path\\28OT::cff1::accelerator_t\\20const*\\2c\\20hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_draw_session_t&\\2c\\20bool\\2c\\20CFF::point_t*\\29\n3521:_get_bounds\\28OT::cff1::accelerator_t\\20const*\\2c\\20unsigned\\20int\\2c\\20bounds_t&\\2c\\20bool\\29\n3522:__trunctfdf2\n3523:__towrite\n3524:__toread\n3525:__tl_unlock\n3526:__tl_lock\n3527:__timedwait_cp\n3528:__subtf3\n3529:__strchrnul\n3530:__rem_pio2f\n3531:__rem_pio2\n3532:__pthread_mutex_trylock\n3533:__overflow\n3534:__math_uflowf\n3535:__math_oflowf\n3536:__fwritex\n3537:__cxxabiv1::__class_type_info::process_static_type_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n3538:__cxxabiv1::__class_type_info::process_static_type_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\29\\20const\n3539:__cxxabiv1::__class_type_info::process_found_base_class\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n3540:__cxxabiv1::__base_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n3541:\\28anonymous\\20namespace\\29::split_conic\\28SkPoint\\20const*\\2c\\20SkConic*\\2c\\20float\\29\n3542:\\28anonymous\\20namespace\\29::single_pass_shape\\28GrStyledShape\\20const&\\29\n3543:\\28anonymous\\20namespace\\29::shift_left\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20int\\29\n3544:\\28anonymous\\20namespace\\29::shape_contains_rect\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\n3545:\\28anonymous\\20namespace\\29::set_gl_stencil\\28GrGLInterface\\20const*\\2c\\20GrStencilSettings::Face\\20const&\\2c\\20unsigned\\20int\\29\n3546:\\28anonymous\\20namespace\\29::make_blend\\28sk_sp<SkBlender>\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\2c\\20std::__2::optional<SkV4>\\2c\\20bool\\29::$_0::operator\\28\\29\\28sk_sp<SkImageFilter>\\29\\20const\n3547:\\28anonymous\\20namespace\\29::get_tile_count\\28SkIRect\\20const&\\2c\\20int\\29\n3548:\\28anonymous\\20namespace\\29::generateGlyphPathStatic\\28FT_FaceRec_*\\2c\\20SkPath*\\29\n3549:\\28anonymous\\20namespace\\29::generateFacePathCOLRv1\\28FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20SkPath*\\29\n3550:\\28anonymous\\20namespace\\29::gather_lines_and_quads\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<int\\2c\\20true>*\\2c\\20skia_private::TArray<float\\2c\\20true>*\\29::$_0::operator\\28\\29\\28SkPoint\\20const*\\2c\\20bool\\29\\20const\n3551:\\28anonymous\\20namespace\\29::convert_noninflect_cubic_to_quads_with_constraint\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPathFirstDirection\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20int\\29\n3552:\\28anonymous\\20namespace\\29::convert_noninflect_cubic_to_quads\\28SkPoint\\20const*\\2c\\20float\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n3553:\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const\n3554:\\28anonymous\\20namespace\\29::calculate_colors\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::MaskFormat\\2c\\20GrPaint*\\29\n3555:\\28anonymous\\20namespace\\29::bloat_quad\\28SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20\\28anonymous\\20namespace\\29::BezierVertex*\\29\n3556:\\28anonymous\\20namespace\\29::TriangulatingPathOp::CreateMesh\\28GrMeshDrawTarget*\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\29\n3557:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::~TransformedMaskSubRun\\28\\29.1\n3558:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n3559:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::glyphs\\28\\29\\20const\n3560:\\28anonymous\\20namespace\\29::StaticVertexAllocator::~StaticVertexAllocator\\28\\29\n3561:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::radii\\28skif::Mapping\\20const&\\29\\20const\n3562:\\28anonymous\\20namespace\\29::SkFTGeometrySink::goingTo\\28FT_Vector_\\20const*\\29\n3563:\\28anonymous\\20namespace\\29::SkCropImageFilter::cropRect\\28skif::Mapping\\20const&\\29\\20const\n3564:\\28anonymous\\20namespace\\29::ShapedRun::~ShapedRun\\28\\29\n3565:\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29\n3566:\\28anonymous\\20namespace\\29::PathSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n3567:\\28anonymous\\20namespace\\29::MemoryPoolAccessor::pool\\28\\29\\20const\n3568:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n3569:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::programInfo\\28\\29\n3570:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n3571:TT_Vary_Apply_Glyph_Deltas\n3572:TT_Set_Var_Design\n3573:TT_Get_VMetrics\n3574:SkWriter32::writeRegion\\28SkRegion\\20const&\\29\n3575:SkVertices::Sizes::Sizes\\28SkVertices::Desc\\20const&\\29\n3576:SkVertices::MakeCopy\\28SkVertices::VertexMode\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20short\\20const*\\29\n3577:SkVertices::Builder::~Builder\\28\\29\n3578:SkVertices::Builder::detach\\28\\29\n3579:SkUnitScalarClampToByte\\28float\\29\n3580:SkUTF::ToUTF16\\28int\\2c\\20unsigned\\20short*\\29\n3581:SkTypeface_FreeType::~SkTypeface_FreeType\\28\\29\n3582:SkTreatAsSprite\\28SkMatrix\\20const&\\2c\\20SkISize\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20bool\\29\n3583:SkTextBlobBuilder::updateDeferredBounds\\28\\29\n3584:SkTextBlobBuilder::allocInternal\\28SkFont\\20const&\\2c\\20SkTextBlob::GlyphPositioning\\2c\\20int\\2c\\20int\\2c\\20SkPoint\\2c\\20SkRect\\20const*\\29\n3585:SkTextBlob::RunRecord::textSizePtr\\28\\29\\20const\n3586:SkTSpan::markCoincident\\28\\29\n3587:SkTSect::markSpanGone\\28SkTSpan*\\29\n3588:SkTSect::computePerpendiculars\\28SkTSect*\\2c\\20SkTSpan*\\2c\\20SkTSpan*\\29\n3589:SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::insert\\28skgpu::ScratchKey\\20const&\\2c\\20GrGpuResource*\\29\n3590:SkTDStorage::moveTail\\28int\\2c\\20int\\2c\\20int\\29\n3591:SkTDStorage::calculateSizeOrDie\\28int\\29\n3592:SkTDArray<unsigned\\20short>::append\\28int\\29\n3593:SkTDArray<unsigned\\20short>::append\\28\\29\n3594:SkTConic::hullIntersects\\28SkDConic\\20const&\\2c\\20bool*\\29\\20const\n3595:SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::pop_back\\28\\29\n3596:SkSurface_Base::~SkSurface_Base\\28\\29\n3597:SkSurface_Base::aboutToDraw\\28SkSurface::ContentChangeMode\\29\n3598:SkStrokeRec::init\\28SkPaint\\20const&\\2c\\20SkPaint::Style\\2c\\20float\\29\n3599:SkStrokeRec::getInflationRadius\\28\\29\\20const\n3600:SkString::printVAList\\28char\\20const*\\2c\\20void*\\29\n3601:SkStrikeSpec::SkStrikeSpec\\28SkStrikeSpec&&\\29\n3602:SkStrikeSpec::MakeWithNoDevice\\28SkFont\\20const&\\2c\\20SkPaint\\20const*\\29\n3603:SkStrikeSpec::MakePath\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\29\n3604:SkStrikeCache::findOrCreateStrike\\28SkStrikeSpec\\20const&\\29\n3605:SkStrike::prepareForPath\\28SkGlyph*\\29\n3606:SkSpriteBlitter::SkSpriteBlitter\\28SkPixmap\\20const&\\29\n3607:SkSpecialImage::~SkSpecialImage\\28\\29\n3608:SkShapers::HB::ScriptRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\29\n3609:SkShaper::TrivialRunIterator<SkShaper::BiDiRunIterator>::endOfCurrentRun\\28\\29\\20const\n3610:SkShaper::TrivialRunIterator<SkShaper::BiDiRunIterator>::consume\\28\\29\n3611:SkShaper::TrivialRunIterator<SkShaper::BiDiRunIterator>::atEnd\\28\\29\\20const\n3612:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\\28\\29\n3613:SkShaders::MatrixRec::MatrixRec\\28SkMatrix\\20const&\\29\n3614:SkShaderUtils::GLSLPrettyPrint::tabString\\28\\29\n3615:SkShaderUtils::GLSLPrettyPrint::appendChar\\28char\\29\n3616:SkScanClipper::~SkScanClipper\\28\\29\n3617:SkScanClipper::SkScanClipper\\28SkBlitter*\\2c\\20SkRegion\\20const*\\2c\\20SkIRect\\20const&\\2c\\20bool\\2c\\20bool\\29\n3618:SkScan::HairLineRgn\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n3619:SkScan::FillTriangle\\28SkPoint\\20const*\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3620:SkScan::FillPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3621:SkScan::FillIRect\\28SkIRect\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3622:SkScan::AntiHairLine\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n3623:SkScan::AntiHairLineRgn\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n3624:SkScan::AntiFillXRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n3625:SkScan::AntiFillPath\\28SkPath\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkBlitter*\\2c\\20bool\\29\n3626:SkScalerContext_FreeType::updateGlyphBoundsIfSubpixel\\28SkGlyph\\20const&\\2c\\20SkRect*\\2c\\20bool\\29\n3627:SkScalerContextFTUtils::drawSVGGlyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n3628:SkScalerContext::~SkScalerContext\\28\\29\n3629:SkSamplingOptions::operator!=\\28SkSamplingOptions\\20const&\\29\\20const\n3630:SkSTArenaAlloc<2048ul>::SkSTArenaAlloc\\28unsigned\\20long\\29\n3631:SkSL::type_is_valid_for_coords\\28SkSL::Type\\20const&\\29\n3632:SkSL::simplify_negation\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\29\n3633:SkSL::simplify_matrix_multiplication\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3634:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n3635:SkSL::replace_empty_with_nop\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29\n3636:SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument::ReorderedArgument\\28ReorderedArgument&&\\29\n3637:SkSL::find_generic_index\\28SkSL::Type\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20bool\\29\n3638:SkSL::evaluate_intrinsic_numeric\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\29\n3639:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\\28\\29\n3640:SkSL::coalesce_n_way_vector\\28SkSL::Expression\\20const*\\2c\\20SkSL::Expression\\20const*\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n3641:SkSL::check_main_signature\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n3642:SkSL::build_argument_type_list\\28SkSpan<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const>\\29\n3643:SkSL::\\28anonymous\\20namespace\\29::SwitchCaseContainsExit::visitStatement\\28SkSL::Statement\\20const&\\29\n3644:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::returnsInputAlpha\\28SkSL::Expression\\20const&\\29\n3645:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::~FinalizationVisitor\\28\\29\n3646:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::~ES2IndexingVisitor\\28\\29\n3647:SkSL::\\28anonymous\\20namespace\\29::ConstantExpressionVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n3648:SkSL::Variable::~Variable\\28\\29\n3649:SkSL::Variable::Make\\28SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20bool\\2c\\20SkSL::VariableStorage\\29\n3650:SkSL::Variable::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::VariableStorage\\29\n3651:SkSL::VarDeclaration::~VarDeclaration\\28\\29\n3652:SkSL::VarDeclaration::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Variable*\\2c\\20SkSL::Type\\20const*\\2c\\20int\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n3653:SkSL::Type::isStorageTexture\\28\\29\\20const\n3654:SkSL::Type::convertArraySize\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20long\\20long\\29\\20const\n3655:SkSL::Type::MakeSamplerType\\28char\\20const*\\2c\\20SkSL::Type\\20const&\\29\n3656:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\\28\\29\n3657:SkSL::Transform::EliminateDeadGlobalVariables\\28SkSL::Program&\\29::$_2::operator\\28\\29\\28SkSL::ProgramElement\\20const&\\29\\20const\n3658:SkSL::TernaryExpression::~TernaryExpression\\28\\29\n3659:SkSL::SymbolTable::SymbolKey::operator==\\28SkSL::SymbolTable::SymbolKey\\20const&\\29\\20const\n3660:SkSL::StructType::slotCount\\28\\29\\20const\n3661:SkSL::SingleArgumentConstructor::~SingleArgumentConstructor\\28\\29\n3662:SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\\28\\29\n3663:SkSL::RP::SlotManager::createSlots\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20bool\\29\n3664:SkSL::RP::SlotManager::addSlotDebugInfoForGroup\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::Position\\2c\\20int*\\2c\\20bool\\29\n3665:SkSL::RP::Program::makeStages\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20SkSpan<float\\20const>\\2c\\20SkSL::RP::Program::SlotData\\20const&\\29\\20const::$_4::operator\\28\\29\\28\\29\\20const\n3666:SkSL::RP::Program::makeStages\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20SkSpan<float\\20const>\\2c\\20SkSL::RP::Program::SlotData\\20const&\\29\\20const::$_1::operator\\28\\29\\28int\\29\\20const\n3667:SkSL::RP::Program::appendCopySlotsMasked\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\\20const\n3668:SkSL::RP::LValueSlice::~LValueSlice\\28\\29\n3669:SkSL::RP::Generator::pushTernaryExpression\\28SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n3670:SkSL::RP::Generator::pushStructuredComparison\\28SkSL::RP::LValue*\\2c\\20SkSL::Operator\\2c\\20SkSL::RP::LValue*\\2c\\20SkSL::Type\\20const&\\29\n3671:SkSL::RP::Generator::pushPrefixExpression\\28SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n3672:SkSL::RP::Generator::pushMatrixMultiply\\28SkSL::RP::LValue*\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3673:SkSL::RP::Generator::pushAbsFloatIntrinsic\\28int\\29\n3674:SkSL::RP::Generator::needsReturnMask\\28SkSL::FunctionDefinition\\20const*\\29\n3675:SkSL::RP::Generator::needsFunctionResultSlots\\28SkSL::FunctionDefinition\\20const*\\29\n3676:SkSL::RP::Generator::foldWithMultiOp\\28SkSL::RP::BuilderOp\\2c\\20int\\29\n3677:SkSL::RP::Generator::GetTypedOp\\28SkSL::Type\\20const&\\2c\\20SkSL::RP::Generator::TypedOps\\20const&\\29\n3678:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\\28\\29\n3679:SkSL::RP::Builder::select\\28int\\29\n3680:SkSL::RP::Builder::push_uniform\\28SkSL::RP::SlotRange\\29\n3681:SkSL::RP::Builder::pop_loop_mask\\28\\29\n3682:SkSL::RP::Builder::merge_condition_mask\\28\\29\n3683:SkSL::RP::Builder::branch_if_no_active_lanes_on_stack_top_equal\\28int\\2c\\20int\\29\n3684:SkSL::RP::AutoStack&\\20std::__2::optional<SkSL::RP::AutoStack>::emplace\\5babi:v160004\\5d<SkSL::RP::Generator*&\\2c\\20void>\\28SkSL::RP::Generator*&\\29\n3685:SkSL::ProgramUsage::add\\28SkSL::ProgramElement\\20const&\\29\n3686:SkSL::PipelineStage::PipelineStageCodeGenerator::modifierString\\28SkSL::ModifierFlags\\29\n3687:SkSL::PipelineStage::ConvertProgram\\28SkSL::Program\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20SkSL::PipelineStage::Callbacks*\\29\n3688:SkSL::Parser::unsizedArrayType\\28SkSL::Type\\20const*\\2c\\20SkSL::Position\\29\n3689:SkSL::Parser::unaryExpression\\28\\29\n3690:SkSL::Parser::swizzle\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n3691:SkSL::Parser::poison\\28SkSL::Position\\29\n3692:SkSL::Parser::checkIdentifier\\28SkSL::Token*\\29\n3693:SkSL::Parser::block\\28bool\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>*\\29\n3694:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\\28\\29\n3695:SkSL::Operator::getBinaryPrecedence\\28\\29\\20const\n3696:SkSL::MultiArgumentConstructor::~MultiArgumentConstructor\\28\\29\n3697:SkSL::ModuleLoader::loadVertexModule\\28SkSL::Compiler*\\29\n3698:SkSL::ModuleLoader::loadGPUModule\\28SkSL::Compiler*\\29\n3699:SkSL::ModuleLoader::loadFragmentModule\\28SkSL::Compiler*\\29\n3700:SkSL::ModifierFlags::checkPermittedFlags\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\29\\20const\n3701:SkSL::Mangler::uniqueName\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::SymbolTable*\\29\n3702:SkSL::LiteralType::slotType\\28unsigned\\20long\\29\\20const\n3703:SkSL::Literal::MakeFloat\\28SkSL::Position\\2c\\20float\\2c\\20SkSL::Type\\20const*\\29\n3704:SkSL::Literal::MakeBool\\28SkSL::Position\\2c\\20bool\\2c\\20SkSL::Type\\20const*\\29\n3705:SkSL::Layout::checkPermittedLayout\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkEnumBitMask<SkSL::LayoutFlag>\\29\\20const\n3706:SkSL::IfStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n3707:SkSL::IRHelpers::Binary\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\\20const\n3708:SkSL::GlobalVarDeclaration::~GlobalVarDeclaration\\28\\29.1\n3709:SkSL::GlobalVarDeclaration::~GlobalVarDeclaration\\28\\29\n3710:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\\28\\29\n3711:SkSL::GLSLCodeGenerator::writeLiteral\\28SkSL::Literal\\20const&\\29\n3712:SkSL::GLSLCodeGenerator::writeFunctionDeclaration\\28SkSL::FunctionDeclaration\\20const&\\29\n3713:SkSL::GLSLCodeGenerator::shouldRewriteVoidTypedFunctions\\28SkSL::FunctionDeclaration\\20const*\\29\\20const\n3714:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::~Finalizer\\28\\29\n3715:SkSL::ForStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::LoopUnrollInfo\\2c\\20std::__2::default_delete<SkSL::LoopUnrollInfo>>\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n3716:SkSL::Expression::isIncomplete\\28SkSL::Context\\20const&\\29\\20const\n3717:SkSL::Expression::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n3718:SkSL::DebugTracePriv::~DebugTracePriv\\28\\29\n3719:SkSL::ConstructorArrayCast::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n3720:SkSL::ConstructorArray::~ConstructorArray\\28\\29\n3721:SkSL::ConstantFolder::GetConstantValueOrNull\\28SkSL::Expression\\20const&\\29\n3722:SkSL::Compiler::runInliner\\28SkSL::Inliner*\\2c\\20std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::ProgramUsage*\\29\n3723:SkSL::Block::~Block\\28\\29\n3724:SkSL::BinaryExpression::~BinaryExpression\\28\\29\n3725:SkSL::BinaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Type\\20const*\\29\n3726:SkSL::Analysis::GetReturnComplexity\\28SkSL::FunctionDefinition\\20const&\\29\n3727:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::~ProgramSizeVisitor\\28\\29\n3728:SkSL::Analysis::CallsColorTransformIntrinsics\\28SkSL::Program\\20const&\\29\n3729:SkSL::AliasType::bitWidth\\28\\29\\20const\n3730:SkRuntimeShaderBuilder::~SkRuntimeShaderBuilder\\28\\29\n3731:SkRuntimeShaderBuilder::makeShader\\28SkMatrix\\20const*\\29\\20const\n3732:SkRuntimeShaderBuilder::SkRuntimeShaderBuilder\\28sk_sp<SkRuntimeEffect>\\29\n3733:SkRuntimeShader::uniformData\\28SkColorSpace\\20const*\\29\\20const\n3734:SkRuntimeEffectPriv::VarAsUniform\\28SkSL::Variable\\20const&\\2c\\20SkSL::Context\\20const&\\2c\\20unsigned\\20long*\\29\n3735:SkRuntimeEffectBuilder::BuilderChild&\\20SkRuntimeEffectBuilder::BuilderChild::operator=<SkShader>\\28sk_sp<SkShader>\\29\n3736:SkRuntimeEffect::makeShader\\28sk_sp<SkData\\20const>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\2c\\20SkMatrix\\20const*\\29\\20const\n3737:SkRuntimeEffect::findChild\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n3738:SkRuntimeEffect::MakeForShader\\28SkString\\29\n3739:SkRgnBuilder::~SkRgnBuilder\\28\\29\n3740:SkResourceCache::checkMessages\\28\\29\n3741:SkResourceCache::Key::operator==\\28SkResourceCache::Key\\20const&\\29\\20const\n3742:SkRegion::translate\\28int\\2c\\20int\\2c\\20SkRegion*\\29\\20const\n3743:SkRegion::op\\28SkRegion\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkRegion::Op\\29\n3744:SkRegion::RunHead::findScanline\\28int\\29\\20const\n3745:SkRegion::RunHead::Alloc\\28int\\29\n3746:SkReduceOrder::Cubic\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n3747:SkRect::offset\\28float\\2c\\20float\\29\n3748:SkRect::inset\\28float\\2c\\20float\\29\n3749:SkRect*\\20SkRecorder::copy<SkRect>\\28SkRect\\20const*\\29\n3750:SkRecords::PreCachedPath::PreCachedPath\\28SkPath\\20const&\\29\n3751:SkRecords::FillBounds::pushSaveBlock\\28SkPaint\\20const*\\29\n3752:SkRecorder::~SkRecorder\\28\\29\n3753:SkRecordDraw\\28SkRecord\\20const&\\2c\\20SkCanvas*\\2c\\20SkPicture\\20const*\\20const*\\2c\\20SkDrawable*\\20const*\\2c\\20int\\2c\\20SkBBoxHierarchy\\20const*\\2c\\20SkPicture::AbortCallback*\\29\n3754:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\\28\\29\n3755:SkRasterPipelineBlitter::blitRectWithTrace\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20bool\\29\n3756:SkRasterPipelineBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29::$_0::operator\\28\\29\\28int\\2c\\20SkRasterPipeline_MemoryCtx*\\29\\20const\n3757:SkRasterPipelineBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n3758:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29\n3759:SkRasterPipeline::appendStore\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n3760:SkRasterClip::op\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n3761:SkRasterClip::convertToAA\\28\\29\n3762:SkRRectPriv::ConservativeIntersect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29::$_1::operator\\28\\29\\28SkRect\\20const&\\2c\\20SkRRect::Corner\\29\\20const\n3763:SkRRectPriv::ConservativeIntersect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29\n3764:SkRRect::scaleRadii\\28\\29\n3765:SkRRect::AreRectAndRadiiValid\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\29\n3766:SkRGBA4f<\\28SkAlphaType\\292>*\\20SkArenaAlloc::makeArray<SkRGBA4f<\\28SkAlphaType\\292>>\\28unsigned\\20long\\29\n3767:SkQuadraticEdge::updateQuadratic\\28\\29\n3768:SkQuadConstruct::initWithStart\\28SkQuadConstruct*\\29\n3769:SkQuadConstruct::initWithEnd\\28SkQuadConstruct*\\29\n3770:SkPointPriv::DistanceToLineBetweenSqd\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPointPriv::Side*\\29\n3771:SkPointPriv::CanNormalize\\28float\\2c\\20float\\29\n3772:SkPoint::setNormalize\\28float\\2c\\20float\\29\n3773:SkPoint::setLength\\28float\\2c\\20float\\2c\\20float\\29\n3774:SkPixmap::setColorSpace\\28sk_sp<SkColorSpace>\\29\n3775:SkPixmap::rowBytesAsPixels\\28\\29\\20const\n3776:SkPixelRef::getGenerationID\\28\\29\\20const\n3777:SkPictureRecorder::~SkPictureRecorder\\28\\29\n3778:SkPictureRecorder::SkPictureRecorder\\28\\29\n3779:SkPicture::~SkPicture\\28\\29\n3780:SkPerlinNoiseShader::PaintingData::random\\28\\29\n3781:SkPathWriter::~SkPathWriter\\28\\29\n3782:SkPathWriter::update\\28SkOpPtT\\20const*\\29\n3783:SkPathWriter::lineTo\\28\\29\n3784:SkPathWriter::SkPathWriter\\28SkPath&\\29\n3785:SkPathStroker::strokeCloseEnough\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\\20const\n3786:SkPathStroker::setRayPts\\28SkPoint\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n3787:SkPathStroker::quadPerpRay\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n3788:SkPathStroker::finishContour\\28bool\\2c\\20bool\\29\n3789:SkPathStroker::conicPerpRay\\28SkConic\\20const&\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n3790:SkPathPriv::IsRectContour\\28SkPath\\20const&\\2c\\20bool\\2c\\20int*\\2c\\20SkPoint\\20const**\\2c\\20bool*\\2c\\20SkPathDirection*\\2c\\20SkRect*\\29\n3791:SkPathPriv::AddGenIDChangeListener\\28SkPath\\20const&\\2c\\20sk_sp<SkIDChangeListener>\\29\n3792:SkPathEffect::filterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n3793:SkPathBuilder::quadTo\\28SkPoint\\2c\\20SkPoint\\29\n3794:SkPathBuilder::moveTo\\28float\\2c\\20float\\29\n3795:SkPathBuilder::cubicTo\\28SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\29\n3796:SkPathBuilder::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n3797:SkPath::setLastPt\\28float\\2c\\20float\\29\n3798:SkPath::reversePathTo\\28SkPath\\20const&\\29\n3799:SkPath::rQuadTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3800:SkPath::isLastContourClosed\\28\\29\\20const\n3801:SkPath::cubicTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3802:SkPath::contains\\28float\\2c\\20float\\29\\20const\n3803:SkPath::conicTo\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n3804:SkPath::arcTo\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29::$_0::operator\\28\\29\\28SkPoint\\20const&\\29\\20const\n3805:SkPath::addPath\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath::AddPathMode\\29\n3806:SkPath::addOval\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n3807:SkPath::Rect\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n3808:SkPath::Iter::autoClose\\28SkPoint*\\29\n3809:SkPath*\\20SkTLazy<SkPath>::init<>\\28\\29\n3810:SkPaintToGrPaintReplaceShader\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n3811:SkPaint::operator=\\28SkPaint&&\\29\n3812:SkPaint::getBlendMode_or\\28SkBlendMode\\29\\20const\n3813:SkOpSpanBase::checkForCollapsedCoincidence\\28\\29\n3814:SkOpSpan::setWindSum\\28int\\29\n3815:SkOpSegment::updateWindingReverse\\28SkOpAngle\\20const*\\29\n3816:SkOpSegment::match\\28SkOpPtT\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\2c\\20SkPoint\\20const&\\29\\20const\n3817:SkOpSegment::markWinding\\28SkOpSpan*\\2c\\20int\\2c\\20int\\29\n3818:SkOpSegment::markAngle\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkOpAngle\\20const*\\2c\\20SkOpSpanBase**\\29\n3819:SkOpSegment::markAngle\\28int\\2c\\20int\\2c\\20SkOpAngle\\20const*\\2c\\20SkOpSpanBase**\\29\n3820:SkOpSegment::markAndChaseWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int\\2c\\20int\\2c\\20SkOpSpanBase**\\29\n3821:SkOpSegment::markAllDone\\28\\29\n3822:SkOpSegment::dSlopeAtT\\28double\\29\\20const\n3823:SkOpSegment::addT\\28double\\2c\\20SkPoint\\20const&\\29\n3824:SkOpSegment::activeWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\29\n3825:SkOpPtT::oppPrev\\28SkOpPtT\\20const*\\29\\20const\n3826:SkOpPtT::contains\\28SkOpSegment\\20const*\\29\\20const\n3827:SkOpPtT::Overlaps\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const**\\2c\\20SkOpPtT\\20const**\\29\n3828:SkOpEdgeBuilder::closeContour\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n3829:SkOpCoincidence::expand\\28\\29\n3830:SkOpCoincidence::Ordered\\28SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\29\n3831:SkOpCoincidence::Ordered\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\29\n3832:SkOpAngle::orderable\\28SkOpAngle*\\29\n3833:SkOpAngle::lineOnOneSide\\28SkDPoint\\20const&\\2c\\20SkDVector\\20const&\\2c\\20SkOpAngle\\20const*\\2c\\20bool\\29\\20const\n3834:SkOpAngle::computeSector\\28\\29\n3835:SkNoPixelsDevice::SkNoPixelsDevice\\28SkIRect\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20sk_sp<SkColorSpace>\\29\n3836:SkMipmapAccessor::SkMipmapAccessor\\28SkImage_Base\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode\\29::$_0::operator\\28\\29\\28\\29\\20const\n3837:SkMessageBus<sktext::gpu::TextBlobRedrawCoordinator::PurgeBlobMessage\\2c\\20unsigned\\20int\\2c\\20true>::Get\\28\\29\n3838:SkMessageBus<skgpu::UniqueKeyInvalidatedMessage\\2c\\20unsigned\\20int\\2c\\20true>::Get\\28\\29\n3839:SkMessageBus<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20GrDirectContext::DirectContextID\\2c\\20false>::Get\\28\\29\n3840:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29.1\n3841:SkMatrixPriv::InverseMapRect\\28SkMatrix\\20const&\\2c\\20SkRect*\\2c\\20SkRect\\20const&\\29\n3842:SkMatrix::setPolyToPoly\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n3843:SkMatrix::preservesRightAngles\\28float\\29\\20const\n3844:SkMatrix::mapRectToQuad\\28SkPoint*\\2c\\20SkRect\\20const&\\29\\20const\n3845:SkMatrix::mapRectScaleTranslate\\28SkRect*\\2c\\20SkRect\\20const&\\29\\20const\n3846:SkMatrix::getMinMaxScales\\28float*\\29\\20const\n3847:SkMatrix::getMapXYProc\\28\\29\\20const\n3848:SkMaskBuilder::PrepareDestination\\28int\\2c\\20int\\2c\\20SkMask\\20const&\\29\n3849:SkLineParameters::cubicEndPoints\\28SkDCubic\\20const&\\2c\\20int\\2c\\20int\\29\n3850:SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry::~Entry\\28\\29\n3851:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::reset\\28\\29\n3852:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry::~Entry\\28\\29\n3853:SkJSONWriter::separator\\28bool\\29\n3854:SkJSONWriter::multiline\\28\\29\\20const\n3855:SkJSONWriter::flush\\28\\29\n3856:SkJSONWriter::appendS32\\28int\\29\n3857:SkIntersections::intersectRay\\28SkDQuad\\20const&\\2c\\20SkDLine\\20const&\\29\n3858:SkIntersections::intersectRay\\28SkDLine\\20const&\\2c\\20SkDLine\\20const&\\29\n3859:SkIntersections::intersectRay\\28SkDCubic\\20const&\\2c\\20SkDLine\\20const&\\29\n3860:SkIntersections::intersectRay\\28SkDConic\\20const&\\2c\\20SkDLine\\20const&\\29\n3861:SkIntersections::computePoints\\28SkDLine\\20const&\\2c\\20int\\29\n3862:SkIntersections::cleanUpParallelLines\\28bool\\29\n3863:SkImage_Raster::SkImage_Raster\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20int\\29\n3864:SkImage_Lazy::~SkImage_Lazy\\28\\29.1\n3865:SkImage_Lazy::Validator::~Validator\\28\\29\n3866:SkImage_Lazy::Validator::Validator\\28sk_sp<SharedGenerator>\\2c\\20SkColorType\\20const*\\2c\\20sk_sp<SkColorSpace>\\29\n3867:SkImage_Lazy::SkImage_Lazy\\28SkImage_Lazy::Validator*\\29\n3868:SkImage_Ganesh::~SkImage_Ganesh\\28\\29\n3869:SkImage_Ganesh::ProxyChooser::chooseProxy\\28GrRecordingContext*\\29\n3870:SkImage_Base::isYUVA\\28\\29\\20const\n3871:SkImage_Base::isGraphiteBacked\\28\\29\\20const\n3872:SkImageShader::MakeSubset\\28sk_sp<SkImage>\\2c\\20SkRect\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\29\n3873:SkImageShader::CubicResamplerMatrix\\28float\\2c\\20float\\29\n3874:SkImageInfo::minRowBytes64\\28\\29\\20const\n3875:SkImageInfo::makeAlphaType\\28SkAlphaType\\29\\20const\n3876:SkImageInfo::MakeN32Premul\\28SkISize\\29\n3877:SkImageGenerator::getPixels\\28SkPixmap\\20const&\\29\n3878:SkImageFilters::Blend\\28SkBlendMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n3879:SkImageFilter_Base::affectsTransparentBlack\\28\\29\\20const\n3880:SkImageFilterCacheKey::operator==\\28SkImageFilterCacheKey\\20const&\\29\\20const\n3881:SkImage::readPixels\\28GrDirectContext*\\2c\\20SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n3882:SkImage::peekPixels\\28SkPixmap*\\29\\20const\n3883:SkImage::makeShader\\28SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\29\\20const\n3884:SkIRect::outset\\28int\\2c\\20int\\29\n3885:SkIRect::offset\\28SkIPoint\\20const&\\29\n3886:SkIRect::containsNoEmptyCheck\\28SkIRect\\20const&\\29\\20const\n3887:SkIRect::MakeXYWH\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n3888:SkIDChangeListener::List::~List\\28\\29\n3889:SkIDChangeListener::List::add\\28sk_sp<SkIDChangeListener>\\29\n3890:SkGradientShader::MakeSweep\\28float\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n3891:SkGradientShader::MakeRadial\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n3892:SkGradientBaseShader::AppendInterpolatedToDstStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkColorSpace\\20const*\\2c\\20SkColorSpace\\20const*\\29\n3893:SkGlyph::mask\\28\\29\\20const\n3894:SkFontScanner_FreeType::~SkFontScanner_FreeType\\28\\29\n3895:SkFontScanner_FreeType::openFace\\28SkStreamAsset*\\2c\\20int\\2c\\20FT_StreamRec_*\\29\\20const\n3896:SkFontScanner_FreeType::GetAxes\\28FT_FaceRec_*\\2c\\20skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>*\\29\n3897:SkFontPriv::ApproximateTransformedTextSize\\28SkFont\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const&\\29\n3898:SkFontMgr::matchFamily\\28char\\20const*\\29\\20const\n3899:SkFont::getWidthsBounds\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20float*\\2c\\20SkRect*\\2c\\20SkPaint\\20const*\\29\\20const\n3900:SkFont::getBounds\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20SkRect*\\2c\\20SkPaint\\20const*\\29\\20const\n3901:SkFindCubicMaxCurvature\\28SkPoint\\20const*\\2c\\20float*\\29\n3902:SkFILEStream::SkFILEStream\\28std::__2::shared_ptr<_IO_FILE>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n3903:SkEmptyFontMgr::onMatchFamilyStyleCharacter\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\2c\\20char\\20const**\\2c\\20int\\2c\\20int\\29\\20const\n3904:SkEdgeClipper::appendQuad\\28SkPoint\\20const*\\2c\\20bool\\29\n3905:SkEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkIRect\\20const*\\2c\\20int\\29\n3906:SkDynamicMemoryWStream::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n3907:SkDrawTreatAAStrokeAsHairline\\28float\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n3908:SkDrawBase::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n3909:SkDrawBase::drawDevicePoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\2c\\20SkDevice*\\29\\20const\n3910:SkDevice::setOrigin\\28SkM44\\20const&\\2c\\20int\\2c\\20int\\29\n3911:SkDevice::getRelativeTransform\\28SkDevice\\20const&\\29\\20const\n3912:SkDevice::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n3913:SkDevice::drawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n3914:SkDevice::drawFilteredImage\\28skif::Mapping\\20const&\\2c\\20SkSpecialImage*\\2c\\20SkColorType\\2c\\20SkImageFilter\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n3915:SkDevice::SkDevice\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n3916:SkData::MakeZeroInitialized\\28unsigned\\20long\\29\n3917:SkData::MakeWithoutCopy\\28void\\20const*\\2c\\20unsigned\\20long\\29\n3918:SkDQuad::FindExtrema\\28double\\20const*\\2c\\20double*\\29\n3919:SkDCubic::subDivide\\28double\\2c\\20double\\29\\20const\n3920:SkDCubic::searchRoots\\28double*\\2c\\20int\\2c\\20double\\2c\\20SkDCubic::SearchAxis\\2c\\20double*\\29\\20const\n3921:SkDCubic::monotonicInX\\28\\29\\20const\n3922:SkDCubic::findInflections\\28double*\\29\\20const\n3923:SkDConic::FindExtrema\\28double\\20const*\\2c\\20float\\2c\\20double*\\29\n3924:SkCubicEdge::updateCubic\\28\\29\n3925:SkContourMeasureIter::next\\28\\29\n3926:SkContourMeasureIter::Impl::compute_quad_segs\\28SkPoint\\20const*\\2c\\20float\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n3927:SkContourMeasureIter::Impl::compute_cubic_segs\\28SkPoint\\20const*\\2c\\20float\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\n3928:SkContourMeasureIter::Impl::compute_conic_segs\\28SkConic\\20const&\\2c\\20float\\2c\\20int\\2c\\20SkPoint\\20const&\\2c\\20int\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20int\\29\n3929:SkContourMeasure::distanceToSegment\\28float\\2c\\20float*\\29\\20const\n3930:SkConic::evalAt\\28float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\\20const\n3931:SkConic::evalAt\\28float\\29\\20const\n3932:SkConic::TransformW\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkMatrix\\20const&\\29\n3933:SkCompressedDataSize\\28SkTextureCompressionType\\2c\\20SkISize\\2c\\20skia_private::TArray<unsigned\\20long\\2c\\20true>*\\2c\\20bool\\29\n3934:SkColorToPMColor4f\\28unsigned\\20int\\2c\\20GrColorInfo\\20const&\\29\n3935:SkColorSpaceLuminance::Fetch\\28float\\29\n3936:SkColorSpace::MakeRGB\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n3937:SkCoincidentSpans::extend\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\29\n3938:SkChopQuadAtYExtrema\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n3939:SkCapabilities::RasterBackend\\28\\29\n3940:SkCanvas::saveLayer\\28SkCanvas::SaveLayerRec\\20const&\\29\n3941:SkCanvas::onResetClip\\28\\29\n3942:SkCanvas::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n3943:SkCanvas::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n3944:SkCanvas::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3945:SkCanvas::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3946:SkCanvas::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n3947:SkCanvas::internalSave\\28\\29\n3948:SkCanvas::internalRestore\\28\\29\n3949:SkCanvas::clipRect\\28SkRect\\20const&\\2c\\20bool\\29\n3950:SkCanvas::clipPath\\28SkPath\\20const&\\2c\\20bool\\29\n3951:SkCanvas::clear\\28unsigned\\20int\\29\n3952:SkCanvas::clear\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n3953:SkCachedData::~SkCachedData\\28\\29\n3954:SkBlitterClipper::~SkBlitterClipper\\28\\29\n3955:SkBlitter::blitRegion\\28SkRegion\\20const&\\29\n3956:SkBlendShader::~SkBlendShader\\28\\29\n3957:SkBitmapDevice::SkBitmapDevice\\28SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20void*\\29\n3958:SkBitmapDevice::BDDraw::~BDDraw\\28\\29\n3959:SkBitmapDevice::BDDraw::BDDraw\\28SkBitmapDevice*\\29\n3960:SkBitmap::writePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n3961:SkBitmap::setPixels\\28void*\\29\n3962:SkBitmap::readPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\\20const\n3963:SkBitmap::installPixels\\28SkPixmap\\20const&\\29\n3964:SkBitmap::allocPixels\\28\\29\n3965:SkBinaryWriteBuffer::writeScalarArray\\28float\\20const*\\2c\\20unsigned\\20int\\29\n3966:SkBinaryWriteBuffer::writeInt\\28int\\29\n3967:SkBaseShadowTessellator::~SkBaseShadowTessellator\\28\\29.1\n3968:SkBaseShadowTessellator::handleLine\\28SkPoint\\20const&\\29\n3969:SkAutoPixmapStorage::freeStorage\\28\\29\n3970:SkAutoPathBoundsUpdate::~SkAutoPathBoundsUpdate\\28\\29\n3971:SkAutoPathBoundsUpdate::SkAutoPathBoundsUpdate\\28SkPath*\\2c\\20SkRect\\20const&\\29\n3972:SkAutoMalloc::reset\\28unsigned\\20long\\2c\\20SkAutoMalloc::OnShrink\\29\n3973:SkAutoDescriptor::free\\28\\29\n3974:SkArenaAllocWithReset::reset\\28\\29\n3975:SkAnalyticQuadraticEdge::updateQuadratic\\28\\29\n3976:SkAnalyticEdge::goY\\28int\\29\n3977:SkAnalyticCubicEdge::updateCubic\\28bool\\29\n3978:SkAAClipBlitter::ensureRunsAndAA\\28\\29\n3979:SkAAClip::setRegion\\28SkRegion\\20const&\\29\n3980:SkAAClip::setRect\\28SkIRect\\20const&\\29\n3981:SkAAClip::quickContains\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n3982:SkAAClip::RunHead::Alloc\\28int\\2c\\20unsigned\\20long\\29\n3983:SkAAClip::Builder::AppendRun\\28SkTDArray<unsigned\\20char>&\\2c\\20unsigned\\20int\\2c\\20int\\29\n3984:Sk4f_toL32\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n3985:SSVertex*\\20SkArenaAlloc::make<SSVertex\\2c\\20GrTriangulator::Vertex*&>\\28GrTriangulator::Vertex*&\\29\n3986:RunBasedAdditiveBlitter::flush\\28\\29\n3987:R.9000\n3988:OpAsWinding::nextEdge\\28Contour&\\2c\\20OpAsWinding::Edge\\29\n3989:OT::sbix::get_strike\\28unsigned\\20int\\29\\20const\n3990:OT::hb_paint_context_t::get_color\\28unsigned\\20int\\2c\\20float\\2c\\20int*\\29\n3991:OT::hb_ot_apply_context_t::skipping_iterator_t::prev\\28unsigned\\20int*\\29\n3992:OT::hb_ot_apply_context_t::check_glyph_property\\28hb_glyph_info_t\\20const*\\2c\\20unsigned\\20int\\29\\20const\n3993:OT::glyf_impl::CompositeGlyphRecord::translate\\28contour_point_t\\20const&\\2c\\20hb_array_t<contour_point_t>\\29\n3994:OT::VariationStore::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3995:OT::VarSizedBinSearchArrayOf<AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20false>>>::get_length\\28\\29\\20const\n3996:OT::Script::get_lang_sys\\28unsigned\\20int\\29\\20const\n3997:OT::PaintSkew::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3998:OT::OpenTypeOffsetTable::sanitize\\28hb_sanitize_context_t*\\29\\20const\n3999:OT::OS2::has_data\\28\\29\\20const\n4000:OT::Layout::GSUB_impl::SubstLookup::serialize_ligature\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20hb_sorted_array_t<OT::HBGlyphID16\\20const>\\2c\\20hb_array_t<unsigned\\20int\\20const>\\2c\\20hb_array_t<OT::HBGlyphID16\\20const>\\2c\\20hb_array_t<unsigned\\20int\\20const>\\2c\\20hb_array_t<OT::HBGlyphID16\\20const>\\29\n4001:OT::Layout::GPOS_impl::MarkArray::apply\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20OT::Layout::GPOS_impl::AnchorMatrix\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n4002:OT::HVARVVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n4003:OT::GSUBGPOS::get_lookup_count\\28\\29\\20const\n4004:OT::GSUBGPOS::get_feature_list\\28\\29\\20const\n4005:OT::GSUBGPOS::accelerator_t<OT::Layout::GSUB>::get_accel\\28unsigned\\20int\\29\\20const\n4006:OT::Device::get_y_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n4007:OT::Device::get_x_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n4008:OT::ClipList::get_extents\\28unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n4009:OT::COLR::paint_glyph\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n4010:OT::ArrayOf<OT::HBGlyphID16\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::serialize\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\n4011:MaskAdditiveBlitter::~MaskAdditiveBlitter\\28\\29\n4012:LineQuadraticIntersections::uniqueAnswer\\28double\\2c\\20SkDPoint\\20const&\\29\n4013:LineQuadraticIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineQuadraticIntersections::PinTPoint\\29\n4014:LineQuadraticIntersections::checkCoincident\\28\\29\n4015:LineQuadraticIntersections::addLineNearEndPoints\\28\\29\n4016:LineCubicIntersections::uniqueAnswer\\28double\\2c\\20SkDPoint\\20const&\\29\n4017:LineCubicIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineCubicIntersections::PinTPoint\\29\n4018:LineCubicIntersections::checkCoincident\\28\\29\n4019:LineCubicIntersections::addLineNearEndPoints\\28\\29\n4020:LineConicIntersections::validT\\28double*\\2c\\20double\\2c\\20double*\\29\n4021:LineConicIntersections::uniqueAnswer\\28double\\2c\\20SkDPoint\\20const&\\29\n4022:LineConicIntersections::pinTs\\28double*\\2c\\20double*\\2c\\20SkDPoint*\\2c\\20LineConicIntersections::PinTPoint\\29\n4023:LineConicIntersections::checkCoincident\\28\\29\n4024:LineConicIntersections::addLineNearEndPoints\\28\\29\n4025:HandleInnerJoin\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n4026:GrVertexChunkBuilder::~GrVertexChunkBuilder\\28\\29\n4027:GrTriangulator::tessellate\\28GrTriangulator::VertexList\\20const&\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4028:GrTriangulator::splitEdge\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4029:GrTriangulator::pathToPolys\\28float\\2c\\20SkRect\\20const&\\2c\\20bool*\\29\n4030:GrTriangulator::makePoly\\28GrTriangulator::Poly**\\2c\\20GrTriangulator::Vertex*\\2c\\20int\\29\\20const\n4031:GrTriangulator::generateCubicPoints\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20GrTriangulator::VertexList*\\2c\\20int\\29\\20const\n4032:GrTriangulator::checkForIntersection\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4033:GrTriangulator::applyFillType\\28int\\29\\20const\n4034:GrTriangulator::SortMesh\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4035:GrTriangulator::MonotonePoly::addEdge\\28GrTriangulator::Edge*\\29\n4036:GrTriangulator::GrTriangulator\\28SkPath\\20const&\\2c\\20SkArenaAlloc*\\29\n4037:GrTriangulator::Edge::insertBelow\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4038:GrTriangulator::Edge::insertAbove\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4039:GrTriangulator::BreadcrumbTriangleList::append\\28SkArenaAlloc*\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20int\\29\n4040:GrThreadSafeCache::recycleEntry\\28GrThreadSafeCache::Entry*\\29\n4041:GrThreadSafeCache::dropAllRefs\\28\\29\n4042:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n4043:GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n4044:GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n4045:GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n4046:GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n4047:GrTextureProxy::~GrTextureProxy\\28\\29\n4048:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::$_0::operator\\28\\29\\28int\\2c\\20GrSamplerState::WrapMode\\29\\20const\n4049:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::$_3::operator\\28\\29\\28bool\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n4050:GrTexture::GrTexture\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20skgpu::Protected\\2c\\20GrTextureType\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4051:GrTexture::ComputeScratchKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20skgpu::ScratchKey*\\29\n4052:GrSurfaceProxyView::asTextureProxyRef\\28\\29\\20const\n4053:GrSurfaceProxy::instantiateImpl\\28GrResourceProvider*\\2c\\20int\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::UniqueKey\\20const*\\29\n4054:GrSurfaceProxy::GrSurfaceProxy\\28sk_sp<GrSurface>\\2c\\20SkBackingFit\\2c\\20GrSurfaceProxy::UseAllocator\\29\n4055:GrSurface::setRelease\\28sk_sp<skgpu::RefCntedCallback>\\29\n4056:GrStyledShape::styledBounds\\28\\29\\20const\n4057:GrStyledShape::addGenIDChangeListener\\28sk_sp<SkIDChangeListener>\\29\\20const\n4058:GrStyledShape::GrStyledShape\\28SkRect\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n4059:GrStyle::isSimpleHairline\\28\\29\\20const\n4060:GrStyle::initPathEffect\\28sk_sp<SkPathEffect>\\29\n4061:GrStencilSettings::Face::reset\\28GrTStencilFaceSettings<GrUserStencilTest\\2c\\20GrUserStencilOp>\\20const&\\2c\\20bool\\2c\\20int\\29\n4062:GrSimpleMeshDrawOpHelper::fixedFunctionFlags\\28\\29\\20const\n4063:GrShape::setPath\\28SkPath\\20const&\\29\n4064:GrShape::operator=\\28GrShape\\20const&\\29\n4065:GrShape::convex\\28bool\\29\\20const\n4066:GrShaderVar::GrShaderVar\\28SkString\\2c\\20SkSLType\\2c\\20int\\29\n4067:GrResourceProvider::findResourceByUniqueKey\\28skgpu::UniqueKey\\20const&\\29\n4068:GrResourceProvider::createPatternedIndexBuffer\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::UniqueKey\\20const*\\29\n4069:GrResourceCache::removeUniqueKey\\28GrGpuResource*\\29\n4070:GrResourceCache::getNextTimestamp\\28\\29\n4071:GrResourceCache::findAndRefScratchResource\\28skgpu::ScratchKey\\20const&\\29\n4072:GrRenderTask::dependsOn\\28GrRenderTask\\20const*\\29\\20const\n4073:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29\n4074:GrRenderTargetProxy::canUseStencil\\28GrCaps\\20const&\\29\\20const\n4075:GrRecordingContextPriv::addOnFlushCallbackObject\\28GrOnFlushCallbackObject*\\29\n4076:GrRecordingContext::~GrRecordingContext\\28\\29\n4077:GrQuadUtils::TessellationHelper::reset\\28GrQuad\\20const&\\2c\\20GrQuad\\20const*\\29\n4078:GrQuadUtils::TessellationHelper::getEdgeEquations\\28\\29\n4079:GrQuadUtils::TessellationHelper::Vertices::moveAlong\\28GrQuadUtils::TessellationHelper::EdgeVectors\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n4080:GrQuadUtils::ResolveAAType\\28GrAAType\\2c\\20GrQuadAAFlags\\2c\\20GrQuad\\20const&\\2c\\20GrAAType*\\2c\\20GrQuadAAFlags*\\29\n4081:GrQuadUtils::CropToRect\\28SkRect\\20const&\\2c\\20GrAA\\2c\\20DrawQuad*\\2c\\20bool\\29\n4082:GrQuadBuffer<\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA>::append\\28GrQuad\\20const&\\2c\\20\\28anonymous\\20namespace\\29::FillRectOpImpl::ColorAndAA&&\\2c\\20GrQuad\\20const*\\29\n4083:GrQuad::setQuadType\\28GrQuad::Type\\29\n4084:GrPorterDuffXPFactory::SimpleSrcOverXP\\28\\29\n4085:GrPipeline*\\20SkArenaAlloc::make<GrPipeline\\2c\\20GrPipeline::InitArgs&\\2c\\20GrProcessorSet\\2c\\20GrAppliedClip>\\28GrPipeline::InitArgs&\\2c\\20GrProcessorSet&&\\2c\\20GrAppliedClip&&\\29\n4086:GrPersistentCacheUtils::UnpackCachedShaders\\28SkReadBuffer*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20SkSL::ProgramInterface*\\2c\\20int\\2c\\20GrPersistentCacheUtils::ShaderMetadata*\\29\n4087:GrPathUtils::quadraticPointCount\\28SkPoint\\20const*\\2c\\20float\\29\n4088:GrPathUtils::convertCubicToQuads\\28SkPoint\\20const*\\2c\\20float\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\29\n4089:GrPathTessellationShader::Make\\28GrShaderCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::tess::PatchAttribs\\29\n4090:GrPathTessellationShader::MakeSimpleTriangleShader\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n4091:GrOvalOpFactory::MakeOvalOp\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrShaderCaps\\20const*\\29\n4092:GrOpsRenderPass::drawIndexed\\28int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20int\\29\n4093:GrOpFlushState::draw\\28int\\2c\\20int\\29\n4094:GrOp::chainConcat\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n4095:GrNonAtomicRef<GrWindowRectangles::Rec>::unref\\28\\29\\20const\n4096:GrModulateAtlasCoverageEffect::GrModulateAtlasCoverageEffect\\28GrModulateAtlasCoverageEffect\\20const&\\29\n4097:GrMipLevel::operator=\\28GrMipLevel&&\\29\n4098:GrMeshDrawOp::PatternHelper::PatternHelper\\28GrMeshDrawTarget*\\2c\\20GrPrimitiveType\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4099:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29\n4100:GrImageInfo::makeDimensions\\28SkISize\\29\\20const\n4101:GrGpuResource::~GrGpuResource\\28\\29\n4102:GrGpuResource::removeScratchKey\\28\\29\n4103:GrGpuResource::registerWithCacheWrapped\\28GrWrapCacheable\\29\n4104:GrGpuResource::getResourceName\\28\\29\\20const\n4105:GrGpuResource::dumpMemoryStatisticsPriv\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n4106:GrGpuResource::CreateUniqueID\\28\\29\n4107:GrGpuBuffer::onGpuMemorySize\\28\\29\\20const\n4108:GrGpu::resolveRenderTarget\\28GrRenderTarget*\\2c\\20SkIRect\\20const&\\29\n4109:GrGeometryProcessor::TextureSampler::TextureSampler\\28GrSamplerState\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Swizzle\\20const&\\29\n4110:GrGeometryProcessor::TextureSampler::TextureSampler\\28GrGeometryProcessor::TextureSampler&&\\29\n4111:GrGeometryProcessor::ProgramImpl::TransformInfo::TransformInfo\\28GrGeometryProcessor::ProgramImpl::TransformInfo\\20const&\\29\n4112:GrGeometryProcessor::ProgramImpl::AddMatrixKeys\\28GrShaderCaps\\20const&\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n4113:GrGeometryProcessor::Attribute::size\\28\\29\\20const\n4114:GrGLUniformHandler::~GrGLUniformHandler\\28\\29\n4115:GrGLUniformHandler::getUniformVariable\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n4116:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n4117:GrGLTextureRenderTarget::onRelease\\28\\29\n4118:GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n4119:GrGLTextureRenderTarget::onAbandon\\28\\29\n4120:GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n4121:GrGLTexture::~GrGLTexture\\28\\29\n4122:GrGLTexture::onRelease\\28\\29\n4123:GrGLTexture::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n4124:GrGLTexture::TextureTypeFromTarget\\28unsigned\\20int\\29\n4125:GrGLSemaphore::Make\\28GrGLGpu*\\2c\\20bool\\29\n4126:GrGLSLVaryingHandler::~GrGLSLVaryingHandler\\28\\29\n4127:GrGLSLUniformHandler::addInputSampler\\28skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\29\n4128:GrGLSLUniformHandler::UniformInfo::~UniformInfo\\28\\29\n4129:GrGLSLShaderBuilder::appendTextureLookup\\28SkString*\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\29\\20const\n4130:GrGLSLShaderBuilder::appendColorGamutXform\\28char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n4131:GrGLSLShaderBuilder::appendColorGamutXform\\28SkString*\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n4132:GrGLSLProgramDataManager::setSkMatrix\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20SkMatrix\\20const&\\29\\20const\n4133:GrGLSLProgramBuilder::writeFPFunction\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n4134:GrGLSLProgramBuilder::nameExpression\\28SkString*\\2c\\20char\\20const*\\29\n4135:GrGLSLProgramBuilder::fragmentProcessorHasCoordsParam\\28GrFragmentProcessor\\20const*\\29\\20const\n4136:GrGLSLProgramBuilder::emitSampler\\28GrBackendFormat\\20const&\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\29\n4137:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n4138:GrGLSLBlend::BlendKey\\28SkBlendMode\\29\n4139:GrGLRenderTarget::~GrGLRenderTarget\\28\\29\n4140:GrGLRenderTarget::onRelease\\28\\29\n4141:GrGLRenderTarget::onAbandon\\28\\29\n4142:GrGLRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n4143:GrGLProgramDataManager::~GrGLProgramDataManager\\28\\29\n4144:GrGLProgramBuilder::~GrGLProgramBuilder\\28\\29\n4145:GrGLProgramBuilder::computeCountsAndStrides\\28unsigned\\20int\\2c\\20GrGeometryProcessor\\20const&\\2c\\20bool\\29\n4146:GrGLProgramBuilder::addInputVars\\28SkSL::ProgramInterface\\20const&\\29\n4147:GrGLOpsRenderPass::dmsaaLoadStoreBounds\\28\\29\\20const\n4148:GrGLOpsRenderPass::bindInstanceBuffer\\28GrBuffer\\20const*\\2c\\20int\\29\n4149:GrGLGpu::insertSemaphore\\28GrSemaphore*\\29\n4150:GrGLGpu::flushViewport\\28SkIRect\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\29\n4151:GrGLGpu::flushScissor\\28GrScissorState\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\29\n4152:GrGLGpu::flushClearColor\\28std::__2::array<float\\2c\\204ul>\\29\n4153:GrGLGpu::disableStencil\\28\\29\n4154:GrGLGpu::createTexture\\28SkISize\\2c\\20GrGLFormat\\2c\\20unsigned\\20int\\2c\\20skgpu::Renderable\\2c\\20GrGLTextureParameters::SamplerOverriddenState*\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4155:GrGLGpu::copySurfaceAsDraw\\28GrSurface*\\2c\\20bool\\2c\\20GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkFilterMode\\29\n4156:GrGLGpu::HWVertexArrayState::bindInternalVertexArray\\28GrGLGpu*\\2c\\20GrBuffer\\20const*\\29\n4157:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20void\\20const*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20void\\20const*\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20void\\20const*\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20void\\20const*\\29\n4158:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4159:GrGLFunction<void\\20\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n4160:GrGLFunction<unsigned\\20char\\20const*\\20\\28unsigned\\20int\\2c\\20unsigned\\20int\\29>::GrGLFunction\\28unsigned\\20char\\20const*\\20\\28*\\29\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n4161:GrGLContextInfo::~GrGLContextInfo\\28\\29\n4162:GrGLCaps::getRenderTargetSampleCount\\28int\\2c\\20GrGLFormat\\29\\20const\n4163:GrGLCaps::canCopyAsDraw\\28GrGLFormat\\2c\\20bool\\2c\\20bool\\29\\20const\n4164:GrGLBuffer::~GrGLBuffer\\28\\29\n4165:GrGLBuffer::Make\\28GrGLGpu*\\2c\\20unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n4166:GrGLBackendTextureData::GrGLBackendTextureData\\28GrGLTextureInfo\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\29\n4167:GrGLAttribArrayState::invalidate\\28\\29\n4168:GrGLAttribArrayState::enableVertexArrays\\28GrGLGpu\\20const*\\2c\\20int\\2c\\20GrPrimitiveRestart\\29\n4169:GrGLAttachment::GrGLAttachment\\28GrGpu*\\2c\\20unsigned\\20int\\2c\\20SkISize\\2c\\20GrAttachment::UsageFlags\\2c\\20int\\2c\\20GrGLFormat\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4170:GrFragmentProcessors::make_effect_fp\\28sk_sp<SkRuntimeEffect>\\2c\\20char\\20const*\\2c\\20sk_sp<SkData\\20const>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkSpan<SkRuntimeEffect::ChildPtr\\20const>\\2c\\20GrFPArgs\\20const&\\29\n4171:GrFragmentProcessors::IsSupported\\28SkMaskFilter\\20const*\\29\n4172:GrFragmentProcessor::makeProgramImpl\\28\\29\\20const\n4173:GrFragmentProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n4174:GrFragmentProcessor::ProgramImpl::~ProgramImpl\\28\\29\n4175:GrFragmentProcessor::MulInputByChildAlpha\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n4176:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n4177:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n4178:GrEagerDynamicVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n4179:GrDynamicAtlas::makeNode\\28GrDynamicAtlas::Node*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4180:GrDstProxyView::GrDstProxyView\\28GrDstProxyView\\20const&\\29\n4181:GrDrawingManager::setLastRenderTask\\28GrSurfaceProxy\\20const*\\2c\\20GrRenderTask*\\29\n4182:GrDrawingManager::removeRenderTasks\\28\\29\n4183:GrDrawingManager::insertTaskBeforeLast\\28sk_sp<GrRenderTask>\\29\n4184:GrDrawingManager::flushSurfaces\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n4185:GrDrawOpAtlas::makeMRU\\28skgpu::Plot*\\2c\\20unsigned\\20int\\29\n4186:GrDefaultGeoProcFactory::MakeForDeviceSpace\\28SkArenaAlloc*\\2c\\20GrDefaultGeoProcFactory::Color\\20const&\\2c\\20GrDefaultGeoProcFactory::Coverage\\20const&\\2c\\20GrDefaultGeoProcFactory::LocalCoords\\20const&\\2c\\20SkMatrix\\20const&\\29\n4187:GrCpuVertexAllocator::~GrCpuVertexAllocator\\28\\29\n4188:GrColorTypeClampType\\28GrColorType\\29\n4189:GrColorSpaceXform::Equals\\28GrColorSpaceXform\\20const*\\2c\\20GrColorSpaceXform\\20const*\\29\n4190:GrBufferAllocPool::unmap\\28\\29\n4191:GrBufferAllocPool::reset\\28\\29\n4192:GrBlurUtils::extract_draw_rect_from_data\\28SkData*\\2c\\20SkIRect\\20const&\\29\n4193:GrBlurUtils::create_integral_table\\28float\\2c\\20SkBitmap*\\29\n4194:GrBlurUtils::can_filter_mask\\28SkMaskFilterBase\\20const*\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect*\\29\n4195:GrBicubicEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkRect\\20const&\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n4196:GrBicubicEffect::GrBicubicEffect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrBicubicEffect::Clamp\\29\n4197:GrBackendTextures::MakeGL\\28int\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrGLTextureInfo\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n4198:GrBackendFormatStencilBits\\28GrBackendFormat\\20const&\\29\n4199:GrBackendFormat::operator==\\28GrBackendFormat\\20const&\\29\\20const\n4200:GrAtlasManager::resolveMaskFormat\\28skgpu::MaskFormat\\29\\20const\n4201:GrAATriangulator::~GrAATriangulator\\28\\29\n4202:GrAATriangulator::makeEvent\\28GrAATriangulator::SSEdge*\\2c\\20GrAATriangulator::EventList*\\29\\20const\n4203:GrAATriangulator::connectSSEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n4204:GrAAConvexTessellator::terminate\\28GrAAConvexTessellator::Ring\\20const&\\29\n4205:GrAAConvexTessellator::computePtAlongBisector\\28int\\2c\\20SkPoint\\20const&\\2c\\20int\\2c\\20float\\2c\\20SkPoint*\\29\\20const\n4206:GrAAConvexTessellator::computeNormals\\28\\29::$_0::operator\\28\\29\\28SkPoint\\29\\20const\n4207:GrAAConvexTessellator::CandidateVerts::originatingIdx\\28int\\29\\20const\n4208:GrAAConvexTessellator::CandidateVerts::fuseWithPrior\\28int\\29\n4209:GrAAConvexTessellator::CandidateVerts::addNewPt\\28SkPoint\\20const&\\2c\\20int\\2c\\20int\\2c\\20bool\\29\n4210:FT_Stream_Free\n4211:FT_Set_Transform\n4212:FT_Set_Char_Size\n4213:FT_Select_Metrics\n4214:FT_Request_Metrics\n4215:FT_List_Finalize\n4216:FT_Hypot\n4217:FT_GlyphLoader_CreateExtra\n4218:FT_GlyphLoader_Adjust_Points\n4219:FT_Get_Paint\n4220:FT_Get_MM_Var\n4221:FT_Get_Color_Glyph_Paint\n4222:FT_Activate_Size\n4223:EllipticalRRectOp::~EllipticalRRectOp\\28\\29\n4224:EdgeLT::operator\\28\\29\\28Edge\\20const&\\2c\\20Edge\\20const&\\29\\20const\n4225:DAffineMatrix::mapPoint\\28\\28anonymous\\20namespace\\29::DPoint\\20const&\\29\\20const\n4226:DAffineMatrix::mapPoint\\28SkPoint\\20const&\\29\\20const\n4227:Cr_z_inflate_table\n4228:Compute_Point_Displacement\n4229:CircularRRectOp::~CircularRRectOp\\28\\29\n4230:CFF::cff_stack_t<CFF::number_t\\2c\\20513>::push\\28\\29\n4231:CFF::arg_stack_t<CFF::number_t>::pop_int\\28\\29\n4232:CFF::CFFIndex<OT::IntType<unsigned\\20short\\2c\\202u>>::get_size\\28\\29\\20const\n4233:Bounder::Bounder\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n4234:BlockIndexIterator<skgpu::ganesh::ClipStack::Mask&\\2c\\20false\\2c\\20false\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>::Decrement\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::Mask\\2c\\201>::GetItem\\28SkBlockAllocator::Block*\\2c\\20int\\29>::Item::operator++\\28\\29\n4235:ActiveEdgeList::DoubleRotation\\28ActiveEdge*\\2c\\20int\\29\n4236:AAT::kerxTupleKern\\28int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\2c\\20AAT::hb_aat_apply_context_t*\\29\n4237:AAT::feat::get_feature\\28hb_aat_layout_feature_type_t\\29\\20const\n4238:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20void>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int*\\29\\20const\n4239:AAT::StateTable<AAT::ObsoleteTypes\\2c\\20void>::get_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n4240:AAT::StateTable<AAT::ExtendedTypes\\2c\\20void>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n4241:AAT::Lookup<OT::HBGlyphID16>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n4242:AAT::ClassTable<OT::IntType<unsigned\\20char\\2c\\201u>>::get_class\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n4243:zeroinfnan\n4244:zero_mark_widths_by_gdef\\28hb_buffer_t*\\2c\\20bool\\29\n4245:xyzd50_to_lab\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n4246:xyz_almost_equal\\28skcms_Matrix3x3\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n4247:write_vertex_position\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20char\\20const*\\2c\\20GrShaderVar*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\29\n4248:write_passthrough_vertex_position\\28GrGLSLVertexBuilder*\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar*\\29\n4249:winding_mono_quad\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20int*\\29\n4250:winding_mono_conic\\28SkConic\\20const&\\2c\\20float\\2c\\20float\\2c\\20int*\\29\n4251:wctomb\n4252:wchar_t*\\20std::__2::copy\\5babi:v160004\\5d<std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20wchar_t*>\\28std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20std::__2::__wrap_iter<wchar_t\\20const*>\\2c\\20wchar_t*\\29\n4253:walk_simple_edges\\28SkEdge*\\2c\\20SkBlitter*\\2c\\20int\\2c\\20int\\29\n4254:vsscanf\n4255:void\\20std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::construct\\5babi:v160004\\5d<std::__2::locale::facet*\\2c\\20void\\2c\\20void>\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20std::__2::locale::facet**\\29\n4256:void\\20std::__2::allocator<sktext::GlyphRun>::construct\\5babi:v160004\\5d<sktext::GlyphRun\\2c\\20SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>&\\2c\\20SkSpan<unsigned\\20short\\20const>&\\2c\\20SkSpan<char\\20const>&\\2c\\20SkSpan<unsigned\\20int\\20const>&\\2c\\20SkSpan<SkPoint\\20const>&>\\28sktext::GlyphRun*\\2c\\20SkFont\\20const&\\2c\\20SkSpan<SkPoint\\20const>&\\2c\\20SkSpan<unsigned\\20short\\20const>&\\2c\\20SkSpan<char\\20const>&\\2c\\20SkSpan<unsigned\\20int\\20const>&\\2c\\20SkSpan<SkPoint\\20const>&\\29\n4257:void\\20std::__2::allocator<skia::textlayout::FontFeature>::construct\\5babi:v160004\\5d<skia::textlayout::FontFeature\\2c\\20SkString\\20const&\\2c\\20int&>\\28skia::textlayout::FontFeature*\\2c\\20SkString\\20const&\\2c\\20int&\\29\n4258:void\\20std::__2::allocator<Contour>::construct\\5babi:v160004\\5d<Contour\\2c\\20SkRect&\\2c\\20int&\\2c\\20int&>\\28Contour*\\2c\\20SkRect&\\2c\\20int&\\2c\\20int&\\29\n4259:void\\20std::__2::__variant_detail::__impl<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>::__assign\\5babi:v160004\\5d<0ul\\2c\\20sk_sp<SkStrike>>\\28sk_sp<SkStrike>&&\\29\n4260:void\\20std::__2::__variant_detail::__impl<SkPaint\\2c\\20int>::__assign\\5babi:v160004\\5d<0ul\\2c\\20SkPaint>\\28SkPaint&&\\29\n4261:void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__assign_alt\\5babi:v160004\\5d<0ul\\2c\\20SkPaint\\2c\\20SkPaint>\\28std::__2::__variant_detail::__alt<0ul\\2c\\20SkPaint>&\\2c\\20SkPaint&&\\29\n4262:void\\20std::__2::__tree_right_rotate\\5babi:v160004\\5d<std::__2::__tree_node_base<void*>*>\\28std::__2::__tree_node_base<void*>*\\29\n4263:void\\20std::__2::__tree_left_rotate\\5babi:v160004\\5d<std::__2::__tree_node_base<void*>*>\\28std::__2::__tree_node_base<void*>*\\29\n4264:void\\20std::__2::__stable_sort_move<std::__2::_ClassicAlgPolicy\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>\\28std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::'lambda'\\28\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\2c\\20\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop\\20const&\\29&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::difference_type\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29::$_0::operator\\28\\29\\28FT_ColorStopIterator_\\20const&\\2c\\20std::__2::vector<float\\2c\\20std::__2::allocator<float>>&\\2c\\20std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>&\\29\\20const::ColorStop*>>::value_type*\\29\n4265:void\\20std::__2::__sift_up\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20GrGeometryProcessor::ProgramImpl::emitTransformCode\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\29::$_0&\\2c\\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>\\28std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\\2c\\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\\2c\\20GrGeometryProcessor::ProgramImpl::emitTransformCode\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLUniformHandler*\\29::$_0&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>::difference_type\\29\n4266:void\\20std::__2::__sift_up\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20GrAATriangulator::EventComparator&\\2c\\20std::__2::__wrap_iter<GrAATriangulator::Event**>>\\28std::__2::__wrap_iter<GrAATriangulator::Event**>\\2c\\20std::__2::__wrap_iter<GrAATriangulator::Event**>\\2c\\20GrAATriangulator::EventComparator&\\2c\\20std::__2::iterator_traits<std::__2::__wrap_iter<GrAATriangulator::Event**>>::difference_type\\29\n4267:void\\20std::__2::__optional_storage_base<skia::textlayout::FontArguments\\2c\\20false>::__construct\\5babi:v160004\\5d<skia::textlayout::FontArguments\\20const&>\\28skia::textlayout::FontArguments\\20const&\\29\n4268:void\\20std::__2::__optional_storage_base<skia::textlayout::FontArguments\\2c\\20false>::__assign_from\\5babi:v160004\\5d<std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&>\\28std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\\2c\\20false>\\20const&\\29\n4269:void\\20std::__2::__optional_storage_base<SkPath\\2c\\20false>::__construct\\5babi:v160004\\5d<SkPath\\20const&>\\28SkPath\\20const&\\29\n4270:void\\20std::__2::__memberwise_forward_assign\\5babi:v160004\\5d<std::__2::tuple<sk_sp<GrBuffer\\20const>&\\2c\\20int&>\\2c\\20std::__2::tuple<sk_sp<GrGpuBuffer\\20const>\\2c\\20unsigned\\20long>\\2c\\20sk_sp<GrGpuBuffer\\20const>\\2c\\20unsigned\\20long\\2c\\200ul\\2c\\201ul>\\28std::__2::tuple<sk_sp<GrBuffer\\20const>&\\2c\\20int&>&\\2c\\20std::__2::tuple<sk_sp<GrGpuBuffer\\20const>\\2c\\20unsigned\\20long>&&\\2c\\20std::__2::__tuple_types<sk_sp<GrGpuBuffer\\20const>\\2c\\20unsigned\\20long>\\2c\\20std::__2::__tuple_indices<0ul\\2c\\201ul>\\29\n4271:void\\20std::__2::__memberwise_forward_assign\\5babi:v160004\\5d<std::__2::tuple<GrSurfaceProxyView&\\2c\\20sk_sp<SkData>&>\\2c\\20std::__2::tuple<GrSurfaceProxyView\\2c\\20sk_sp<SkData>>\\2c\\20GrSurfaceProxyView\\2c\\20sk_sp<SkData>\\2c\\200ul\\2c\\201ul>\\28std::__2::tuple<GrSurfaceProxyView&\\2c\\20sk_sp<SkData>&>&\\2c\\20std::__2::tuple<GrSurfaceProxyView\\2c\\20sk_sp<SkData>>&&\\2c\\20std::__2::__tuple_types<GrSurfaceProxyView\\2c\\20sk_sp<SkData>>\\2c\\20std::__2::__tuple_indices<0ul\\2c\\201ul>\\29\n4272:void\\20std::__2::__double_or_nothing\\5babi:v160004\\5d<char>\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20char*&\\2c\\20char*&\\29\n4273:void\\20sorted_merge<&sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\29\n4274:void\\20sorted_merge<&sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29>\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::VertexList*\\29\n4275:void\\20sort_r_simple<void*>\\28void*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n4276:void\\20sktext::gpu::fillDirectClipped<sktext::gpu::ARGB2DVertex\\20\\5b4\\5d\\2c\\20SkPoint>\\28SkZip<sktext::gpu::ARGB2DVertex\\20\\5b4\\5d\\2c\\20sktext::gpu::Glyph\\20const*\\2c\\20SkPoint\\20const>\\2c\\20unsigned\\20int\\2c\\20SkPoint\\2c\\20SkIRect*\\29\n4277:void\\20skgpu::ganesh::SurfaceFillContext::clearAtLeast<\\28SkAlphaType\\292>\\28SkIRect\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n4278:void\\20portable::memsetT<unsigned\\20short>\\28unsigned\\20short*\\2c\\20unsigned\\20short\\2c\\20int\\29\n4279:void\\20portable::memsetT<unsigned\\20int>\\28unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20int\\29\n4280:void\\20hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernOTSubTableHeader>>\\28OT::KernSubTable<OT::KernOTSubTableHeader>\\20const*\\29\n4281:void\\20hb_sanitize_context_t::set_object<AAT::ChainSubtable<AAT::ObsoleteTypes>>\\28AAT::ChainSubtable<AAT::ObsoleteTypes>\\20const*\\29\n4282:void\\20hair_path<\\28SkPaint::Cap\\292>\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n4283:void\\20hair_path<\\28SkPaint::Cap\\291>\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n4284:void\\20hair_path<\\28SkPaint::Cap\\290>\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n4285:void\\20\\28anonymous\\20namespace\\29::copyFT2LCD16<false>\\28FT_Bitmap_\\20const&\\2c\\20SkMaskBuilder*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\20const*\\29\n4286:void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29\n4287:void\\20SkTIntroSort<int\\2c\\20DistanceLessThan>\\28int\\2c\\20int*\\2c\\20int\\2c\\20DistanceLessThan\\20const&\\29\n4288:void\\20SkTIntroSort<float\\2c\\20void\\20SkTQSort<float>\\28float*\\2c\\20float*\\29::'lambda'\\28float\\20const&\\2c\\20float\\20const&\\29>\\28int\\2c\\20float*\\2c\\20int\\2c\\20void\\20SkTQSort<float>\\28float*\\2c\\20float*\\29::'lambda'\\28float\\20const&\\2c\\20float\\20const&\\29\\20const&\\29\n4289:void\\20SkTIntroSort<double\\2c\\20void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29::'lambda'\\28double\\20const&\\2c\\20double\\20const&\\29>\\28int\\2c\\20double*\\2c\\20int\\2c\\20void\\20SkTQSort<double>\\28double*\\2c\\20double*\\29::'lambda'\\28double\\20const&\\2c\\20double\\20const&\\29\\20const&\\29\n4290:void\\20SkTIntroSort<SkString\\2c\\20bool\\20\\28SkString\\20const&\\2c\\20SkString\\20const&\\29>\\28int\\2c\\20SkString*\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28SkString\\20const&\\2c\\20SkString\\20const&\\29\\29\n4291:void\\20SkTIntroSort<SkOpRayHit*\\2c\\20bool\\20\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29>\\28int\\2c\\20SkOpRayHit**\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\\29\n4292:void\\20SkTIntroSort<SkOpContour*\\2c\\20void\\20SkTQSort<SkOpContour>\\28SkOpContour**\\2c\\20SkOpContour**\\29::'lambda'\\28SkOpContour\\20const*\\2c\\20SkOpContour\\20const*\\29>\\28int\\2c\\20SkOpContour*\\2c\\20int\\2c\\20void\\20SkTQSort<SkOpContour>\\28SkOpContour**\\2c\\20SkOpContour**\\29::'lambda'\\28SkOpContour\\20const*\\2c\\20SkOpContour\\20const*\\29\\20const&\\29\n4293:void\\20SkTIntroSort<SkEdge*\\2c\\20void\\20SkTQSort<SkEdge>\\28SkEdge**\\2c\\20SkEdge**\\29::'lambda'\\28SkEdge\\20const*\\2c\\20SkEdge\\20const*\\29>\\28int\\2c\\20SkEdge*\\2c\\20int\\2c\\20void\\20SkTQSort<SkEdge>\\28SkEdge**\\2c\\20SkEdge**\\29::'lambda'\\28SkEdge\\20const*\\2c\\20SkEdge\\20const*\\29\\20const&\\29\n4294:void\\20SkTIntroSort<SkClosestRecord\\20const*\\2c\\20void\\20SkTQSort<SkClosestRecord\\20const>\\28SkClosestRecord\\20const**\\2c\\20SkClosestRecord\\20const**\\29::'lambda'\\28SkClosestRecord\\20const*\\2c\\20SkClosestRecord\\20const*\\29>\\28int\\2c\\20SkClosestRecord\\20const*\\2c\\20int\\2c\\20void\\20SkTQSort<SkClosestRecord\\20const>\\28SkClosestRecord\\20const**\\2c\\20SkClosestRecord\\20const**\\29::'lambda'\\28SkClosestRecord\\20const*\\2c\\20SkClosestRecord\\20const*\\29\\20const&\\29\n4295:void\\20SkTIntroSort<SkAnalyticEdge*\\2c\\20void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29>\\28int\\2c\\20SkAnalyticEdge*\\2c\\20int\\2c\\20void\\20SkTQSort<SkAnalyticEdge>\\28SkAnalyticEdge**\\2c\\20SkAnalyticEdge**\\29::'lambda'\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge\\20const*\\29\\20const&\\29\n4296:void\\20SkTIntroSort<GrGpuResource*\\2c\\20bool\\20\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29>\\28int\\2c\\20GrGpuResource**\\2c\\20int\\2c\\20bool\\20\\20const\\28&\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\29\n4297:void\\20SkTIntroSort<GrGpuResource*\\2c\\20bool\\20\\28*\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29>\\28int\\2c\\20GrGpuResource**\\2c\\20int\\2c\\20bool\\20\\28*\\20const&\\29\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\29\n4298:void\\20SkTIntroSort<Edge\\2c\\20EdgeLT>\\28int\\2c\\20Edge*\\2c\\20int\\2c\\20EdgeLT\\20const&\\29\n4299:void\\20SkSafeUnref<GrWindowRectangles::Rec\\20const>\\28GrWindowRectangles::Rec\\20const*\\29\n4300:void\\20SkSafeUnref<GrSurface::RefCntedReleaseProc>\\28GrSurface::RefCntedReleaseProc*\\29\n4301:void\\20SkSafeUnref<GrBufferAllocPool::CpuBufferCache>\\28GrBufferAllocPool::CpuBufferCache*\\29\n4302:void\\20SkRecords::FillBounds::trackBounds<SkRecords::NoOp>\\28SkRecords::NoOp\\20const&\\29\n4303:void\\20GrGeometryProcessor::ProgramImpl::collectTransforms\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderType\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20GrPipeline\\20const&\\29::$_0::operator\\28\\29<$_0>\\28$_0&\\2c\\20GrFragmentProcessor\\20const&\\2c\\20bool\\2c\\20GrFragmentProcessor\\20const*\\2c\\20int\\2c\\20GrGeometryProcessor::ProgramImpl::collectTransforms\\28GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrShaderType\\2c\\20GrShaderVar\\20const&\\2c\\20GrShaderVar\\20const&\\2c\\20GrPipeline\\20const&\\29::BaseCoord\\29\n4304:void\\20GrGLProgramDataManager::setMatrices<4>\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n4305:void\\20GrGLProgramDataManager::setMatrices<3>\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n4306:void\\20GrGLProgramDataManager::setMatrices<2>\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n4307:void\\20A8_row_aa<unsigned\\20char\\20\\28*\\29\\28unsigned\\20char\\2c\\20unsigned\\20char\\29>\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\20\\28*\\29\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\\2c\\20bool\\29\n4308:virtual\\20thunk\\20to\\20GrGLTexture::onSetLabel\\28\\29\n4309:virtual\\20thunk\\20to\\20GrGLTexture::backendFormat\\28\\29\\20const\n4310:vfiprintf\n4311:validate_texel_levels\\28SkISize\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20GrCaps\\20const*\\29\n4312:valid_divs\\28int\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n4313:utf8_byte_type\\28unsigned\\20char\\29\n4314:use_tiled_rendering\\28GrGLCaps\\20const&\\2c\\20GrOpsRenderPass::StencilLoadAndStoreInfo\\20const&\\29\n4315:uprv_realloc_skia\n4316:update_edge\\28SkEdge*\\2c\\20int\\29\n4317:unsigned\\20short\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20short>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n4318:unsigned\\20short\\20sk_saturate_cast<unsigned\\20short\\2c\\20float>\\28float\\29\n4319:unsigned\\20long\\20long\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20long\\20long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n4320:unsigned\\20long&\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::emplace_back<unsigned\\20long&>\\28unsigned\\20long&\\29\n4321:unsigned\\20int\\20std::__2::__num_get_unsigned_integral\\5babi:v160004\\5d<unsigned\\20int>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n4322:unsigned\\20int\\20const*\\20std::__2::lower_bound\\5babi:v160004\\5d<unsigned\\20int\\20const*\\2c\\20unsigned\\20long>\\28unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20long\\20const&\\29\n4323:unsigned\\20int*\\20hb_vector_t<unsigned\\20int\\2c\\20false>::push<unsigned\\20int&>\\28unsigned\\20int&\\29\n4324:unsigned\\20char\\20pack_distance_field_val<4>\\28float\\29\n4325:ubidi_getVisualRun_skia\n4326:ubidi_countRuns_skia\n4327:ubidi_close_skia\n4328:u_terminateUChars_skia\n4329:u_charType_skia\n4330:u8_lerp\\28unsigned\\20char\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n4331:tt_size_select\n4332:tt_size_run_prep\n4333:tt_size_done_bytecode\n4334:tt_sbit_decoder_load_image\n4335:tt_prepare_zone\n4336:tt_loader_set_pp\n4337:tt_loader_init\n4338:tt_loader_done\n4339:tt_hvadvance_adjust\n4340:tt_face_vary_cvt\n4341:tt_face_palette_set\n4342:tt_face_load_generic_header\n4343:tt_face_load_cvt\n4344:tt_face_goto_table\n4345:tt_face_get_metrics\n4346:tt_done_blend\n4347:tt_cmap4_set_range\n4348:tt_cmap4_next\n4349:tt_cmap4_char_map_linear\n4350:tt_cmap4_char_map_binary\n4351:tt_cmap2_get_subheader\n4352:tt_cmap14_get_nondef_chars\n4353:tt_cmap14_get_def_chars\n4354:tt_cmap14_def_char_count\n4355:tt_cmap13_next\n4356:tt_cmap13_init\n4357:tt_cmap13_char_map_binary\n4358:tt_cmap12_next\n4359:tt_cmap12_char_map_binary\n4360:tt_apply_mvar\n4361:top_collinear\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\29\n4362:throw_on_failure\\28unsigned\\20long\\2c\\20void*\\29\n4363:thai_pua_shape\\28unsigned\\20int\\2c\\20thai_action_t\\2c\\20hb_font_t*\\29\n4364:t1_lookup_glyph_by_stdcharcode_ps\n4365:t1_cmap_std_init\n4366:t1_cmap_std_char_index\n4367:t1_builder_init\n4368:t1_builder_close_contour\n4369:t1_builder_add_point1\n4370:t1_builder_add_point\n4371:t1_builder_add_contour\n4372:sweep_lt_vert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n4373:sweep_lt_horiz\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n4374:surface_setCallbackHandler\n4375:surface_getThreadId\n4376:strutStyle_setFontSize\n4377:strtox.9261\n4378:strtoull\n4379:strtoll_l\n4380:strspn\n4381:strncpy\n4382:strcspn\n4383:store_int\n4384:std::logic_error::~logic_error\\28\\29\n4385:std::logic_error::logic_error\\28char\\20const*\\29\n4386:std::exception::exception\\5babi:v160004\\5d\\28\\29\n4387:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::operator=\\5babi:v160004\\5d\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\20const&\\29\n4388:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__vdeallocate\\28\\29\n4389:std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>::__move_assign\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>&\\2c\\20std::__2::integral_constant<bool\\2c\\20true>\\29\n4390:std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>::__base_destruct_at_end\\5babi:v160004\\5d\\28std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>*\\29\n4391:std::__2::vector<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::allocator<std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>>>::__base_destruct_at_end\\5babi:v160004\\5d\\28std::__2::tuple<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>*\\29\n4392:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::max_size\\28\\29\\20const\n4393:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::capacity\\5babi:v160004\\5d\\28\\29\\20const\n4394:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__construct_at_end\\28unsigned\\20long\\29\n4395:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__clear\\5babi:v160004\\5d\\28\\29\n4396:std::__2::vector<std::__2::locale::facet*\\2c\\20std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::__base_destruct_at_end\\5babi:v160004\\5d\\28std::__2::locale::facet**\\29\n4397:std::__2::vector<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::allocator<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>>::__clear\\5babi:v160004\\5d\\28\\29\n4398:std::__2::vector<sktext::GlyphRun\\2c\\20std::__2::allocator<sktext::GlyphRun>>::__clear\\5babi:v160004\\5d\\28\\29\n4399:std::__2::vector<skia::textlayout::TextShadow\\2c\\20std::__2::allocator<skia::textlayout::TextShadow>>::vector\\28std::__2::vector<skia::textlayout::TextShadow\\2c\\20std::__2::allocator<skia::textlayout::TextShadow>>\\20const&\\29\n4400:std::__2::vector<skia::textlayout::TextShadow\\2c\\20std::__2::allocator<skia::textlayout::TextShadow>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n4401:std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::~vector\\5babi:v160004\\5d\\28\\29\n4402:std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>&>&\\29\n4403:std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::operator=\\5babi:v160004\\5d\\28std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>\\20const&\\29\n4404:std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::__clear\\5babi:v160004\\5d\\28\\29\n4405:std::__2::vector<skia::textlayout::FontFeature\\2c\\20std::__2::allocator<skia::textlayout::FontFeature>>::__base_destruct_at_end\\5babi:v160004\\5d\\28skia::textlayout::FontFeature*\\29\n4406:std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>::vector\\28std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\20const&\\29\n4407:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::insert\\28std::__2::__wrap_iter<float\\20const*>\\2c\\20float&&\\29\n4408:std::__2::vector<float\\2c\\20std::__2::allocator<float>>::__construct_at_end\\28unsigned\\20long\\29\n4409:std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n4410:std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>&>&\\29\n4411:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::vector\\5babi:v160004\\5d\\28std::initializer_list<SkString>\\29\n4412:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::reserve\\28unsigned\\20long\\29\n4413:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::operator=\\5babi:v160004\\5d\\28std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>\\20const&\\29\n4414:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__vdeallocate\\28\\29\n4415:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__destroy_vector::operator\\28\\29\\5babi:v160004\\5d\\28\\29\n4416:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__clear\\5babi:v160004\\5d\\28\\29\n4417:std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__base_destruct_at_end\\5babi:v160004\\5d\\28SkString*\\29\n4418:std::__2::vector<SkSL::TraceInfo\\2c\\20std::__2::allocator<SkSL::TraceInfo>>::push_back\\5babi:v160004\\5d\\28SkSL::TraceInfo&&\\29\n4419:std::__2::vector<SkSL::SymbolTable*\\2c\\20std::__2::allocator<SkSL::SymbolTable*>>::push_back\\5babi:v160004\\5d\\28SkSL::SymbolTable*\\20const&\\29\n4420:std::__2::vector<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>>::~vector\\5babi:v160004\\5d\\28\\29\n4421:std::__2::vector<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>&>&\\29\n4422:std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>&>&\\2c\\20SkSL::ProgramElement\\20const**\\29\n4423:std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>::__move_range\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\29\n4424:std::__2::vector<SkSL::InlineCandidate\\2c\\20std::__2::allocator<SkSL::InlineCandidate>>::erase\\28std::__2::__wrap_iter<SkSL::InlineCandidate\\20const*>\\2c\\20std::__2::__wrap_iter<SkSL::InlineCandidate\\20const*>\\29\n4425:std::__2::vector<SkRuntimeEffect::Uniform\\2c\\20std::__2::allocator<SkRuntimeEffect::Uniform>>::push_back\\5babi:v160004\\5d\\28SkRuntimeEffect::Uniform&&\\29\n4426:std::__2::vector<SkRuntimeEffect::Child\\2c\\20std::__2::allocator<SkRuntimeEffect::Child>>::push_back\\5babi:v160004\\5d\\28SkRuntimeEffect::Child&&\\29\n4427:std::__2::vector<SkRuntimeEffect::ChildPtr\\2c\\20std::__2::allocator<SkRuntimeEffect::ChildPtr>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n4428:std::__2::vector<SkRuntimeEffect::ChildPtr\\2c\\20std::__2::allocator<SkRuntimeEffect::ChildPtr>>::__destroy_vector::operator\\28\\29\\5babi:v160004\\5d\\28\\29\n4429:std::__2::vector<SkRTree::Node\\2c\\20std::__2::allocator<SkRTree::Node>>::reserve\\28unsigned\\20long\\29\n4430:std::__2::vector<SkRTree::Node\\2c\\20std::__2::allocator<SkRTree::Node>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkRTree::Node\\2c\\20std::__2::allocator<SkRTree::Node>&>&\\29\n4431:std::__2::vector<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20std::__2::allocator<SkRGBA4f<\\28SkAlphaType\\293>>&>&\\29\n4432:std::__2::vector<SkMeshSpecification::Varying\\2c\\20std::__2::allocator<SkMeshSpecification::Varying>>::~vector\\5babi:v160004\\5d\\28\\29\n4433:std::__2::vector<SkMeshSpecification::Varying\\2c\\20std::__2::allocator<SkMeshSpecification::Varying>>::push_back\\5babi:v160004\\5d\\28SkMeshSpecification::Varying&&\\29\n4434:std::__2::vector<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>>::~vector\\5babi:v160004\\5d\\28\\29\n4435:std::__2::vector<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>>::reserve\\28unsigned\\20long\\29\n4436:std::__2::vector<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>>::__swap_out_circular_buffer\\28std::__2::__split_buffer<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>&>&\\29\n4437:std::__2::vector<SkFontArguments::Palette::Override\\2c\\20std::__2::allocator<SkFontArguments::Palette::Override>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n4438:std::__2::vector<GrStagingBufferManager::StagingBuffer\\2c\\20std::__2::allocator<GrStagingBufferManager::StagingBuffer>>::__clear\\5babi:v160004\\5d\\28\\29\n4439:std::__2::unique_ptr<unsigned\\20char\\2c\\20void\\20\\28*\\29\\28void*\\29>::unique_ptr\\5babi:v160004\\5d<true\\2c\\20void>\\28unsigned\\20char*\\2c\\20std::__2::__dependent_type<std::__2::__unique_ptr_deleter_sfinae<void\\20\\28*\\29\\28void*\\29>\\2c\\20true>::__good_rval_ref_type\\29\n4440:std::__2::unique_ptr<sktext::gpu::TextBlobRedrawCoordinator\\2c\\20std::__2::default_delete<sktext::gpu::TextBlobRedrawCoordinator>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4441:std::__2::unique_ptr<sktext::gpu::TextBlobRedrawCoordinator\\2c\\20std::__2::default_delete<sktext::gpu::TextBlobRedrawCoordinator>>::reset\\5babi:v160004\\5d\\28sktext::gpu::TextBlobRedrawCoordinator*\\29\n4442:std::__2::unique_ptr<sktext::gpu::SubRun\\2c\\20sktext::gpu::SubRunAllocator::Destroyer>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4443:std::__2::unique_ptr<sktext::gpu::SubRunAllocator\\2c\\20std::__2::default_delete<sktext::gpu::SubRunAllocator>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4444:std::__2::unique_ptr<sktext::gpu::SubRunAllocator\\2c\\20std::__2::default_delete<sktext::gpu::SubRunAllocator>>::reset\\5babi:v160004\\5d\\28sktext::gpu::SubRunAllocator*\\29\n4445:std::__2::unique_ptr<sktext::gpu::StrikeCache\\2c\\20std::__2::default_delete<sktext::gpu::StrikeCache>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4446:std::__2::unique_ptr<sktext::gpu::StrikeCache\\2c\\20std::__2::default_delete<sktext::gpu::StrikeCache>>::reset\\5babi:v160004\\5d\\28sktext::gpu::StrikeCache*\\29\n4447:std::__2::unique_ptr<sktext::GlyphRunBuilder\\2c\\20std::__2::default_delete<sktext::GlyphRunBuilder>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4448:std::__2::unique_ptr<sktext::GlyphRunBuilder\\2c\\20std::__2::default_delete<sktext::GlyphRunBuilder>>::reset\\5babi:v160004\\5d\\28sktext::GlyphRunBuilder*\\29\n4449:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4450:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4451:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4452:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4453:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4454:std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4455:std::__2::unique_ptr<skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4456:std::__2::unique_ptr<skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4457:std::__2::unique_ptr<skia_private::THashTable<SkGlyphDigest\\2c\\20SkPackedGlyphID\\2c\\20SkGlyphDigest>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<SkGlyphDigest\\2c\\20SkPackedGlyphID\\2c\\20SkGlyphDigest>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4458:std::__2::unique_ptr<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>\\2c\\20std::__2::default_delete<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>>::reset\\5babi:v160004\\5d\\28skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>*\\29\n4459:std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4460:std::__2::unique_ptr<skgpu::ganesh::SmallPathAtlasMgr\\2c\\20std::__2::default_delete<skgpu::ganesh::SmallPathAtlasMgr>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4461:std::__2::unique_ptr<skgpu::ganesh::SmallPathAtlasMgr\\2c\\20std::__2::default_delete<skgpu::ganesh::SmallPathAtlasMgr>>::reset\\5babi:v160004\\5d\\28skgpu::ganesh::SmallPathAtlasMgr*\\29\n4462:std::__2::unique_ptr<sk_sp<skgpu::Plot>\\20\\5b\\5d\\2c\\20std::__2::default_delete<sk_sp<skgpu::Plot>\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4463:std::__2::unique_ptr<sk_sp<SkImageFilter>\\20\\5b\\5d\\2c\\20std::__2::default_delete<sk_sp<SkImageFilter>\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4464:std::__2::unique_ptr<hb_font_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_font_t*\\29\\2c\\20&hb_font_destroy>>::reset\\5babi:v160004\\5d\\28hb_font_t*\\29\n4465:std::__2::unique_ptr<hb_face_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_face_t*\\29\\2c\\20&hb_face_destroy>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4466:std::__2::unique_ptr<hb_blob_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_blob_t*\\29\\2c\\20&hb_blob_destroy>>::reset\\5babi:v160004\\5d\\28hb_blob_t*\\29\n4467:std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>::operator=\\5babi:v160004\\5d\\28std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&&\\29\n4468:std::__2::unique_ptr<\\28anonymous\\20namespace\\29::SoftwarePathData\\2c\\20std::__2::default_delete<\\28anonymous\\20namespace\\29::SoftwarePathData>>::reset\\5babi:v160004\\5d\\28\\28anonymous\\20namespace\\29::SoftwarePathData*\\29\n4469:std::__2::unique_ptr<SkTaskGroup\\2c\\20std::__2::default_delete<SkTaskGroup>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4470:std::__2::unique_ptr<SkTaskGroup\\2c\\20std::__2::default_delete<SkTaskGroup>>::reset\\5babi:v160004\\5d\\28SkTaskGroup*\\29\n4471:std::__2::unique_ptr<SkSL::TernaryExpression\\2c\\20std::__2::default_delete<SkSL::TernaryExpression>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4472:std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4473:std::__2::unique_ptr<SkSL::RP::Program\\2c\\20std::__2::default_delete<SkSL::RP::Program>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4474:std::__2::unique_ptr<SkSL::RP::Program\\2c\\20std::__2::default_delete<SkSL::RP::Program>>::reset\\5babi:v160004\\5d\\28SkSL::RP::Program*\\29\n4475:std::__2::unique_ptr<SkSL::RP::DynamicIndexLValue\\2c\\20std::__2::default_delete<SkSL::RP::DynamicIndexLValue>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4476:std::__2::unique_ptr<SkSL::Program\\2c\\20std::__2::default_delete<SkSL::Program>>::reset\\5babi:v160004\\5d\\28SkSL::Program*\\29\n4477:std::__2::unique_ptr<SkSL::ProgramUsage\\2c\\20std::__2::default_delete<SkSL::ProgramUsage>>::reset\\5babi:v160004\\5d\\28SkSL::ProgramUsage*\\29\n4478:std::__2::unique_ptr<SkSL::PostfixExpression\\2c\\20std::__2::default_delete<SkSL::PostfixExpression>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4479:std::__2::unique_ptr<SkSL::MemoryPool\\2c\\20std::__2::default_delete<SkSL::MemoryPool>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4480:std::__2::unique_ptr<SkSL::MemoryPool\\2c\\20std::__2::default_delete<SkSL::MemoryPool>>::reset\\5babi:v160004\\5d\\28SkSL::MemoryPool*\\29\n4481:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::coalesce_vector<bool>\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n4482:std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20SkSL::coalesce_pairwise_vectors<float>\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\2c\\20double\\2c\\20SkSL::Type\\20const&\\2c\\20double\\20\\28*\\29\\28double\\2c\\20double\\2c\\20double\\29\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n4483:std::__2::unique_ptr<SkSL::BinaryExpression\\2c\\20std::__2::default_delete<SkSL::BinaryExpression>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4484:std::__2::unique_ptr<SkRecorder\\2c\\20std::__2::default_delete<SkRecorder>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4485:std::__2::unique_ptr<SkRecorder\\2c\\20std::__2::default_delete<SkRecorder>>::reset\\5babi:v160004\\5d\\28SkRecorder*\\29\n4486:std::__2::unique_ptr<SkLatticeIter\\2c\\20std::__2::default_delete<SkLatticeIter>>::reset\\5babi:v160004\\5d\\28SkLatticeIter*\\29\n4487:std::__2::unique_ptr<SkCanvas::Layer\\2c\\20std::__2::default_delete<SkCanvas::Layer>>::reset\\5babi:v160004\\5d\\28SkCanvas::Layer*\\29\n4488:std::__2::unique_ptr<SkCanvas::ImageSetEntry\\20\\5b\\5d\\2c\\20std::__2::default_delete<SkCanvas::ImageSetEntry\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4489:std::__2::unique_ptr<SkCanvas::BackImage\\2c\\20std::__2::default_delete<SkCanvas::BackImage>>::reset\\5babi:v160004\\5d\\28SkCanvas::BackImage*\\29\n4490:std::__2::unique_ptr<SkArenaAlloc\\2c\\20std::__2::default_delete<SkArenaAlloc>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4491:std::__2::unique_ptr<SkArenaAlloc\\2c\\20std::__2::default_delete<SkArenaAlloc>>::reset\\5babi:v160004\\5d\\28SkArenaAlloc*\\29\n4492:std::__2::unique_ptr<GrThreadSafeCache\\2c\\20std::__2::default_delete<GrThreadSafeCache>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4493:std::__2::unique_ptr<GrThreadSafeCache\\2c\\20std::__2::default_delete<GrThreadSafeCache>>::reset\\5babi:v160004\\5d\\28GrThreadSafeCache*\\29\n4494:std::__2::unique_ptr<GrResourceProvider\\2c\\20std::__2::default_delete<GrResourceProvider>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4495:std::__2::unique_ptr<GrResourceProvider\\2c\\20std::__2::default_delete<GrResourceProvider>>::reset\\5babi:v160004\\5d\\28GrResourceProvider*\\29\n4496:std::__2::unique_ptr<GrResourceCache\\2c\\20std::__2::default_delete<GrResourceCache>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4497:std::__2::unique_ptr<GrResourceCache\\2c\\20std::__2::default_delete<GrResourceCache>>::reset\\5babi:v160004\\5d\\28GrResourceCache*\\29\n4498:std::__2::unique_ptr<GrProxyProvider\\2c\\20std::__2::default_delete<GrProxyProvider>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4499:std::__2::unique_ptr<GrProxyProvider\\2c\\20std::__2::default_delete<GrProxyProvider>>::reset\\5babi:v160004\\5d\\28GrProxyProvider*\\29\n4500:std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\20GrOp::Make<skgpu::ganesh::AtlasTextOp\\2c\\20skgpu::ganesh::AtlasTextOp::MaskType\\2c\\20bool\\2c\\20int\\2c\\20SkRect&\\2c\\20skgpu::ganesh::AtlasTextOp::Geometry*&\\2c\\20GrColorInfo\\20const&\\2c\\20GrPaint>\\28GrRecordingContext*\\2c\\20skgpu::ganesh::AtlasTextOp::MaskType&&\\2c\\20bool&&\\2c\\20int&&\\2c\\20SkRect&\\2c\\20skgpu::ganesh::AtlasTextOp::Geometry*&\\2c\\20GrColorInfo\\20const&\\2c\\20GrPaint&&\\29\n4501:std::__2::unique_ptr<GrGLGpu::SamplerObjectCache\\2c\\20std::__2::default_delete<GrGLGpu::SamplerObjectCache>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4502:std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4503:std::__2::unique_ptr<GrClientMappedBufferManager\\2c\\20std::__2::default_delete<GrClientMappedBufferManager>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4504:std::__2::unique_ptr<GrBufferAllocPool::CpuBufferCache::Buffer\\20\\5b\\5d\\2c\\20std::__2::default_delete<GrBufferAllocPool::CpuBufferCache::Buffer\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n4505:std::__2::unique_ptr<GrAuditTrail::OpNode\\2c\\20std::__2::default_delete<GrAuditTrail::OpNode>>::reset\\5babi:v160004\\5d\\28GrAuditTrail::OpNode*\\29\n4506:std::__2::unique_ptr<FT_SizeRec_\\2c\\20SkOverloadedFunctionObject<int\\20\\28FT_SizeRec_*\\29\\2c\\20&FT_Done_Size>>::reset\\5babi:v160004\\5d\\28FT_SizeRec_*\\29\n4507:std::__2::tuple<std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&>::tuple\\5babi:v160004\\5d<std::__2::\\28anonymous\\20namespace\\29::__fake_bind\\2c\\200>\\28std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&\\29\n4508:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\\2c\\20int\\2c\\20sktext::gpu::SubRunAllocator>\\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\\28int\\29::'lambda0'\\28\\29::operator\\28\\29\\28\\29\\20const\n4509:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\\2c\\20int\\2c\\20sktext::gpu::SubRunAllocator>\\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\\28int\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n4510:std::__2::tuple<SkPixmap&\\2c\\20SkMatrix&>&\\20std::__2::tuple<SkPixmap&\\2c\\20SkMatrix&>::operator=\\5babi:v160004\\5d<SkPixmap\\2c\\20SkMatrix\\2c\\200>\\28std::__2::pair<SkPixmap\\2c\\20SkMatrix>&&\\29\n4511:std::__2::to_string\\28unsigned\\20long\\29\n4512:std::__2::to_chars_result\\20std::__2::__to_chars_itoa\\5babi:v160004\\5d<unsigned\\20int>\\28char*\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20std::__2::integral_constant<bool\\2c\\20false>\\29\n4513:std::__2::time_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::~time_put\\28\\29.1\n4514:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_year\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n4515:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_weekdayname\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n4516:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__get_monthname\\28int&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\29\\20const\n4517:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_year\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n4518:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_weekdayname\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n4519:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__get_monthname\\28int&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20unsigned\\20int&\\2c\\20std::__2::ctype<char>\\20const&\\29\\20const\n4520:std::__2::shared_ptr<skia::textlayout::Run>::operator=\\5babi:v160004\\5d\\28std::__2::shared_ptr<skia::textlayout::Run>&&\\29\n4521:std::__2::reverse_iterator<std::__2::locale::facet**>::operator++\\5babi:v160004\\5d\\28\\29\n4522:std::__2::priority_queue<GrAATriangulator::Event*\\2c\\20std::__2::vector<GrAATriangulator::Event*\\2c\\20std::__2::allocator<GrAATriangulator::Event*>>\\2c\\20GrAATriangulator::EventComparator>::push\\28GrAATriangulator::Event*\\20const&\\29\n4523:std::__2::pair<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry>::pair\\28std::__2::pair<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry>&&\\29\n4524:std::__2::pair<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>>::~pair\\28\\29\n4525:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>>::~pair\\28\\29\n4526:std::__2::pair<char\\20const*\\2c\\20char*>\\20std::__2::__copy\\5babi:v160004\\5d<std::__2::_ClassicAlgPolicy\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char*>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\n4527:std::__2::pair<char\\20const*\\2c\\20char*>::pair\\5babi:v160004\\5d<char\\20const*\\2c\\20char*\\2c\\20\\28void*\\290>\\28char\\20const*&&\\2c\\20char*&&\\29\n4528:std::__2::pair<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>>::~pair\\28\\29\n4529:std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator=\\5babi:v160004\\5d\\28wchar_t\\29\n4530:std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator=\\5babi:v160004\\5d\\28char\\29\n4531:std::__2::optional<SkPath>&\\20std::__2::optional<SkPath>::operator=\\5babi:v160004\\5d<SkPath\\20const&\\2c\\20void>\\28SkPath\\20const&\\29\n4532:std::__2::optional<SkFont>::value\\5babi:v160004\\5d\\28\\29\\20&\n4533:std::__2::optional<SkColorSpaceXformSteps>::value\\5babi:v160004\\5d\\28\\29\\20&\n4534:std::__2::numpunct<wchar_t>::~numpunct\\28\\29.1\n4535:std::__2::numpunct<char>::~numpunct\\28\\29.1\n4536:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20int&\\29\\20const\n4537:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>>\\28std::__2::locale\\20const&\\29\n4538:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20int&\\29\\20const\n4539:std::__2::moneypunct<wchar_t\\2c\\20true>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<wchar_t\\2c\\20true>>\\28std::__2::locale\\20const&\\29\n4540:std::__2::moneypunct<wchar_t\\2c\\20false>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<wchar_t\\2c\\20false>>\\28std::__2::locale\\20const&\\29\n4541:std::__2::moneypunct<wchar_t\\2c\\20false>::do_negative_sign\\28\\29\\20const\n4542:std::__2::moneypunct<char\\2c\\20true>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<char\\2c\\20true>>\\28std::__2::locale\\20const&\\29\n4543:std::__2::moneypunct<char\\2c\\20false>\\20const&\\20std::__2::use_facet\\5babi:v160004\\5d<std::__2::moneypunct<char\\2c\\20false>>\\28std::__2::locale\\20const&\\29\n4544:std::__2::moneypunct<char\\2c\\20false>::do_negative_sign\\28\\29\\20const\n4545:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::__do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>&\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool&\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20std::__2::unique_ptr<wchar_t\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20wchar_t*&\\2c\\20wchar_t*\\29\n4546:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::__do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int&\\2c\\20bool&\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20std::__2::unique_ptr<char\\2c\\20void\\20\\28*\\29\\28void*\\29>&\\2c\\20char*&\\2c\\20char*\\29\n4547:std::__2::locale::operator=\\28std::__2::locale\\20const&\\29\n4548:std::__2::locale::__imp::~__imp\\28\\29.1\n4549:std::__2::list<GrGLFinishCallbacks::FinishCallback\\2c\\20std::__2::allocator<GrGLFinishCallbacks::FinishCallback>>::pop_front\\28\\29\n4550:std::__2::iterator_traits<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const*\\29\n4551:std::__2::iterator_traits<char*>::difference_type\\20std::__2::distance\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\29\n4552:std::__2::iterator_traits<char*>::difference_type\\20std::__2::__distance\\5babi:v160004\\5d<char*>\\28char*\\2c\\20char*\\2c\\20std::__2::random_access_iterator_tag\\29\n4553:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::operator++\\5babi:v160004\\5d\\28int\\29\n4554:std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::__test_for_eof\\5babi:v160004\\5d\\28\\29\\20const\n4555:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::operator++\\5babi:v160004\\5d\\28int\\29\n4556:std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>::__test_for_eof\\5babi:v160004\\5d\\28\\29\\20const\n4557:std::__2::ios_base::width\\5babi:v160004\\5d\\28long\\29\n4558:std::__2::ios_base::setstate\\5babi:v160004\\5d\\28unsigned\\20int\\29\n4559:std::__2::ios_base::clear\\28unsigned\\20int\\29\n4560:std::__2::ios_base::__call_callbacks\\28std::__2::ios_base::event\\29\n4561:std::__2::hash<std::__2::optional<skia::textlayout::FontArguments>>::operator\\28\\29\\5babi:v160004\\5d\\28std::__2::optional<skia::textlayout::FontArguments>\\20const&\\29\\20const\n4562:std::__2::function<void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29\\20const\n4563:std::__2::function<void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::operator\\28\\29\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\\20const\n4564:std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\\20const\n4565:std::__2::forward_list<SkSL::SwitchCase\\20const*\\2c\\20std::__2::allocator<SkSL::SwitchCase\\20const*>>::push_front\\28SkSL::SwitchCase\\20const*\\20const&\\29\n4566:std::__2::enable_if<true\\2c\\20void>::type\\20skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\\2c\\20skgpu::tess::Required<\\28skgpu::tess::PatchAttribs\\291>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\294>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\298>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2964>\\2c\\20skgpu::tess::Optional<\\28skgpu::tess::PatchAttribs\\2932>\\2c\\20skgpu::tess::ReplicateLineEndPoints\\2c\\20skgpu::tess::TrackJoinControlPoints>::writeDeferredStrokePatch<void>\\28\\29\n4567:std::__2::enable_if<std::is_trivially_copyable<float>::value\\2c\\20SkRuntimeEffectBuilder::BuilderUniform&>::type\\20SkRuntimeEffectBuilder::BuilderUniform::operator=<float>\\28float\\20const&\\29\n4568:std::__2::enable_if<std::is_trivially_copyable<SkV2>::value\\2c\\20SkRuntimeEffectBuilder::BuilderUniform&>::type\\20SkRuntimeEffectBuilder::BuilderUniform::operator=<SkV2>\\28SkV2\\20const&\\29\n4569:std::__2::enable_if<std::has_unique_object_representations<skia::textlayout::SkRange<unsigned\\20long>>::value\\20&&\\20sizeof\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29\\20!=\\204\\2c\\20unsigned\\20int>::type\\20SkGoodHash::operator\\28\\29<skia::textlayout::SkRange<unsigned\\20long>>\\28skia::textlayout::SkRange<unsigned\\20long>\\20const&\\29\\20const\n4570:std::__2::enable_if<std::has_unique_object_representations<bool>::value\\20&&\\20sizeof\\20\\28bool\\29\\20!=\\204\\2c\\20unsigned\\20int>::type\\20SkGoodHash::operator\\28\\29<bool>\\28bool\\20const&\\29\\20const\n4571:std::__2::enable_if<is_move_constructible<char>::value\\20&&\\20is_move_assignable<char>::value\\2c\\20void>::type\\20std::__2::swap\\5babi:v160004\\5d<char>\\28char&\\2c\\20char&\\29\n4572:std::__2::enable_if<__can_be_converted_to_string_view<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>>::value\\20&&\\20!__is_same_uncvref<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>::value\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&>::type\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::operator+=<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>>\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\20const&\\29\n4573:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot*>\\28skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot*\\29\n4574:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot*>\\28skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot*\\29\n4575:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot*>\\28skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot*\\29\n4576:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot*>\\28skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot*\\29\n4577:std::__2::enable_if<_CheckArrayPointerConversion<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot*>::value\\2c\\20void>::type\\20std::__2::unique_ptr<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>>::reset\\5babi:v160004\\5d<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot*>\\28skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot*\\29\n4578:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::back\\28\\29\n4579:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__add_back_capacity\\28\\29\n4580:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot*\\29\\20const\n4581:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot*\\29\\20const\n4582:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot*\\29\\20const\n4583:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot*\\29\\20const\n4584:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Slot*\\29\\20const\n4585:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot*\\29\\20const\n4586:std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot>\\28skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot*\\29\\20const\n4587:std::__2::default_delete<sk_sp<skgpu::Plot>\\20\\5b\\5d>::_EnableIfConvertible<sk_sp<skgpu::Plot>>::type\\20std::__2::default_delete<sk_sp<skgpu::Plot>\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<sk_sp<skgpu::Plot>>\\28sk_sp<skgpu::Plot>*\\29\\20const\n4588:std::__2::default_delete<GrGLCaps::ColorTypeInfo\\20\\5b\\5d>::_EnableIfConvertible<GrGLCaps::ColorTypeInfo>::type\\20std::__2::default_delete<GrGLCaps::ColorTypeInfo\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<GrGLCaps::ColorTypeInfo>\\28GrGLCaps::ColorTypeInfo*\\29\\20const\n4589:std::__2::ctype<char>::~ctype\\28\\29.1\n4590:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::~codecvt\\28\\29.1\n4591:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n4592:std::__2::codecvt<char32_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char32_t\\20const*\\2c\\20char32_t\\20const*\\2c\\20char32_t\\20const*&\\2c\\20char8_t*\\2c\\20char8_t*\\2c\\20char8_t*&\\29\\20const\n4593:std::__2::codecvt<char32_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char8_t\\20const*\\2c\\20char8_t\\20const*\\2c\\20unsigned\\20long\\29\\20const\n4594:std::__2::codecvt<char32_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char8_t\\20const*\\2c\\20char8_t\\20const*\\2c\\20char8_t\\20const*&\\2c\\20char32_t*\\2c\\20char32_t*\\2c\\20char32_t*&\\29\\20const\n4595:std::__2::codecvt<char16_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20char16_t\\20const*\\2c\\20char16_t\\20const*\\2c\\20char16_t\\20const*&\\2c\\20char8_t*\\2c\\20char8_t*\\2c\\20char8_t*&\\29\\20const\n4596:std::__2::codecvt<char16_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char8_t\\20const*\\2c\\20char8_t\\20const*\\2c\\20unsigned\\20long\\29\\20const\n4597:std::__2::codecvt<char16_t\\2c\\20char8_t\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char8_t\\20const*\\2c\\20char8_t\\20const*\\2c\\20char8_t\\20const*&\\2c\\20char16_t*\\2c\\20char16_t*\\2c\\20char16_t*&\\29\\20const\n4598:std::__2::char_traits<wchar_t>::eq_int_type\\28int\\2c\\20int\\29\n4599:std::__2::char_traits<char>::not_eof\\28int\\29\n4600:std::__2::char_traits<char>::find\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20char\\20const&\\29\n4601:std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_stringstream\\5babi:v160004\\5d\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int\\29\n4602:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::str\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n4603:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::str\\28\\29\\20const\n4604:std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>::substr\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n4605:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20wchar_t\\29\n4606:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::basic_string\\5babi:v160004\\5d<wchar_t\\20const*\\2c\\20void>\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\n4607:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__grow_by_and_replace\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20wchar_t\\20const*\\29\n4608:std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>::__grow_by\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n4609:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::pop_back\\5babi:v160004\\5d\\28\\29\n4610:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::insert\\28unsigned\\20long\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\n4611:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::basic_string\\5babi:v160004\\5d\\28unsigned\\20long\\2c\\20char\\29\n4612:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::__null_terminate_at\\5babi:v160004\\5d\\28char*\\2c\\20unsigned\\20long\\29\n4613:std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\20skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::emplace_back<char\\20const*>\\28char\\20const*&&\\29\n4614:std::__2::basic_streambuf<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>::sbumpc\\5babi:v160004\\5d\\28\\29\n4615:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sputc\\5babi:v160004\\5d\\28char\\29\n4616:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::sgetc\\5babi:v160004\\5d\\28\\29\n4617:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::basic_streambuf\\28\\29\n4618:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::~sentry\\28\\29\n4619:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::sentry::sentry\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\29\n4620:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::operator<<\\28float\\29\n4621:std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>::flush\\28\\29\n4622:std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.1\n4623:std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::basic_iostream\\5babi:v160004\\5d\\28std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>*\\29\n4624:std::__2::basic_ios<char\\2c\\20std::__2::char_traits<char>>::imbue\\5babi:v160004\\5d\\28std::__2::locale\\20const&\\29\n4625:std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::deallocate\\5babi:v160004\\5d\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20std::__2::locale::facet**\\2c\\20unsigned\\20long\\29\n4626:std::__2::allocator<skia::textlayout::TextShadow>::allocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n4627:std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\20std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>::insert<std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\2c\\200>\\28std::__2::__wrap_iter<SkSL::ProgramElement\\20const*\\20const*>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\2c\\20std::__2::__wrap_iter<SkSL::ProgramElement\\20const**>\\29\n4628:std::__2::__unwrap_iter_impl<char*\\2c\\20true>::__rewrap\\5babi:v160004\\5d\\28char*\\2c\\20char*\\29\n4629:std::__2::__unique_if<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&&\\29\n4630:std::__2::__unique_if<SkSL::TernaryExpression>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::TernaryExpression\\2c\\20SkSL::Position&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4631:std::__2::__unique_if<SkSL::ProgramUsage>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ProgramUsage>\\28\\29\n4632:std::__2::__unique_if<SkSL::Module>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::Module>\\28\\29\n4633:std::__2::__unique_if<SkSL::ConstructorStruct>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorStruct\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n4634:std::__2::__unique_if<SkSL::ConstructorSplat>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorSplat\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4635:std::__2::__unique_if<SkSL::ConstructorScalarCast>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorScalarCast\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4636:std::__2::__unique_if<SkSL::ConstructorMatrixResize>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorMatrixResize\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4637:std::__2::__unique_if<SkSL::ConstructorDiagonalMatrix>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorDiagonalMatrix\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4638:std::__2::__unique_if<SkSL::ConstructorCompoundCast>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorCompoundCast\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4639:std::__2::__unique_if<SkSL::ConstructorCompound>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorCompound\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n4640:std::__2::__unique_if<SkSL::ConstructorArrayCast>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArrayCast\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&&\\29\n4641:std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::ConstructorArray\\2c\\20SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray>\\28SkSL::Position&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray&&\\29\n4642:std::__2::__unique_if<SkSL::Block>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkSL::Block\\2c\\20SkSL::Position&\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind&\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>>\\28SkSL::Position&\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>&&\\2c\\20SkSL::Block::Kind&\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>&&\\29\n4643:std::__2::__unique_if<SkMemoryStream>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkMemoryStream\\2c\\20sk_sp<SkData>>\\28sk_sp<SkData>&&\\29\n4644:std::__2::__unique_if<SkBreakIterator_client>::__unique_single\\20std::__2::make_unique\\5babi:v160004\\5d<SkBreakIterator_client\\2c\\20std::__2::shared_ptr<SkUnicode_client::Data>&>\\28std::__2::shared_ptr<SkUnicode_client::Data>&\\29\n4645:std::__2::__tuple_impl<std::__2::__tuple_indices<0ul>\\2c\\20std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&>::__tuple_impl\\5babi:v160004\\5d<0ul\\2c\\20std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&\\2c\\20std::__2::\\28anonymous\\20namespace\\29::__fake_bind>\\28std::__2::__tuple_indices<0ul>\\2c\\20std::__2::__tuple_types<std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&>\\2c\\20std::__2::__tuple_indices<>\\2c\\20std::__2::__tuple_types<>\\2c\\20std::__2::\\28anonymous\\20namespace\\29::__fake_bind&&\\29\n4646:std::__2::__time_put::__time_put\\5babi:v160004\\5d\\28\\29\n4647:std::__2::__time_put::__do_put\\28char*\\2c\\20char*&\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n4648:std::__2::__throw_out_of_range\\5babi:v160004\\5d\\28char\\20const*\\29\n4649:std::__2::__throw_length_error\\5babi:v160004\\5d\\28char\\20const*\\29\n4650:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>&>::~__split_buffer\\28\\29\n4651:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>&\\29\n4652:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::pop_back\\5babi:v160004\\5d\\28\\29\n4653:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::__destruct_at_end\\5babi:v160004\\5d\\28skia::textlayout::OneLineShaper::RunBlock**\\2c\\20std::__2::integral_constant<bool\\2c\\20false>\\29\n4654:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>&>::push_back\\28skia::textlayout::OneLineShaper::RunBlock*&&\\29\n4655:std::__2::__split_buffer<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>&>::~__split_buffer\\28\\29\n4656:std::__2::__split_buffer<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>&>::~__split_buffer\\28\\29\n4657:std::__2::__split_buffer<SkSL::SlotDebugInfo\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkSL::SlotDebugInfo>&\\29\n4658:std::__2::__split_buffer<SkRTree::Node\\2c\\20std::__2::allocator<SkRTree::Node>&>::~__split_buffer\\28\\29\n4659:std::__2::__split_buffer<SkRTree::Node\\2c\\20std::__2::allocator<SkRTree::Node>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<SkRTree::Node>&\\29\n4660:std::__2::__split_buffer<SkMeshSpecification::Attribute\\2c\\20std::__2::allocator<SkMeshSpecification::Attribute>&>::~__split_buffer\\28\\29\n4661:std::__2::__shared_weak_count::__release_shared\\5babi:v160004\\5d\\28\\29\n4662:std::__2::__optional_destruct_base<skia::textlayout::FontArguments\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n4663:std::__2::__optional_destruct_base<SkMaskFilterBase::NinePatch\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n4664:std::__2::__optional_destruct_base<SkCanvas\\2c\\20false>::reset\\5babi:v160004\\5d\\28\\29\n4665:std::__2::__optional_destruct_base<GrStyledShape\\2c\\20false>::~__optional_destruct_base\\5babi:v160004\\5d\\28\\29\n4666:std::__2::__num_put<wchar_t>::__widen_and_group_int\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20std::__2::locale\\20const&\\29\n4667:std::__2::__num_put<wchar_t>::__widen_and_group_float\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20std::__2::locale\\20const&\\29\n4668:std::__2::__num_put<char>::__widen_and_group_int\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\2c\\20char*&\\2c\\20std::__2::locale\\20const&\\29\n4669:std::__2::__num_put<char>::__widen_and_group_float\\28char*\\2c\\20char*\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\2c\\20char*&\\2c\\20std::__2::locale\\20const&\\29\n4670:std::__2::__money_put<wchar_t>::__gather_info\\28bool\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20std::__2::money_base::pattern&\\2c\\20wchar_t&\\2c\\20wchar_t&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\2c\\20int&\\29\n4671:std::__2::__money_put<wchar_t>::__format\\28wchar_t*\\2c\\20wchar_t*&\\2c\\20wchar_t*&\\2c\\20unsigned\\20int\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20std::__2::ctype<wchar_t>\\20const&\\2c\\20bool\\2c\\20std::__2::money_base::pattern\\20const&\\2c\\20wchar_t\\2c\\20wchar_t\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\2c\\20int\\29\n4672:std::__2::__money_put<char>::__gather_info\\28bool\\2c\\20bool\\2c\\20std::__2::locale\\20const&\\2c\\20std::__2::money_base::pattern&\\2c\\20char&\\2c\\20char&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\2c\\20int&\\29\n4673:std::__2::__money_put<char>::__format\\28char*\\2c\\20char*&\\2c\\20char*&\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20std::__2::ctype<char>\\20const&\\2c\\20bool\\2c\\20std::__2::money_base::pattern\\20const&\\2c\\20char\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20int\\29\n4674:std::__2::__libcpp_sscanf_l\\28char\\20const*\\2c\\20__locale_struct*\\2c\\20char\\20const*\\2c\\20...\\29\n4675:std::__2::__libcpp_mbrtowc_l\\5babi:v160004\\5d\\28wchar_t*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20__mbstate_t*\\2c\\20__locale_struct*\\29\n4676:std::__2::__libcpp_mb_cur_max_l\\5babi:v160004\\5d\\28__locale_struct*\\29\n4677:std::__2::__libcpp_condvar_wait\\5babi:v160004\\5d\\28pthread_cond_t*\\2c\\20pthread_mutex_t*\\29\n4678:std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::__unordered_map_hasher<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>>>::__deallocate_node\\28std::__2::__hash_node_base<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20void*>*>*\\29\n4679:std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::__unordered_map_hasher<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>>>::__deallocate_node\\28std::__2::__hash_node_base<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::FPCoords>\\2c\\20void*>*>*\\29\n4680:std::__2::__hash_table<int\\2c\\20std::__2::hash<int>\\2c\\20std::__2::equal_to<int>\\2c\\20std::__2::allocator<int>>::__deallocate_node\\28std::__2::__hash_node_base<std::__2::__hash_node<int\\2c\\20void*>*>*\\29\n4681:std::__2::__function::__value_func<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::operator\\28\\29\\5babi:v160004\\5d\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20SkPoint&&\\2c\\20SkPoint&&\\2c\\20skia::textlayout::InternalLineMetrics&&\\2c\\20bool&&\\29\\20const\n4682:std::__2::__function::__value_func<void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::operator\\28\\29\\5babi:v160004\\5d\\28skia::textlayout::Block&&\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>&&\\29\\20const\n4683:std::__2::__function::__value_func<void\\20\\28\\29>::operator\\28\\29\\5babi:v160004\\5d\\28\\29\\20const\n4684:std::__2::__function::__value_func<skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::operator\\28\\29\\5babi:v160004\\5d\\28sk_sp<SkTypeface>&&\\29\\20const\n4685:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::~__func\\28\\29\n4686:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n4687:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n4688:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::~__func\\28\\29\n4689:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n4690:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n4691:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29\n4692:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29\n4693:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::operator\\28\\29\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\n4694:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::destroy_deallocate\\28\\29\n4695:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::destroy\\28\\29\n4696:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29\n4697:std::__2::__forward_list_base<sk_sp<GrGpuBuffer>\\2c\\20std::__2::allocator<sk_sp<GrGpuBuffer>>>::clear\\28\\29\n4698:std::__2::__exception_guard_exceptions<std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__destroy_vector>::~__exception_guard_exceptions\\5babi:v160004\\5d\\28\\29\n4699:std::__2::__exception_guard_exceptions<std::__2::vector<SkRuntimeEffect::ChildPtr\\2c\\20std::__2::allocator<SkRuntimeEffect::ChildPtr>>::__destroy_vector>::~__exception_guard_exceptions\\5babi:v160004\\5d\\28\\29\n4700:std::__2::__exception_guard_exceptions<std::__2::_AllocatorDestroyRangeReverse<std::__2::allocator<SkString>\\2c\\20SkString*>>::~__exception_guard_exceptions\\5babi:v160004\\5d\\28\\29\n4701:std::__2::__constexpr_wcslen\\5babi:v160004\\5d\\28wchar_t\\20const*\\29\n4702:std::__2::__compressed_pair_elem<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\200\\2c\\20false>::__compressed_pair_elem\\5babi:v160004\\5d<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\20const&\\2c\\200ul>\\28std::__2::piecewise_construct_t\\2c\\20std::__2::tuple<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\20const&>\\2c\\20std::__2::__tuple_indices<0ul>\\29\n4703:std::__2::__compressed_pair_elem<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\200\\2c\\20false>::__compressed_pair_elem\\5babi:v160004\\5d<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\20const&\\2c\\200ul>\\28std::__2::piecewise_construct_t\\2c\\20std::__2::tuple<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\20const&>\\2c\\20std::__2::__tuple_indices<0ul>\\29\n4704:std::__2::__compressed_pair<unsigned\\20char*\\2c\\20void\\20\\28*\\29\\28void*\\29>::__compressed_pair\\5babi:v160004\\5d<unsigned\\20char*&\\2c\\20void\\20\\28*\\29\\28void*\\29>\\28unsigned\\20char*&\\2c\\20void\\20\\28*&&\\29\\28void*\\29\\29\n4705:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>::pointer>\\20std::__2::__allocate_at_least\\5babi:v160004\\5d<std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>>\\28std::__2::__sso_allocator<std::__2::locale::facet*\\2c\\2030ul>&\\2c\\20unsigned\\20long\\29\n4706:srgb_to_hsl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n4707:sort_r_swap_blocks\\28char*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n4708:sort_increasing_Y\\28SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n4709:sort_edges\\28SkEdge**\\2c\\20int\\2c\\20SkEdge**\\29\n4710:sort_as_rect\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n4711:small_blur\\28double\\2c\\20double\\2c\\20SkMask\\20const&\\2c\\20SkMaskBuilder*\\29::$_0::operator\\28\\29\\28SkGaussFilter\\20const&\\2c\\20unsigned\\20short*\\29\\20const\n4712:skvx::Vec<8\\2c\\20unsigned\\20int>\\20skvx::cast<unsigned\\20int\\2c\\208\\2c\\20unsigned\\20short>\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\29\n4713:skvx::Vec<4\\2c\\20unsigned\\20short>\\20skvx::operator>><4\\2c\\20unsigned\\20short>\\28skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\2c\\20int\\29\n4714:skvx::Vec<4\\2c\\20unsigned\\20short>\\20skvx::operator<<<4\\2c\\20unsigned\\20short>\\28skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\2c\\20int\\29\n4715:skvx::Vec<4\\2c\\20unsigned\\20int>\\20skvx::operator>><4\\2c\\20unsigned\\20int>\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\2c\\20int\\29\n4716:skvx::Vec<4\\2c\\20unsigned\\20int>\\20skvx::operator*<4\\2c\\20unsigned\\20int>\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\n4717:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator!=<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n4718:skvx::Vec<4\\2c\\20skvx::Mask<float>::type>\\20skvx::operator!=<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n4719:skvx::Vec<4\\2c\\20int>\\20skvx::operator^<4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\2c\\20skvx::Vec<4\\2c\\20int>\\20const&\\29\n4720:skvx::Vec<4\\2c\\20int>\\20skvx::operator>><4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\2c\\20int\\29\n4721:skvx::Vec<4\\2c\\20int>\\20skvx::operator<<<4\\2c\\20int>\\28skvx::Vec<4\\2c\\20int>\\20const&\\2c\\20int\\29\n4722:skvx::Vec<4\\2c\\20float>\\20skvx::sqrt<4>\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n4723:skvx::Vec<4\\2c\\20float>\\20skvx::operator/<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n4724:skvx::Vec<4\\2c\\20float>\\20skvx::operator/<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n4725:skvx::Vec<4\\2c\\20float>\\20skvx::operator-<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20float\\29\n4726:skvx::Vec<4\\2c\\20float>\\20skvx::operator-<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n4727:skvx::Vec<4\\2c\\20float>\\20skvx::operator*<4\\2c\\20float\\2c\\20int\\2c\\20void>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20int\\29\n4728:skvx::Vec<4\\2c\\20float>\\20skvx::min<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n4729:skvx::Vec<4\\2c\\20float>\\20skvx::min<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20\\28.5782\\29\n4730:skvx::Vec<4\\2c\\20float>\\20skvx::max<4\\2c\\20float\\2c\\20float\\2c\\20void>\\28float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n4731:skvx::Vec<4\\2c\\20float>\\20skvx::from_half<4>\\28skvx::Vec<4\\2c\\20unsigned\\20short>\\20const&\\29\n4732:skvx::Vec<4\\2c\\20float>&\\20skvx::operator*=<4\\2c\\20float>\\28skvx::Vec<4\\2c\\20float>&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20\\28.6686\\29\n4733:skvx::Vec<2\\2c\\20unsigned\\20char>\\20skvx::cast<unsigned\\20char\\2c\\202\\2c\\20float>\\28skvx::Vec<2\\2c\\20float>\\20const&\\29\n4734:skvx::ScaledDividerU32::divide\\28skvx::Vec<4\\2c\\20unsigned\\20int>\\20const&\\29\\20const\n4735:skvx::ScaledDividerU32::ScaledDividerU32\\28unsigned\\20int\\29\n4736:sktext::gpu::can_use_direct\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n4737:sktext::gpu::build_distance_adjust_table\\28float\\2c\\20float\\29\n4738:sktext::gpu::VertexFiller::fillVertexData\\28int\\2c\\20int\\2c\\20SkSpan<sktext::gpu::Glyph\\20const*>\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\2c\\20void*\\29\\20const\n4739:sktext::gpu::TextBlobRedrawCoordinator::internalRemove\\28sktext::gpu::TextBlob*\\29\n4740:sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry::findBlobIndex\\28sktext::gpu::TextBlob::Key\\20const&\\29\\20const\n4741:sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry::BlobIDCacheEntry\\28sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry&&\\29\n4742:sktext::gpu::TextBlob::~TextBlob\\28\\29\n4743:sktext::gpu::SubRunContainer::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20SkRefCnt\\20const*\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n4744:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29::$_2::operator\\28\\29\\28SkZip<SkPackedGlyphID\\20const\\2c\\20SkPoint\\20const>\\2c\\20skgpu::MaskFormat\\29\\20const\n4745:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29::$_0::operator\\28\\29\\28SkZip<SkPackedGlyphID\\20const\\2c\\20SkPoint\\20const>\\2c\\20skgpu::MaskFormat\\29\\20const\n4746:sktext::gpu::SubRunContainer::MakeInAlloc\\28sktext::GlyphRunList\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20sktext::StrikeForGPUCacheInterface*\\2c\\20sktext::gpu::SubRunAllocator*\\2c\\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\\2c\\20char\\20const*\\29\n4747:sktext::gpu::SubRunContainer::EstimateAllocSize\\28sktext::GlyphRunList\\20const&\\29\n4748:sktext::gpu::SubRunAllocator::SubRunAllocator\\28int\\29\n4749:sktext::gpu::SlugImpl::~SlugImpl\\28\\29\n4750:sktext::gpu::SDFTControl::isSDFT\\28float\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n4751:sktext::SkStrikePromise::resetStrike\\28\\29\n4752:sktext::GlyphRunList::maxGlyphRunSize\\28\\29\\20const\n4753:sktext::GlyphRunBuilder::~GlyphRunBuilder\\28\\29\n4754:sktext::GlyphRunBuilder::makeGlyphRunList\\28sktext::GlyphRun\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPoint\\29\n4755:sktext::GlyphRunBuilder::blobToGlyphRunList\\28SkTextBlob\\20const&\\2c\\20SkPoint\\29\n4756:skstd::to_string\\28float\\29\n4757:skip_string\n4758:skip_procedure\n4759:skip_comment\n4760:skif::compatible_sampling\\28SkSamplingOptions\\20const&\\2c\\20bool\\2c\\20SkSamplingOptions*\\2c\\20bool\\29\n4761:skif::\\28anonymous\\20namespace\\29::decompose_transform\\28SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkMatrix*\\2c\\20SkMatrix*\\29\n4762:skif::\\28anonymous\\20namespace\\29::are_axes_nearly_integer_aligned\\28skif::LayerSpace<SkMatrix>\\20const&\\2c\\20skif::LayerSpace<SkIPoint>*\\29\n4763:skif::\\28anonymous\\20namespace\\29::GaneshBackend::maxSigma\\28\\29\\20const\n4764:skif::\\28anonymous\\20namespace\\29::GaneshBackend::blur\\28SkSize\\2c\\20sk_sp<SkSpecialImage>\\2c\\20SkIRect\\20const&\\2c\\20SkTileMode\\2c\\20SkIRect\\20const&\\29\\20const\n4765:skif::LayerSpace<SkSize>\\20skif::Mapping::paramToLayer<SkSize>\\28skif::ParameterSpace<SkSize>\\20const&\\29\\20const\n4766:skif::LayerSpace<SkMatrix>::postConcat\\28skif::LayerSpace<SkMatrix>\\20const&\\29\n4767:skif::LayerSpace<SkMatrix>::inverseMapRect\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20skif::LayerSpace<SkIRect>*\\29\\20const\n4768:skif::LayerSpace<SkIRect>::inset\\28skif::LayerSpace<SkISize>\\20const&\\29\n4769:skif::FilterResult::subset\\28skif::LayerSpace<SkIPoint>\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\\20const\n4770:skif::FilterResult::imageAndOffset\\28skif::Context\\20const&\\29\\20const\n4771:skif::FilterResult::applyTransform\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkMatrix>\\20const&\\2c\\20SkSamplingOptions\\20const&\\29\\20const\n4772:skif::FilterResult::applyCrop\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20SkTileMode\\29\\20const\n4773:skif::FilterResult::FilterResult\\28sk_sp<SkSpecialImage>\\29\n4774:skif::FilterResult::Builder::drawShader\\28sk_sp<SkShader>\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\\20const\n4775:skif::FilterResult::Builder::createInputShaders\\28skif::LayerSpace<SkIRect>\\20const&\\2c\\20bool\\29\n4776:skia_private::THashTable<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashSet<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkGoodHash>::Traits>::uncheckedSet\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>&&\\29\n4777:skia_private::THashTable<sktext::gpu::Glyph*\\2c\\20SkPackedGlyphID\\2c\\20sktext::gpu::TextStrike::HashTraits>::uncheckedSet\\28sktext::gpu::Glyph*&&\\29\n4778:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair&&\\29\n4779:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n4780:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::removeIfExists\\28unsigned\\20int\\20const&\\29\n4781:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<unsigned\\20int\\2c\\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4782:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n4783:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrResourceAllocator::Interval*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrResourceAllocator::Interval*\\2c\\20GrCheapHash>::Pair>::reset\\28\\29\n4784:skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrCheapHash>::Pair>::resize\\28int\\29\n4785:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::uncheckedSet\\28skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair&&\\29\n4786:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot::reset\\28\\29\n4787:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Slot::emplace\\28skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair&&\\2c\\20unsigned\\20int\\29\n4788:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\\2c\\20skia::textlayout::OneLineShaper::FontKey\\2c\\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\\2c\\20sk_sp<SkTypeface>\\2c\\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::Hash\\28skia::textlayout::OneLineShaper::FontKey\\20const&\\29\n4789:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::uncheckedSet\\28skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair&&\\29\n4790:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot::reset\\28\\29\n4791:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Slot::emplace\\28skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair&&\\2c\\20unsigned\\20int\\29\n4792:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\\2c\\20skia::textlayout::FontCollection::FamilyKey\\2c\\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\\2c\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>\\2c\\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::Hash\\28skia::textlayout::FontCollection::FamilyKey\\20const&\\29\n4793:skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::uncheckedSet\\28skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair&&\\29\n4794:skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::reset\\28\\29\n4795:skia_private::THashTable<skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair\\2c\\20skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20skia_private::THashMap<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\2c\\20SkIPoint16\\2c\\20SkForceDirectHash<skgpu::ganesh::AtlasPathRenderer::AtlasPathKey>>::Pair>::Hash\\28skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\20const&\\29\n4796:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::uncheckedSet\\28skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair&&\\29\n4797:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot::reset\\28\\29\n4798:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair\\2c\\20skgpu::UniqueKey\\2c\\20skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair>::Slot::emplace\\28skia_private::THashMap<skgpu::UniqueKey\\2c\\20GrResourceAllocator::Register*\\2c\\20GrResourceAllocator::UniqueKeyHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4799:skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair&&\\29\n4800:skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::Slot::reset\\28\\29\n4801:skia_private::THashTable<skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair\\2c\\20int\\2c\\20skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4802:skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair&&\\29\n4803:skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::Slot::reset\\28\\29\n4804:skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4805:skia_private::THashTable<skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair\\2c\\20SkString\\2c\\20skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::Pair>::Hash\\28SkString\\20const&\\29\n4806:skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair&&\\29\n4807:skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair>::Slot::reset\\28\\29\n4808:skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4809:skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair&&\\29\n4810:skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair>::firstPopulatedSlot\\28\\29\\20const\n4811:skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair>::Iter<std::__2::pair<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts>>::operator++\\28\\29\n4812:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair&&\\29\n4813:skia_private::THashTable<skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Type\\20const*\\2c\\20skia_private::THashMap<SkSL::Type\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::Pair>::Slot::reset\\28\\29\n4814:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair&&\\29\n4815:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\\2c\\20SkSL::SymbolTable::SymbolKey\\2c\\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\\2c\\20SkSL::Symbol*\\2c\\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::resize\\28int\\29\n4816:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::IRNode\\20const*\\2c\\20skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair&&\\29\n4817:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::IRNode\\20const*\\2c\\20skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair>::set\\28skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair\\29\n4818:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::IRNode\\20const*\\2c\\20skia_private::THashMap<SkSL::IRNode\\20const*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n4819:skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair&&\\29\n4820:skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::Slot::reset\\28\\29\n4821:skia_private::THashTable<skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair\\2c\\20SkPath\\2c\\20skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair>::Slot::emplace\\28skia_private::THashMap<SkPath\\2c\\20int\\2c\\20SkPictureRecord::PathHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4822:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::uncheckedSet\\28skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair&&\\29\n4823:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n4824:skia_private::THashTable<skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair\\2c\\20SkImageFilter\\20const*\\2c\\20skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair>::Slot::emplace\\28skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair&&\\2c\\20unsigned\\20int\\29\n4825:skia_private::THashTable<skia_private::THashMap<GrSurfaceProxy*\\2c\\20GrRenderTask*\\2c\\20SkGoodHash>::Pair\\2c\\20GrSurfaceProxy*\\2c\\20skia_private::THashMap<GrSurfaceProxy*\\2c\\20GrRenderTask*\\2c\\20SkGoodHash>::Pair>::resize\\28int\\29\n4826:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::uncheckedSet\\28skgpu::ganesh::SmallPathShapeData*&&\\29\n4827:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::resize\\28int\\29\n4828:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\\2c\\20skgpu::ganesh::SmallPathShapeDataKey\\2c\\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::removeIfExists\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n4829:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::uncheckedSet\\28sk_sp<sktext::gpu::TextStrike>&&\\29\n4830:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::reset\\28\\29\n4831:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot::reset\\28\\29\n4832:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\\2c\\20SkDescriptor\\20const&\\2c\\20sktext::gpu::StrikeCache::HashTraits>::Slot::emplace\\28sk_sp<sktext::gpu::TextStrike>&&\\2c\\20unsigned\\20int\\29\n4833:skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::uncheckedSet\\28sk_sp<SkStrike>&&\\29\n4834:skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::resize\\28int\\29\n4835:skia_private::THashTable<sk_sp<SkStrike>\\2c\\20SkDescriptor\\2c\\20SkStrikeCache::StrikeTraits>::Slot::emplace\\28sk_sp<SkStrike>&&\\2c\\20unsigned\\20int\\29\n4836:skia_private::THashTable<int\\2c\\20int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>::Traits>::set\\28int\\29\n4837:skia_private::THashTable<int\\2c\\20int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>::Traits>::THashTable\\28skia_private::THashTable<int\\2c\\20int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>::Traits>&&\\29\n4838:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::uncheckedSet\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*&&\\29\n4839:skia_private::THashTable<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20SkImageFilterCacheKey\\2c\\20SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::AdaptedTraits>::resize\\28int\\29\n4840:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::uncheckedSet\\28SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*&&\\29\n4841:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::resize\\28int\\29\n4842:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::findOrNull\\28skgpu::ScratchKey\\20const&\\29\\20const\n4843:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::uncheckedSet\\28SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*&&\\29\n4844:skia_private::THashTable<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList*\\2c\\20skgpu::ScratchKey\\2c\\20SkTDynamicHash<SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList\\2c\\20skgpu::ScratchKey\\2c\\20SkTMultiMap<GrGpuResource\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::resize\\28int\\29\n4845:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::uncheckedSet\\28SkSL::Variable\\20const*&&\\29\n4846:skia_private::THashTable<SkSL::Variable\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashSet<SkSL::Variable\\20const*\\2c\\20SkGoodHash>::Traits>::resize\\28int\\29\n4847:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::uncheckedSet\\28SkResourceCache::Rec*&&\\29\n4848:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::resize\\28int\\29\n4849:skia_private::THashTable<SkResourceCache::Rec*\\2c\\20SkResourceCache::Key\\2c\\20\\28anonymous\\20namespace\\29::HashTraits>::find\\28SkResourceCache::Key\\20const&\\29\\20const\n4850:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::uncheckedSet\\28SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*&&\\29\n4851:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::resize\\28int\\29\n4852:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\2c\\20skia::textlayout::ParagraphCacheKey\\2c\\20SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::find\\28skia::textlayout::ParagraphCacheKey\\20const&\\29\\20const\n4853:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::uncheckedSet\\28SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*&&\\29\n4854:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::resize\\28int\\29\n4855:skia_private::THashTable<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\2c\\20GrProgramDesc\\2c\\20SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Traits>::find\\28GrProgramDesc\\20const&\\29\\20const\n4856:skia_private::THashTable<SkGlyphDigest\\2c\\20SkPackedGlyphID\\2c\\20SkGlyphDigest>::uncheckedSet\\28SkGlyphDigest&&\\29\n4857:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::uncheckedSet\\28GrThreadSafeCache::Entry*&&\\29\n4858:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::resize\\28int\\29\n4859:skia_private::THashTable<GrThreadSafeCache::Entry*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\2c\\20GrThreadSafeCache::Entry>::AdaptedTraits>::removeIfExists\\28skgpu::UniqueKey\\20const&\\29\n4860:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::uncheckedSet\\28GrTextureProxy*&&\\29\n4861:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::set\\28GrTextureProxy*\\29\n4862:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::resize\\28int\\29\n4863:skia_private::THashTable<GrTextureProxy*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrTextureProxy\\2c\\20skgpu::UniqueKey\\2c\\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::findOrNull\\28skgpu::UniqueKey\\20const&\\29\\20const\n4864:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::uncheckedSet\\28GrGpuResource*&&\\29\n4865:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::resize\\28int\\29\n4866:skia_private::THashTable<GrGpuResource*\\2c\\20skgpu::UniqueKey\\2c\\20SkTDynamicHash<GrGpuResource\\2c\\20skgpu::UniqueKey\\2c\\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::findOrNull\\28skgpu::UniqueKey\\20const&\\29\\20const\n4867:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::uncheckedSet\\28FT_Opaque_Paint_&&\\29\n4868:skia_private::THashTable<FT_Opaque_Paint_\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::Traits>::resize\\28int\\29\n4869:skia_private::THashSet<int\\2c\\20SkGoodHash>::contains\\28int\\20const&\\29\\20const\n4870:skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::contains\\28FT_Opaque_Paint_\\20const&\\29\\20const\n4871:skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>::add\\28FT_Opaque_Paint_\\29\n4872:skia_private::THashMap<unsigned\\20int\\2c\\20int\\2c\\20SkGoodHash>::find\\28unsigned\\20int\\20const&\\29\\20const\n4873:skia_private::THashMap<int\\2c\\20skia_private::THashSet<int\\2c\\20SkGoodHash>\\2c\\20SkGoodHash>::find\\28int\\20const&\\29\\20const\n4874:skia_private::THashMap<SkString\\2c\\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\\2c\\20SkGoodHash>::find\\28SkString\\20const&\\29\\20const\n4875:skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20SkGoodHash>::set\\28SkSL::Variable\\20const*\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n4876:skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::operator\\5b\\5d\\28SkSL::Symbol\\20const*\\20const&\\29\n4877:skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20int\\2c\\20SkGoodHash>::set\\28SkSL::FunctionDeclaration\\20const*\\2c\\20int\\29\n4878:skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20int\\2c\\20SkGoodHash>::operator\\5b\\5d\\28SkSL::FunctionDeclaration\\20const*\\20const&\\29\n4879:skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::remove\\28SkImageFilter\\20const*\\20const&\\29\n4880:skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair::Pair\\28skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::Pair&&\\29\n4881:skia_private::THashMap<GrSurfaceProxy*\\2c\\20GrRenderTask*\\2c\\20SkGoodHash>::find\\28GrSurfaceProxy*\\20const&\\29\\20const\n4882:skia_private::TArray<unsigned\\20short\\2c\\20true>::push_back_raw\\28int\\29\n4883:skia_private::TArray<unsigned\\20short\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4884:skia_private::TArray<unsigned\\20int\\2c\\20true>::operator=\\28skia_private::TArray<unsigned\\20int\\2c\\20true>\\20const&\\29\n4885:skia_private::TArray<unsigned\\20char\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4886:skia_private::TArray<unsigned\\20char\\2c\\20true>::operator=\\28skia_private::TArray<unsigned\\20char\\2c\\20true>\\20const&\\29\n4887:skia_private::TArray<unsigned\\20char\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n4888:skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>::~TArray\\28\\29\n4889:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>::operator=\\28skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20true>&&\\29\n4890:skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor::ProgramImpl\\2c\\20std::__2::default_delete<GrFragmentProcessor::ProgramImpl>>\\2c\\20true>::~TArray\\28\\29\n4891:skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4892:skia_private::TArray<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20false>::checkRealloc\\28int\\2c\\20double\\29\n4893:skia_private::TArray<std::__2::array<unsigned\\20short\\2c\\203ul>\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4894:skia_private::TArray<std::__2::array<unsigned\\20short\\2c\\203ul>\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4895:skia_private::TArray<skia::textlayout::TextStyle\\2c\\20true>::destroyAll\\28\\29\n4896:skia_private::TArray<skia::textlayout::TextLine\\2c\\20false>::destroyAll\\28\\29\n4897:skia_private::TArray<skia::textlayout::StyleBlock<SkPaint>\\2c\\20false>::~TArray\\28\\29\n4898:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::~TArray\\28\\29\n4899:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::destroyAll\\28\\29\n4900:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::copy\\28skia::textlayout::Run\\20const*\\29\n4901:skia_private::TArray<skia::textlayout::Run\\2c\\20false>::Allocate\\28int\\2c\\20double\\29\n4902:skia_private::TArray<skia::textlayout::ResolvedFontDescriptor\\2c\\20false>::destroyAll\\28\\29\n4903:skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>::initData\\28int\\29\n4904:skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>::destroyAll\\28\\29\n4905:skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>::TArray\\28skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>&&\\29\n4906:skia_private::TArray<skia::textlayout::Placeholder\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n4907:skia_private::TArray<skia::textlayout::Cluster\\2c\\20true>::copy\\28skia::textlayout::Cluster\\20const*\\29\n4908:skia_private::TArray<skia::textlayout::Cluster\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4909:skia_private::TArray<skia::textlayout::Cluster\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n4910:skia_private::TArray<skia::textlayout::Block\\2c\\20true>::initData\\28int\\29\n4911:skia_private::TArray<skia::textlayout::Block\\2c\\20true>::destroyAll\\28\\29\n4912:skia_private::TArray<skia::textlayout::Block\\2c\\20true>::TArray\\28skia_private::TArray<skia::textlayout::Block\\2c\\20true>&&\\29\n4913:skia_private::TArray<skia::textlayout::Block\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n4914:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::Entry\\2c\\20false>::preallocateNewData\\28int\\2c\\20double\\29\n4915:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::Entry\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4916:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::Segment\\2c\\20true>::push_back\\28\\29\n4917:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::Draw\\2c\\20true>::push_back\\28\\29\n4918:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::PathData\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4919:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::PathData\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4920:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::PathData\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4921:skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::PathData\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4922:skia_private::TArray<skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::RegionInfo\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4923:skia_private::TArray<skgpu::ganesh::OpsTask::OpChain\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4924:skia_private::TArray<skgpu::ganesh::OpsTask::OpChain\\2c\\20true>::destroyAll\\28\\29\n4925:skia_private::TArray<skgpu::ganesh::OpsTask::OpChain\\2c\\20true>::clear\\28\\29\n4926:skia_private::TArray<skgpu::ganesh::OpsTask::OpChain\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4927:skia_private::TArray<skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::Patch\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4928:skia_private::TArray<skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::LineData\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4929:skia_private::TArray<skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::LineData\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4930:skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4931:skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4932:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::preallocateNewData\\28int\\2c\\20double\\29\n4933:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::operator=\\28skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>&&\\29\n4934:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4935:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::destroyAll\\28\\29\n4936:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::clear\\28\\29\n4937:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\\2c\\20false>::Allocate\\28int\\2c\\20double\\29\n4938:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::operator=\\28skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>&&\\29\n4939:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4940:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::destroyAll\\28\\29\n4941:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::BufferFinishedMessage\\2c\\20false>::clear\\28\\29\n4942:skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\\2c\\20false>::preallocateNewData\\28int\\2c\\20double\\29\n4943:skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4944:skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\\2c\\20true>::operator=\\28skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\\2c\\20true>&&\\29\n4945:skia_private::TArray<sk_sp<SkVertices\\20const>\\2c\\20true>::~TArray\\28\\29\n4946:skia_private::TArray<sk_sp<SkTextBlob\\20const>\\2c\\20true>::~TArray\\28\\29\n4947:skia_private::TArray<sk_sp<SkShader>\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4948:skia_private::TArray<sk_sp<SkIDChangeListener>\\2c\\20true>::clear\\28\\29\n4949:skia_private::TArray<signed\\20char\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4950:skia_private::TArray<signed\\20char\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4951:skia_private::TArray<int\\2c\\20true>::push_back_raw\\28int\\29\n4952:skia_private::TArray<hb_feature_t\\2c\\20true>::push_back\\28hb_feature_t&&\\29\n4953:skia_private::TArray<float\\2c\\20true>::resize_back\\28int\\29\n4954:skia_private::TArray<float\\2c\\20true>::reset\\28int\\29\n4955:skia_private::TArray<float\\2c\\20true>::operator=\\28skia_private::TArray<float\\2c\\20true>\\20const&\\29\n4956:skia_private::TArray<bool\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4957:skia_private::TArray<\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::Geometry\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4958:skia_private::TArray<\\28anonymous\\20namespace\\29::DefaultPathOp::PathData\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4959:skia_private::TArray<\\28anonymous\\20namespace\\29::AAHairlineOp::PathData\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4960:skia_private::TArray<\\28anonymous\\20namespace\\29::AAHairlineOp::PathData\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4961:skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>::push_back_n\\28int\\2c\\20SkUnicode::CodeUnitFlags\\20const&\\29\n4962:skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4963:skia_private::TArray<SkString\\2c\\20true>::operator=\\28skia_private::TArray<SkString\\2c\\20true>&&\\29\n4964:skia_private::TArray<SkString\\2c\\20true>::destroyAll\\28\\29\n4965:skia_private::TArray<SkShaper::Feature\\2c\\20true>::initData\\28int\\29\n4966:skia_private::TArray<SkShaper::Feature\\2c\\20true>::TArray\\28skia_private::TArray<SkShaper::Feature\\2c\\20true>\\20const&\\29\n4967:skia_private::TArray<SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument\\2c\\20false>::push_back\\28SkSL::optimize_constructor_swizzle\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ConstructorCompound\\20const&\\2c\\20skia_private::STArray<4\\2c\\20signed\\20char\\2c\\20true>\\29::ReorderedArgument&&\\29\n4968:skia_private::TArray<SkSL::Variable*\\2c\\20true>::reserve_exact\\28int\\29\n4969:skia_private::TArray<SkSL::RP::Instruction\\2c\\20true>::fromBack\\28int\\29\n4970:skia_private::TArray<SkSL::RP::Instruction\\2c\\20true>::TArray\\28skia_private::TArray<SkSL::RP::Instruction\\2c\\20true>&&\\29\n4971:skia_private::TArray<SkSL::RP::Instruction\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n4972:skia_private::TArray<SkSL::Field\\2c\\20true>::push_back\\28SkSL::Field&&\\29\n4973:skia_private::TArray<SkSL::Field\\2c\\20true>::initData\\28int\\29\n4974:skia_private::TArray<SkSL::Field\\2c\\20true>::Allocate\\28int\\2c\\20double\\29\n4975:skia_private::TArray<SkRuntimeEffect::ChildPtr\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4976:skia_private::TArray<SkRuntimeEffect::ChildPtr\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4977:skia_private::TArray<SkRuntimeEffect::ChildPtr\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4978:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::push_back\\28SkRGBA4f<\\28SkAlphaType\\292>&&\\29\n4979:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::operator=\\28skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>&&\\29\n4980:skia_private::TArray<SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4981:skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>\\20const&\\29\n4982:skia_private::TArray<SkPoint\\2c\\20true>::operator=\\28skia_private::TArray<SkPoint\\2c\\20true>&&\\29\n4983:skia_private::TArray<SkPath\\2c\\20true>::~TArray\\28\\29\n4984:skia_private::TArray<SkPath\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4985:skia_private::TArray<SkPath\\2c\\20true>::destroyAll\\28\\29\n4986:skia_private::TArray<SkPaint\\2c\\20true>::~TArray\\28\\29\n4987:skia_private::TArray<SkPaint\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4988:skia_private::TArray<SkPaint\\2c\\20true>::destroyAll\\28\\29\n4989:skia_private::TArray<SkNoPixelsDevice::ClipState\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n4990:skia_private::TArray<SkNoPixelsDevice::ClipState\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4991:skia_private::TArray<SkMeshSpecification::Varying\\2c\\20false>::preallocateNewData\\28int\\2c\\20double\\29\n4992:skia_private::TArray<SkMeshSpecification::Varying\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4993:skia_private::TArray<SkMask::Format\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4994:skia_private::TArray<SkFontScanner::AxisDefinition\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n4995:skia_private::TArray<SkClosestRecord\\2c\\20true>::push_back\\28\\29\n4996:skia_private::TArray<SkCanvas::ImageSetEntry\\2c\\20false>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n4997:skia_private::TArray<PathSegment\\2c\\20true>::push_back\\28\\29\n4998:skia_private::TArray<OffsetEdge\\2c\\20true>::push_back_raw\\28int\\29\n4999:skia_private::TArray<OffsetEdge\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n5000:skia_private::TArray<GrVertexChunk\\2c\\20true>::~TArray\\28\\29\n5001:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::operator=\\28skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>&&\\29\n5002:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::destroyAll\\28\\29\n5003:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::clear\\28\\29\n5004:skia_private::TArray<GrResourceCache::UnrefResourceMessage\\2c\\20false>::Allocate\\28int\\2c\\20double\\29\n5005:skia_private::TArray<GrMipLevel\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n5006:skia_private::TArray<GrGLFormat\\2c\\20true>::push_back\\28\\29\n5007:skia_private::TArray<GrGLAttribArrayState::AttribArrayState\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n5008:skia_private::TArray<GrBufferAllocPool::BufferBlock\\2c\\20true>::pop_back\\28\\29\n5009:skia_private::TArray<GrBufferAllocPool::BufferBlock\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n5010:skia_private::TArray<EllipticalRRectOp::RRect\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n5011:skia_private::TArray<CircleOp::Circle\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n5012:skia_private::TArray<CircleOp::Circle\\2c\\20true>::installDataAndUpdateCapacity\\28SkSpan<std::byte>\\29\n5013:skia_private::TArray<ButtCapDashedCircleOp::Circle\\2c\\20true>::preallocateNewData\\28int\\2c\\20double\\29\n5014:skia_private::STArray<8\\2c\\20int\\2c\\20true>::STArray\\28int\\29\n5015:skia_private::STArray<4\\2c\\20unsigned\\20char\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20unsigned\\20char\\2c\\20true>&&\\29\n5016:skia_private::STArray<4\\2c\\20SkPoint\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20SkPoint\\2c\\20true>&&\\29\n5017:skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>::STArray\\28skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>\\20const&\\29\n5018:skia_private::STArray<2\\2c\\20float\\2c\\20true>::STArray\\28skia_private::STArray<2\\2c\\20float\\2c\\20true>&&\\29\n5019:skia_private::AutoTMalloc<unsigned\\20char\\2c\\20void>::realloc\\28unsigned\\20long\\29\n5020:skia_private::AutoTMalloc<SkPoint\\2c\\20void>::reset\\28unsigned\\20long\\29\n5021:skia_private::AutoTArray<unsigned\\20short>::AutoTArray\\28unsigned\\20long\\29\n5022:skia_private::AutoTArray<float>::AutoTArray\\28unsigned\\20long\\29\n5023:skia_private::AutoTArray<SkRect>::AutoTArray\\28unsigned\\20long\\29\n5024:skia_private::AutoSTMalloc<256ul\\2c\\20unsigned\\20short\\2c\\20void>::AutoSTMalloc\\28unsigned\\20long\\29\n5025:skia_private::AutoSTArray<64\\2c\\20TriangulationVertex>::reset\\28int\\29\n5026:skia_private::AutoSTArray<64\\2c\\20SkGlyph\\20const*>::reset\\28int\\29\n5027:skia_private::AutoSTArray<4\\2c\\20unsigned\\20char>::reset\\28int\\29\n5028:skia_private::AutoSTArray<4\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>>::reset\\28int\\29\n5029:skia_private::AutoSTArray<3\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\20const\\2c\\20std::__2::default_delete<GrFragmentProcessor\\20const>>>::reset\\28int\\29\n5030:skia_private::AutoSTArray<32\\2c\\20unsigned\\20short>::~AutoSTArray\\28\\29\n5031:skia_private::AutoSTArray<32\\2c\\20unsigned\\20short>::reset\\28int\\29\n5032:skia_private::AutoSTArray<32\\2c\\20SkRect>::reset\\28int\\29\n5033:skia_private::AutoSTArray<2\\2c\\20sk_sp<SkImageFilter>>::reset\\28int\\29\n5034:skia_private::AutoSTArray<16\\2c\\20SkRect>::~AutoSTArray\\28\\29\n5035:skia_private::AutoSTArray<16\\2c\\20GrMipLevel>::reset\\28int\\29\n5036:skia_private::AutoSTArray<15\\2c\\20GrMipLevel>::reset\\28int\\29\n5037:skia_private::AutoSTArray<14\\2c\\20std::__2::unique_ptr<char\\20\\5b\\5d\\2c\\20std::__2::default_delete<char\\20\\5b\\5d>>>::~AutoSTArray\\28\\29\n5038:skia_private::AutoSTArray<14\\2c\\20std::__2::unique_ptr<char\\20\\5b\\5d\\2c\\20std::__2::default_delete<char\\20\\5b\\5d>>>::reset\\28int\\29\n5039:skia_private::AutoSTArray<14\\2c\\20GrMipLevel>::~AutoSTArray\\28\\29\n5040:skia_private::AutoSTArray<14\\2c\\20GrMipLevel>::reset\\28int\\29\n5041:skia_private::AutoSTArray<128\\2c\\20unsigned\\20char>::~AutoSTArray\\28\\29\n5042:skia_png_set_longjmp_fn\n5043:skia_png_read_finish_IDAT\n5044:skia_png_read_chunk_header\n5045:skia_png_read_IDAT_data\n5046:skia_png_gamma_16bit_correct\n5047:skia_png_do_strip_channel\n5048:skia_png_do_gray_to_rgb\n5049:skia_png_do_expand\n5050:skia_png_destroy_gamma_table\n5051:skia_png_colorspace_set_sRGB\n5052:skia_png_check_IHDR\n5053:skia_png_calculate_crc\n5054:skia::textlayout::operator==\\28skia::textlayout::FontArguments\\20const&\\2c\\20skia::textlayout::FontArguments\\20const&\\29\n5055:skia::textlayout::\\28anonymous\\20namespace\\29::littleRound\\28float\\29\n5056:skia::textlayout::\\28anonymous\\20namespace\\29::LineBreakerWithLittleRounding::breakLine\\28float\\29\\20const\n5057:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\\28\\29\n5058:skia::textlayout::TypefaceFontStyleSet::matchStyle\\28SkFontStyle\\20const&\\29\n5059:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\\28\\29\n5060:skia::textlayout::TypefaceFontProvider::registerTypeface\\28sk_sp<SkTypeface>\\2c\\20SkString\\20const&\\29\n5061:skia::textlayout::TextWrapper::TextStretch::TextStretch\\28skia::textlayout::Cluster*\\2c\\20skia::textlayout::Cluster*\\2c\\20bool\\29\n5062:skia::textlayout::TextStyle::matchOneAttribute\\28skia::textlayout::StyleType\\2c\\20skia::textlayout::TextStyle\\20const&\\29\\20const\n5063:skia::textlayout::TextStyle::equals\\28skia::textlayout::TextStyle\\20const&\\29\\20const\n5064:skia::textlayout::TextShadow::operator!=\\28skia::textlayout::TextShadow\\20const&\\29\\20const\n5065:skia::textlayout::TextLine::~TextLine\\28\\29\n5066:skia::textlayout::TextLine::spacesWidth\\28\\29\\20const\n5067:skia::textlayout::TextLine::shiftCluster\\28skia::textlayout::Cluster\\20const*\\2c\\20float\\2c\\20float\\29\n5068:skia::textlayout::TextLine::iterateThroughClustersInGlyphsOrder\\28bool\\2c\\20bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>\\20const&\\29\\20const::$_0::operator\\28\\29\\28unsigned\\20long\\20const&\\29\\20const::'lambda'\\28skia::textlayout::Cluster&\\29::operator\\28\\29\\28skia::textlayout::Cluster&\\29\\20const\n5069:skia::textlayout::TextLine::iterateThroughClustersInGlyphsOrder\\28bool\\2c\\20bool\\2c\\20std::__2::function<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>\\20const&\\29\\20const\n5070:skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const::'lambda'\\28SkRect\\29::operator\\28\\29\\28SkRect\\29\\20const\n5071:skia::textlayout::TextLine::getMetrics\\28\\29\\20const\n5072:skia::textlayout::TextLine::extendHeight\\28skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const\n5073:skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29\n5074:skia::textlayout::TextLine::endsWithHardLineBreak\\28\\29\\20const\n5075:skia::textlayout::TextLine::buildTextBlob\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n5076:skia::textlayout::TextLine::TextLine\\28skia::textlayout::ParagraphImpl*\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20skia::textlayout::InternalLineMetrics\\29\n5077:skia::textlayout::TextLine::TextBlobRecord::~TextBlobRecord\\28\\29\n5078:skia::textlayout::TextLine::TextBlobRecord::TextBlobRecord\\28\\29\n5079:skia::textlayout::TextLine&\\20skia_private::TArray<skia::textlayout::TextLine\\2c\\20false>::emplace_back<skia::textlayout::ParagraphImpl*\\2c\\20SkPoint&\\2c\\20SkPoint&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20float&\\2c\\20skia::textlayout::InternalLineMetrics&>\\28skia::textlayout::ParagraphImpl*&&\\2c\\20SkPoint&\\2c\\20SkPoint&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&\\2c\\20float&\\2c\\20skia::textlayout::InternalLineMetrics&\\29\n5080:skia::textlayout::StrutStyle::StrutStyle\\28\\29\n5081:skia::textlayout::Run::shift\\28skia::textlayout::Cluster\\20const*\\2c\\20float\\29\n5082:skia::textlayout::Run::newRunBuffer\\28\\29\n5083:skia::textlayout::Run::clusterIndex\\28unsigned\\20long\\29\\20const\n5084:skia::textlayout::Run::calculateMetrics\\28\\29\n5085:skia::textlayout::ParagraphStyle::ellipsized\\28\\29\\20const\n5086:skia::textlayout::ParagraphPainter::DecorationStyle::DecorationStyle\\28unsigned\\20int\\2c\\20float\\2c\\20std::__2::optional<skia::textlayout::ParagraphPainter::DashPathEffect>\\29\n5087:skia::textlayout::ParagraphImpl::~ParagraphImpl\\28\\29\n5088:skia::textlayout::ParagraphImpl::resolveStrut\\28\\29\n5089:skia::textlayout::ParagraphImpl::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29\n5090:skia::textlayout::ParagraphImpl::getGlyphInfoAtUTF16Offset\\28unsigned\\20long\\2c\\20skia::textlayout::Paragraph::GlyphInfo*\\29\n5091:skia::textlayout::ParagraphImpl::getGlyphClusterAt\\28unsigned\\20long\\2c\\20skia::textlayout::Paragraph::GlyphClusterInfo*\\29\n5092:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\\28\\29::$_0::operator\\28\\29\\28\\29\\20const::'lambda0'\\28unsigned\\20long\\29::operator\\28\\29\\28unsigned\\20long\\29\\20const\n5093:skia::textlayout::ParagraphImpl::computeEmptyMetrics\\28\\29\n5094:skia::textlayout::ParagraphImpl::buildClusterTable\\28\\29::$_0::operator\\28\\29\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20float\\29\\20const\n5095:skia::textlayout::ParagraphCacheKey::ParagraphCacheKey\\28skia::textlayout::ParagraphImpl\\20const*\\29\n5096:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\\28\\29\n5097:skia::textlayout::ParagraphBuilderImpl::finalize\\28\\29\n5098:skia::textlayout::ParagraphBuilderImpl::ensureUTF16Mapping\\28\\29::$_0::operator\\28\\29\\28\\29\\20const::'lambda0'\\28unsigned\\20long\\29::operator\\28\\29\\28unsigned\\20long\\29\\20const\n5099:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\\28skia::textlayout::PlaceholderStyle\\20const&\\2c\\20bool\\29\n5100:skia::textlayout::Paragraph::~Paragraph\\28\\29\n5101:skia::textlayout::Paragraph::FontInfo::~FontInfo\\28\\29\n5102:skia::textlayout::OneLineShaper::clusteredText\\28skia::textlayout::SkRange<unsigned\\20long>&\\29::$_0::operator\\28\\29\\28unsigned\\20long\\2c\\20skia::textlayout::OneLineShaper::clusteredText\\28skia::textlayout::SkRange<unsigned\\20long>&\\29::Dir\\29\\20const\n5103:skia::textlayout::OneLineShaper::clusteredText\\28skia::textlayout::SkRange<unsigned\\20long>&\\29\n5104:skia::textlayout::OneLineShaper::FontKey::operator==\\28skia::textlayout::OneLineShaper::FontKey\\20const&\\29\\20const\n5105:skia::textlayout::InternalLineMetrics::add\\28skia::textlayout::InternalLineMetrics\\29\n5106:skia::textlayout::FontFeature::operator==\\28skia::textlayout::FontFeature\\20const&\\29\\20const\n5107:skia::textlayout::FontFeature::FontFeature\\28skia::textlayout::FontFeature\\20const&\\29\n5108:skia::textlayout::FontCollection::~FontCollection\\28\\29\n5109:skia::textlayout::FontCollection::matchTypeface\\28SkString\\20const&\\2c\\20SkFontStyle\\29\n5110:skia::textlayout::FontCollection::defaultFallback\\28int\\2c\\20SkFontStyle\\2c\\20SkString\\20const&\\29\n5111:skia::textlayout::FontCollection::FamilyKey::operator==\\28skia::textlayout::FontCollection::FamilyKey\\20const&\\29\\20const\n5112:skia::textlayout::FontCollection::FamilyKey::FamilyKey\\28skia::textlayout::FontCollection::FamilyKey&&\\29\n5113:skia::textlayout::FontArguments::~FontArguments\\28\\29\n5114:skia::textlayout::Decoration::operator==\\28skia::textlayout::Decoration\\20const&\\29\\20const\n5115:skia::textlayout::Cluster::trimmedWidth\\28unsigned\\20long\\29\\20const\n5116:skgpu::to_stablekey\\28int\\2c\\20unsigned\\20int\\29\n5117:skgpu::tess::\\28anonymous\\20namespace\\29::write_curve_index_buffer_base_index\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\2c\\20unsigned\\20short\\29\n5118:skgpu::tess::StrokeParams::set\\28SkStrokeRec\\20const&\\29\n5119:skgpu::tess::StrokeIterator::finishOpenContour\\28\\29\n5120:skgpu::tess::PreChopPathCurves\\28float\\2c\\20SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\29\n5121:skgpu::tess::LinearTolerances::setStroke\\28skgpu::tess::StrokeParams\\20const&\\2c\\20float\\29\n5122:skgpu::tess::LinearTolerances::requiredResolveLevel\\28\\29\\20const\n5123:skgpu::tess::GetJoinType\\28SkStrokeRec\\20const&\\29\n5124:skgpu::tess::FixedCountCurves::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n5125:skgpu::tess::CullTest::areVisible3\\28SkPoint\\20const*\\29\\20const\n5126:skgpu::tess::ConicHasCusp\\28SkPoint\\20const*\\29\n5127:skgpu::tess::CalcNumRadialSegmentsPerRadian\\28float\\29\n5128:skgpu::ganesh::\\28anonymous\\20namespace\\29::add_line_to_segment\\28SkPoint\\20const&\\2c\\20skia_private::TArray<skgpu::ganesh::\\28anonymous\\20namespace\\29::Segment\\2c\\20true>*\\29\n5129:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::~SmallPathOp\\28\\29\n5130:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::flush\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::FlushInfo*\\29\\20const\n5131:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::addToAtlasWithRetry\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::FlushInfo*\\2c\\20skgpu::ganesh::SmallPathAtlasMgr*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20SkRect\\20const&\\2c\\20int\\2c\\20skgpu::ganesh::SmallPathShapeData*\\29\\20const\n5132:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::SmallPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrUserStencilSettings\\20const*\\29\n5133:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::~HullShader\\28\\29\n5134:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\\28\\29\n5135:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::recordDraw\\28GrMeshDrawTarget*\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20int\\2c\\20unsigned\\20short*\\29\n5136:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::PathData::PathData\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::PathData&&\\29\n5137:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::AAFlatteningConvexPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20SkStrokeRec::Style\\2c\\20SkPaint::Join\\2c\\20float\\2c\\20GrUserStencilSettings\\20const*\\29\n5138:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::~AAConvexPathOp\\28\\29\n5139:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::PathData::PathData\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::PathData&&\\29\n5140:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::AAConvexPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n5141:skgpu::ganesh::TextureOp::Make\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20skgpu::ganesh::TextureOp::Saturate\\2c\\20SkBlendMode\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20SkRect\\20const*\\29\n5142:skgpu::ganesh::SurfaceFillContext::fillRectToRectWithFP\\28SkRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5143:skgpu::ganesh::SurfaceFillContext::blitTexture\\28GrSurfaceProxyView\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\20const&\\29\n5144:skgpu::ganesh::SurfaceFillContext::arenas\\28\\29\n5145:skgpu::ganesh::SurfaceFillContext::addDrawOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\29\n5146:skgpu::ganesh::SurfaceFillContext::SurfaceFillContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorInfo\\20const&\\29\n5147:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\\28\\29.1\n5148:skgpu::ganesh::SurfaceDrawContext::setNeedsStencil\\28\\29\n5149:skgpu::ganesh::SurfaceDrawContext::internalStencilClear\\28SkIRect\\20const*\\2c\\20bool\\29\n5150:skgpu::ganesh::SurfaceDrawContext::fillRectWithEdgeAA\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrQuadAAFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\29\n5151:skgpu::ganesh::SurfaceDrawContext::drawVertices\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<SkVertices>\\2c\\20GrPrimitiveType*\\2c\\20bool\\29\n5152:skgpu::ganesh::SurfaceDrawContext::drawTexturedQuad\\28GrClip\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkBlendMode\\2c\\20DrawQuad*\\2c\\20SkRect\\20const*\\29\n5153:skgpu::ganesh::SurfaceDrawContext::drawTexture\\28GrClip\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20SkBlendMode\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrQuadAAFlags\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\29\n5154:skgpu::ganesh::SurfaceDrawContext::drawStrokedLine\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkStrokeRec\\20const&\\29\n5155:skgpu::ganesh::SurfaceDrawContext::drawRegion\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n5156:skgpu::ganesh::SurfaceDrawContext::drawOval\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20GrAA\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrStyle\\20const&\\29\n5157:skgpu::ganesh::SurfaceDrawContext::drawAtlas\\28GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20int\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n5158:skgpu::ganesh::SurfaceDrawContext::attemptQuadOptimization\\28GrClip\\20const*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20DrawQuad*\\2c\\20GrPaint*\\29::$_0::operator\\28\\29\\28\\29\\20const\n5159:skgpu::ganesh::SurfaceDrawContext::SurfaceDrawContext\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const&\\29\n5160:skgpu::ganesh::SurfaceContext::writePixels\\28GrDirectContext*\\2c\\20GrCPixmap\\2c\\20SkIPoint\\29\n5161:skgpu::ganesh::SurfaceContext::rescaleInto\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\29\n5162:skgpu::ganesh::SurfaceContext::copy\\28sk_sp<GrSurfaceProxy>\\2c\\20SkIRect\\2c\\20SkIPoint\\29\n5163:skgpu::ganesh::SurfaceContext::copyScaled\\28sk_sp<GrSurfaceProxy>\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20SkFilterMode\\29\n5164:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n5165:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::FinishContext::~FinishContext\\28\\29\n5166:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n5167:skgpu::ganesh::StrokeTessellator::draw\\28GrOpFlushState*\\29\\20const\n5168:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\\28\\29\n5169:skgpu::ganesh::StrokeTessellateOp::prePrepareTessellator\\28GrTessellationShader::ProgramArgs&&\\2c\\20GrAppliedClip&&\\29\n5170:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::allowed_stroke\\28GrCaps\\20const*\\2c\\20SkStrokeRec\\20const&\\2c\\20GrAA\\2c\\20bool*\\29\n5171:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\\28\\29\n5172:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::NonAAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20GrAAType\\29\n5173:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::~AAStrokeRectOp\\28\\29\n5174:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::ClassID\\28\\29\n5175:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::AAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::RectInfo\\20const&\\2c\\20bool\\29\n5176:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::AAStrokeRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const&\\29\n5177:skgpu::ganesh::SoftwarePathRenderer::DrawAroundInvPath\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n5178:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29.1\n5179:skgpu::ganesh::SmallPathAtlasMgr::reset\\28\\29\n5180:skgpu::ganesh::SmallPathAtlasMgr::findOrCreate\\28skgpu::ganesh::SmallPathShapeDataKey\\20const&\\29\n5181:skgpu::ganesh::SmallPathAtlasMgr::evict\\28skgpu::PlotLocator\\29\n5182:skgpu::ganesh::SmallPathAtlasMgr::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n5183:skgpu::ganesh::ShadowRRectOp::Make\\28GrRecordingContext*\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20float\\2c\\20float\\29\n5184:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::~RegionOpImpl\\28\\29\n5185:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::RegionOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRegion\\20const&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\29\n5186:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::primitiveType\\28\\29\\20const\n5187:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::VertexSpec\\28GrQuad::Type\\2c\\20skgpu::ganesh::QuadPerEdgeAA::ColorType\\2c\\20GrQuad::Type\\2c\\20bool\\2c\\20skgpu::ganesh::QuadPerEdgeAA::Subset\\2c\\20GrAAType\\2c\\20bool\\2c\\20skgpu::ganesh::QuadPerEdgeAA::IndexBufferOption\\29\n5188:skgpu::ganesh::QuadPerEdgeAA::Tessellator::append\\28GrQuad*\\2c\\20GrQuad*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20GrQuadAAFlags\\29\n5189:skgpu::ganesh::QuadPerEdgeAA::Tessellator::Tessellator\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20char*\\29\n5190:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\\28\\29\n5191:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::initializeAttrs\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29\n5192:skgpu::ganesh::QuadPerEdgeAA::IssueDraw\\28GrCaps\\20const&\\2c\\20GrOpsRenderPass*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5193:skgpu::ganesh::QuadPerEdgeAA::GetIndexBuffer\\28GrMeshDrawTarget*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::IndexBufferOption\\29\n5194:skgpu::ganesh::PathWedgeTessellator::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20skgpu::tess::PatchAttribs\\29\n5195:skgpu::ganesh::PathTessellator::PathTessellator\\28bool\\2c\\20skgpu::tess::PatchAttribs\\29\n5196:skgpu::ganesh::PathTessellator::PathDrawList*\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\n5197:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\\28\\29\n5198:skgpu::ganesh::PathTessellateOp::usesMSAA\\28\\29\\20const\n5199:skgpu::ganesh::PathTessellateOp::prepareTessellator\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n5200:skgpu::ganesh::PathTessellateOp::PathTessellateOp\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrPaint&&\\2c\\20SkRect\\20const&\\29\n5201:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\\28\\29\n5202:skgpu::ganesh::PathStencilCoverOp::prePreparePrograms\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n5203:skgpu::ganesh::PathStencilCoverOp::ClassID\\28\\29\n5204:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\\28\\29\n5205:skgpu::ganesh::PathInnerTriangulateOp::pushFanStencilProgram\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\29\n5206:skgpu::ganesh::PathInnerTriangulateOp::prePreparePrograms\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAppliedClip&&\\29\n5207:skgpu::ganesh::PathCurveTessellator::~PathCurveTessellator\\28\\29\n5208:skgpu::ganesh::PathCurveTessellator::prepareWithTriangles\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20GrTriangulator::BreadcrumbTriangleList*\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n5209:skgpu::ganesh::PathCurveTessellator::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20skgpu::tess::PatchAttribs\\29\n5210:skgpu::ganesh::OpsTask::setColorLoadOp\\28GrLoadOp\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n5211:skgpu::ganesh::OpsTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n5212:skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29\n5213:skgpu::ganesh::OpsTask::addSampledTexture\\28GrSurfaceProxy*\\29\n5214:skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0::operator\\28\\29\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\20const\n5215:skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29\n5216:skgpu::ganesh::OpsTask::OpsTask\\28GrDrawingManager*\\2c\\20GrSurfaceProxyView\\2c\\20GrAuditTrail*\\2c\\20sk_sp<GrArenas>\\29\n5217:skgpu::ganesh::OpsTask::OpChain::tryConcat\\28skgpu::ganesh::OpsTask::OpChain::List*\\2c\\20GrProcessorSet::Analysis\\2c\\20GrDstProxyView\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20SkRect\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20GrAuditTrail*\\29\n5218:skgpu::ganesh::OpsTask::OpChain::OpChain\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrProcessorSet::Analysis\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const*\\29\n5219:skgpu::ganesh::MakeFragmentProcessorFromView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\n5220:skgpu::ganesh::LockTextureProxyView\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20GrImageTexGenPolicy\\2c\\20skgpu::Mipmapped\\29\n5221:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::~NonAALatticeOp\\28\\29\n5222:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::NonAALatticeOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20std::__2::unique_ptr<SkLatticeIter\\2c\\20std::__2::default_delete<SkLatticeIter>>\\2c\\20SkRect\\20const&\\29\n5223:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::~LatticeGP\\28\\29\n5224:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::can_use_hw_derivatives_with_coverage\\28skvx::Vec<2\\2c\\20float>\\20const&\\2c\\20SkPoint\\20const&\\29\n5225:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::~FillRRectOpImpl\\28\\29\n5226:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Make\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::LocalCoords\\20const&\\2c\\20GrAA\\29\n5227:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::FillRRectOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20SkRRect\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::LocalCoords\\20const&\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29\n5228:skgpu::ganesh::DrawableOp::~DrawableOp\\28\\29\n5229:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\\28\\29\n5230:skgpu::ganesh::DrawAtlasPathOp::prepareProgram\\28GrCaps\\20const&\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n5231:skgpu::ganesh::Device::~Device\\28\\29\n5232:skgpu::ganesh::Device::replaceBackingProxy\\28SkSurface::ContentChangeMode\\2c\\20sk_sp<GrRenderTargetProxy>\\2c\\20GrColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\29\n5233:skgpu::ganesh::Device::makeSpecial\\28SkBitmap\\20const&\\29\n5234:skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n5235:skgpu::ganesh::Device::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n5236:skgpu::ganesh::Device::drawEdgeAAImage\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20SkTileMode\\29\n5237:skgpu::ganesh::Device::convertGlyphRunListToSlug\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n5238:skgpu::ganesh::Device::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n5239:skgpu::ganesh::DefaultPathRenderer::internalDrawPath\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrPaint&&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const&\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20bool\\29\n5240:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n5241:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::~DashOpImpl\\28\\29\n5242:skgpu::ganesh::CopyView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5243:skgpu::ganesh::ClipStack::clipPath\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrAA\\2c\\20SkClipOp\\29\n5244:skgpu::ganesh::ClipStack::begin\\28\\29\\20const\n5245:skgpu::ganesh::ClipStack::SaveRecord::removeElements\\28SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>*\\29\n5246:skgpu::ganesh::ClipStack::RawElement::clipType\\28\\29\\20const\n5247:skgpu::ganesh::ClipStack::Mask::invalidate\\28GrProxyProvider*\\29\n5248:skgpu::ganesh::ClipStack::ElementIter::operator++\\28\\29\n5249:skgpu::ganesh::ClipStack::Element::Element\\28skgpu::ganesh::ClipStack::Element\\20const&\\29\n5250:skgpu::ganesh::ClipStack::Draw::Draw\\28SkRect\\20const&\\2c\\20GrAA\\29\n5251:skgpu::ganesh::ClearOp::ClearOp\\28skgpu::ganesh::ClearOp::Buffer\\2c\\20GrScissorState\\20const&\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20bool\\29\n5252:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\\28\\29\n5253:skgpu::ganesh::AtlasTextOp::operator\\20new\\28unsigned\\20long\\29\n5254:skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_0::operator\\28\\29\\28\\29\\20const\n5255:skgpu::ganesh::AtlasTextOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n5256:skgpu::ganesh::AtlasTextOp::ClassID\\28\\29\n5257:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\\28\\29\n5258:skgpu::ganesh::AtlasRenderTask::stencilAtlasRect\\28GrRecordingContext*\\2c\\20SkRect\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n5259:skgpu::ganesh::AtlasRenderTask::readView\\28GrCaps\\20const&\\29\\20const\n5260:skgpu::ganesh::AtlasRenderTask::instantiate\\28GrOnFlushResourceProvider*\\2c\\20sk_sp<GrTexture>\\29\n5261:skgpu::ganesh::AtlasRenderTask::addPath\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkIPoint\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20SkIPoint16*\\29\n5262:skgpu::ganesh::AtlasRenderTask::addAtlasDrawOp\\28std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrCaps\\20const&\\29\n5263:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29.1\n5264:skgpu::ganesh::AtlasPathRenderer::preFlush\\28GrOnFlushResourceProvider*\\29\n5265:skgpu::ganesh::AtlasPathRenderer::pathFitsInAtlas\\28SkRect\\20const&\\2c\\20GrAAType\\29\\20const\n5266:skgpu::ganesh::AtlasPathRenderer::addPathToAtlas\\28GrRecordingContext*\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkIRect*\\2c\\20SkIPoint16*\\2c\\20bool*\\2c\\20std::__2::function<bool\\20\\28GrSurfaceProxy\\20const*\\29>\\20const&\\29\n5267:skgpu::ganesh::AtlasPathRenderer::AtlasPathKey::operator==\\28skgpu::ganesh::AtlasPathRenderer::AtlasPathKey\\20const&\\29\\20const\n5268:skgpu::ganesh::AsFragmentProcessor\\28GrRecordingContext*\\2c\\20SkImage\\20const*\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\n5269:skgpu::TiledTextureUtils::OptimizeSampleArea\\28SkISize\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkRect*\\2c\\20SkRect*\\2c\\20SkMatrix*\\29\n5270:skgpu::TiledTextureUtils::CanDisableMipmap\\28SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\29\n5271:skgpu::TClientMappedBufferManager<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID>::process\\28\\29\n5272:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\\28\\29\n5273:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::count\\28\\29\\20const\n5274:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane::~Plane\\28\\29\n5275:skgpu::Swizzle::RGB1\\28\\29\n5276:skgpu::Swizzle::BGRA\\28\\29\n5277:skgpu::ScratchKey::ScratchKey\\28skgpu::ScratchKey\\20const&\\29\n5278:skgpu::ResourceKey::operator=\\28skgpu::ResourceKey\\20const&\\29\n5279:skgpu::RefCntedCallback::Make\\28void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n5280:skgpu::RectanizerSkyline::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n5281:skgpu::RectanizerSkyline::RectanizerSkyline\\28int\\2c\\20int\\29\n5282:skgpu::Plot::~Plot\\28\\29\n5283:skgpu::Plot::resetRects\\28\\29\n5284:skgpu::Plot::Plot\\28int\\2c\\20int\\2c\\20skgpu::AtlasGenerationCounter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkColorType\\2c\\20unsigned\\20long\\29\n5285:skgpu::KeyBuilder::flush\\28\\29\n5286:skgpu::KeyBuilder::addBits\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5287:skgpu::GetReducedBlendModeInfo\\28SkBlendMode\\29\n5288:skgpu::GetApproxSize\\28SkISize\\29::$_0::operator\\28\\29\\28int\\29\\20const\n5289:skgpu::Compute2DBlurKernel\\28SkSize\\2c\\20SkISize\\2c\\20SkSpan<float>\\29\n5290:skgpu::Compute1DBlurKernel\\28float\\2c\\20int\\2c\\20SkSpan<float>\\29\n5291:skgpu::AtlasLocator::updatePlotLocator\\28skgpu::PlotLocator\\29\n5292:skgpu::AtlasLocator::insetSrc\\28int\\29\n5293:skcms_Matrix3x3_invert\n5294:sk_sp<sktext::gpu::TextStrike>::~sk_sp\\28\\29\n5295:sk_sp<\\28anonymous\\20namespace\\29::UniqueKeyInvalidator>\\20sk_make_sp<\\28anonymous\\20namespace\\29::UniqueKeyInvalidator\\2c\\20skgpu::UniqueKey&\\2c\\20unsigned\\20int>\\28skgpu::UniqueKey&\\2c\\20unsigned\\20int&&\\29\n5296:sk_sp<\\28anonymous\\20namespace\\29::ShadowInvalidator>\\20sk_make_sp<\\28anonymous\\20namespace\\29::ShadowInvalidator\\2c\\20SkResourceCache::Key&>\\28SkResourceCache::Key&\\29\n5297:sk_sp<SkVertices>::operator=\\28sk_sp<SkVertices>\\20const&\\29\n5298:sk_sp<SkTypeface>&\\20std::__2::vector<sk_sp<SkTypeface>\\2c\\20std::__2::allocator<sk_sp<SkTypeface>>>::emplace_back<sk_sp<SkTypeface>>\\28sk_sp<SkTypeface>&&\\29\n5299:sk_sp<SkSurface_Ganesh>\\20sk_make_sp<SkSurface_Ganesh\\2c\\20sk_sp<skgpu::ganesh::Device>>\\28sk_sp<skgpu::ganesh::Device>&&\\29\n5300:sk_sp<SkMipmap>::~sk_sp\\28\\29\n5301:sk_sp<SkMipmap>::sk_sp\\28sk_sp<SkMipmap>\\20const&\\29\n5302:sk_sp<SkMipmap>::operator=\\28sk_sp<SkMipmap>&&\\29\n5303:sk_sp<SkData\\20const>::reset\\28SkData\\20const*\\29\n5304:sk_sp<SkData>::operator=\\28sk_sp<SkData>\\20const&\\29\n5305:sk_sp<SkColorSpace>::operator=\\28sk_sp<SkColorSpace>\\20const&\\29\n5306:sk_sp<SkColorFilterShader>\\20sk_make_sp<SkColorFilterShader\\2c\\20sk_sp<SkShader>\\2c\\20float\\2c\\20sk_sp<SkColorFilter>>\\28sk_sp<SkShader>&&\\2c\\20float&&\\2c\\20sk_sp<SkColorFilter>&&\\29\n5307:sk_sp<SharedGenerator>::~sk_sp\\28\\29\n5308:sk_sp<GrSurface>&\\20sk_sp<GrSurface>::operator=<GrTexture\\2c\\20void>\\28sk_sp<GrTexture>&&\\29\n5309:sk_sp<GrSurface::RefCntedReleaseProc>::reset\\28GrSurface::RefCntedReleaseProc*\\29\n5310:sk_sp<GrGpuBuffer>::operator=\\28sk_sp<GrGpuBuffer>&&\\29\n5311:sk_sp<GrCpuBuffer>::~sk_sp\\28\\29\n5312:sk_sp<GrContextThreadSafeProxy>::operator=\\28sk_sp<GrContextThreadSafeProxy>&&\\29\n5313:sk_sp<GrAttachment>::~sk_sp\\28\\29\n5314:sk_sp<GrArenas>\\20sk_make_sp<GrArenas>\\28\\29\n5315:sk_sp<GrArenas>::reset\\28GrArenas*\\29\n5316:sk_ft_free\\28FT_MemoryRec_*\\2c\\20void*\\29\n5317:sk_fopen\\28char\\20const*\\2c\\20SkFILE_Flags\\29\n5318:sk_fgetsize\\28_IO_FILE*\\29\n5319:sk_determinant\\28float\\20const*\\2c\\20int\\29\n5320:sk_blit_below\\28SkBlitter*\\2c\\20SkIRect\\20const&\\2c\\20SkRegion\\20const&\\29\n5321:sk_blit_above\\28SkBlitter*\\2c\\20SkIRect\\20const&\\2c\\20SkRegion\\20const&\\29\n5322:sid_to_gid_t\\20const*\\20hb_sorted_array_t<sid_to_gid_t\\20const>::bsearch<unsigned\\20int>\\28unsigned\\20int\\20const&\\2c\\20sid_to_gid_t\\20const*\\29\n5323:short\\20sk_saturate_cast<short\\2c\\20float>\\28float\\29\n5324:sharp_angle\\28SkPoint\\20const*\\29\n5325:setup_masks_arabic_plan\\28arabic_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_script_t\\29\n5326:set_points\\28float*\\2c\\20int*\\2c\\20int\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n5327:set_normal_unitnormal\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n5328:set_khr_debug_label\\28GrGLGpu*\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n5329:setThrew\n5330:setEmptyCheck\\28SkRegion*\\29\n5331:serialize_image\\28SkImage\\20const*\\2c\\20SkSerialProcs\\29\n5332:sem_trywait\n5333:sem_init\n5334:sect_clamp_with_vertical\\28SkPoint\\20const*\\2c\\20float\\29\n5335:scanexp\n5336:scalbnl\n5337:safe_picture_bounds\\28SkRect\\20const&\\29\n5338:rt_has_msaa_render_buffer\\28GrGLRenderTarget\\20const*\\2c\\20GrGLCaps\\20const&\\29\n5339:rrect_type_to_vert_count\\28RRectType\\29\n5340:row_is_all_zeros\\28unsigned\\20char\\20const*\\2c\\20int\\29\n5341:round_up_to_int\\28float\\29\n5342:round_down_to_int\\28float\\29\n5343:rotate\\28SkDCubic\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkDCubic&\\29\n5344:rewind_if_necessary\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\n5345:resolveImplicitLevels\\28UBiDi*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n5346:renderbuffer_storage_msaa\\28GrGLGpu*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\29\n5347:remove_edge_below\\28GrTriangulator::Edge*\\29\n5348:remove_edge_above\\28GrTriangulator::Edge*\\29\n5349:reductionLineCount\\28SkDQuad\\20const&\\29\n5350:recursive_edge_intersect\\28GrTriangulator::Line\\20const&\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20GrTriangulator::Line\\20const&\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20SkPoint*\\2c\\20double*\\2c\\20double*\\29\n5351:rect_exceeds\\28SkRect\\20const&\\2c\\20float\\29\n5352:reclassify_vertex\\28TriangulationVertex*\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20ReflexHash*\\2c\\20SkTInternalLList<TriangulationVertex>*\\29\n5353:radii_are_nine_patch\\28SkPoint\\20const*\\29\n5354:quad_type_for_transformed_rect\\28SkMatrix\\20const&\\29\n5355:quad_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5356:quad_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5357:quad_in_line\\28SkPoint\\20const*\\29\n5358:puts\n5359:pthread_mutex_destroy\n5360:pthread_cond_broadcast\n5361:psh_hint_table_record\n5362:psh_hint_table_init\n5363:psh_hint_table_find_strong_points\n5364:psh_hint_table_done\n5365:psh_hint_table_activate_mask\n5366:psh_hint_align\n5367:psh_glyph_load_points\n5368:psh_globals_scale_widths\n5369:psh_compute_dir\n5370:psh_blues_set_zones_0\n5371:psh_blues_set_zones\n5372:ps_table_realloc\n5373:ps_parser_to_token_array\n5374:ps_parser_load_field\n5375:ps_mask_table_last\n5376:ps_mask_table_done\n5377:ps_hints_stem\n5378:ps_dimension_end\n5379:ps_dimension_done\n5380:ps_dimension_add_t1stem\n5381:ps_builder_start_point\n5382:ps_builder_close_contour\n5383:ps_builder_add_point1\n5384:printf_core\n5385:prepare_to_draw_into_mask\\28SkRect\\20const&\\2c\\20SkMaskBuilder*\\29\n5386:position_cluster\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\29\n5387:portable::uniform_color_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5388:portable::set_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5389:portable::scale_1_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5390:portable::lerp_1_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5391:portable::copy_from_indirect_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5392:portable::copy_2_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5393:portable::check_decal_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5394:pop_arg\n5395:pointInTriangle\\28SkDPoint\\20const*\\2c\\20SkDPoint\\20const&\\29\n5396:pntz\n5397:png_rtran_ok\n5398:png_malloc_array_checked\n5399:png_inflate\n5400:png_format_buffer\n5401:png_decompress_chunk\n5402:png_colorspace_check_gamma\n5403:png_cache_unknown_chunk\n5404:pin_offset_s32\\28int\\2c\\20int\\2c\\20int\\29\n5405:path_key_from_data_size\\28SkPath\\20const&\\29\n5406:parse_private_use_subtag\\28char\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20char\\20const*\\2c\\20unsigned\\20char\\20\\28*\\29\\28unsigned\\20char\\29\\29\n5407:paint_color_to_dst\\28SkPaint\\20const&\\2c\\20SkPixmap\\20const&\\29\n5408:optimize_layer_filter\\28SkImageFilter\\20const*\\2c\\20SkPaint*\\29\n5409:operator==\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n5410:operator==\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29\n5411:operator==\\28SkPaint\\20const&\\2c\\20SkPaint\\20const&\\29\n5412:operator!=\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29\n5413:open_face\n5414:on_same_side\\28SkPoint\\20const*\\2c\\20int\\2c\\20int\\29\n5415:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::~TransformedMaskSubRun\\28\\29.1\n5416:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::~TransformedMaskSubRun\\28\\29\n5417:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n5418:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::glyphs\\28\\29\\20const\n5419:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29.1\n5420:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29\n5421:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\\28\\29\\20const\n5422:non-virtual\\20thunk\\20to\\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\\28GrDirectContext*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n5423:move_multiples\\28SkOpContourHead*\\29\n5424:mono_cubic_closestT\\28float\\20const*\\2c\\20float\\29\n5425:mbsrtowcs\n5426:matchesEnd\\28SkDPoint\\20const*\\2c\\20SkDPoint\\20const&\\29\n5427:map_rect_perspective\\28SkRect\\20const&\\2c\\20float\\20const*\\29::$_0::operator\\28\\29\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\\20const::'lambda'\\28skvx::Vec<4\\2c\\20float>\\20const&\\29::operator\\28\\29\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\\20const\n5428:map_quad_to_rect\\28SkRSXform\\20const&\\2c\\20SkRect\\20const&\\29\n5429:map_quad_general\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\29\n5430:make_xrect\\28SkRect\\20const&\\29\n5431:make_tiled_gradient\\28GrFPArgs\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20bool\\2c\\20bool\\29\n5432:make_premul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5433:make_paint_with_image\\28SkPaint\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix*\\29\n5434:make_dual_interval_colorizer\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20float\\29\n5435:make_clamped_gradient\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool\\29\n5436:make_bmp_proxy\\28GrProxyProvider*\\2c\\20SkBitmap\\20const&\\2c\\20GrColorType\\2c\\20skgpu::Mipmapped\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29\n5437:long\\20std::__2::__num_get_signed_integral\\5babi:v160004\\5d<long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n5438:long\\20long\\20std::__2::__num_get_signed_integral\\5babi:v160004\\5d<long\\20long>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\2c\\20int\\29\n5439:long\\20double\\20std::__2::__num_get_float\\5babi:v160004\\5d<long\\20double>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n5440:log2f_\\28float\\29\n5441:load_post_names\n5442:line_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5443:line_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5444:lineMetrics_getLineNumber\n5445:lineMetrics_getHardBreak\n5446:lineBreakBuffer_free\n5447:lin_srgb_to_oklab\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n5448:lang_find_or_insert\\28char\\20const*\\29\n5449:is_zero_width_char\\28hb_font_t*\\2c\\20unsigned\\20int\\29\n5450:is_simple_rect\\28GrQuad\\20const&\\29\n5451:is_plane_config_compatible_with_subsampling\\28SkYUVAInfo::PlaneConfig\\2c\\20SkYUVAInfo::Subsampling\\29\n5452:is_overlap_edge\\28GrTriangulator::Edge*\\29\n5453:is_int\\28float\\29\n5454:is_halant_use\\28hb_glyph_info_t\\20const&\\29\n5455:is_float_fp32\\28GrGLContextInfo\\20const&\\2c\\20GrGLInterface\\20const*\\2c\\20unsigned\\20int\\29\n5456:iprintf\n5457:invalidate_buffer\\28GrGLGpu*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\29\n5458:interp_cubic_coords\\28double\\20const*\\2c\\20double*\\2c\\20double\\29\n5459:int\\20SkRecords::Pattern<SkRecords::Is<SkRecords::Restore>>::matchFirst<SkRecords::Is<SkRecords::Restore>>\\28SkRecords::Is<SkRecords::Restore>*\\2c\\20SkRecord*\\2c\\20int\\29\n5460:int\\20OT::IntType<unsigned\\20int\\2c\\203u>::cmp<unsigned\\20int\\2c\\20\\28void*\\290>\\28unsigned\\20int\\29\\20const\n5461:inside_triangle\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\29\n5462:init_mparams\n5463:init_em_queued_call_args\n5464:inflateEnd\n5465:image_ref\n5466:image_getWidth\n5467:hb_vector_t<int\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n5468:hb_vector_t<hb_vector_t<hb_aat_map_t::range_flags_t\\2c\\20true>\\2c\\20false>::shrink_vector\\28unsigned\\20int\\29\n5469:hb_vector_t<hb_vector_t<hb_aat_map_t::range_flags_t\\2c\\20true>\\2c\\20false>::resize\\28int\\2c\\20bool\\2c\\20bool\\29\n5470:hb_vector_t<hb_transform_t\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n5471:hb_vector_t<hb_serialize_context_t::object_t::link_t\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n5472:hb_vector_t<hb_ot_map_builder_t::feature_info_t\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n5473:hb_vector_t<hb_bounds_t\\2c\\20false>::pop\\28\\29\n5474:hb_vector_t<CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::shrink_vector\\28unsigned\\20int\\29\n5475:hb_vector_t<CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::fini\\28\\29\n5476:hb_vector_t<CFF::cff1_font_dict_values_t\\2c\\20false>::shrink_vector\\28unsigned\\20int\\29\n5477:hb_vector_t<CFF::cff1_font_dict_values_t\\2c\\20false>::fini\\28\\29\n5478:hb_unicode_mirroring_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n5479:hb_unicode_funcs_t::is_default_ignorable\\28unsigned\\20int\\29\n5480:hb_unicode_funcs_get_default\n5481:hb_tag_from_string\n5482:hb_shape_plan_key_t::init\\28bool\\2c\\20hb_face_t*\\2c\\20hb_segment_properties_t\\20const*\\2c\\20hb_feature_t\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20char\\20const*\\20const*\\29\n5483:hb_shape_plan_key_t::fini\\28\\29\n5484:hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>::may_have\\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>\\20const&\\29\\20const\n5485:hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>::add\\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\204u>\\2c\\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\200u>\\2c\\20hb_set_digest_bits_pattern_t<unsigned\\20long\\2c\\209u>>>\\20const&\\29\n5486:hb_serialize_context_t::fini\\28\\29\n5487:hb_sanitize_context_t::return_t\\20OT::Context::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n5488:hb_sanitize_context_t::return_t\\20OT::ChainContext::dispatch<hb_sanitize_context_t>\\28hb_sanitize_context_t*\\29\\20const\n5489:hb_paint_funcs_t::sweep_gradient\\28void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5490:hb_paint_funcs_t::radial_gradient\\28void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5491:hb_paint_funcs_t::push_skew\\28void*\\2c\\20float\\2c\\20float\\29\n5492:hb_paint_funcs_t::push_rotate\\28void*\\2c\\20float\\29\n5493:hb_paint_funcs_t::push_root_transform\\28void*\\2c\\20hb_font_t\\20const*\\29\n5494:hb_paint_funcs_t::push_inverse_root_transform\\28void*\\2c\\20hb_font_t*\\29\n5495:hb_paint_funcs_t::push_group\\28void*\\29\n5496:hb_paint_funcs_t::pop_group\\28void*\\2c\\20hb_paint_composite_mode_t\\29\n5497:hb_paint_funcs_t::linear_gradient\\28void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5498:hb_paint_extents_paint_linear_gradient\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n5499:hb_paint_extents_get_funcs\\28\\29\n5500:hb_paint_extents_context_t::~hb_paint_extents_context_t\\28\\29\n5501:hb_paint_extents_context_t::pop_clip\\28\\29\n5502:hb_paint_extents_context_t::hb_paint_extents_context_t\\28\\29\n5503:hb_ot_map_t::fini\\28\\29\n5504:hb_ot_map_builder_t::add_pause\\28unsigned\\20int\\2c\\20bool\\20\\28*\\29\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\\29\n5505:hb_ot_map_builder_t::add_lookups\\28hb_ot_map_t&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20unsigned\\20int\\29\n5506:hb_ot_layout_has_substitution\n5507:hb_ot_font_set_funcs\n5508:hb_lazy_loader_t<OT::sbix_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::sbix_accelerator_t\\2c\\2038u>\\2c\\20hb_face_t\\2c\\2038u\\2c\\20OT::sbix_accelerator_t>::get_stored\\28\\29\\20const\n5509:hb_lazy_loader_t<OT::post_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::post_accelerator_t\\2c\\207u>\\2c\\20hb_face_t\\2c\\207u\\2c\\20OT::post_accelerator_t>::get_stored\\28\\29\\20const\n5510:hb_lazy_loader_t<OT::post_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::post_accelerator_t\\2c\\207u>\\2c\\20hb_face_t\\2c\\207u\\2c\\20OT::post_accelerator_t>::do_destroy\\28OT::post_accelerator_t*\\29\n5511:hb_lazy_loader_t<OT::kern\\2c\\20hb_table_lazy_loader_t<OT::kern\\2c\\2023u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2023u\\2c\\20hb_blob_t>::get_stored\\28\\29\\20const\n5512:hb_lazy_loader_t<OT::hmtx_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::hmtx_accelerator_t\\2c\\205u>\\2c\\20hb_face_t\\2c\\205u\\2c\\20OT::hmtx_accelerator_t>::get_stored\\28\\29\\20const\n5513:hb_lazy_loader_t<OT::gvar_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::gvar_accelerator_t\\2c\\2021u>\\2c\\20hb_face_t\\2c\\2021u\\2c\\20OT::gvar_accelerator_t>::do_destroy\\28OT::gvar_accelerator_t*\\29\n5514:hb_lazy_loader_t<OT::glyf_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::glyf_accelerator_t\\2c\\2015u>\\2c\\20hb_face_t\\2c\\2015u\\2c\\20OT::glyf_accelerator_t>::do_destroy\\28OT::glyf_accelerator_t*\\29\n5515:hb_lazy_loader_t<OT::cmap_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cmap_accelerator_t\\2c\\203u>\\2c\\20hb_face_t\\2c\\203u\\2c\\20OT::cmap_accelerator_t>::do_destroy\\28OT::cmap_accelerator_t*\\29\n5516:hb_lazy_loader_t<OT::cff2_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cff2_accelerator_t\\2c\\2017u>\\2c\\20hb_face_t\\2c\\2017u\\2c\\20OT::cff2_accelerator_t>::get_stored\\28\\29\\20const\n5517:hb_lazy_loader_t<OT::cff2_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cff2_accelerator_t\\2c\\2017u>\\2c\\20hb_face_t\\2c\\2017u\\2c\\20OT::cff2_accelerator_t>::do_destroy\\28OT::cff2_accelerator_t*\\29\n5518:hb_lazy_loader_t<OT::cff1_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::cff1_accelerator_t\\2c\\2016u>\\2c\\20hb_face_t\\2c\\2016u\\2c\\20OT::cff1_accelerator_t>::do_destroy\\28OT::cff1_accelerator_t*\\29\n5519:hb_lazy_loader_t<OT::avar\\2c\\20hb_table_lazy_loader_t<OT::avar\\2c\\2019u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2019u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5520:hb_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::GDEF_accelerator_t\\2c\\2024u>\\2c\\20hb_face_t\\2c\\2024u\\2c\\20OT::GDEF_accelerator_t>::do_destroy\\28OT::GDEF_accelerator_t*\\29\n5521:hb_lazy_loader_t<OT::COLR\\2c\\20hb_table_lazy_loader_t<OT::COLR\\2c\\2035u\\2c\\20true>\\2c\\20hb_face_t\\2c\\2035u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5522:hb_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\2037u>\\2c\\20hb_face_t\\2c\\2037u\\2c\\20OT::CBDT_accelerator_t>::get_stored\\28\\29\\20const\n5523:hb_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\20hb_face_lazy_loader_t<OT::CBDT_accelerator_t\\2c\\2037u>\\2c\\20hb_face_t\\2c\\2037u\\2c\\20OT::CBDT_accelerator_t>::do_destroy\\28OT::CBDT_accelerator_t*\\29\n5524:hb_lazy_loader_t<AAT::trak\\2c\\20hb_table_lazy_loader_t<AAT::trak\\2c\\2032u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2032u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5525:hb_lazy_loader_t<AAT::morx\\2c\\20hb_table_lazy_loader_t<AAT::morx\\2c\\2028u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2028u\\2c\\20hb_blob_t>::get_stored\\28\\29\\20const\n5526:hb_lazy_loader_t<AAT::morx\\2c\\20hb_table_lazy_loader_t<AAT::morx\\2c\\2028u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2028u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5527:hb_lazy_loader_t<AAT::mort\\2c\\20hb_table_lazy_loader_t<AAT::mort\\2c\\2029u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2029u\\2c\\20hb_blob_t>::get_stored\\28\\29\\20const\n5528:hb_lazy_loader_t<AAT::mort\\2c\\20hb_table_lazy_loader_t<AAT::mort\\2c\\2029u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2029u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5529:hb_lazy_loader_t<AAT::ltag\\2c\\20hb_table_lazy_loader_t<AAT::ltag\\2c\\2033u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2033u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5530:hb_lazy_loader_t<AAT::kerx\\2c\\20hb_table_lazy_loader_t<AAT::kerx\\2c\\2030u\\2c\\20false>\\2c\\20hb_face_t\\2c\\2030u\\2c\\20hb_blob_t>::get_stored\\28\\29\\20const\n5531:hb_language_matches\n5532:hb_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>>::operator-=\\28unsigned\\20int\\29\\20&\n5533:hb_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>>::operator+=\\28unsigned\\20int\\29\\20&\n5534:hb_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>::operator++\\28\\29\\20&\n5535:hb_iter_t<hb_filter_iter_t<hb_filter_iter_t<hb_zip_iter_t<hb_iota_iter_t<unsigned\\20int\\2c\\20unsigned\\20int>\\2c\\20hb_array_t<hb_glyph_info_t>>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_glyph_info_t\\20const&\\29\\2c\\20$_6\\20const&\\2c\\20\\28void*\\290>\\2c\\20find_syllables_use\\28hb_buffer_t*\\29::'lambda'\\28hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t\\20const&>\\29\\2c\\20$_5\\20const&\\2c\\20\\28void*\\290>\\2c\\20hb_pair_t<unsigned\\20int\\2c\\20hb_glyph_info_t&>>::operator--\\28\\29\\20&\n5536:hb_indic_get_categories\\28unsigned\\20int\\29\n5537:hb_hashmap_t<unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20true>::fetch_item\\28unsigned\\20int\\20const&\\2c\\20unsigned\\20int\\29\\20const\n5538:hb_hashmap_t<hb_serialize_context_t::object_t\\20const*\\2c\\20unsigned\\20int\\2c\\20false>::fetch_item\\28hb_serialize_context_t::object_t\\20const*\\20const&\\2c\\20unsigned\\20int\\29\\20const\n5539:hb_font_t::subtract_glyph_origin_for_direction\\28unsigned\\20int\\2c\\20hb_direction_t\\2c\\20int*\\2c\\20int*\\29\n5540:hb_font_t::subtract_glyph_h_origin\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n5541:hb_font_t::guess_v_origin_minus_h_origin\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n5542:hb_font_t::get_variation_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\29\n5543:hb_font_t::get_glyph_v_origin_with_fallback\\28unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n5544:hb_font_t::get_glyph_v_kerning\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n5545:hb_font_t::get_glyph_h_kerning\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n5546:hb_font_t::get_glyph_contour_point\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\29\n5547:hb_font_t::get_font_h_extents\\28hb_font_extents_t*\\29\n5548:hb_font_t::draw_glyph\\28unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\29\n5549:hb_font_set_variations\n5550:hb_font_set_funcs\n5551:hb_font_get_variation_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n5552:hb_font_get_font_h_extents_nil\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n5553:hb_font_funcs_set_variation_glyph_func\n5554:hb_font_funcs_set_nominal_glyphs_func\n5555:hb_font_funcs_set_nominal_glyph_func\n5556:hb_font_funcs_set_glyph_h_advances_func\n5557:hb_font_funcs_set_glyph_extents_func\n5558:hb_font_funcs_create\n5559:hb_font_destroy\n5560:hb_face_destroy\n5561:hb_face_create_for_tables\n5562:hb_draw_move_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n5563:hb_draw_funcs_t::emit_move_to\\28void*\\2c\\20hb_draw_state_t&\\2c\\20float\\2c\\20float\\29\n5564:hb_draw_funcs_set_quadratic_to_func\n5565:hb_draw_funcs_set_move_to_func\n5566:hb_draw_funcs_set_line_to_func\n5567:hb_draw_funcs_set_cubic_to_func\n5568:hb_draw_funcs_destroy\n5569:hb_draw_funcs_create\n5570:hb_draw_extents_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n5571:hb_cache_t<24u\\2c\\2016u\\2c\\208u\\2c\\20true>::clear\\28\\29\n5572:hb_buffer_t::sort\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\20\\28*\\29\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\\29\n5573:hb_buffer_t::safe_to_insert_tatweel\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n5574:hb_buffer_t::next_glyphs\\28unsigned\\20int\\29\n5575:hb_buffer_t::message_impl\\28hb_font_t*\\2c\\20char\\20const*\\2c\\20void*\\29\n5576:hb_buffer_t::delete_glyphs_inplace\\28bool\\20\\28*\\29\\28hb_glyph_info_t\\20const*\\29\\29\n5577:hb_buffer_t::clear\\28\\29\n5578:hb_buffer_t::add\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n5579:hb_buffer_get_glyph_positions\n5580:hb_buffer_diff\n5581:hb_buffer_clear_contents\n5582:hb_buffer_add_utf8\n5583:hb_bounds_t::union_\\28hb_bounds_t\\20const&\\29\n5584:hb_blob_t::destroy_user_data\\28\\29\n5585:hb_blob_t*\\20hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>\\28hb_blob_t*\\29\n5586:hb_array_t<char\\20const>::hash\\28\\29\\20const\n5587:hb_array_t<char\\20const>::cmp\\28hb_array_t<char\\20const>\\20const&\\29\\20const\n5588:hb_array_t<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>>::qsort\\28int\\20\\28*\\29\\28void\\20const*\\2c\\20void\\20const*\\29\\29\n5589:hb_array_t<OT::HBGlyphID16>::__next__\\28\\29\n5590:hb_aat_map_builder_t::feature_info_t\\20const*\\20hb_vector_t<hb_aat_map_builder_t::feature_info_t\\2c\\20true>::bsearch<hb_aat_map_builder_t::feature_info_t\\2c\\20true\\2c\\20\\28void*\\290>\\28hb_aat_map_builder_t::feature_info_t\\20const&\\2c\\20hb_aat_map_builder_t::feature_info_t\\20const*\\29\\20const\n5591:hb_aat_map_builder_t::feature_info_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n5592:hb_aat_map_builder_t::feature_info_t::cmp\\28hb_aat_map_builder_t::feature_info_t\\20const&\\29\\20const\n5593:hb_aat_layout_remove_deleted_glyphs\\28hb_buffer_t*\\29\n5594:has_msaa_render_buffer\\28GrSurfaceProxy\\20const*\\2c\\20GrGLCaps\\20const&\\29\n5595:hair_cubic\\28SkPoint\\20const*\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\2c\\20void\\20\\28*\\29\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\\29\n5596:getint\n5597:get_win_string\n5598:get_tasks_for_thread\n5599:get_paint\\28GrAA\\2c\\20unsigned\\20char\\29\n5600:get_layer_mapping_and_bounds\\28SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkMatrix\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\2c\\20bool\\2c\\20float\\29::$_0::operator\\28\\29\\28int\\29\\20const\n5601:get_layer_mapping_and_bounds\\28SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkMatrix\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\2c\\20bool\\2c\\20float\\29\n5602:get_dst_swizzle_and_store\\28GrColorType\\2c\\20SkRasterPipelineOp*\\2c\\20LumMode*\\2c\\20bool*\\2c\\20bool*\\29\n5603:get_driver_and_version\\28GrGLStandard\\2c\\20GrGLVendor\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n5604:get_apple_string\n5605:getSingleRun\\28UBiDi*\\2c\\20unsigned\\20char\\29\n5606:getRunFromLogicalIndex\\28UBiDi*\\2c\\20int\\29\n5607:getMirror\\28int\\2c\\20unsigned\\20short\\29\\20\\28.8823\\29\n5608:geometric_overlap\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n5609:geometric_contains\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n5610:gen_key\\28skgpu::KeyBuilder*\\2c\\20GrProgramInfo\\20const&\\2c\\20GrCaps\\20const&\\29\n5611:gen_fp_key\\28GrFragmentProcessor\\20const&\\2c\\20GrCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\n5612:gather_uniforms_and_check_for_main\\28SkSL::Program\\20const&\\2c\\20std::__2::vector<SkRuntimeEffect::Uniform\\2c\\20std::__2::allocator<SkRuntimeEffect::Uniform>>*\\2c\\20std::__2::vector<SkRuntimeEffect::Child\\2c\\20std::__2::allocator<SkRuntimeEffect::Child>>*\\2c\\20SkRuntimeEffect::Uniform::Flags\\2c\\20unsigned\\20long*\\29\n5613:fwrite\n5614:ft_var_to_normalized\n5615:ft_var_load_item_variation_store\n5616:ft_var_load_hvvar\n5617:ft_var_load_avar\n5618:ft_var_get_value_pointer\n5619:ft_var_get_item_delta\n5620:ft_var_apply_tuple\n5621:ft_set_current_renderer\n5622:ft_recompute_scaled_metrics\n5623:ft_mem_strcpyn\n5624:ft_mem_dup\n5625:ft_hash_num_lookup\n5626:ft_gzip_alloc\n5627:ft_glyphslot_preset_bitmap\n5628:ft_glyphslot_done\n5629:ft_corner_orientation\n5630:ft_corner_is_flat\n5631:ft_cmap_done_internal\n5632:frexp\n5633:fread\n5634:fquad_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n5635:fp_force_eval\n5636:fp_barrier\n5637:formulate_F1DotF2\\28float\\20const*\\2c\\20float*\\29\n5638:formulate_F1DotF2\\28double\\20const*\\2c\\20double*\\29\n5639:format_alignment\\28SkMask::Format\\29\n5640:format1_names\\28unsigned\\20int\\29\n5641:fopen\n5642:fold_opacity_layer_color_to_paint\\28SkPaint\\20const*\\2c\\20bool\\2c\\20SkPaint*\\29\n5643:fmodl\n5644:float\\20std::__2::__num_get_float\\5babi:v160004\\5d<float>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n5645:float\\20const*\\20std::__2::min_element\\5babi:v160004\\5d<float\\20const*\\2c\\20std::__2::__less<float\\2c\\20float>>\\28float\\20const*\\2c\\20float\\20const*\\2c\\20std::__2::__less<float\\2c\\20float>\\29\n5646:float\\20const*\\20std::__2::max_element\\5babi:v160004\\5d<float\\20const*\\2c\\20std::__2::__less<float\\2c\\20float>>\\28float\\20const*\\2c\\20float\\20const*\\2c\\20std::__2::__less<float\\2c\\20float>\\29\n5647:fline_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n5648:first_axis_intersection\\28double\\20const*\\2c\\20bool\\2c\\20double\\2c\\20double*\\29\n5649:fiprintf\n5650:find_unicode_charmap\n5651:find_diff_pt\\28SkPoint\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5652:find_a8_rowproc_pair\\28SkBlendMode\\29\n5653:fillable\\28SkRect\\20const&\\29\n5654:fileno\n5655:fcubic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n5656:fconic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n5657:exp2f_\\28float\\29\n5658:exp2f\n5659:eval_cubic_pts\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5660:eval_cubic_derivative\\28SkPoint\\20const*\\2c\\20float\\29\n5661:em_task_queue_free\n5662:em_task_queue_enqueue\n5663:em_task_queue_dequeue\n5664:em_task_queue_create\n5665:em_task_queue_cancel\n5666:elliptical_effect_uses_scale\\28GrShaderCaps\\20const&\\2c\\20SkRRect\\20const&\\29\n5667:edge_line_needs_recursion\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n5668:eat_space_sep_strings\\28skia_private::TArray<SkString\\2c\\20true>*\\2c\\20char\\20const*\\29\n5669:draw_rect_as_path\\28SkDrawBase\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\n5670:draw_nine\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\20const&\\2c\\20bool\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n5671:dquad_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n5672:double\\20std::__2::__num_get_float\\5babi:v160004\\5d<double>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20int&\\29\n5673:do_fixed\n5674:do_dispatch_to_thread\n5675:doWriteReverse\\28char16_t\\20const*\\2c\\20int\\2c\\20char16_t*\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20UErrorCode*\\29\n5676:doWriteForward\\28char16_t\\20const*\\2c\\20int\\2c\\20char16_t*\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20UErrorCode*\\29\n5677:dline_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n5678:distance_to_sentinel\\28int\\20const*\\29\n5679:dispose_chunk\n5680:diff_to_shift\\28int\\2c\\20int\\2c\\20int\\29\n5681:destroy_size\n5682:destroy_charmaps\n5683:demangling_terminate_handler\\28\\29\n5684:deferred_blit\\28SkAnalyticEdge*\\2c\\20SkAnalyticEdge*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20AdditiveBlitter*\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5685:decompose_current_character\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20bool\\29\n5686:decompose\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20bool\\2c\\20unsigned\\20int\\29\n5687:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5688:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator*\\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator\\2c\\20bool&\\2c\\20skgpu::tess::PatchAttribs&>\\28bool&\\2c\\20skgpu::tess::PatchAttribs&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::PathCurveTessellator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5689:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::Make\\28SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::Make\\28SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkFilterMode\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5690:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::MeshGP::Make\\28SkArenaAlloc*\\2c\\20sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::MeshGP::Make\\28SkArenaAlloc*\\2c\\20sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5691:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker\\2c\\20int&>\\28int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5692:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTransformShader*\\20SkArenaAlloc::make<SkTransformShader\\2c\\20SkShaderBase&\\2c\\20bool\\20const&>\\28SkShaderBase&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTransformShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5693:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkA8_Blitter*\\20SkArenaAlloc::make<SkA8_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29::'lambda'\\28void*\\29>\\28SkA8_Blitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5694:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrThreadSafeCache::Entry*\\20SkArenaAlloc::make<GrThreadSafeCache::Entry\\2c\\20skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&>\\28skgpu::UniqueKey\\20const&\\2c\\20GrSurfaceProxyView\\20const&\\29::'lambda'\\28void*\\29>\\28GrThreadSafeCache::Entry&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5695:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrQuadEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28GrQuadEffect::Make\\28SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrCaps\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5696:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrPipeline*\\20SkArenaAlloc::make<GrPipeline\\2c\\20GrPipeline::InitArgs&\\2c\\20GrProcessorSet\\2c\\20GrAppliedClip>\\28GrPipeline::InitArgs&\\2c\\20GrProcessorSet&&\\2c\\20GrAppliedClip&&\\29::'lambda'\\28void*\\29>\\28GrPipeline&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5697:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrDistanceFieldA8TextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28GrDistanceFieldA8TextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5698:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29>\\28DefaultGeoProc::Make\\28SkArenaAlloc*\\2c\\20unsigned\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20unsigned\\20char\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5699:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n5700:decltype\\28fp0\\28\\28SkRecords::NoOp\\29\\28\\29\\29\\29\\20SkRecord::visit<SkRecords::Draw&>\\28int\\2c\\20SkRecords::Draw&\\29\\20const\n5701:decltype\\28fp0\\28\\28SkRecords::NoOp*\\29\\28nullptr\\29\\29\\29\\20SkRecord::mutate<SkRecord::Destroyer&>\\28int\\2c\\20SkRecord::Destroyer&\\29\n5702:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n5703:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>>&\\2c\\20std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&&>\\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&&\\29\n5704:dcubic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n5705:dcubic_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n5706:dconic_intersect_ray\\28SkDCurve\\20const&\\2c\\20SkDLine\\20const&\\2c\\20SkIntersections*\\29\n5707:data_destroy_arabic\\28void*\\29\n5708:data_create_arabic\\28hb_ot_shape_plan_t\\20const*\\29\n5709:cycle\n5710:cubic_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5711:cubic_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5712:cubic_delta_from_line\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n5713:crop_simple_rect\\28SkRect\\20const&\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n5714:crop_rect\\28SkRect\\20const&\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\2c\\20float*\\29\n5715:count_scalable_pixels\\28int\\20const*\\2c\\20int\\2c\\20bool\\2c\\20int\\2c\\20int\\29\n5716:copysignl\n5717:copy_mask_to_cacheddata\\28SkMaskBuilder*\\29\n5718:copy_bitmap_subset\\28SkBitmap\\20const&\\2c\\20SkIRect\\20const&\\29\n5719:contour_point_vector_t::extend\\28hb_array_t<contour_point_t>\\20const&\\29\n5720:contourMeasure_length\n5721:conservative_round_to_int\\28SkRect\\20const&\\29\n5722:conic_intercept_v\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5723:conic_intercept_h\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20double*\\29\n5724:conic_eval_tan\\28double\\20const*\\2c\\20float\\2c\\20double\\29\n5725:conic_deriv_coeff\\28double\\20const*\\2c\\20float\\2c\\20double*\\29\n5726:compute_stroke_size\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\n5727:compute_pos_tan\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n5728:compute_normal\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint*\\29\n5729:compute_intersection\\28OffsetSegment\\20const&\\2c\\20OffsetSegment\\20const&\\2c\\20SkPoint*\\2c\\20float*\\2c\\20float*\\29\n5730:compute_anti_width\\28short\\20const*\\29\n5731:compose_khmer\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n5732:clip_to_limit\\28SkRegion\\20const&\\2c\\20SkRegion*\\29\n5733:clip_line\\28SkPoint*\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n5734:clipHandlesSprite\\28SkRasterClip\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPixmap\\20const&\\29\n5735:clean_sampling_for_constraint\\28SkSamplingOptions\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n5736:clamp_to_zero\\28SkPoint*\\29\n5737:clamp\\28SkPoint\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20GrTriangulator::Comparator\\20const&\\29\n5738:chop_mono_cubic_at_x\\28SkPoint*\\2c\\20float\\2c\\20SkPoint*\\29\n5739:chopMonoQuadAt\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n5740:chopMonoQuadAtY\\28SkPoint*\\2c\\20float\\2c\\20float*\\29\n5741:chopMonoQuadAtX\\28SkPoint*\\2c\\20float\\2c\\20float*\\29\n5742:checkint\n5743:check_write_and_transfer_input\\28GrGLTexture*\\29\n5744:check_name\\28SkString\\20const&\\29\n5745:check_backend_texture\\28GrBackendTexture\\20const&\\2c\\20GrGLCaps\\20const&\\2c\\20GrGLTexture::Desc*\\2c\\20bool\\29\n5746:char*\\20std::__2::copy\\5babi:v160004\\5d<std::__2::__wrap_iter<char\\20const*>\\2c\\20char*>\\28std::__2::__wrap_iter<char\\20const*>\\2c\\20std::__2::__wrap_iter<char\\20const*>\\2c\\20char*\\29\n5747:char*\\20std::__2::copy\\5babi:v160004\\5d<char\\20const*\\2c\\20char*>\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\n5748:char*\\20SkArenaAlloc::allocUninitializedArray<char>\\28unsigned\\20long\\29\n5749:cff_vstore_done\n5750:cff_subfont_load\n5751:cff_subfont_done\n5752:cff_size_select\n5753:cff_parser_run\n5754:cff_parser_init\n5755:cff_make_private_dict\n5756:cff_load_private_dict\n5757:cff_index_get_name\n5758:cff_glyph_load\n5759:cff_get_kerning\n5760:cff_get_glyph_data\n5761:cff_fd_select_get\n5762:cff_charset_compute_cids\n5763:cff_builder_init\n5764:cff_builder_add_point1\n5765:cff_builder_add_point\n5766:cff_builder_add_contour\n5767:cff_blend_check_vector\n5768:cff_blend_build_vector\n5769:cff1_path_param_t::end_path\\28\\29\n5770:cf2_stack_pop\n5771:cf2_hintmask_setCounts\n5772:cf2_hintmask_read\n5773:cf2_glyphpath_pushMove\n5774:cf2_getSeacComponent\n5775:cf2_freeSeacComponent\n5776:cf2_computeDarkening\n5777:cf2_arrstack_setNumElements\n5778:cf2_arrstack_push\n5779:cbrt\n5780:can_use_hw_blend_equation\\28skgpu::BlendEquation\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\29\n5781:can_proxy_use_scratch\\28GrCaps\\20const&\\2c\\20GrSurfaceProxy*\\29\n5782:calculate_path_gap\\28float\\2c\\20float\\2c\\20SkPath\\20const&\\29::$_3::operator\\28\\29\\28float\\29\\20const\n5783:calculate_path_gap\\28float\\2c\\20float\\2c\\20SkPath\\20const&\\29::$_2::operator\\28\\29\\28float\\29\\20const\n5784:calculate_path_gap\\28float\\2c\\20float\\2c\\20SkPath\\20const&\\29::$_0::operator\\28\\29\\28float\\29\\20const\n5785:byn$mgfn-shared$void\\20extend_pts<\\28SkPaint::Cap\\292>\\28SkPath::Verb\\2c\\20SkPath::Verb\\2c\\20SkPoint*\\2c\\20int\\29\n5786:byn$mgfn-shared$t1_hints_open\n5787:byn$mgfn-shared$std::__2::vector<SkString\\2c\\20std::__2::allocator<SkString>>::__base_destruct_at_end\\5babi:v160004\\5d\\28SkString*\\29\n5788:byn$mgfn-shared$std::__2::vector<SkMeshSpecification::Varying\\2c\\20std::__2::allocator<SkMeshSpecification::Varying>>::~vector\\5babi:v160004\\5d\\28\\29\n5789:byn$mgfn-shared$std::__2::vector<SkFontArguments::Palette::Override\\2c\\20std::__2::allocator<SkFontArguments::Palette::Override>>::__vallocate\\5babi:v160004\\5d\\28unsigned\\20long\\29\n5790:byn$mgfn-shared$std::__2::unique_ptr<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d\\2c\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair\\2c\\20unsigned\\20int\\2c\\20skia_private::THashMap<unsigned\\20int\\2c\\20sk_sp<SkFlattenable>\\20\\28*\\29\\28SkReadBuffer&\\29\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>>::~unique_ptr\\5babi:v160004\\5d\\28\\29\n5791:byn$mgfn-shared$std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\29\\20const\n5792:byn$mgfn-shared$std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20long\\29\\20const\n5793:byn$mgfn-shared$std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\29\\20const\n5794:byn$mgfn-shared$std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20long\\29\\20const\n5795:byn$mgfn-shared$std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::THashMap<std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::IntrinsicKind\\2c\\20SkGoodHash>::Pair>::Slot*\\29\\20const\n5796:byn$mgfn-shared$std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot>::type\\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot\\20\\5b\\5d>::operator\\28\\29\\5babi:v160004\\5d<skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot>\\28skia_private::THashTable<skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20char\\20const*\\2c\\20skia_private::THashMap<char\\20const*\\2c\\20unsigned\\20int\\2c\\20SkGoodHash>::Pair>::Slot*\\29\\20const\n5797:byn$mgfn-shared$std::__2::ctype<wchar_t>::do_toupper\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n5798:byn$mgfn-shared$std::__2::ctype<char>::do_toupper\\28char*\\2c\\20char\\20const*\\29\\20const\n5799:byn$mgfn-shared$std::__2::__split_buffer<int\\2c\\20std::__2::allocator<int>&>::__split_buffer\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20std::__2::allocator<int>&\\29\n5800:byn$mgfn-shared$std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::__unordered_map_hasher<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::__unordered_map_equal<GrFragmentProcessor\\20const*\\2c\\20std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20std::__2::equal_to<GrFragmentProcessor\\20const*>\\2c\\20std::__2::hash<GrFragmentProcessor\\20const*>\\2c\\20true>\\2c\\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>>>::__deallocate_node\\28std::__2::__hash_node_base<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\\20const*\\2c\\20GrGeometryProcessor::ProgramImpl::TransformInfo>\\2c\\20void*>*>*\\29\n5801:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n5802:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n5803:byn$mgfn-shared$skia_private::THashTable<skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Variable\\20const*\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts\\2c\\20SkGoodHash>::Pair>::Iter<std::__2::pair<SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage::VariableCounts>>::operator++\\28\\29\n5804:byn$mgfn-shared$skia_private::THashTable<skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::Pair\\2c\\20SkSL::Symbol\\20const*\\2c\\20skia_private::THashMap<SkSL::Symbol\\20const*\\2c\\20int\\2c\\20SkGoodHash>::Pair>::firstPopulatedSlot\\28\\29\\20const\n5805:byn$mgfn-shared$skia_private::THashMap<SkSL::FunctionDeclaration\\20const*\\2c\\20int\\2c\\20SkGoodHash>::find\\28SkSL::FunctionDeclaration\\20const*\\20const&\\29\\20const\n5806:byn$mgfn-shared$skia_private::THashMap<SkImageFilter\\20const*\\2c\\20std::__2::vector<\\28anonymous\\20namespace\\29::CacheImpl::Value*\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::CacheImpl::Value*>>\\2c\\20SkGoodHash>::find\\28SkImageFilter\\20const*\\20const&\\29\\20const\n5807:byn$mgfn-shared$skia_private::TArray<skia::textlayout::Block\\2c\\20true>::destroyAll\\28\\29\n5808:byn$mgfn-shared$skia_private::TArray<SkGlyph\\20const*\\2c\\20true>::checkRealloc\\28int\\2c\\20double\\29\n5809:byn$mgfn-shared$skia_private::AutoSTArray<16\\2c\\20SkRect>::reset\\28int\\29\n5810:byn$mgfn-shared$skia_private::AutoSTArray<16\\2c\\20GrMipLevel>::reset\\28int\\29\n5811:byn$mgfn-shared$skia_png_gamma_8bit_correct\n5812:byn$mgfn-shared$skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n5813:byn$mgfn-shared$setup_masks_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n5814:byn$mgfn-shared$precisely_between\\28double\\2c\\20double\\2c\\20double\\29\n5815:byn$mgfn-shared$portable::store_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5816:byn$mgfn-shared$portable::load_8888_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5817:byn$mgfn-shared$portable::load_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5818:byn$mgfn-shared$portable::gather_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n5819:byn$mgfn-shared$make_unpremul_effect\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n5820:byn$mgfn-shared$imageFilter_createDilate\n5821:byn$mgfn-shared$hb_vector_t<hb_serialize_context_t::object_t::link_t\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n5822:byn$mgfn-shared$hb_vector_t<contour_point_t\\2c\\20false>::alloc\\28unsigned\\20int\\2c\\20bool\\29\n5823:byn$mgfn-shared$hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20false>::shrink_vector\\28unsigned\\20int\\29\n5824:byn$mgfn-shared$hb_lazy_loader_t<OT::hhea\\2c\\20hb_table_lazy_loader_t<OT::hhea\\2c\\204u\\2c\\20true>\\2c\\20hb_face_t\\2c\\204u\\2c\\20hb_blob_t>::get\\28\\29\\20const\n5825:byn$mgfn-shared$gl_target_to_binding_index\\28unsigned\\20int\\29\n5826:byn$mgfn-shared$cf2_stack_pushInt\n5827:byn$mgfn-shared$bool\\20OT::OffsetTo<OT::ColorLine<OT::NoVariable>\\2c\\20OT::IntType<unsigned\\20int\\2c\\203u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5828:byn$mgfn-shared$\\28anonymous\\20namespace\\29::shift_left\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20int\\29\n5829:byn$mgfn-shared$\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n5830:byn$mgfn-shared$\\28anonymous\\20namespace\\29::DrawAtlasPathShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n5831:byn$mgfn-shared$\\28anonymous\\20namespace\\29::BitmapKey::BitmapKey\\28SkBitmapCacheDesc\\20const&\\29\n5832:byn$mgfn-shared$SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n5833:byn$mgfn-shared$SkSL::ProgramUsage::remove\\28SkSL::Expression\\20const*\\29\n5834:byn$mgfn-shared$SkSL::ProgramUsage::add\\28SkSL::Statement\\20const*\\29\n5835:byn$mgfn-shared$SkSL::FunctionReference::clone\\28SkSL::Position\\29\\20const\n5836:byn$mgfn-shared$SkSL::EmptyExpression::clone\\28SkSL::Position\\29\\20const\n5837:byn$mgfn-shared$SkSL::ChildCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n5838:byn$mgfn-shared$SkRuntimeEffect::findChild\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n5839:byn$mgfn-shared$SkRuntimeEffect::ChildPtr::shader\\28\\29\\20const\n5840:byn$mgfn-shared$SkRecorder::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n5841:byn$mgfn-shared$SkRecorder::onDrawPaint\\28SkPaint\\20const&\\29\n5842:byn$mgfn-shared$SkRecorder::didTranslate\\28float\\2c\\20float\\29\n5843:byn$mgfn-shared$SkRecorder::didConcat44\\28SkM44\\20const&\\29\n5844:byn$mgfn-shared$SkRasterPipelineBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n5845:byn$mgfn-shared$SkPictureRecord::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n5846:byn$mgfn-shared$SkPictureRecord::onDrawPaint\\28SkPaint\\20const&\\29\n5847:byn$mgfn-shared$SkPictureRecord::didConcat44\\28SkM44\\20const&\\29\n5848:byn$mgfn-shared$SkKnownRuntimeEffects::\\28anonymous\\20namespace\\29::make_blur_1D_effect\\28int\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n5849:byn$mgfn-shared$SkJSONWriter::endArray\\28\\29\n5850:byn$mgfn-shared$OT::cff1::sanitize\\28hb_sanitize_context_t*\\29\\20const\n5851:byn$mgfn-shared$OT::IntType<unsigned\\20short\\2c\\202u>*\\20hb_serialize_context_t::extend_min<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::IntType<unsigned\\20short\\2c\\202u>*\\29\n5852:byn$mgfn-shared$OT::ArrayOf<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n5853:byn$mgfn-shared$OT::ArrayOf<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n5854:byn$mgfn-shared$GrRRectShadowGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n5855:byn$mgfn-shared$BlockIndexIterator<GrShaderVar\\20const&\\2c\\20true\\2c\\20true\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Increment\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::GetItem\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29>::Item::operator++\\28\\29\n5856:byn$mgfn-shared$AAT::StateTable<AAT::ObsoleteTypes\\2c\\20void>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n5857:byn$mgfn-shared$AAT::StateTable<AAT::ExtendedTypes\\2c\\20void>::get_entry\\28int\\2c\\20unsigned\\20int\\29\\20const\n5858:byn$mgfn-shared$AAT::Lookup<OT::HBGlyphID16>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n5859:build_key\\28skgpu::ResourceKey::Builder*\\2c\\20GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20GrAttachment::UsageFlags\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\29\n5860:build_intervals\\28int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>*\\2c\\20float*\\29\n5861:bracketProcessChar\\28BracketData*\\2c\\20int\\29\n5862:bracketInit\\28UBiDi*\\2c\\20BracketData*\\29\n5863:bounds_t::merge\\28bounds_t\\20const&\\29\n5864:bottom_collinear\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\29\n5865:bool\\20std::__2::operator==\\5babi:v160004\\5d<std::__2::allocator<char>>\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\n5866:bool\\20std::__2::operator==\\5babi:v160004\\5d<SkPaint\\2c\\20int>\\28std::__2::variant<SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n5867:bool\\20std::__2::operator!=\\5babi:v160004\\5d<SkPaint\\2c\\20int>\\28std::__2::variant<SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n5868:bool\\20std::__2::__insertion_sort_incomplete<skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\2c\\20skia::textlayout::OneLineShaper::RunBlock*>\\28skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::RunBlock*\\2c\\20skia::textlayout::OneLineShaper::finish\\28skia::textlayout::Block\\20const&\\2c\\20float\\2c\\20float&\\29::$_0&\\29\n5869:bool\\20std::__2::__insertion_sort_incomplete<SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\2c\\20SkSL::ProgramElement\\20const**>\\28SkSL::ProgramElement\\20const**\\2c\\20SkSL::ProgramElement\\20const**\\2c\\20SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::sortNewElements\\28\\29::'lambda'\\28SkSL::ProgramElement\\20const*\\2c\\20SkSL::ProgramElement\\20const*\\29&\\29\n5870:bool\\20std::__2::__insertion_sort_incomplete<SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\2c\\20SkSL::FunctionDefinition\\20const**>\\28SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::FunctionDefinition\\20const**\\2c\\20SkSL::Transform::FindAndDeclareBuiltinFunctions\\28SkSL::Program&\\29::$_0&\\29\n5871:bool\\20set_point_length<false>\\28SkPoint*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n5872:bool\\20is_parallel<SkTCurve>\\28SkDLine\\20const&\\2c\\20SkTCurve\\20const&\\29\n5873:bool\\20hb_sanitize_context_t::check_array<OT::IntType<short\\2c\\202u>>\\28OT::IntType<short\\2c\\202u>\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n5874:bool\\20hb_sanitize_context_t::check_array<OT::Index>\\28OT::Index\\20const*\\2c\\20unsigned\\20int\\29\\20const\n5875:bool\\20hb_sanitize_context_t::check_array<AAT::Feature>\\28AAT::Feature\\20const*\\2c\\20unsigned\\20int\\29\\20const\n5876:bool\\20hb_sanitize_context_t::check_array<AAT::Entry<void>>\\28AAT::Entry<void>\\20const*\\2c\\20unsigned\\20int\\29\\20const\n5877:bool\\20apply_string<GSUBProxy>\\28OT::hb_ot_apply_context_t*\\2c\\20GSUBProxy::Lookup\\20const&\\2c\\20OT::hb_ot_layout_lookup_accelerator_t\\20const&\\29\n5878:bool\\20OT::hb_accelerate_subtables_context_t::cache_func_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\2c\\20bool\\29\n5879:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat2_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5880:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5881:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::ReverseChainSingleSubstFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5882:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5883:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::LigatureSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5884:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::AlternateSubstFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5885:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat2>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5886:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5887:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5888:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5889:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5890:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5891:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5892:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::CursivePosFormat1>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5893:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat3>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5894:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat1_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5895:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat3>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5896:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat1_4<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n5897:bool\\20OT::chain_context_would_apply_lookup<OT::IntType<unsigned\\20short\\2c\\202u>>\\28OT::hb_would_apply_context_t*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20unsigned\\20int\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\2c\\20unsigned\\20int\\2c\\20OT::LookupRecord\\20const*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\n5898:bool\\20OT::Paint::sanitize<>\\28hb_sanitize_context_t*\\29\\20const\n5899:bool\\20OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5900:bool\\20OT::OffsetTo<OT::RecordListOfScript\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5901:bool\\20OT::OffsetTo<OT::RecordListOf<OT::Feature>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5902:bool\\20OT::OffsetTo<OT::Paint\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5903:bool\\20OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<unsigned\\20int>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20unsigned\\20int&&\\29\\20const\n5904:bool\\20OT::OffsetTo<OT::Layout::Common::Coverage\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::serialize_serialize<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>&>\\28hb_serialize_context_t*\\2c\\20hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\\2c\\20hb_array_t<OT::HBGlyphID16>>\\2c\\20$_7\\20const&\\2c\\20\\28hb_function_sortedness_t\\291\\2c\\20\\28void*\\290>&\\29\n5905:bool\\20OT::OffsetTo<OT::FeatureVariations\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5906:bool\\20OT::OffsetTo<OT::FeatureParams\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<unsigned\\20int>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20unsigned\\20int&&\\29\\20const\n5907:bool\\20OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5908:bool\\20OT::OffsetTo<AAT::TrackData\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::sanitize<AAT::trak\\20const*>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20AAT::trak\\20const*&&\\29\\20const\n5909:bool\\20OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned\\20int\\2c\\204u>>\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20false>::sanitize<>\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\29\\20const\n5910:bool\\20OT::GSUBGPOS::sanitize<OT::Layout::GSUB_impl::SubstLookup>\\28hb_sanitize_context_t*\\29\\20const\n5911:bool\\20OT::GSUBGPOS::sanitize<OT::Layout::GPOS_impl::PosLookup>\\28hb_sanitize_context_t*\\29\\20const\n5912:bool\\20GrTTopoSort_Visit<GrRenderTask\\2c\\20GrRenderTask::TopoSortTraits>\\28GrRenderTask*\\2c\\20unsigned\\20int*\\29\n5913:blur_column\\28void\\20\\28*\\29\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20\\28*\\29\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\\2c\\20int\\2c\\20int\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n5914:blit_two_alphas\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n5915:blit_full_alpha\\28AdditiveBlitter*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\29\n5916:blender_requires_shader\\28SkBlender\\20const*\\29\n5917:bits_to_runs\\28SkBlitter*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20char\\2c\\20long\\2c\\20unsigned\\20char\\29\n5918:between_closed\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool\\29\n5919:barycentric_coords\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\2c\\20skvx::Vec<4\\2c\\20float>*\\29\n5920:auto\\20GrGLProgramBuilder::computeCountsAndStrides\\28unsigned\\20int\\2c\\20GrGeometryProcessor\\20const&\\2c\\20bool\\29::$_0::operator\\28\\29<GrGeometryProcessor::Attribute>\\28int\\2c\\20GrGeometryProcessor::Attribute\\20const&\\29\\20const\n5921:auto&&\\20std::__2::__generic_get\\5babi:v160004\\5d<0ul\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&>\\28std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n5922:atanf\n5923:are_radius_check_predicates_valid\\28float\\2c\\20float\\2c\\20float\\29\n5924:arabic_fallback_plan_destroy\\28arabic_fallback_plan_t*\\29\n5925:apply_forward\\28OT::hb_ot_apply_context_t*\\2c\\20OT::hb_ot_layout_lookup_accelerator_t\\20const&\\2c\\20unsigned\\20int\\29\n5926:apply_fill_type\\28SkPathFillType\\2c\\20int\\29\n5927:apply_fill_type\\28SkPathFillType\\2c\\20GrTriangulator::Poly*\\29\n5928:append_texture_swizzle\\28SkString*\\2c\\20skgpu::Swizzle\\29\n5929:append_color_output\\28PorterDuffXferProcessor\\20const&\\2c\\20GrGLSLXPFragmentBuilder*\\2c\\20skgpu::BlendFormula::OutputType\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\n5930:antifilldot8\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20SkBlitter*\\2c\\20bool\\29\n5931:analysis_properties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\2c\\20SkBlendMode\\29\n5932:afm_stream_skip_spaces\n5933:afm_stream_read_string\n5934:afm_stream_read_one\n5935:af_sort_and_quantize_widths\n5936:af_shaper_get_elem\n5937:af_loader_compute_darkening\n5938:af_latin_metrics_scale_dim\n5939:af_latin_hints_detect_features\n5940:af_hint_normal_stem\n5941:af_glyph_hints_align_weak_points\n5942:af_glyph_hints_align_strong_points\n5943:af_face_globals_new\n5944:af_cjk_metrics_scale_dim\n5945:af_cjk_metrics_scale\n5946:af_cjk_metrics_init_widths\n5947:af_cjk_metrics_check_digits\n5948:af_cjk_hints_init\n5949:af_cjk_hints_detect_features\n5950:af_cjk_hints_compute_blue_edges\n5951:af_cjk_hints_apply\n5952:af_cjk_get_standard_widths\n5953:af_cjk_compute_stem_width\n5954:af_axis_hints_new_edge\n5955:add_line\\28SkPoint\\20const*\\2c\\20skia_private::TArray<PathSegment\\2c\\20true>*\\29\n5956:add_const_color\\28SkRasterPipeline_GradientCtx*\\2c\\20unsigned\\20long\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\29\n5957:a_swap.9170\n5958:a_fetch_add.9131\n5959:a_fetch_add\n5960:a_ctz_32\n5961:_pow10\\28unsigned\\20int\\29\n5962:_hb_preprocess_text_vowel_constraints\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n5963:_hb_ot_shape\n5964:_hb_options_init\\28\\29\n5965:_hb_grapheme_group_func\\28hb_glyph_info_t\\20const&\\2c\\20hb_glyph_info_t\\20const&\\29\n5966:_hb_font_create\\28hb_face_t*\\29\n5967:_hb_fallback_shape\n5968:_glyf_get_advance_with_var_unscaled\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\n5969:_emscripten_yield\n5970:_emscripten_thread_mailbox_init\n5971:_do_call\n5972:__wasm_init_tls\n5973:__vm_wait\n5974:__vfprintf_internal\n5975:__trunctfsf2\n5976:__timedwait\n5977:__tan\n5978:__set_thread_state\n5979:__rem_pio2_large\n5980:__pthread_rwlock_unlock\n5981:__pthread_rwlock_tryrdlock\n5982:__pthread_rwlock_timedrdlock\n5983:__newlocale\n5984:__math_xflowf\n5985:__math_invalidf\n5986:__loc_is_allocated\n5987:__isxdigit_l\n5988:__getf2\n5989:__get_locale\n5990:__ftello_unlocked\n5991:__fseeko_unlocked\n5992:__floatscan\n5993:__expo2\n5994:__dynamic_cast\n5995:__divtf3\n5996:__cxxabiv1::__base_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n5997:__cxxabiv1::\\28anonymous\\20namespace\\29::InitByteGlobalMutex<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppMutex\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppCondVar\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::GlobalStatic<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppMutex>::instance\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::GlobalStatic<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppCondVar>::instance\\2c\\20\\28unsigned\\20int\\20\\28*\\29\\28\\29\\290>::LockGuard::~LockGuard\\28\\29\n5998:__cxxabiv1::\\28anonymous\\20namespace\\29::InitByteGlobalMutex<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppMutex\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppCondVar\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::GlobalStatic<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppMutex>::instance\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::GlobalStatic<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppCondVar>::instance\\2c\\20\\28unsigned\\20int\\20\\28*\\29\\28\\29\\290>::LockGuard::LockGuard\\28char\\20const*\\29\n5999:__cxxabiv1::\\28anonymous\\20namespace\\29::GuardObject<__cxxabiv1::\\28anonymous\\20namespace\\29::InitByteGlobalMutex<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppMutex\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppCondVar\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::GlobalStatic<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppMutex>::instance\\2c\\20__cxxabiv1::\\28anonymous\\20namespace\\29::GlobalStatic<__cxxabiv1::\\28anonymous\\20namespace\\29::LibcppCondVar>::instance\\2c\\20\\28unsigned\\20int\\20\\28*\\29\\28\\29\\290>>::GuardObject\\28unsigned\\20int*\\29\n6000:\\28anonymous\\20namespace\\29::texture_color\\28SkRGBA4f<\\28SkAlphaType\\293>\\2c\\20float\\2c\\20GrColorType\\2c\\20GrColorInfo\\20const&\\29\n6001:\\28anonymous\\20namespace\\29::supported_aa\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrAA\\29\n6002:\\28anonymous\\20namespace\\29::set_uv_quad\\28SkPoint\\20const*\\2c\\20\\28anonymous\\20namespace\\29::BezierVertex*\\29\n6003:\\28anonymous\\20namespace\\29::safe_to_ignore_subset_rect\\28GrAAType\\2c\\20SkFilterMode\\2c\\20DrawQuad\\20const&\\2c\\20SkRect\\20const&\\29\n6004:\\28anonymous\\20namespace\\29::rrect_type_to_vert_count\\28\\28anonymous\\20namespace\\29::RRectType\\29\n6005:\\28anonymous\\20namespace\\29::proxy_normalization_params\\28GrSurfaceProxy\\20const*\\2c\\20GrSurfaceOrigin\\29\n6006:\\28anonymous\\20namespace\\29::prepare_for_direct_mask_drawing\\28SkStrike*\\2c\\20SkMatrix\\20const&\\2c\\20SkZip<unsigned\\20short\\20const\\2c\\20SkPoint\\20const>\\2c\\20SkZip<SkGlyph\\20const*\\2c\\20SkPoint>\\2c\\20SkZip<unsigned\\20short\\2c\\20SkPoint>\\29\n6007:\\28anonymous\\20namespace\\29::normalize_src_quad\\28\\28anonymous\\20namespace\\29::NormalizationParams\\20const&\\2c\\20GrQuad*\\29\n6008:\\28anonymous\\20namespace\\29::normalize_and_inset_subset\\28SkFilterMode\\2c\\20\\28anonymous\\20namespace\\29::NormalizationParams\\20const&\\2c\\20SkRect\\20const*\\29\n6009:\\28anonymous\\20namespace\\29::next_gen_id\\28\\29\n6010:\\28anonymous\\20namespace\\29::morphology_pass\\28skif::Context\\20const&\\2c\\20skif::FilterResult\\20const&\\2c\\20\\28anonymous\\20namespace\\29::MorphType\\2c\\20\\28anonymous\\20namespace\\29::MorphDirection\\2c\\20int\\29\n6011:\\28anonymous\\20namespace\\29::make_non_convex_fill_op\\28GrRecordingContext*\\2c\\20SkArenaAlloc*\\2c\\20skgpu::ganesh::FillPathFlags\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20GrPaint&&\\29\n6012:\\28anonymous\\20namespace\\29::is_visible\\28SkRect\\20const&\\2c\\20SkIRect\\20const&\\29\n6013:\\28anonymous\\20namespace\\29::is_degen_quad_or_conic\\28SkPoint\\20const*\\2c\\20float*\\29\n6014:\\28anonymous\\20namespace\\29::init_vertices_paint\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkBlender*\\2c\\20bool\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n6015:\\28anonymous\\20namespace\\29::get_hbFace_cache\\28\\29\n6016:\\28anonymous\\20namespace\\29::gather_lines_and_quads\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<SkPoint\\2c\\20true>*\\2c\\20skia_private::TArray<int\\2c\\20true>*\\2c\\20skia_private::TArray<float\\2c\\20true>*\\29::$_1::operator\\28\\29\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\2c\\20bool\\29\\20const\n6017:\\28anonymous\\20namespace\\29::draw_to_sw_mask\\28GrSWMaskHelper*\\2c\\20skgpu::ganesh::ClipStack::Element\\20const&\\2c\\20bool\\29\n6018:\\28anonymous\\20namespace\\29::draw_path\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20skgpu::ganesh::PathRenderer*\\2c\\20GrHardClip\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20GrAA\\29\n6019:\\28anonymous\\20namespace\\29::determine_clipped_src_rect\\28SkIRect\\2c\\20SkMatrix\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkISize\\20const&\\2c\\20SkRect\\20const*\\29\n6020:\\28anonymous\\20namespace\\29::create_data\\28int\\2c\\20bool\\2c\\20float\\29\n6021:\\28anonymous\\20namespace\\29::cpu_blur\\28skif::Context\\20const&\\2c\\20skif::LayerSpace<SkSize>\\2c\\20sk_sp<SkSpecialImage>\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\2c\\20skif::LayerSpace<SkIRect>\\29::$_0::operator\\28\\29\\28double\\29\\20const\n6022:\\28anonymous\\20namespace\\29::copyFTBitmap\\28FT_Bitmap_\\20const&\\2c\\20SkMaskBuilder*\\29\n6023:\\28anonymous\\20namespace\\29::contains_scissor\\28GrScissorState\\20const&\\2c\\20GrScissorState\\20const&\\29\n6024:\\28anonymous\\20namespace\\29::colrv1_start_glyph_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20FT_Color_Root_Transform_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n6025:\\28anonymous\\20namespace\\29::colrv1_start_glyph\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20unsigned\\20short\\2c\\20FT_Color_Root_Transform_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29\n6026:\\28anonymous\\20namespace\\29::colrv1_draw_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_COLR_Paint_\\20const&\\29\n6027:\\28anonymous\\20namespace\\29::colrv1_configure_skpaint\\28FT_FaceRec_*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_COLR_Paint_\\20const&\\2c\\20SkPaint*\\29\n6028:\\28anonymous\\20namespace\\29::can_use_draw_texture\\28SkPaint\\20const&\\2c\\20SkSamplingOptions\\20const&\\29\n6029:\\28anonymous\\20namespace\\29::axis_aligned_quad_size\\28GrQuad\\20const&\\29\n6030:\\28anonymous\\20namespace\\29::YUVPlanesRec::~YUVPlanesRec\\28\\29\n6031:\\28anonymous\\20namespace\\29::YUVPlanesKey::YUVPlanesKey\\28unsigned\\20int\\29\n6032:\\28anonymous\\20namespace\\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\\28\\29\n6033:\\28anonymous\\20namespace\\29::TriangulatingPathOp::~TriangulatingPathOp\\28\\29\n6034:\\28anonymous\\20namespace\\29::TriangulatingPathOp::TriangulatingPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrAAType\\2c\\20GrUserStencilSettings\\20const*\\29\n6035:\\28anonymous\\20namespace\\29::TriangulatingPathOp::Triangulate\\28GrEagerVertexAllocator*\\2c\\20SkMatrix\\20const&\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\2c\\20float\\2c\\20bool*\\29\n6036:\\28anonymous\\20namespace\\29::TriangulatingPathOp::CreateKey\\28skgpu::UniqueKey*\\2c\\20GrStyledShape\\20const&\\2c\\20SkIRect\\20const&\\29\n6037:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n6038:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n6039:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n6040:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::glyphCount\\28\\29\\20const\n6041:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n6042:\\28anonymous\\20namespace\\29::TextureOpImpl::~TextureOpImpl\\28\\29\n6043:\\28anonymous\\20namespace\\29::TextureOpImpl::propagateCoverageAAThroughoutChain\\28\\29\n6044:\\28anonymous\\20namespace\\29::TextureOpImpl::numChainedQuads\\28\\29\\20const\n6045:\\28anonymous\\20namespace\\29::TextureOpImpl::characterize\\28\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\29\\20const\n6046:\\28anonymous\\20namespace\\29::TextureOpImpl::appendQuad\\28DrawQuad*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\29\n6047:\\28anonymous\\20namespace\\29::TextureOpImpl::Make\\28GrRecordingContext*\\2c\\20GrTextureSetEntry*\\2c\\20int\\2c\\20int\\2c\\20SkFilterMode\\2c\\20SkMipmapMode\\2c\\20skgpu::ganesh::TextureOp::Saturate\\2c\\20GrAAType\\2c\\20SkCanvas::SrcRectConstraint\\2c\\20SkMatrix\\20const&\\2c\\20sk_sp<GrColorSpaceXform>\\29\n6048:\\28anonymous\\20namespace\\29::TextureOpImpl::FillInVertices\\28GrCaps\\20const&\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl*\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\2c\\20char*\\29\n6049:\\28anonymous\\20namespace\\29::TextureOpImpl::Desc::totalSizeInBytes\\28\\29\\20const\n6050:\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc>\\28\\29\n6051:\\28anonymous\\20namespace\\29::TextureOpImpl::ClassID\\28\\29\n6052:\\28anonymous\\20namespace\\29::SpotVerticesFactory::makeVertices\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint*\\29\\20const\n6053:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::hb_script_for_unichar\\28int\\29\n6054:\\28anonymous\\20namespace\\29::SkQuadCoeff::SkQuadCoeff\\28SkPoint\\20const*\\29\n6055:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::requiredInput\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\29\\20const\n6056:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::kernelOutputBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\29\\20const\n6057:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::requiredInput\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n6058:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onMakeClone\\28SkFontArguments\\20const&\\29\\20const\n6059:\\28anonymous\\20namespace\\29::SkCropImageFilter::requiredInput\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\29\\20const\n6060:\\28anonymous\\20namespace\\29::SkConicCoeff::SkConicCoeff\\28SkConic\\20const&\\29\n6061:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\\28\\29\n6062:\\28anonymous\\20namespace\\29::SkBlurImageFilter::mapSigma\\28skif::Mapping\\20const&\\2c\\20bool\\29\\20const\n6063:\\28anonymous\\20namespace\\29::SkBlendImageFilter::~SkBlendImageFilter\\28\\29\n6064:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::~SkBidiIterator_icu\\28\\29\n6065:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::~ShaperHarfBuzz\\28\\29\n6066:\\28anonymous\\20namespace\\29::ShadowedPath::keyBytes\\28\\29\\20const\n6067:\\28anonymous\\20namespace\\29::ShadowInvalidator::~ShadowInvalidator\\28\\29\n6068:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\\28\\29\n6069:\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29.1\n6070:\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n6071:\\28anonymous\\20namespace\\29::SDFTSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n6072:\\28anonymous\\20namespace\\29::SDFTSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n6073:\\28anonymous\\20namespace\\29::RectsBlurRec::~RectsBlurRec\\28\\29\n6074:\\28anonymous\\20namespace\\29::RectsBlurKey::RectsBlurKey\\28float\\2c\\20SkBlurStyle\\2c\\20SkRect\\20const*\\2c\\20int\\29\n6075:\\28anonymous\\20namespace\\29::RRectBlurRec::~RRectBlurRec\\28\\29\n6076:\\28anonymous\\20namespace\\29::RRectBlurKey::RRectBlurKey\\28float\\2c\\20SkRRect\\20const&\\2c\\20SkBlurStyle\\29\n6077:\\28anonymous\\20namespace\\29::PlanGauss::PlanGauss\\28double\\29\n6078:\\28anonymous\\20namespace\\29::PathSubRun::~PathSubRun\\28\\29\n6079:\\28anonymous\\20namespace\\29::PathOpSubmitter::~PathOpSubmitter\\28\\29\n6080:\\28anonymous\\20namespace\\29::PathGeoBuilder::createMeshAndPutBackReserve\\28\\29\n6081:\\28anonymous\\20namespace\\29::PathGeoBuilder::allocNewBuffers\\28\\29\n6082:\\28anonymous\\20namespace\\29::PathGeoBuilder::addQuad\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\29\n6083:\\28anonymous\\20namespace\\29::Pass::blur\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n6084:\\28anonymous\\20namespace\\29::MipMapRec::~MipMapRec\\28\\29\n6085:\\28anonymous\\20namespace\\29::MipMapKey::MipMapKey\\28SkBitmapCacheDesc\\20const&\\29\n6086:\\28anonymous\\20namespace\\29::MipLevelHelper::allocAndInit\\28SkArenaAlloc*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\29\n6087:\\28anonymous\\20namespace\\29::MipLevelHelper::MipLevelHelper\\28\\29\n6088:\\28anonymous\\20namespace\\29::MiddleOutShader::~MiddleOutShader\\28\\29\n6089:\\28anonymous\\20namespace\\29::MeshOp::~MeshOp\\28\\29\n6090:\\28anonymous\\20namespace\\29::MeshOp::MeshOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20sk_sp<SkVertices>\\2c\\20GrPrimitiveType\\20const*\\2c\\20GrAAType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\29\n6091:\\28anonymous\\20namespace\\29::MeshOp::MeshOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMesh\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20true>\\2c\\20GrAAType\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\29\n6092:\\28anonymous\\20namespace\\29::MeshOp::Mesh::indices\\28\\29\\20const\n6093:\\28anonymous\\20namespace\\29::MeshOp::Mesh::Mesh\\28SkMesh\\20const&\\29\n6094:\\28anonymous\\20namespace\\29::MeshOp::ClassID\\28\\29\n6095:\\28anonymous\\20namespace\\29::MeshGP::~MeshGP\\28\\29\n6096:\\28anonymous\\20namespace\\29::MeshGP::Impl::~Impl\\28\\29\n6097:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::defineStruct\\28char\\20const*\\29\n6098:\\28anonymous\\20namespace\\29::Iter::next\\28\\29\n6099:\\28anonymous\\20namespace\\29::FillRectOpImpl::~FillRectOpImpl\\28\\29\n6100:\\28anonymous\\20namespace\\29::FillRectOpImpl::tessellate\\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20char*\\29\\20const\n6101:\\28anonymous\\20namespace\\29::FillRectOpImpl::FillRectOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20GrAAType\\2c\\20DrawQuad*\\2c\\20GrUserStencilSettings\\20const*\\2c\\20GrSimpleMeshDrawOpHelper::InputFlags\\29\n6102:\\28anonymous\\20namespace\\29::ExternalWebGLTexture::~ExternalWebGLTexture\\28\\29\n6103:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n6104:\\28anonymous\\20namespace\\29::DrawableSubRun::~DrawableSubRun\\28\\29\n6105:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::~DrawAtlasPathShader\\28\\29\n6106:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\\28\\29\n6107:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::DrawAtlasOpImpl\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAAType\\2c\\20int\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\29\n6108:\\28anonymous\\20namespace\\29::DirectMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n6109:\\28anonymous\\20namespace\\29::DirectMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n6110:\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n6111:\\28anonymous\\20namespace\\29::DefaultPathOp::~DefaultPathOp\\28\\29\n6112:\\28anonymous\\20namespace\\29::DefaultPathOp::programInfo\\28\\29\n6113:\\28anonymous\\20namespace\\29::DefaultPathOp::primType\\28\\29\\20const\n6114:\\28anonymous\\20namespace\\29::DefaultPathOp::PathData::PathData\\28\\28anonymous\\20namespace\\29::DefaultPathOp::PathData&&\\29\n6115:\\28anonymous\\20namespace\\29::DefaultPathOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n6116:\\28anonymous\\20namespace\\29::DefaultPathOp::DefaultPathOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkPath\\20const&\\2c\\20float\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20GrAAType\\2c\\20SkRect\\20const&\\2c\\20GrUserStencilSettings\\20const*\\29\n6117:\\28anonymous\\20namespace\\29::ClipGeometry\\20\\28anonymous\\20namespace\\29::get_clip_geometry<skgpu::ganesh::ClipStack::SaveRecord\\2c\\20skgpu::ganesh::ClipStack::Draw>\\28skgpu::ganesh::ClipStack::SaveRecord\\20const&\\2c\\20skgpu::ganesh::ClipStack::Draw\\20const&\\29\n6118:\\28anonymous\\20namespace\\29::CircularRRectEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20unsigned\\20int\\2c\\20SkRRect\\20const&\\29\n6119:\\28anonymous\\20namespace\\29::CachedTessellationsRec::~CachedTessellationsRec\\28\\29\n6120:\\28anonymous\\20namespace\\29::CachedTessellationsRec::CachedTessellationsRec\\28SkResourceCache::Key\\20const&\\2c\\20sk_sp<\\28anonymous\\20namespace\\29::CachedTessellations>\\29\n6121:\\28anonymous\\20namespace\\29::CachedTessellations::~CachedTessellations\\28\\29\n6122:\\28anonymous\\20namespace\\29::CachedTessellations::CachedTessellations\\28\\29\n6123:\\28anonymous\\20namespace\\29::CacheImpl::~CacheImpl\\28\\29\n6124:\\28anonymous\\20namespace\\29::BitmapKey::BitmapKey\\28SkBitmapCacheDesc\\20const&\\29\n6125:\\28anonymous\\20namespace\\29::AmbientVerticesFactory::makeVertices\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint*\\29\\20const\n6126:\\28anonymous\\20namespace\\29::AAHairlineOp::~AAHairlineOp\\28\\29\n6127:\\28anonymous\\20namespace\\29::AAHairlineOp::PathData::PathData\\28\\28anonymous\\20namespace\\29::AAHairlineOp::PathData&&\\29\n6128:\\28anonymous\\20namespace\\29::AAHairlineOp::AAHairlineOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20unsigned\\20char\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkIRect\\2c\\20float\\2c\\20GrUserStencilSettings\\20const*\\29\n6129:TextureSourceImageGenerator::~TextureSourceImageGenerator\\28\\29\n6130:TT_Set_Named_Instance\n6131:TT_Save_Context\n6132:TT_Hint_Glyph\n6133:TT_DotFix14\n6134:TT_Done_Context\n6135:StringBuffer\\20apply_format_string<1024>\\28char\\20const*\\2c\\20void*\\2c\\20char\\20\\28&\\29\\20\\5b1024\\5d\\2c\\20SkString*\\29\n6136:SortContourList\\28SkOpContourHead**\\2c\\20bool\\2c\\20bool\\29\n6137:SkWriter32::writeString\\28char\\20const*\\2c\\20unsigned\\20long\\29\n6138:SkWriter32::writePoint3\\28SkPoint3\\20const&\\29\n6139:SkWBuffer::padToAlign4\\28\\29\n6140:SkVertices::getSizes\\28\\29\\20const\n6141:SkVertices::Builder::init\\28SkVertices::Desc\\20const&\\29\n6142:SkVertices::Builder::Builder\\28SkVertices::VertexMode\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\29\n6143:SkUnicode_client::~SkUnicode_client\\28\\29\n6144:SkUnicode::convertUtf16ToUtf8\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n6145:SkUnicode::BidiRegion&\\20std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>::emplace_back<unsigned\\20long&\\2c\\20unsigned\\20long&\\2c\\20unsigned\\20char&>\\28unsigned\\20long&\\2c\\20unsigned\\20long&\\2c\\20unsigned\\20char&\\29\n6146:SkUTF::UTF16ToUTF8\\28char*\\2c\\20int\\2c\\20unsigned\\20short\\20const*\\2c\\20unsigned\\20long\\29\n6147:SkUTF::ToUTF8\\28int\\2c\\20char*\\29\n6148:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\\28\\29\n6149:SkTypeface_FreeTypeStream::SkTypeface_FreeTypeStream\\28std::__2::unique_ptr<SkFontData\\2c\\20std::__2::default_delete<SkFontData>>\\2c\\20SkString\\2c\\20SkFontStyle\\20const&\\2c\\20bool\\29\n6150:SkTypeface_FreeType::getFaceRec\\28\\29\\20const\n6151:SkTypeface_FreeType::SkTypeface_FreeType\\28SkFontStyle\\20const&\\2c\\20bool\\29\n6152:SkTypeface_FreeType::GetUnitsPerEm\\28FT_FaceRec_*\\29\n6153:SkTypeface_Custom::~SkTypeface_Custom\\28\\29\n6154:SkTypeface_Custom::onGetFamilyName\\28SkString*\\29\\20const\n6155:SkTypeface::unicharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n6156:SkTypeface::MakeEmpty\\28\\29\n6157:SkTransformShader::update\\28SkMatrix\\20const&\\29\n6158:SkTextBlobBuilder::reserve\\28unsigned\\20long\\29\n6159:SkTextBlobBuilder::allocRunPos\\28SkFont\\20const&\\2c\\20int\\2c\\20SkRect\\20const*\\29\n6160:SkTextBlobBuilder::TightRunBounds\\28SkTextBlob::RunRecord\\20const&\\29\n6161:SkTextBlob::getIntercepts\\28float\\20const*\\2c\\20float*\\2c\\20SkPaint\\20const*\\29\\20const\n6162:SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29\n6163:SkTSpan::split\\28SkTSpan*\\2c\\20SkArenaAlloc*\\29\n6164:SkTSpan::splitAt\\28SkTSpan*\\2c\\20double\\2c\\20SkArenaAlloc*\\29\n6165:SkTSpan::linearIntersects\\28SkTCurve\\20const&\\29\\20const\n6166:SkTSpan::hullCheck\\28SkTSpan\\20const*\\2c\\20bool*\\2c\\20bool*\\29\n6167:SkTSpan::contains\\28double\\29\\20const\n6168:SkTSect::unlinkSpan\\28SkTSpan*\\29\n6169:SkTSect::removeAllBut\\28SkTSpan\\20const*\\2c\\20SkTSpan*\\2c\\20SkTSect*\\29\n6170:SkTSect::recoverCollapsed\\28\\29\n6171:SkTSect::intersects\\28SkTSpan*\\2c\\20SkTSect*\\2c\\20SkTSpan*\\2c\\20int*\\29\n6172:SkTSect::coincidentHasT\\28double\\29\n6173:SkTSect::boundsMax\\28\\29\n6174:SkTSect::addSplitAt\\28SkTSpan*\\2c\\20double\\29\n6175:SkTSect::addForPerp\\28SkTSpan*\\2c\\20double\\29\n6176:SkTSect::EndsEqual\\28SkTSect\\20const*\\2c\\20SkTSect\\20const*\\2c\\20SkIntersections*\\29\n6177:SkTMultiMap<GrResourceAllocator::Register\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceAllocator::FreePoolTraits>::reset\\28\\29\n6178:SkTMaskGamma<3\\2c\\203\\2c\\203>::CanonicalColor\\28unsigned\\20int\\29\n6179:SkTLazy<SkPaint>::getMaybeNull\\28\\29\n6180:SkTInternalLList<skgpu::ganesh::SmallPathShapeData>::remove\\28skgpu::ganesh::SmallPathShapeData*\\29\n6181:SkTInternalLList<\\28anonymous\\20namespace\\29::CacheImpl::Value>::remove\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*\\29\n6182:SkTInternalLList<\\28anonymous\\20namespace\\29::CacheImpl::Value>::addToHead\\28\\28anonymous\\20namespace\\29::CacheImpl::Value*\\29\n6183:SkTInternalLList<TriangulationVertex>::remove\\28TriangulationVertex*\\29\n6184:SkTInternalLList<TriangulationVertex>::addToTail\\28TriangulationVertex*\\29\n6185:SkTInternalLList<SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry>::addToHead\\28SkLRUCache<unsigned\\20int\\2c\\20GrGLGpu::SamplerObjectCache::Sampler\\2c\\20SkGoodHash>::Entry*\\29\n6186:SkTInternalLList<SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry>::addToHead\\28SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\\29\n6187:SkTInternalLList<SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry>::addToHead\\28SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::Entry*\\29\n6188:SkTDynamicHash<\\28anonymous\\20namespace\\29::CacheImpl::Value\\2c\\20SkImageFilterCacheKey\\2c\\20\\28anonymous\\20namespace\\29::CacheImpl::Value>::find\\28SkImageFilterCacheKey\\20const&\\29\\20const\n6189:SkTDStorage::SkTDStorage\\28SkTDStorage&&\\29\n6190:SkTDPQueue<\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\2c\\20&\\28anonymous\\20namespace\\29::RunIteratorQueue::CompareEntry\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\\2c\\20\\28int*\\20\\28*\\29\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\20const&\\29\\290>::insert\\28\\28anonymous\\20namespace\\29::RunIteratorQueue::Entry\\29\n6191:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::remove\\28GrGpuResource*\\29\n6192:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::percolateUpIfNecessary\\28int\\29\n6193:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::percolateDownIfNecessary\\28int\\29\n6194:SkTDPQueue<GrGpuResource*\\2c\\20&GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\\2c\\20&GrResourceCache::AccessResourceIndex\\28GrGpuResource*\\20const&\\29>::insert\\28GrGpuResource*\\29\n6195:SkTDArray<unsigned\\20char>::append\\28int\\29\n6196:SkTDArray<char>::append\\28int\\29\n6197:SkTDArray<SkRecords::FillBounds::SaveBounds>::push_back\\28SkRecords::FillBounds::SaveBounds\\20const&\\29\n6198:SkTCubic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n6199:SkTCopyOnFirstWrite<SkRRect>::writable\\28\\29\n6200:SkTCopyOnFirstWrite<SkMatrix>::writable\\28\\29\n6201:SkTConic::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n6202:SkTConic::hullIntersects\\28SkDCubic\\20const&\\2c\\20bool*\\29\\20const\n6203:SkTConic::controlsInside\\28\\29\\20const\n6204:SkTConic::collapsed\\28\\29\\20const\n6205:SkTBlockList<skgpu::ganesh::ClipStack::SaveRecord\\2c\\202>::pushItem\\28\\29\n6206:SkTBlockList<skgpu::ganesh::ClipStack::SaveRecord\\2c\\202>::pop_back\\28\\29\n6207:SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::push_back\\28skgpu::ganesh::ClipStack::RawElement&&\\29\n6208:SkTBlockList<SkRasterClipStack::Rec\\2c\\2016>::pushItem\\28\\29\n6209:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::~SkTBlockList\\28\\29\n6210:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::push_back\\28GrGLProgramDataManager::GLUniformInfo\\20const&\\29\n6211:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\\2c\\201>::item\\28int\\29\n6212:SkSurface_Raster::~SkSurface_Raster\\28\\29\n6213:SkSurface_Ganesh::~SkSurface_Ganesh\\28\\29\n6214:SkSurface_Ganesh::onDiscard\\28\\29\n6215:SkSurface_Base::replaceBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrSurfaceOrigin\\2c\\20SkSurface::ContentChangeMode\\2c\\20void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n6216:SkSurface_Base::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n6217:SkSurface_Base::onCapabilities\\28\\29\n6218:SkSurfaceValidateRasterInfo\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n6219:SkStrokeRec::GetInflationRadius\\28SkPaint::Join\\2c\\20float\\2c\\20SkPaint::Cap\\2c\\20float\\29\n6220:SkString_from_UTF16BE\\28unsigned\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkString&\\29\n6221:SkString::equals\\28char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n6222:SkString::equals\\28char\\20const*\\29\\20const\n6223:SkString::appendVAList\\28char\\20const*\\2c\\20void*\\29\n6224:SkString::appendUnichar\\28int\\29\n6225:SkString::appendHex\\28unsigned\\20int\\2c\\20int\\29\n6226:SkString::SkString\\28unsigned\\20long\\29\n6227:SkStrikeSpec::SkStrikeSpec\\28SkStrikeSpec\\20const&\\29\n6228:SkStrikeSpec::ShouldDrawAsPath\\28SkPaint\\20const&\\2c\\20SkFont\\20const&\\2c\\20SkMatrix\\20const&\\29::$_0::operator\\28\\29\\28int\\2c\\20int\\29\\20const\n6229:SkStrikeSpec::ShouldDrawAsPath\\28SkPaint\\20const&\\2c\\20SkFont\\20const&\\2c\\20SkMatrix\\20const&\\29\n6230:SkStrikeSpec::MakeTransformMask\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\29\n6231:SkStrikeCache::~SkStrikeCache\\28\\29\n6232:SkStrike::~SkStrike\\28\\29\n6233:SkStrike::prepareForImage\\28SkGlyph*\\29\n6234:SkStrike::prepareForDrawable\\28SkGlyph*\\29\n6235:SkStrike::internalPrepare\\28SkSpan<unsigned\\20short\\20const>\\2c\\20SkStrike::PathDetail\\2c\\20SkGlyph\\20const**\\29\n6236:SkStrSplit\\28char\\20const*\\2c\\20char\\20const*\\2c\\20SkStrSplitMode\\2c\\20skia_private::TArray<SkString\\2c\\20true>*\\29\n6237:SkStrAppendU32\\28char*\\2c\\20unsigned\\20int\\29\n6238:SkStrAppendS32\\28char*\\2c\\20int\\29\n6239:SkSpriteBlitter_Memcpy::~SkSpriteBlitter_Memcpy\\28\\29\n6240:SkSpecialImages::MakeFromRaster\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\2c\\20SkSurfaceProps\\20const&\\29\n6241:SkSpecialImages::AsView\\28GrRecordingContext*\\2c\\20SkSpecialImage\\20const*\\29\n6242:SkSpecialImages::AsBitmap\\28SkSpecialImage\\20const*\\2c\\20SkBitmap*\\29\n6243:SkSpecialImage_Raster::~SkSpecialImage_Raster\\28\\29\n6244:SkSpecialImage_Raster::getROPixels\\28SkBitmap*\\29\\20const\n6245:SkSpecialImage_Raster::SkSpecialImage_Raster\\28SkIRect\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n6246:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\\28\\29\n6247:SkSpecialImage::makeSubset\\28SkIRect\\20const&\\29\\20const\n6248:SkSpecialImage::makePixelOutset\\28\\29\\20const\n6249:SkSpecialImage::SkSpecialImage\\28SkIRect\\20const&\\2c\\20unsigned\\20int\\2c\\20SkColorInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n6250:SkShapers::unicode::BidiRunIterator\\28sk_sp<SkUnicode>\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\n6251:SkShapers::HB::ShapeDontWrapOrReorder\\28sk_sp<SkUnicode>\\2c\\20sk_sp<SkFontMgr>\\29\n6252:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\\28\\29\n6253:SkShaper::MakeStdLanguageRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\29\n6254:SkShaper::MakeFontMgrRunIterator\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20sk_sp<SkFontMgr>\\29\n6255:SkShadowTessellator::MakeAmbient\\28SkPath\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20bool\\29\n6256:SkShaders::MatrixRec::totalMatrix\\28\\29\\20const\n6257:SkShaders::MatrixRec::concat\\28SkMatrix\\20const&\\29\\20const\n6258:SkShaders::Empty\\28\\29\n6259:SkShaders::Color\\28unsigned\\20int\\29\n6260:SkShaders::Blend\\28sk_sp<SkBlender>\\2c\\20sk_sp<SkShader>\\2c\\20sk_sp<SkShader>\\29\n6261:SkShaderUtils::VisitLineByLine\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20std::__2::function<void\\20\\28int\\2c\\20char\\20const*\\29>\\20const&\\29\n6262:SkShaderUtils::GLSLPrettyPrint::parseUntil\\28char\\20const*\\29\n6263:SkShaderUtils::GLSLPrettyPrint::parseUntilNewline\\28\\29\n6264:SkShaderBase::getFlattenableType\\28\\29\\20const\n6265:SkShader::makeWithLocalMatrix\\28SkMatrix\\20const&\\29\\20const\n6266:SkShader::makeWithColorFilter\\28sk_sp<SkColorFilter>\\29\\20const\n6267:SkScan::PathRequiresTiling\\28SkIRect\\20const&\\29\n6268:SkScan::HairLine\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n6269:SkScan::FillXRect\\28SkIRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n6270:SkScan::FillRect\\28SkRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n6271:SkScan::AntiFrameRect\\28SkRect\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n6272:SkScan::AntiFillRect\\28SkRect\\20const&\\2c\\20SkRegion\\20const*\\2c\\20SkBlitter*\\29\n6273:SkScan::AAAFillPath\\28SkPath\\20const&\\2c\\20SkBlitter*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n6274:SkScalerContext_FreeType::~SkScalerContext_FreeType\\28\\29\n6275:SkScalerContext_FreeType::shouldSubpixelBitmap\\28SkGlyph\\20const&\\2c\\20SkMatrix\\20const&\\29\n6276:SkScalerContext_FreeType::getCBoxForLetter\\28char\\2c\\20FT_BBox_*\\29\n6277:SkScalerContext_FreeType::getBoundsOfCurrentOutlineGlyph\\28FT_GlyphSlotRec_*\\2c\\20SkRect*\\29\n6278:SkScalerContextRec::setLuminanceColor\\28unsigned\\20int\\29\n6279:SkScalerContextFTUtils::drawCOLRv1Glyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n6280:SkScalerContextFTUtils::drawCOLRv0Glyph\\28FT_FaceRec_*\\2c\\20SkGlyph\\20const&\\2c\\20unsigned\\20int\\2c\\20SkSpan<unsigned\\20int>\\2c\\20SkCanvas*\\29\\20const\n6281:SkScalerContext::makeGlyph\\28SkPackedGlyphID\\2c\\20SkArenaAlloc*\\29\n6282:SkScalerContext::internalGetPath\\28SkGlyph&\\2c\\20SkArenaAlloc*\\29\n6283:SkScalerContext::SkScalerContext\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\n6284:SkScalerContext::SaturateGlyphBounds\\28SkGlyph*\\2c\\20SkRect&&\\29\n6285:SkScalerContext::MakeRecAndEffects\\28SkFont\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkScalerContextFlags\\2c\\20SkMatrix\\20const&\\2c\\20SkScalerContextRec*\\2c\\20SkScalerContextEffects*\\29\n6286:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\n6287:SkScalerContext::AutoDescriptorGivenRecAndEffects\\28SkScalerContextRec\\20const&\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkAutoDescriptor*\\29\n6288:SkScalarInterpFunc\\28float\\2c\\20float\\20const*\\2c\\20float\\20const*\\2c\\20int\\29\n6289:SkSTArenaAlloc<4096ul>::SkSTArenaAlloc\\28unsigned\\20long\\29\n6290:SkSTArenaAlloc<256ul>::SkSTArenaAlloc\\28unsigned\\20long\\29\n6291:SkSLCombinedSamplerTypeForTextureType\\28GrTextureType\\29\n6292:SkSL::type_to_sksltype\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const&\\2c\\20SkSLType*\\29\n6293:SkSL::stoi\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20long\\20long*\\29\n6294:SkSL::splat_scalar\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n6295:SkSL::simplify_constant_equality\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n6296:SkSL::short_circuit_boolean\\28SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n6297:SkSL::remove_break_statements\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29::RemoveBreaksWriter::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n6298:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_2::operator\\28\\29\\28int\\29\\20const\n6299:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_1::operator\\28\\29\\28int\\29\\20const\n6300:SkSL::optimize_intrinsic_call\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::IntrinsicKind\\2c\\20SkSL::ExpressionArray\\20const&\\2c\\20SkSL::Type\\20const&\\29::$_0::operator\\28\\29\\28int\\29\\20const\n6301:SkSL::negate_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Type\\20const&\\29\n6302:SkSL::make_reciprocal_expression\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n6303:SkSL::index_out_of_range\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20long\\20long\\2c\\20SkSL::Expression\\20const&\\29\n6304:SkSL::hoist_vardecl_symbols_into_outer_scope\\28SkSL::Context\\20const&\\2c\\20SkSL::Block\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::SymbolTable*\\29::SymbolHoister::visitStatement\\28SkSL::Statement\\20const&\\29\n6305:SkSL::get_struct_definitions_from_module\\28SkSL::Program&\\2c\\20SkSL::Module\\20const&\\2c\\20std::__2::vector<SkSL::ProgramElement\\20const*\\2c\\20std::__2::allocator<SkSL::ProgramElement\\20const*>>*\\29\n6306:SkSL::find_existing_declaration\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::IntrinsicKind\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration**\\29::$_0::operator\\28\\29\\28\\29\\20const\n6307:SkSL::extract_matrix\\28SkSL::Expression\\20const*\\2c\\20float*\\29\n6308:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n6309:SkSL::eliminate_no_op_boolean\\28SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29\n6310:SkSL::check_main_signature\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\29::$_4::operator\\28\\29\\28int\\29\\20const\n6311:SkSL::check_main_signature\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\29::$_2::operator\\28\\29\\28SkSL::Type\\20const&\\29\\20const\n6312:SkSL::check_main_signature\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\\2c\\20std::__2::default_delete<SkSL::Variable>>\\2c\\20true>&\\29::$_1::operator\\28\\29\\28int\\29\\20const\n6313:SkSL::argument_needs_scratch_variable\\28SkSL::Expression\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20SkSL::ProgramUsage\\20const&\\29\n6314:SkSL::argument_and_parameter_flags_match\\28SkSL::Expression\\20const&\\2c\\20SkSL::Variable\\20const&\\29\n6315:SkSL::apply_to_elements\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20double\\20\\28*\\29\\28double\\29\\29\n6316:SkSL::append_rtadjust_fixup_to_vertex_main\\28SkSL::Context\\20const&\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::Block&\\29::AppendRTAdjustFixupHelper::Adjust\\28\\29\\20const\n6317:SkSL::\\28anonymous\\20namespace\\29::clone_with_ref_kind\\28SkSL::Expression\\20const&\\2c\\20SkSL::VariableRefKind\\2c\\20SkSL::Position\\29\n6318:SkSL::\\28anonymous\\20namespace\\29::check_valid_uniform_type\\28SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Context\\20const&\\2c\\20bool\\29::$_0::operator\\28\\29\\28\\29\\20const\n6319:SkSL::\\28anonymous\\20namespace\\29::caps_lookup_table\\28\\29\n6320:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n6321:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitStructFields\\28SkSL::Type\\20const&\\29\n6322:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n6323:SkSL::\\28anonymous\\20namespace\\29::ProgramUsageVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n6324:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n6325:SkSL::\\28anonymous\\20namespace\\29::IsAssignableVisitor::visitExpression\\28SkSL::Expression&\\2c\\20SkSL::FieldAccess\\20const*\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n6326:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n6327:SkSL::Variable::MakeScratchVariable\\28SkSL::Context\\20const&\\2c\\20SkSL::Mangler&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n6328:SkSL::VarDeclaration::ErrorCheck\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Position\\2c\\20SkSL::Layout\\20const&\\2c\\20SkSL::ModifierFlags\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::VariableStorage\\29\n6329:SkSL::TypeReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n6330:SkSL::TypeReference::VerifyType\\28SkSL::Context\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Position\\29\n6331:SkSL::TypeReference::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\29\n6332:SkSL::Type::checkIfUsableInArray\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\\20const\n6333:SkSL::Type::checkForOutOfRangeLiteral\\28SkSL::Context\\20const&\\2c\\20SkSL::Expression\\20const&\\29\\20const\n6334:SkSL::Type::MakeStructType\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Field\\2c\\20true>\\2c\\20bool\\29\n6335:SkSL::Type::MakeLiteralType\\28char\\20const*\\2c\\20SkSL::Type\\20const&\\2c\\20signed\\20char\\29\n6336:SkSL::Transform::\\28anonymous\\20namespace\\29::BuiltinVariableScanner::addDeclaringElement\\28SkSL::Symbol\\20const*\\29\n6337:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n6338:SkSL::Transform::EliminateDeadGlobalVariables\\28SkSL::Program&\\29::$_0::operator\\28\\29\\28std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\20const&\\29\\20const\n6339:SkSL::TernaryExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n6340:SkSL::SymbolTable::moveSymbolTo\\28SkSL::SymbolTable*\\2c\\20SkSL::Symbol*\\2c\\20SkSL::Context\\20const&\\29\n6341:SkSL::SymbolTable::isBuiltinType\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\\20const\n6342:SkSL::SymbolTable::insertNewParent\\28\\29\n6343:SkSL::SymbolTable::addWithoutOwnership\\28SkSL::Symbol*\\29\n6344:SkSL::Symbol::instantiate\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\\20const\n6345:SkSL::Swizzle::~Swizzle\\28\\29\n6346:SkSL::SwitchStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n6347:SkSL::SwitchCase::Make\\28SkSL::Position\\2c\\20long\\20long\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n6348:SkSL::SwitchCase::MakeDefault\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\29\n6349:SkSL::StructType::StructType\\28SkSL::Position\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Field\\2c\\20true>\\2c\\20int\\2c\\20bool\\2c\\20bool\\29\n6350:SkSL::String::vappendf\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>*\\2c\\20char\\20const*\\2c\\20void*\\29\n6351:SkSL::SingleArgumentConstructor::argumentSpan\\28\\29\n6352:SkSL::Setting::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20bool\\20const\\20SkSL::ShaderCaps::*\\29\n6353:SkSL::RP::stack_usage\\28SkSL::RP::Instruction\\20const&\\29\n6354:SkSL::RP::is_sliceable_swizzle\\28SkSpan<signed\\20char\\20const>\\29\n6355:SkSL::RP::is_immediate_op\\28SkSL::RP::BuilderOp\\29\n6356:SkSL::RP::UnownedLValueSlice::isWritable\\28\\29\\20const\n6357:SkSL::RP::UnownedLValueSlice::dynamicSlotRange\\28\\29\n6358:SkSL::RP::SwizzleLValue::~SwizzleLValue\\28\\29\n6359:SkSL::RP::ScratchLValue::~ScratchLValue\\28\\29\n6360:SkSL::RP::Program::appendStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkSL::RP::Callbacks*\\2c\\20SkSpan<float\\20const>\\29\\20const\n6361:SkSL::RP::Program::appendStackRewind\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\29\\20const\n6362:SkSL::RP::Program::appendCopyImmutableUnmasked\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20std::byte*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\\20const\n6363:SkSL::RP::Program::appendAdjacentNWayTernaryOp\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20SkSL::RP::ProgramOp\\2c\\20std::byte*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\\20const\n6364:SkSL::RP::Program::appendAdjacentNWayBinaryOp\\28skia_private::TArray<SkSL::RP::Program::Stage\\2c\\20true>*\\2c\\20SkArenaAlloc*\\2c\\20SkSL::RP::ProgramOp\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int\\29\\20const\n6365:SkSL::RP::LValue::swizzle\\28\\29\n6366:SkSL::RP::ImmutableLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n6367:SkSL::RP::Generator::writeVarDeclaration\\28SkSL::VarDeclaration\\20const&\\29\n6368:SkSL::RP::Generator::writeFunction\\28SkSL::IRNode\\20const&\\2c\\20SkSL::FunctionDefinition\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const>\\29\n6369:SkSL::RP::Generator::storeImmutableValueToSlots\\28skia_private::TArray<int\\2c\\20true>\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n6370:SkSL::RP::Generator::returnComplexity\\28SkSL::FunctionDefinition\\20const*\\29\n6371:SkSL::RP::Generator::pushVariableReferencePartial\\28SkSL::VariableReference\\20const&\\2c\\20SkSL::RP::SlotRange\\29\n6372:SkSL::RP::Generator::pushTraceScopeMask\\28\\29\n6373:SkSL::RP::Generator::pushLengthIntrinsic\\28int\\29\n6374:SkSL::RP::Generator::pushLValueOrExpression\\28SkSL::RP::LValue*\\2c\\20SkSL::Expression\\20const&\\29\n6375:SkSL::RP::Generator::pushIntrinsic\\28SkSL::RP::BuilderOp\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n6376:SkSL::RP::Generator::pushIntrinsic\\28SkSL::IntrinsicKind\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Expression\\20const&\\29\n6377:SkSL::RP::Generator::pushImmutableData\\28SkSL::Expression\\20const&\\29\n6378:SkSL::RP::Generator::getImmutableValueForExpression\\28SkSL::Expression\\20const&\\2c\\20skia_private::TArray<int\\2c\\20true>*\\29\n6379:SkSL::RP::Generator::getImmutableBitsForSlot\\28SkSL::Expression\\20const&\\2c\\20unsigned\\20long\\29\n6380:SkSL::RP::Generator::findPreexistingImmutableData\\28skia_private::TArray<int\\2c\\20true>\\20const&\\29\n6381:SkSL::RP::Generator::discardTraceScopeMask\\28\\29\n6382:SkSL::RP::Builder::push_condition_mask\\28\\29\n6383:SkSL::RP::Builder::pop_slots_unmasked\\28SkSL::RP::SlotRange\\29\n6384:SkSL::RP::Builder::pop_condition_mask\\28\\29\n6385:SkSL::RP::Builder::pop_and_reenable_loop_mask\\28\\29\n6386:SkSL::RP::Builder::merge_loop_mask\\28\\29\n6387:SkSL::RP::Builder::merge_inv_condition_mask\\28\\29\n6388:SkSL::RP::Builder::mask_off_loop_mask\\28\\29\n6389:SkSL::RP::Builder::discard_stack\\28int\\2c\\20int\\29\n6390:SkSL::RP::Builder::copy_stack_to_slots_unmasked\\28SkSL::RP::SlotRange\\2c\\20int\\29\n6391:SkSL::RP::Builder::copy_stack_to_slots_unmasked\\28SkSL::RP::SlotRange\\29\n6392:SkSL::RP::Builder::copy_stack_to_slots\\28SkSL::RP::SlotRange\\29\n6393:SkSL::RP::Builder::branch_if_any_lanes_active\\28int\\29\n6394:SkSL::RP::AutoStack::pushClone\\28SkSL::RP::SlotRange\\2c\\20int\\29\n6395:SkSL::RP::AutoContinueMask::~AutoContinueMask\\28\\29\n6396:SkSL::RP::AutoContinueMask::exitLoopBody\\28\\29\n6397:SkSL::RP::AutoContinueMask::enterLoopBody\\28\\29\n6398:SkSL::RP::AutoContinueMask::enable\\28\\29\n6399:SkSL::ProgramUsage::remove\\28SkSL::Expression\\20const*\\29\n6400:SkSL::ProgramUsage::get\\28SkSL::FunctionDeclaration\\20const&\\29\\20const\n6401:SkSL::ProgramUsage::add\\28SkSL::Statement\\20const*\\29\n6402:SkSL::ProgramUsage::add\\28SkSL::Expression\\20const*\\29\n6403:SkSL::ProgramConfig::ProgramConfig\\28\\29\n6404:SkSL::Program::~Program\\28\\29\n6405:SkSL::PostfixExpression::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkSL::Operator\\29\n6406:SkSL::PipelineStage::PipelineStageCodeGenerator::functionName\\28SkSL::FunctionDeclaration\\20const&\\29\n6407:SkSL::PipelineStage::PipelineStageCodeGenerator::functionDeclaration\\28SkSL::FunctionDeclaration\\20const&\\29\n6408:SkSL::Parser::~Parser\\28\\29\n6409:SkSL::Parser::varDeclarations\\28\\29\n6410:SkSL::Parser::varDeclarationsPrefix\\28SkSL::Parser::VarDeclarationsPrefix*\\29\n6411:SkSL::Parser::varDeclarationsOrExpressionStatement\\28\\29\n6412:SkSL::Parser::switchCaseBody\\28SkSL::ExpressionArray*\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n6413:SkSL::Parser::shiftExpression\\28\\29\n6414:SkSL::Parser::relationalExpression\\28\\29\n6415:SkSL::Parser::multiplicativeExpression\\28\\29\n6416:SkSL::Parser::logicalXorExpression\\28\\29\n6417:SkSL::Parser::logicalAndExpression\\28\\29\n6418:SkSL::Parser::localVarDeclarationEnd\\28SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Token\\29\n6419:SkSL::Parser::intLiteral\\28long\\20long*\\29\n6420:SkSL::Parser::identifier\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>*\\29\n6421:SkSL::Parser::globalVarDeclarationEnd\\28SkSL::Position\\2c\\20SkSL::Modifiers\\20const&\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Token\\29\n6422:SkSL::Parser::expressionStatement\\28\\29\n6423:SkSL::Parser::expectNewline\\28\\29\n6424:SkSL::Parser::equalityExpression\\28\\29\n6425:SkSL::Parser::directive\\28bool\\29\n6426:SkSL::Parser::declarations\\28\\29\n6427:SkSL::Parser::bitwiseXorExpression\\28\\29\n6428:SkSL::Parser::bitwiseOrExpression\\28\\29\n6429:SkSL::Parser::bitwiseAndExpression\\28\\29\n6430:SkSL::Parser::additiveExpression\\28\\29\n6431:SkSL::Parser::addGlobalVarDeclaration\\28std::__2::unique_ptr<SkSL::VarDeclaration\\2c\\20std::__2::default_delete<SkSL::VarDeclaration>>\\29\n6432:SkSL::Parser::Parser\\28SkSL::Compiler*\\2c\\20SkSL::ProgramSettings\\20const&\\2c\\20SkSL::ProgramKind\\2c\\20std::__2::unique_ptr<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::default_delete<std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>>>\\29\n6433:SkSL::MultiArgumentConstructor::argumentSpan\\28\\29\n6434:SkSL::ModuleLoader::loadSharedModule\\28SkSL::Compiler*\\29\n6435:SkSL::ModuleLoader::loadPublicModule\\28SkSL::Compiler*\\29\n6436:SkSL::ModuleLoader::Get\\28\\29\n6437:SkSL::Module::~Module\\28\\29\n6438:SkSL::MethodReference::~MethodReference\\28\\29.1\n6439:SkSL::MethodReference::~MethodReference\\28\\29\n6440:SkSL::MatrixType::bitWidth\\28\\29\\20const\n6441:SkSL::MakeRasterPipelineProgram\\28SkSL::Program\\20const&\\2c\\20SkSL::FunctionDefinition\\20const&\\2c\\20SkSL::DebugTracePriv*\\2c\\20bool\\29\n6442:SkSL::Layout::operator!=\\28SkSL::Layout\\20const&\\29\\20const\n6443:SkSL::Layout::description\\28\\29\\20const\n6444:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::finalize_distance\\28double\\29\n6445:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_matrixCompMult\\28double\\2c\\20double\\2c\\20double\\29\n6446:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_length\\28std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n6447:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_add\\28SkSL::Context\\20const&\\2c\\20std::__2::array<SkSL::Expression\\20const*\\2c\\203ul>\\20const&\\29\n6448:SkSL::Inliner::inlineStatement\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Analysis::ReturnComplexity\\2c\\20SkSL::Statement\\20const&\\2c\\20SkSL::ProgramUsage\\20const&\\2c\\20bool\\29\n6449:SkSL::Inliner::inlineExpression\\28SkSL::Position\\2c\\20skia_private::THashMap<SkSL::Variable\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20SkGoodHash>*\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::Expression\\20const&\\29\n6450:SkSL::Inliner::buildCandidateList\\28std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::ProgramUsage*\\2c\\20SkSL::InlineCandidateList*\\29::$_1::operator\\28\\29\\28SkSL::InlineCandidate\\20const&\\29\\20const\n6451:SkSL::Inliner::buildCandidateList\\28std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>\\2c\\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>>\\20const&\\2c\\20SkSL::SymbolTable*\\2c\\20SkSL::ProgramUsage*\\2c\\20SkSL::InlineCandidateList*\\29::$_0::operator\\28\\29\\28SkSL::InlineCandidate\\20const&\\29\\20const\n6452:SkSL::Inliner::InlinedCall::~InlinedCall\\28\\29\n6453:SkSL::IndexExpression::~IndexExpression\\28\\29\n6454:SkSL::IfStatement::~IfStatement\\28\\29\n6455:SkSL::IRHelpers::Ref\\28SkSL::Variable\\20const*\\29\\20const\n6456:SkSL::IRHelpers::Mul\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\\20const\n6457:SkSL::IRHelpers::Assign\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\\20const\n6458:SkSL::GLSLCodeGenerator::writeVarDeclaration\\28SkSL::VarDeclaration\\20const&\\2c\\20bool\\29\n6459:SkSL::GLSLCodeGenerator::writeProgramElement\\28SkSL::ProgramElement\\20const&\\29\n6460:SkSL::GLSLCodeGenerator::writeMinAbsHack\\28SkSL::Expression&\\2c\\20SkSL::Expression&\\29\n6461:SkSL::GLSLCodeGenerator::generateCode\\28\\29\n6462:SkSL::FunctionDefinition::~FunctionDefinition\\28\\29.1\n6463:SkSL::FunctionDefinition::~FunctionDefinition\\28\\29\n6464:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n6465:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::addLocalVariable\\28SkSL::Variable\\20const*\\2c\\20SkSL::Position\\29\n6466:SkSL::FunctionDeclaration::~FunctionDeclaration\\28\\29.1\n6467:SkSL::FunctionDeclaration::~FunctionDeclaration\\28\\29\n6468:SkSL::FunctionDeclaration::mangledName\\28\\29\\20const\n6469:SkSL::FunctionDeclaration::getMainInputColorParameter\\28\\29\\20const\n6470:SkSL::FunctionDeclaration::getMainDestColorParameter\\28\\29\\20const\n6471:SkSL::FunctionDeclaration::determineFinalTypes\\28SkSL::ExpressionArray\\20const&\\2c\\20skia_private::STArray<8\\2c\\20SkSL::Type\\20const*\\2c\\20true>*\\2c\\20SkSL::Type\\20const**\\29\\20const\n6472:SkSL::FunctionDeclaration::FunctionDeclaration\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ModifierFlags\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skia_private::TArray<SkSL::Variable*\\2c\\20true>\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::IntrinsicKind\\29\n6473:SkSL::FunctionCall::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::ExpressionArray\\29\n6474:SkSL::FunctionCall::FunctionCall\\28SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::FunctionDeclaration\\20const*\\2c\\20SkSL::ExpressionArray\\29\n6475:SkSL::FunctionCall::FindBestFunctionForCall\\28SkSL::Context\\20const&\\2c\\20SkSL::FunctionDeclaration\\20const*\\2c\\20SkSL::ExpressionArray\\20const&\\29\n6476:SkSL::FunctionCall::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20SkSL::ExpressionArray\\29\n6477:SkSL::ForStatement::~ForStatement\\28\\29\n6478:SkSL::ForStatement::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n6479:SkSL::FindIntrinsicKind\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n6480:SkSL::FieldAccess::~FieldAccess\\28\\29.1\n6481:SkSL::FieldAccess::~FieldAccess\\28\\29\n6482:SkSL::FieldAccess::description\\28SkSL::OperatorPrecedence\\29\\20const\n6483:SkSL::FieldAccess::FieldAccess\\28SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\2c\\20int\\2c\\20SkSL::FieldAccessOwnerKind\\29\n6484:SkSL::ExtendedVariable::~ExtendedVariable\\28\\29\n6485:SkSL::Expression::isFloatLiteral\\28\\29\\20const\n6486:SkSL::Expression::coercionCost\\28SkSL::Type\\20const&\\29\\20const\n6487:SkSL::DoStatement::~DoStatement\\28\\29.1\n6488:SkSL::DoStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n6489:SkSL::DiscardStatement::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\29\n6490:SkSL::ContinueStatement::Make\\28SkSL::Position\\29\n6491:SkSL::ConstructorStruct::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n6492:SkSL::ConstructorScalarCast::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n6493:SkSL::ConstructorMatrixResize::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\29\n6494:SkSL::Constructor::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const&\\2c\\20SkSL::ExpressionArray\\29\n6495:SkSL::Compiler::resetErrors\\28\\29\n6496:SkSL::Compiler::initializeContext\\28SkSL::Module\\20const*\\2c\\20SkSL::ProgramKind\\2c\\20SkSL::ProgramSettings\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\29\n6497:SkSL::Compiler::cleanupContext\\28\\29\n6498:SkSL::CoercionCost::operator<\\28SkSL::CoercionCost\\29\\20const\n6499:SkSL::ChildCall::~ChildCall\\28\\29.1\n6500:SkSL::ChildCall::~ChildCall\\28\\29\n6501:SkSL::ChildCall::Make\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Variable\\20const&\\2c\\20SkSL::ExpressionArray\\29\n6502:SkSL::ChildCall::ChildCall\\28SkSL::Position\\2c\\20SkSL::Type\\20const*\\2c\\20SkSL::Variable\\20const*\\2c\\20SkSL::ExpressionArray\\29\n6503:SkSL::BreakStatement::Make\\28SkSL::Position\\29\n6504:SkSL::Block::Block\\28SkSL::Position\\2c\\20skia_private::STArray<2\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20true>\\2c\\20SkSL::Block::Kind\\2c\\20std::__2::unique_ptr<SkSL::SymbolTable\\2c\\20std::__2::default_delete<SkSL::SymbolTable>>\\29\n6505:SkSL::BinaryExpression::isAssignmentIntoVariable\\28\\29\n6506:SkSL::ArrayType::columns\\28\\29\\20const\n6507:SkSL::Analysis::\\28anonymous\\20namespace\\29::LoopControlFlowVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n6508:SkSL::Analysis::IsDynamicallyUniformExpression\\28SkSL::Expression\\20const&\\29::IsDynamicallyUniformExpressionVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n6509:SkSL::Analysis::IsDynamicallyUniformExpression\\28SkSL::Expression\\20const&\\29\n6510:SkSL::Analysis::IsConstantExpression\\28SkSL::Expression\\20const&\\29\n6511:SkSL::Analysis::IsCompileTimeConstant\\28SkSL::Expression\\20const&\\29::IsCompileTimeConstantVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n6512:SkSL::Analysis::IsAssignable\\28SkSL::Expression&\\2c\\20SkSL::Analysis::AssignmentInfo*\\2c\\20SkSL::ErrorReporter*\\29\n6513:SkSL::Analysis::HasSideEffects\\28SkSL::Expression\\20const&\\29::HasSideEffectsVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n6514:SkSL::Analysis::GetLoopUnrollInfo\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::ForLoopPositions\\20const&\\2c\\20SkSL::Statement\\20const*\\2c\\20std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>*\\2c\\20SkSL::Expression\\20const*\\2c\\20SkSL::Statement\\20const*\\2c\\20SkSL::ErrorReporter*\\29\n6515:SkSL::Analysis::GetLoopControlFlowInfo\\28SkSL::Statement\\20const&\\29\n6516:SkSL::Analysis::ContainsVariable\\28SkSL::Expression\\20const&\\2c\\20SkSL::Variable\\20const&\\29::ContainsVariableVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n6517:SkSL::Analysis::ContainsRTAdjust\\28SkSL::Expression\\20const&\\29::ContainsRTAdjustVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n6518:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n6519:SkSL::AliasType::numberKind\\28\\29\\20const\n6520:SkSL::AliasType::isAllowedInES2\\28\\29\\20const\n6521:SkSBlockAllocator<80ul>::SkSBlockAllocator\\28SkBlockAllocator::GrowthPolicy\\2c\\20unsigned\\20long\\29\n6522:SkRuntimeShader::~SkRuntimeShader\\28\\29\n6523:SkRuntimeEffectPriv::VarAsChild\\28SkSL::Variable\\20const&\\2c\\20int\\29\n6524:SkRuntimeEffect::~SkRuntimeEffect\\28\\29\n6525:SkRuntimeEffect::getRPProgram\\28SkSL::DebugTracePriv*\\29\\20const\n6526:SkRuntimeEffect::MakeForShader\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n6527:SkRuntimeEffect::ChildPtr::type\\28\\29\\20const\n6528:SkRuntimeEffect::ChildPtr::shader\\28\\29\\20const\n6529:SkRuntimeEffect::ChildPtr::colorFilter\\28\\29\\20const\n6530:SkRuntimeEffect::ChildPtr::blender\\28\\29\\20const\n6531:SkRgnBuilder::collapsWithPrev\\28\\29\n6532:SkResourceCache::release\\28SkResourceCache::Rec*\\29\n6533:SkResourceCache::PostPurgeSharedID\\28unsigned\\20long\\20long\\29\n6534:SkResourceCache::NewCachedData\\28unsigned\\20long\\29\n6535:SkResourceCache::GetDiscardableFactory\\28\\29\n6536:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::~Result\\28\\29\n6537:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n6538:SkRegion::quickReject\\28SkIRect\\20const&\\29\\20const\n6539:SkRegion::quickContains\\28SkIRect\\20const&\\29\\20const\n6540:SkRegion::op\\28SkIRect\\20const&\\2c\\20SkRegion::Op\\29\n6541:SkRegion::getRuns\\28int*\\2c\\20int*\\29\\20const\n6542:SkRegion::Spanerator::next\\28int*\\2c\\20int*\\29\n6543:SkRegion::Spanerator::Spanerator\\28SkRegion\\20const&\\2c\\20int\\2c\\20int\\2c\\20int\\29\n6544:SkRegion::RunHead::ensureWritable\\28\\29\n6545:SkRegion::RunHead::computeRunBounds\\28SkIRect*\\29\n6546:SkRegion::RunHead::Alloc\\28int\\2c\\20int\\2c\\20int\\29\n6547:SkRegion::Oper\\28SkRegion\\20const&\\2c\\20SkRegion\\20const&\\2c\\20SkRegion::Op\\2c\\20SkRegion*\\29\n6548:SkRefCntBase::internal_dispose\\28\\29\\20const\n6549:SkReduceOrder::Conic\\28SkConic\\20const&\\2c\\20SkPoint*\\29\n6550:SkRectPriv::Subtract\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect*\\29\n6551:SkRectPriv::QuadContainsRect\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\29\n6552:SkRectPriv::QuadContainsRectMask\\28SkM44\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\29\n6553:SkRectPriv::FitsInFixed\\28SkRect\\20const&\\29\n6554:SkRectClipBlitter::requestRowsPreserved\\28\\29\\20const\n6555:SkRectClipBlitter::allocBlitMemory\\28unsigned\\20long\\29\n6556:SkRect::roundOut\\28SkRect*\\29\\20const\n6557:SkRect::roundIn\\28\\29\\20const\n6558:SkRect::roundIn\\28SkIRect*\\29\\20const\n6559:SkRect::makeOffset\\28float\\2c\\20float\\29\\20const\n6560:SkRect::joinNonEmptyArg\\28SkRect\\20const&\\29\n6561:SkRect::intersect\\28SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n6562:SkRect::contains\\28float\\2c\\20float\\29\\20const\n6563:SkRect::contains\\28SkIRect\\20const&\\29\\20const\n6564:SkRect*\\20SkRecord::alloc<SkRect>\\28unsigned\\20long\\29\n6565:SkRecords::FillBounds::popSaveBlock\\28\\29\n6566:SkRecords::FillBounds::popControl\\28SkRect\\20const&\\29\n6567:SkRecords::FillBounds::AdjustForPaint\\28SkPaint\\20const*\\2c\\20SkRect*\\29\n6568:SkRecorder::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n6569:SkRecordedDrawable::~SkRecordedDrawable\\28\\29\n6570:SkRecordOptimize\\28SkRecord*\\29\n6571:SkRecordFillBounds\\28SkRect\\20const&\\2c\\20SkRecord\\20const&\\2c\\20SkRect*\\2c\\20SkBBoxHierarchy::Metadata*\\29\n6572:SkRecord::~SkRecord\\28\\29\n6573:SkReadBuffer::skipByteArray\\28unsigned\\20long*\\29\n6574:SkReadBuffer::readPad32\\28void*\\2c\\20unsigned\\20long\\29\n6575:SkReadBuffer::SkReadBuffer\\28void\\20const*\\2c\\20unsigned\\20long\\29\n6576:SkRasterPipeline_UniformColorCtx*\\20SkArenaAlloc::make<SkRasterPipeline_UniformColorCtx>\\28\\29\n6577:SkRasterPipeline_TileCtx*\\20SkArenaAlloc::make<SkRasterPipeline_TileCtx>\\28\\29\n6578:SkRasterPipeline_RewindCtx*\\20SkArenaAlloc::make<SkRasterPipeline_RewindCtx>\\28\\29\n6579:SkRasterPipeline_DecalTileCtx*\\20SkArenaAlloc::make<SkRasterPipeline_DecalTileCtx>\\28\\29\n6580:SkRasterPipeline_CopyIndirectCtx*\\20SkArenaAlloc::make<SkRasterPipeline_CopyIndirectCtx>\\28\\29\n6581:SkRasterPipeline_2PtConicalCtx*\\20SkArenaAlloc::make<SkRasterPipeline_2PtConicalCtx>\\28\\29\n6582:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\\28\\29\n6583:SkRasterPipeline::buildPipeline\\28SkRasterPipelineStage*\\29\\20const\n6584:SkRasterPipeline::appendSetRGB\\28SkArenaAlloc*\\2c\\20float\\20const*\\29\n6585:SkRasterPipeline::appendLoad\\28SkColorType\\2c\\20SkRasterPipeline_MemoryCtx\\20const*\\29\n6586:SkRasterClipStack::Rec::Rec\\28SkRasterClip\\20const&\\29\n6587:SkRasterClip::setEmpty\\28\\29\n6588:SkRasterClip::computeIsRect\\28\\29\\20const\n6589:SkRandom::nextULessThan\\28unsigned\\20int\\29\n6590:SkRTreeFactory::operator\\28\\29\\28\\29\\20const\n6591:SkRTree::~SkRTree\\28\\29\n6592:SkRTree::search\\28SkRTree::Node*\\2c\\20SkRect\\20const&\\2c\\20std::__2::vector<int\\2c\\20std::__2::allocator<int>>*\\29\\20const\n6593:SkRTree::bulkLoad\\28std::__2::vector<SkRTree::Branch\\2c\\20std::__2::allocator<SkRTree::Branch>>*\\2c\\20int\\29\n6594:SkRTree::allocateNodeAtLevel\\28unsigned\\20short\\29\n6595:SkRRectPriv::ConservativeIntersect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\29::$_2::operator\\28\\29\\28SkRRect::Corner\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\\20const\n6596:SkRRect::setRectXY\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\29\n6597:SkRRect::isValid\\28\\29\\20const\n6598:SkRRect::computeType\\28\\29\n6599:SkRGBA4f<\\28SkAlphaType\\292>\\20skgpu::Swizzle::applyTo<\\28SkAlphaType\\292>\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\\20const\n6600:SkRGBA4f<\\28SkAlphaType\\292>::unpremul\\28\\29\\20const\n6601:SkQuads::Roots\\28double\\2c\\20double\\2c\\20double\\29\n6602:SkQuadraticEdge::setQuadraticWithoutUpdate\\28SkPoint\\20const*\\2c\\20int\\29\n6603:SkQuadConstruct::init\\28float\\2c\\20float\\29\n6604:SkPtrSet::add\\28void*\\29\n6605:SkPoint::Normalize\\28SkPoint*\\29\n6606:SkPixmap::readPixels\\28SkPixmap\\20const&\\29\\20const\n6607:SkPixmap::readPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\29\\20const\n6608:SkPixmap::erase\\28unsigned\\20int\\29\\20const\n6609:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const\n6610:SkPixelRef::callGenIDChangeListeners\\28\\29\n6611:SkPictureShader::CachedImageInfo::makeImage\\28sk_sp<SkSurface>\\2c\\20SkPicture\\20const*\\29\\20const\n6612:SkPictureRecorder::beginRecording\\28SkRect\\20const&\\2c\\20sk_sp<SkBBoxHierarchy>\\29\n6613:SkPictureRecorder::beginRecording\\28SkRect\\20const&\\2c\\20SkBBHFactory*\\29\n6614:SkPictureRecord::fillRestoreOffsetPlaceholdersForCurrentStackLevel\\28unsigned\\20int\\29\n6615:SkPictureRecord::endRecording\\28\\29\n6616:SkPictureRecord::beginRecording\\28\\29\n6617:SkPictureRecord::addPath\\28SkPath\\20const&\\29\n6618:SkPictureRecord::addPathToHeap\\28SkPath\\20const&\\29\n6619:SkPictureRecord::SkPictureRecord\\28SkIRect\\20const&\\2c\\20unsigned\\20int\\29\n6620:SkPictureImageGenerator::~SkPictureImageGenerator\\28\\29\n6621:SkPictureData::~SkPictureData\\28\\29\n6622:SkPictureData::flatten\\28SkWriteBuffer&\\29\\20const\n6623:SkPictureData::SkPictureData\\28SkPictureRecord\\20const&\\2c\\20SkPictInfo\\20const&\\29\n6624:SkPicture::SkPicture\\28\\29\n6625:SkPathWriter::moveTo\\28\\29\n6626:SkPathWriter::init\\28\\29\n6627:SkPathWriter::assemble\\28\\29\n6628:SkPathStroker::setQuadEndNormal\\28SkPoint\\20const*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n6629:SkPathStroker::cubicQuadEnds\\28SkPoint\\20const*\\2c\\20SkQuadConstruct*\\29\n6630:SkPathRef::resetToSize\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n6631:SkPathRef::isRRect\\28SkRRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\\20const\n6632:SkPathRef::isOval\\28SkRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\\20const\n6633:SkPathRef::commonReset\\28\\29\n6634:SkPathRef::Iter::next\\28SkPoint*\\29\n6635:SkPathRef::CreateEmpty\\28\\29\n6636:SkPathPriv::LeadingMoveToCount\\28SkPath\\20const&\\29\n6637:SkPathPriv::IsRRect\\28SkPath\\20const&\\2c\\20SkRRect*\\2c\\20SkPathDirection*\\2c\\20unsigned\\20int*\\29\n6638:SkPathPriv::IsOval\\28SkPath\\20const&\\2c\\20SkRect*\\2c\\20SkPathDirection*\\2c\\20unsigned\\20int*\\29\n6639:SkPathPriv::IsNestedFillRects\\28SkPath\\20const&\\2c\\20SkRect*\\2c\\20SkPathDirection*\\29\n6640:SkPathPriv::CreateDrawArcPath\\28SkPath*\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n6641:SkPathOpsBounds::Intersects\\28SkPathOpsBounds\\20const&\\2c\\20SkPathOpsBounds\\20const&\\29\n6642:SkPathMeasure::~SkPathMeasure\\28\\29\n6643:SkPathMeasure::getSegment\\28float\\2c\\20float\\2c\\20SkPath*\\2c\\20bool\\29\n6644:SkPathMeasure::SkPathMeasure\\28SkPath\\20const&\\2c\\20bool\\2c\\20float\\29\n6645:SkPathEffectBase::getFlattenableType\\28\\29\\20const\n6646:SkPathEffectBase::PointData::~PointData\\28\\29\n6647:SkPathEdgeIter::next\\28\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n6648:SkPathBuilder::reset\\28\\29\n6649:SkPathBuilder::lineTo\\28float\\2c\\20float\\29\n6650:SkPathBuilder::addRect\\28SkRect\\20const&\\2c\\20SkPathDirection\\29\n6651:SkPathBuilder::addOval\\28SkRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n6652:SkPath::writeToMemory\\28void*\\29\\20const\n6653:SkPath::reverseAddPath\\28SkPath\\20const&\\29\n6654:SkPath::offset\\28float\\2c\\20float\\29\n6655:SkPath::makeTransform\\28SkMatrix\\20const&\\2c\\20SkApplyPerspectiveClip\\29\\20const\n6656:SkPath::isZeroLengthSincePoint\\28int\\29\\20const\n6657:SkPath::isRRect\\28SkRRect*\\29\\20const\n6658:SkPath::isOval\\28SkRect*\\29\\20const\n6659:SkPath::copyFields\\28SkPath\\20const&\\29\n6660:SkPath::conservativelyContainsRect\\28SkRect\\20const&\\29\\20const\n6661:SkPath::arcTo\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPath::ArcSize\\2c\\20SkPathDirection\\2c\\20float\\2c\\20float\\29\n6662:SkPath::addRect\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPathDirection\\29\n6663:SkPath::addRRect\\28SkRRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\29\n6664:SkPath::addCircle\\28float\\2c\\20float\\2c\\20float\\2c\\20SkPathDirection\\29\n6665:SkPath::Polygon\\28std::initializer_list<SkPoint>\\20const&\\2c\\20bool\\2c\\20SkPathFillType\\2c\\20bool\\29\n6666:SkPaintToGrPaintWithBlend\\28GrRecordingContext*\\2c\\20GrColorInfo\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkBlender*\\2c\\20SkSurfaceProps\\20const&\\2c\\20GrPaint*\\29\n6667:SkPaintPriv::ShouldDither\\28SkPaint\\20const&\\2c\\20SkColorType\\29\n6668:SkPackedGlyphID::PackIDSkPoint\\28unsigned\\20short\\2c\\20SkPoint\\2c\\20SkIPoint\\29\n6669:SkOpSpanBase::merge\\28SkOpSpan*\\29\n6670:SkOpSpanBase::initBase\\28SkOpSegment*\\2c\\20SkOpSpan*\\2c\\20double\\2c\\20SkPoint\\20const&\\29\n6671:SkOpSpan::sortableTop\\28SkOpContour*\\29\n6672:SkOpSpan::setOppSum\\28int\\29\n6673:SkOpSpan::insertCoincidence\\28SkOpSpan*\\29\n6674:SkOpSpan::insertCoincidence\\28SkOpSegment\\20const*\\2c\\20bool\\2c\\20bool\\29\n6675:SkOpSpan::init\\28SkOpSegment*\\2c\\20SkOpSpan*\\2c\\20double\\2c\\20SkPoint\\20const&\\29\n6676:SkOpSpan::containsCoincidence\\28SkOpSegment\\20const*\\29\\20const\n6677:SkOpSpan::computeWindSum\\28\\29\n6678:SkOpSegment::updateOppWindingReverse\\28SkOpAngle\\20const*\\29\\20const\n6679:SkOpSegment::ptsDisjoint\\28double\\2c\\20SkPoint\\20const&\\2c\\20double\\2c\\20SkPoint\\20const&\\29\\20const\n6680:SkOpSegment::markWinding\\28SkOpSpan*\\2c\\20int\\29\n6681:SkOpSegment::isClose\\28double\\2c\\20SkOpSegment\\20const*\\29\\20const\n6682:SkOpSegment::computeSum\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkOpAngle::IncludeType\\29\n6683:SkOpSegment::collapsed\\28double\\2c\\20double\\29\\20const\n6684:SkOpSegment::addExpanded\\28double\\2c\\20SkOpSpanBase\\20const*\\2c\\20bool*\\29\n6685:SkOpSegment::activeWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int*\\29\n6686:SkOpSegment::activeOp\\28int\\2c\\20int\\2c\\20SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20SkPathOp\\2c\\20int*\\2c\\20int*\\29\n6687:SkOpSegment::activeAngle\\28SkOpSpanBase*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\29\n6688:SkOpSegment::activeAngleInner\\28SkOpSpanBase*\\2c\\20SkOpSpanBase**\\2c\\20SkOpSpanBase**\\2c\\20bool*\\29\n6689:SkOpPtT::ptAlreadySeen\\28SkOpPtT\\20const*\\29\\20const\n6690:SkOpEdgeBuilder::~SkOpEdgeBuilder\\28\\29\n6691:SkOpEdgeBuilder::preFetch\\28\\29\n6692:SkOpEdgeBuilder::finish\\28\\29\n6693:SkOpEdgeBuilder::SkOpEdgeBuilder\\28SkPath\\20const&\\2c\\20SkOpContourHead*\\2c\\20SkOpGlobalState*\\29\n6694:SkOpContourBuilder::addQuad\\28SkPoint*\\29\n6695:SkOpContourBuilder::addLine\\28SkPoint\\20const*\\29\n6696:SkOpContourBuilder::addCubic\\28SkPoint*\\29\n6697:SkOpContourBuilder::addConic\\28SkPoint*\\2c\\20float\\29\n6698:SkOpCoincidence::restoreHead\\28\\29\n6699:SkOpCoincidence::releaseDeleted\\28SkCoincidentSpans*\\29\n6700:SkOpCoincidence::mark\\28\\29\n6701:SkOpCoincidence::markCollapsed\\28SkCoincidentSpans*\\2c\\20SkOpPtT*\\29\n6702:SkOpCoincidence::fixUp\\28SkCoincidentSpans*\\2c\\20SkOpPtT*\\2c\\20SkOpPtT\\20const*\\29\n6703:SkOpCoincidence::contains\\28SkCoincidentSpans\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\29\\20const\n6704:SkOpCoincidence::checkOverlap\\28SkCoincidentSpans*\\2c\\20SkOpSegment\\20const*\\2c\\20SkOpSegment\\20const*\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20SkTDArray<SkCoincidentSpans*>*\\29\\20const\n6705:SkOpCoincidence::addOrOverlap\\28SkOpSegment*\\2c\\20SkOpSegment*\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20bool*\\29\n6706:SkOpCoincidence::addMissing\\28bool*\\29\n6707:SkOpCoincidence::addEndMovedSpans\\28SkOpSpan\\20const*\\2c\\20SkOpSpanBase\\20const*\\29\n6708:SkOpAngle::tangentsDiverge\\28SkOpAngle\\20const*\\2c\\20double\\29\n6709:SkOpAngle::setSpans\\28\\29\n6710:SkOpAngle::setSector\\28\\29\n6711:SkOpAngle::previous\\28\\29\\20const\n6712:SkOpAngle::midToSide\\28SkOpAngle\\20const*\\2c\\20bool*\\29\\20const\n6713:SkOpAngle::merge\\28SkOpAngle*\\29\n6714:SkOpAngle::loopContains\\28SkOpAngle\\20const*\\29\\20const\n6715:SkOpAngle::lineOnOneSide\\28SkOpAngle\\20const*\\2c\\20bool\\29\n6716:SkOpAngle::lastMarked\\28\\29\\20const\n6717:SkOpAngle::findSector\\28SkPath::Verb\\2c\\20double\\2c\\20double\\29\\20const\n6718:SkOpAngle::endToSide\\28SkOpAngle\\20const*\\2c\\20bool*\\29\\20const\n6719:SkOpAngle::checkCrossesZero\\28\\29\\20const\n6720:SkOpAngle::alignmentSameSide\\28SkOpAngle\\20const*\\2c\\20int*\\29\\20const\n6721:SkOpAngle::after\\28SkOpAngle*\\29\n6722:SkOffsetSimplePolygon\\28SkPoint\\20const*\\2c\\20int\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20SkTDArray<SkPoint>*\\2c\\20SkTDArray<int>*\\29\n6723:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\\28\\29\n6724:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\\28\\29\n6725:SkNullBlitter*\\20SkArenaAlloc::make<SkNullBlitter>\\28\\29\n6726:SkNotifyBitmapGenIDIsStale\\28unsigned\\20int\\29\n6727:SkNoPixelsDevice::~SkNoPixelsDevice\\28\\29\n6728:SkNoPixelsDevice::SkNoPixelsDevice\\28SkIRect\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n6729:SkNoDestructor<SkColorSpaceXformColorFilter>::SkNoDestructor<sk_sp<SkColorSpace>\\2c\\20sk_sp<SkColorSpace>>\\28sk_sp<SkColorSpace>&&\\2c\\20sk_sp<SkColorSpace>&&\\29\n6730:SkNVRefCnt<skgpu::RefCntedCallback>::unref\\28\\29\\20const\n6731:SkNVRefCnt<SkTextBlob>::unref\\28\\29\\20const\n6732:SkNVRefCnt<SkPathRef>::unref\\28\\29\\20const\n6733:SkNVRefCnt<GrSurface::RefCntedReleaseProc>::unref\\28\\29\\20const\n6734:SkNVRefCnt<GrArenas>::unref\\28\\29\\20const\n6735:SkMipmapAccessor::SkMipmapAccessor\\28SkImage_Base\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode\\29::$_1::operator\\28\\29\\28SkPixmap\\20const&\\29\\20const\n6736:SkMipmap::~SkMipmap\\28\\29\n6737:SkMessageBus<SkResourceCache::PurgeSharedIDMessage\\2c\\20unsigned\\20int\\2c\\20true>::Get\\28\\29\n6738:SkMessageBus<GrResourceCache::UnrefResourceMessage\\2c\\20GrDirectContext::DirectContextID\\2c\\20false>::Get\\28\\29\n6739:SkMeshSpecification::Attribute::Attribute\\28SkMeshSpecification::Attribute\\20const&\\29\n6740:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\\28\\29\n6741:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\\28\\29\\20const\n6742:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::peek\\28\\29\\20const\n6743:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\\28GrDirectContext*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n6744:SkMemoryStream::~SkMemoryStream\\28\\29\n6745:SkMemoryStream::SkMemoryStream\\28sk_sp<SkData>\\29\n6746:SkMatrixPriv::MapPointsWithStride\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20unsigned\\20long\\2c\\20int\\29\n6747:SkMatrix::updateTranslateMask\\28\\29\n6748:SkMatrix::setTranslate\\28float\\2c\\20float\\29\n6749:SkMatrix::setScale\\28float\\2c\\20float\\29\n6750:SkMatrix::postSkew\\28float\\2c\\20float\\29\n6751:SkMatrix::mapHomogeneousPoints\\28SkPoint3*\\2c\\20SkPoint3\\20const*\\2c\\20int\\29\\20const\n6752:SkMatrix::getMinScale\\28\\29\\20const\n6753:SkMatrix::computeTypeMask\\28\\29\\20const\n6754:SkMatrix::Rot_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n6755:SkMatrix*\\20SkRecord::alloc<SkMatrix>\\28unsigned\\20long\\29\n6756:SkMaskFilterBase::NinePatch::~NinePatch\\28\\29\n6757:SkMask*\\20SkTLazy<SkMask>::init<unsigned\\20char\\20const*\\2c\\20SkIRect\\20const&\\2c\\20unsigned\\20int\\20const&\\2c\\20SkMask::Format\\20const&>\\28unsigned\\20char\\20const*&&\\2c\\20SkIRect\\20const&\\2c\\20unsigned\\20int\\20const&\\2c\\20SkMask::Format\\20const&\\29\n6758:SkMask*\\20SkTLazy<SkMask>::init<SkMaskBuilder&>\\28SkMaskBuilder&\\29\n6759:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::PixelRef::~PixelRef\\28\\29\n6760:SkMakePixelRefWithProc\\28int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29::PixelRef::~PixelRef\\28\\29\n6761:SkMakeBitmapShaderForPaint\\28SkPaint\\20const&\\2c\\20SkBitmap\\20const&\\2c\\20SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkCopyPixelsMode\\29\n6762:SkM44::preTranslate\\28float\\2c\\20float\\2c\\20float\\29\n6763:SkM44::postTranslate\\28float\\2c\\20float\\2c\\20float\\29\n6764:SkLocalMatrixShader::type\\28\\29\\20const\n6765:SkLinearColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n6766:SkLineParameters::normalize\\28\\29\n6767:SkLineParameters::cubicEndPoints\\28SkDCubic\\20const&\\29\n6768:SkLineClipper::ClipLine\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkPoint*\\2c\\20bool\\29\n6769:SkLatticeIter::~SkLatticeIter\\28\\29\n6770:SkLatticeIter::next\\28SkIRect*\\2c\\20SkRect*\\2c\\20bool*\\2c\\20unsigned\\20int*\\29\n6771:SkLatticeIter::SkLatticeIter\\28SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\29\n6772:SkLRUCache<skia::textlayout::ParagraphCacheKey\\2c\\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\\2c\\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\\2c\\20skia::textlayout::ParagraphCache::KeyHash>::find\\28skia::textlayout::ParagraphCacheKey\\20const&\\29\n6773:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::insert\\28GrProgramDesc\\20const&\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\29\n6774:SkLRUCache<GrProgramDesc\\2c\\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\\2c\\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\\2c\\20GrGLGpu::ProgramCache::DescHash>::find\\28GrProgramDesc\\20const&\\29\n6775:SkJSONWriter::appendf\\28char\\20const*\\2c\\20...\\29\n6776:SkIsSimplePolygon\\28SkPoint\\20const*\\2c\\20int\\29\n6777:SkIsConvexPolygon\\28SkPoint\\20const*\\2c\\20int\\29\n6778:SkInvert4x4Matrix\\28float\\20const*\\2c\\20float*\\29\n6779:SkInvert3x3Matrix\\28float\\20const*\\2c\\20float*\\29\n6780:SkIntersections::quadVertical\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6781:SkIntersections::quadLine\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\29\n6782:SkIntersections::quadHorizontal\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6783:SkIntersections::mostOutside\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\\20const\n6784:SkIntersections::lineVertical\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6785:SkIntersections::lineHorizontal\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6786:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDQuad\\20const&\\29\n6787:SkIntersections::intersect\\28SkDCubic\\20const&\\2c\\20SkDConic\\20const&\\29\n6788:SkIntersections::intersect\\28SkDConic\\20const&\\2c\\20SkDQuad\\20const&\\29\n6789:SkIntersections::insertCoincident\\28double\\2c\\20double\\2c\\20SkDPoint\\20const&\\29\n6790:SkIntersections::cubicVertical\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6791:SkIntersections::cubicLine\\28SkPoint\\20const*\\2c\\20SkPoint\\20const*\\29\n6792:SkIntersections::cubicHorizontal\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6793:SkIntersections::conicVertical\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6794:SkIntersections::conicLine\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint\\20const*\\29\n6795:SkIntersections::conicHorizontal\\28SkPoint\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n6796:SkImages::RasterFromPixmap\\28SkPixmap\\20const&\\2c\\20void\\20\\28*\\29\\28void\\20const*\\2c\\20void*\\29\\2c\\20void*\\29\n6797:SkImages::RasterFromData\\28SkImageInfo\\20const&\\2c\\20sk_sp<SkData>\\2c\\20unsigned\\20long\\29\n6798:SkImage_Raster::~SkImage_Raster\\28\\29\n6799:SkImage_Raster::SkImage_Raster\\28SkBitmap\\20const&\\2c\\20bool\\29\n6800:SkImage_Lazy::~SkImage_Lazy\\28\\29\n6801:SkImage_GaneshBase::~SkImage_GaneshBase\\28\\29\n6802:SkImage_GaneshBase::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n6803:SkImage_GaneshBase::SkImage_GaneshBase\\28sk_sp<GrImageContext>\\2c\\20SkImageInfo\\2c\\20unsigned\\20int\\29\n6804:SkImage_Base::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n6805:SkImage_Base::onAsLegacyBitmap\\28GrDirectContext*\\2c\\20SkBitmap*\\29\\20const\n6806:SkImageShader::~SkImageShader\\28\\29\n6807:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_3::operator\\28\\29\\28\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n6808:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const::$_1::operator\\28\\29\\28\\28anonymous\\20namespace\\29::MipLevelHelper\\20const*\\29\\20const\n6809:SkImageInfoValidConversion\\28SkImageInfo\\20const&\\2c\\20SkImageInfo\\20const&\\29\n6810:SkImageGenerator::SkImageGenerator\\28SkImageInfo\\20const&\\2c\\20unsigned\\20int\\29\n6811:SkImageFilters::Crop\\28SkRect\\20const&\\2c\\20sk_sp<SkImageFilter>\\29\n6812:SkImageFilters::Blur\\28float\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n6813:SkImageFilter_Base::getInputBounds\\28skif::Mapping\\20const&\\2c\\20skif::DeviceSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::ParameterSpace<SkRect>>\\29\\20const\n6814:SkImageFilter_Base::getCTMCapability\\28\\29\\20const\n6815:SkImageFilter_Base::filterImage\\28skif::Context\\20const&\\29\\20const\n6816:SkImageFilterCache::Get\\28\\29\n6817:SkImageFilterCache::Create\\28unsigned\\20long\\29\n6818:SkImage::~SkImage\\28\\29\n6819:SkIRect::contains\\28SkRect\\20const&\\29\\20const\n6820:SkGradientShader::MakeTwoPointConical\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20unsigned\\20int\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const*\\29\n6821:SkGradientShader::MakeTwoPointConical\\28SkPoint\\20const&\\2c\\20float\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n6822:SkGradientShader::MakeSweep\\28float\\2c\\20float\\2c\\20unsigned\\20int\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const*\\29\n6823:SkGradientShader::MakeRadial\\28SkPoint\\20const&\\2c\\20float\\2c\\20unsigned\\20int\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const*\\29\n6824:SkGradientShader::MakeLinear\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const*\\29\n6825:SkGradientShader::MakeLinear\\28SkPoint\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20sk_sp<SkColorSpace>\\2c\\20float\\20const*\\2c\\20int\\2c\\20SkTileMode\\2c\\20SkGradientShader::Interpolation\\20const&\\2c\\20SkMatrix\\20const*\\29\n6826:SkGradientBaseShader::~SkGradientBaseShader\\28\\29\n6827:SkGradientBaseShader::getPos\\28int\\29\\20const\n6828:SkGradientBaseShader::AppendGradientFillStages\\28SkRasterPipeline*\\2c\\20SkArenaAlloc*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const*\\2c\\20float\\20const*\\2c\\20int\\29\n6829:SkGlyph::mask\\28SkPoint\\29\\20const\n6830:SkGlyph::ensureIntercepts\\28float\\20const*\\2c\\20float\\2c\\20float\\2c\\20float*\\2c\\20int*\\2c\\20SkArenaAlloc*\\29::$_1::operator\\28\\29\\28SkGlyph::Intercept\\20const*\\2c\\20float*\\2c\\20int*\\29\\20const\n6831:SkGenerateDistanceFieldFromA8Image\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\29\n6832:SkGaussFilter::SkGaussFilter\\28double\\29\n6833:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\\28\\29\n6834:SkFontStyleSet::CreateEmpty\\28\\29\n6835:SkFontScanner_FreeType::scanInstance\\28SkStreamAsset*\\2c\\20int\\2c\\20int\\2c\\20SkString*\\2c\\20SkFontStyle*\\2c\\20bool*\\2c\\20skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>*\\29\\20const\n6836:SkFontScanner_FreeType::computeAxisValues\\28skia_private::STArray<4\\2c\\20SkFontScanner::AxisDefinition\\2c\\20true>\\2c\\20SkFontArguments::VariationPosition\\2c\\20int*\\2c\\20SkString\\20const&\\2c\\20SkFontArguments::VariationPosition::Coordinate\\20const*\\29\n6837:SkFontScanner_FreeType::SkFontScanner_FreeType\\28\\29\n6838:SkFontPriv::MakeTextMatrix\\28float\\2c\\20float\\2c\\20float\\29\n6839:SkFontPriv::GetFontBounds\\28SkFont\\20const&\\29\n6840:SkFontMgr_Custom::~SkFontMgr_Custom\\28\\29\n6841:SkFontData::~SkFontData\\28\\29\n6842:SkFontData::SkFontData\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\2c\\20int\\2c\\20int\\20const*\\2c\\20int\\2c\\20SkFontArguments::Palette::Override\\20const*\\2c\\20int\\29\n6843:SkFont::operator==\\28SkFont\\20const&\\29\\20const\n6844:SkFont::getWidths\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20float*\\29\\20const\n6845:SkFont::getPaths\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20void\\20\\28*\\29\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\\2c\\20void*\\29\\20const\n6846:SkFindCubicInflections\\28SkPoint\\20const*\\2c\\20float*\\29\n6847:SkFindCubicExtrema\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float*\\29\n6848:SkFindBisector\\28SkPoint\\2c\\20SkPoint\\29\n6849:SkFibBlockSizes<4294967295u>::SkFibBlockSizes\\28unsigned\\20int\\2c\\20unsigned\\20int\\29::'lambda0'\\28\\29::operator\\28\\29\\28\\29\\20const\n6850:SkFibBlockSizes<4294967295u>::SkFibBlockSizes\\28unsigned\\20int\\2c\\20unsigned\\20int\\29::'lambda'\\28\\29::operator\\28\\29\\28\\29\\20const\n6851:SkFILEStream::~SkFILEStream\\28\\29\n6852:SkEvalQuadTangentAt\\28SkPoint\\20const*\\2c\\20float\\29\n6853:SkEvalQuadAt\\28SkPoint\\20const*\\2c\\20float\\2c\\20SkPoint*\\2c\\20SkPoint*\\29\n6854:SkEdgeClipper::next\\28SkPoint*\\29\n6855:SkEdgeClipper::clipQuad\\28SkPoint\\20const*\\2c\\20SkRect\\20const&\\29\n6856:SkEdgeClipper::clipLine\\28SkPoint\\2c\\20SkPoint\\2c\\20SkRect\\20const&\\29\n6857:SkEdgeClipper::appendCubic\\28SkPoint\\20const*\\2c\\20bool\\29\n6858:SkEdgeClipper::ClipPath\\28SkPath\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20void\\20\\28*\\29\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\\2c\\20void*\\29\n6859:SkEdgeBuilder::build\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\2c\\20bool\\29::$_1::operator\\28\\29\\28SkPoint\\20const*\\29\\20const\n6860:SkEdgeBuilder::buildEdges\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\29\n6861:SkEdgeBuilder::SkEdgeBuilder\\28\\29\n6862:SkEdge::updateLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n6863:SkEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20int\\29\n6864:SkDynamicMemoryWStream::reset\\28\\29\n6865:SkDynamicMemoryWStream::Block::append\\28void\\20const*\\2c\\20unsigned\\20long\\29\n6866:SkDrawableList::newDrawableSnapshot\\28\\29\n6867:SkDrawTreatAsHairline\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20float*\\29\n6868:SkDrawShadowMetrics::GetSpotShadowTransform\\28SkPoint3\\20const&\\2c\\20float\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint3\\20const&\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20SkMatrix*\\2c\\20float*\\29\n6869:SkDrawBase::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkRect\\20const*\\29\\20const\n6870:SkDrawBase::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20bool\\2c\\20bool\\2c\\20SkBlitter*\\29\\20const\n6871:SkDrawBase::drawPaint\\28SkPaint\\20const&\\29\\20const\n6872:SkDrawBase::SkDrawBase\\28SkDrawBase\\20const&\\29\n6873:SkDrawBase::DrawToMask\\28SkPath\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkMaskFilter\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkMaskBuilder*\\2c\\20SkMaskBuilder::CreateMode\\2c\\20SkStrokeRec::InitStyle\\29\n6874:SkDraw::drawSprite\\28SkBitmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\\20const\n6875:SkDraw::drawBitmap\\28SkBitmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\\20const\n6876:SkDraw::SkDraw\\28SkDraw\\20const&\\29\n6877:SkDevice::snapSpecial\\28\\29\n6878:SkDevice::setDeviceCoordinateSystem\\28SkM44\\20const&\\2c\\20SkM44\\20const&\\2c\\20SkM44\\20const&\\2c\\20int\\2c\\20int\\29\n6879:SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n6880:SkDevice::drawDevice\\28SkDevice*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n6881:SkDevice::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n6882:SkDescriptor::addEntry\\28unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20void\\20const*\\29\n6883:SkDeque::push_back\\28\\29\n6884:SkDeque::allocateBlock\\28int\\29\n6885:SkDeque::Iter::Iter\\28SkDeque\\20const&\\2c\\20SkDeque::Iter::IterStart\\29\n6886:SkDashPathEffect::Make\\28float\\20const*\\2c\\20int\\2c\\20float\\29\n6887:SkDashPath::InternalFilter\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20int\\2c\\20float\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20SkDashPath::StrokeRecApplication\\29\n6888:SkDashPath::CalcDashParameters\\28float\\2c\\20float\\20const*\\2c\\20int\\2c\\20float*\\2c\\20int*\\2c\\20float*\\2c\\20float*\\29\n6889:SkDashImpl::~SkDashImpl\\28\\29\n6890:SkDRect::setBounds\\28SkDQuad\\20const&\\2c\\20SkDQuad\\20const&\\2c\\20double\\2c\\20double\\29\n6891:SkDRect::setBounds\\28SkDCubic\\20const&\\2c\\20SkDCubic\\20const&\\2c\\20double\\2c\\20double\\29\n6892:SkDRect::setBounds\\28SkDConic\\20const&\\2c\\20SkDConic\\20const&\\2c\\20double\\2c\\20double\\29\n6893:SkDQuad::subDivide\\28double\\2c\\20double\\29\\20const\n6894:SkDQuad::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n6895:SkDQuad::isLinear\\28int\\2c\\20int\\29\\20const\n6896:SkDQuad::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n6897:SkDQuad::AddValidTs\\28double*\\2c\\20int\\2c\\20double*\\29\n6898:SkDPoint::roughlyEqual\\28SkDPoint\\20const&\\29\\20const\n6899:SkDPoint::approximatelyDEqual\\28SkDPoint\\20const&\\29\\20const\n6900:SkDCurveSweep::setCurveHullSweep\\28SkPath::Verb\\29\n6901:SkDCubic::monotonicInY\\28\\29\\20const\n6902:SkDCubic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n6903:SkDCubic::hullIntersects\\28SkDPoint\\20const*\\2c\\20int\\2c\\20bool*\\29\\20const\n6904:SkDCubic::Coefficients\\28double\\20const*\\2c\\20double*\\2c\\20double*\\2c\\20double*\\2c\\20double*\\29\n6905:SkDConic::subDivide\\28double\\2c\\20double\\29\\20const\n6906:SkCubics::RootsReal\\28double\\2c\\20double\\2c\\20double\\2c\\20double\\2c\\20double*\\29\n6907:SkCubicEdge::setCubicWithoutUpdate\\28SkPoint\\20const*\\2c\\20int\\2c\\20bool\\29\n6908:SkCubicClipper::ChopMonoAtY\\28SkPoint\\20const*\\2c\\20float\\2c\\20float*\\29\n6909:SkCreateRasterPipelineBlitter\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\29\n6910:SkCreateRasterPipelineBlitter\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n6911:SkContourMeasure_segTo\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20float\\2c\\20SkPath*\\29\n6912:SkContourMeasureIter::SkContourMeasureIter\\28SkPath\\20const&\\2c\\20bool\\2c\\20float\\29\n6913:SkContourMeasureIter::Impl::compute_line_seg\\28SkPoint\\2c\\20SkPoint\\2c\\20float\\2c\\20unsigned\\20int\\29\n6914:SkContourMeasure::~SkContourMeasure\\28\\29\n6915:SkContourMeasure::getSegment\\28float\\2c\\20float\\2c\\20SkPath*\\2c\\20bool\\29\\20const\n6916:SkConicalGradient::getCenterX1\\28\\29\\20const\n6917:SkConic::evalTangentAt\\28float\\29\\20const\n6918:SkConic::chop\\28SkConic*\\29\\20const\n6919:SkConic::chopIntoQuadsPOW2\\28SkPoint*\\2c\\20int\\29\\20const\n6920:SkConic::BuildUnitArc\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkRotationDirection\\2c\\20SkMatrix\\20const*\\2c\\20SkConic*\\29\n6921:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\\28\\29\n6922:SkColorSpaceSingletonFactory::Make\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n6923:SkColorSpace::makeLinearGamma\\28\\29\\20const\n6924:SkColorSpace::computeLazyDstFields\\28\\29\\20const\n6925:SkColorSpace::SkColorSpace\\28skcms_TransferFunction\\20const&\\2c\\20skcms_Matrix3x3\\20const&\\29\n6926:SkColorInfo::operator=\\28SkColorInfo&&\\29\n6927:SkColorFilters::Blend\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBlendMode\\29\n6928:SkColorFilterShader::~SkColorFilterShader\\28\\29\n6929:SkColorFilterShader::flatten\\28SkWriteBuffer&\\29\\20const\n6930:SkColor4fXformer::~SkColor4fXformer\\28\\29\n6931:SkColor4fXformer::SkColor4fXformer\\28SkGradientBaseShader\\20const*\\2c\\20SkColorSpace*\\2c\\20bool\\29\n6932:SkColor4Shader::~SkColor4Shader\\28\\29\n6933:SkCoincidentSpans::contains\\28SkOpPtT\\20const*\\2c\\20SkOpPtT\\20const*\\29\\20const\n6934:SkChopQuadAtMaxCurvature\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n6935:SkChopQuadAtHalf\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n6936:SkChopCubicAt\\28SkPoint\\20const*\\2c\\20SkPoint*\\2c\\20float\\2c\\20float\\29\n6937:SkChopCubicAtInflections\\28SkPoint\\20const*\\2c\\20SkPoint*\\29\n6938:SkCharToGlyphCache::reset\\28\\29\n6939:SkCharToGlyphCache::findGlyphIndex\\28int\\29\\20const\n6940:SkCanvasVirtualEnforcer<SkCanvas>::SkCanvasVirtualEnforcer\\28SkIRect\\20const&\\29\n6941:SkCanvasPriv::WriteLattice\\28void*\\2c\\20SkCanvas::Lattice\\20const&\\29\n6942:SkCanvasPriv::ImageToColorFilter\\28SkPaint*\\29\n6943:SkCanvasPriv::GetDstClipAndMatrixCounts\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20int*\\2c\\20int*\\29\n6944:SkCanvas::setMatrix\\28SkM44\\20const&\\29\n6945:SkCanvas::scale\\28float\\2c\\20float\\29\n6946:SkCanvas::internalSaveLayer\\28SkCanvas::SaveLayerRec\\20const&\\2c\\20SkCanvas::SaveLayerStrategy\\2c\\20bool\\29\n6947:SkCanvas::internalDrawPaint\\28SkPaint\\20const&\\29\n6948:SkCanvas::internalDrawDeviceWithFilter\\28SkDevice*\\2c\\20SkDevice*\\2c\\20SkSpan<sk_sp<SkImageFilter>>\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::DeviceCompatibleWithFilter\\2c\\20float\\2c\\20bool\\29\n6949:SkCanvas::getDeviceClipBounds\\28\\29\\20const\n6950:SkCanvas::drawTextBlob\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n6951:SkCanvas::drawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n6952:SkCanvas::drawPicture\\28sk_sp<SkPicture>\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n6953:SkCanvas::drawPicture\\28SkPicture\\20const*\\29\n6954:SkCanvas::drawLine\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n6955:SkCanvas::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n6956:SkCanvas::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n6957:SkCanvas::drawColor\\28unsigned\\20int\\2c\\20SkBlendMode\\29\n6958:SkCanvas::drawColor\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n6959:SkCanvas::drawAtlas\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n6960:SkCanvas::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n6961:SkCanvas::didTranslate\\28float\\2c\\20float\\29\n6962:SkCanvas::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n6963:SkCanvas::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n6964:SkCanvas::clipIRect\\28SkIRect\\20const&\\2c\\20SkClipOp\\29\n6965:SkCanvas::SkCanvas\\28sk_sp<SkDevice>\\29\n6966:SkCanvas::SkCanvas\\28SkBitmap\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n6967:SkCanvas::SkCanvas\\28SkBitmap\\20const&\\29\n6968:SkCachedData::setData\\28void*\\29\n6969:SkCachedData::internalUnref\\28bool\\29\\20const\n6970:SkCachedData::internalRef\\28bool\\29\\20const\n6971:SkCachedData::SkCachedData\\28void*\\2c\\20unsigned\\20long\\29\n6972:SkCachedData::SkCachedData\\28unsigned\\20long\\2c\\20SkDiscardableMemory*\\29\n6973:SkCTMShader::isOpaque\\28\\29\\20const\n6974:SkBulkGlyphMetricsAndPaths::glyphs\\28SkSpan<unsigned\\20short\\20const>\\29\n6975:SkBreakIterator_client::~SkBreakIterator_client\\28\\29\n6976:SkBlurMaskFilterImpl::filterRectMask\\28SkMaskBuilder*\\2c\\20SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\2c\\20SkMaskBuilder::CreateMode\\29\\20const\n6977:SkBlurMask::ComputeBlurredScanline\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20unsigned\\20int\\2c\\20float\\29\n6978:SkBlockAllocator::addBlock\\28int\\2c\\20int\\29\n6979:SkBlockAllocator::BlockIter<false\\2c\\20false>::Item::advance\\28SkBlockAllocator::Block*\\29\n6980:SkBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n6981:SkBlitter::blitRectRegion\\28SkIRect\\20const&\\2c\\20SkRegion\\20const&\\29\n6982:SkBlitter::Choose\\28SkPixmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n6983:SkBlitter::ChooseSprite\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkArenaAlloc*\\2c\\20sk_sp<SkShader>\\29\n6984:SkBlendShader::~SkBlendShader\\28\\29.1\n6985:SkBitmapDevice::~SkBitmapDevice\\28\\29\n6986:SkBitmapDevice::Create\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\2c\\20SkRasterHandleAllocator*\\29\n6987:SkBitmapCache::Rec::~Rec\\28\\29\n6988:SkBitmapCache::Rec::install\\28SkBitmap*\\29\n6989:SkBitmapCache::Rec::diagnostic_only_getDiscardable\\28\\29\\20const\n6990:SkBitmapCache::Find\\28SkBitmapCacheDesc\\20const&\\2c\\20SkBitmap*\\29\n6991:SkBitmapCache::Alloc\\28SkBitmapCacheDesc\\20const&\\2c\\20SkImageInfo\\20const&\\2c\\20SkPixmap*\\29\n6992:SkBitmap::tryAllocPixels\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n6993:SkBitmap::readPixels\\28SkPixmap\\20const&\\29\\20const\n6994:SkBitmap::operator=\\28SkBitmap&&\\29\n6995:SkBitmap::makeShader\\28SkTileMode\\2c\\20SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n6996:SkBitmap::getAddr\\28int\\2c\\20int\\29\\20const\n6997:SkBitmap::allocPixels\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29\n6998:SkBitmap::allocPixels\\28SkImageInfo\\20const&\\29\n6999:SkBitmap::SkBitmap\\28SkBitmap&&\\29\n7000:SkBinaryWriteBuffer::writeFlattenable\\28SkFlattenable\\20const*\\29\n7001:SkBinaryWriteBuffer::writeColor4f\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\29\n7002:SkBigPicture::~SkBigPicture\\28\\29\n7003:SkBigPicture::SnapshotArray::~SnapshotArray\\28\\29\n7004:SkBigPicture::SkBigPicture\\28SkRect\\20const&\\2c\\20sk_sp<SkRecord>\\2c\\20std::__2::unique_ptr<SkBigPicture::SnapshotArray\\2c\\20std::__2::default_delete<SkBigPicture::SnapshotArray>>\\2c\\20sk_sp<SkBBoxHierarchy>\\2c\\20unsigned\\20long\\29\n7005:SkBidiFactory::MakeIterator\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\\20const\n7006:SkBezierCubic::Subdivide\\28double\\20const*\\2c\\20double\\2c\\20double*\\29\n7007:SkBasicEdgeBuilder::~SkBasicEdgeBuilder\\28\\29\n7008:SkBasicEdgeBuilder::combineVertical\\28SkEdge\\20const*\\2c\\20SkEdge*\\29\n7009:SkBaseShadowTessellator::releaseVertices\\28\\29\n7010:SkBaseShadowTessellator::handleQuad\\28SkPoint\\20const*\\29\n7011:SkBaseShadowTessellator::handleQuad\\28SkMatrix\\20const&\\2c\\20SkPoint*\\29\n7012:SkBaseShadowTessellator::handleLine\\28SkMatrix\\20const&\\2c\\20SkPoint*\\29\n7013:SkBaseShadowTessellator::handleCubic\\28SkMatrix\\20const&\\2c\\20SkPoint*\\29\n7014:SkBaseShadowTessellator::handleConic\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20float\\29\n7015:SkBaseShadowTessellator::finishPathPolygon\\28\\29\n7016:SkBaseShadowTessellator::computeConvexShadow\\28float\\2c\\20float\\2c\\20bool\\29\n7017:SkBaseShadowTessellator::computeConcaveShadow\\28float\\2c\\20float\\29\n7018:SkBaseShadowTessellator::clipUmbraPoint\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint*\\29\n7019:SkBaseShadowTessellator::checkConvexity\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n7020:SkBaseShadowTessellator::appendQuad\\28unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n7021:SkBaseShadowTessellator::addInnerPoint\\28SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20SkTDArray<SkPoint>\\20const&\\2c\\20int*\\29\n7022:SkBaseShadowTessellator::addEdge\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20int\\2c\\20SkTDArray<SkPoint>\\20const&\\2c\\20bool\\2c\\20bool\\29\n7023:SkBaseShadowTessellator::addArc\\28SkPoint\\20const&\\2c\\20float\\2c\\20bool\\29\n7024:SkBaseShadowTessellator::accumulateCentroid\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n7025:SkAutoSMalloc<1024ul>::reset\\28unsigned\\20long\\2c\\20SkAutoMalloc::OnShrink\\2c\\20bool*\\29\n7026:SkAutoPixmapStorage::reset\\28SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n7027:SkAutoMalloc::SkAutoMalloc\\28unsigned\\20long\\29\n7028:SkAutoDescriptor::reset\\28unsigned\\20long\\29\n7029:SkAutoDescriptor::reset\\28SkDescriptor\\20const&\\29\n7030:SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint\\28\\29\n7031:SkAutoCanvasMatrixPaint::SkAutoCanvasMatrixPaint\\28SkCanvas*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\2c\\20SkRect\\20const&\\29\n7032:SkAutoBlitterChoose::choose\\28SkDrawBase\\20const&\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n7033:SkArenaAlloc::ensureSpace\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n7034:SkAnySubclass<GrBackendSemaphoreData\\2c\\2024ul>::reset\\28\\29\n7035:SkAnalyticEdgeBuilder::combineVertical\\28SkAnalyticEdge\\20const*\\2c\\20SkAnalyticEdge*\\29\n7036:SkAnalyticEdge::update\\28int\\2c\\20bool\\29\n7037:SkAnalyticEdge::updateLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n7038:SkAnalyticEdge::setLine\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\29\n7039:SkAlphaRuns::BreakAt\\28short*\\2c\\20unsigned\\20char*\\2c\\20int\\29\n7040:SkAAClip::operator=\\28SkAAClip\\20const&\\29\n7041:SkAAClip::op\\28SkIRect\\20const&\\2c\\20SkClipOp\\29\n7042:SkAAClip::isRect\\28\\29\\20const\n7043:SkAAClip::RunHead::Iterate\\28SkAAClip\\20const&\\29\n7044:SkAAClip::Builder::~Builder\\28\\29\n7045:SkAAClip::Builder::flushRow\\28bool\\29\n7046:SkAAClip::Builder::finish\\28SkAAClip*\\29\n7047:SkAAClip::Builder::Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n7048:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\\28\\29\n7049:SkA8_Coverage_Blitter*\\20SkArenaAlloc::make<SkA8_Coverage_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29\n7050:SkA8_Blitter::~SkA8_Blitter\\28\\29\n7051:Simplify\\28SkPath\\20const&\\2c\\20SkPath*\\29\n7052:SharedGenerator::Make\\28std::__2::unique_ptr<SkImageGenerator\\2c\\20std::__2::default_delete<SkImageGenerator>>\\29\n7053:SetSuperRound\n7054:RuntimeEffectRPCallbacks::applyColorSpaceXform\\28SkColorSpaceXformSteps\\20const&\\2c\\20void\\20const*\\29\n7055:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\\28\\29.1\n7056:RunBasedAdditiveBlitter::advanceRuns\\28\\29\n7057:RunBasedAdditiveBlitter::RunBasedAdditiveBlitter\\28SkBlitter*\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20bool\\29\n7058:RgnOper::addSpan\\28int\\2c\\20int\\20const*\\2c\\20int\\20const*\\29\n7059:ReflexHash::hash\\28TriangulationVertex*\\29\\20const\n7060:PorterDuffXferProcessor::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n7061:PathSegment::init\\28\\29\n7062:PS_Conv_Strtol\n7063:PS_Conv_ASCIIHexDecode\n7064:PDLCDXferProcessor::Make\\28SkBlendMode\\2c\\20GrProcessorAnalysisColor\\20const&\\29\n7065:OpAsWinding::markReverse\\28Contour*\\2c\\20Contour*\\29\n7066:OpAsWinding::getDirection\\28Contour&\\29\n7067:OpAsWinding::checkContainerChildren\\28Contour*\\2c\\20Contour*\\29\n7068:OffsetEdge::computeCrossingDistance\\28OffsetEdge\\20const*\\29\n7069:OT::sbix::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7070:OT::sbix::accelerator_t::reference_png\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n7071:OT::sbix::accelerator_t::has_data\\28\\29\\20const\n7072:OT::sbix::accelerator_t::get_png_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20bool\\29\\20const\n7073:OT::post::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7074:OT::maxp::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7075:OT::kern::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7076:OT::hmtxvmtx<OT::hmtx\\2c\\20OT::hhea\\2c\\20OT::HVAR>::accelerator_t::get_advance_with_var_unscaled\\28unsigned\\20int\\2c\\20hb_font_t*\\2c\\20float*\\29\\20const\n7077:OT::head::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7078:OT::hb_ot_layout_lookup_accelerator_t*\\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GSUB_impl::SubstLookup>\\28OT::Layout::GSUB_impl::SubstLookup\\20const&\\29\n7079:OT::hb_ot_apply_context_t::skipping_iterator_t::may_skip\\28hb_glyph_info_t\\20const&\\29\\20const\n7080:OT::hb_ot_apply_context_t::skipping_iterator_t::init\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\n7081:OT::hb_ot_apply_context_t::matcher_t::may_skip\\28OT::hb_ot_apply_context_t\\20const*\\2c\\20hb_glyph_info_t\\20const&\\29\\20const\n7082:OT::hb_kern_machine_t<hb_ot_shape_fallback_kern_driver_t>::kern\\28hb_font_t*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20bool\\29\\20const\n7083:OT::hb_accelerate_subtables_context_t::return_t\\20OT::Context::dispatch<OT::hb_accelerate_subtables_context_t>\\28OT::hb_accelerate_subtables_context_t*\\29\\20const\n7084:OT::hb_accelerate_subtables_context_t::return_t\\20OT::ChainContext::dispatch<OT::hb_accelerate_subtables_context_t>\\28OT::hb_accelerate_subtables_context_t*\\29\\20const\n7085:OT::gvar::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n7086:OT::gvar::get_offset\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n7087:OT::gvar::accelerator_t::infer_delta\\28hb_array_t<contour_point_t>\\2c\\20hb_array_t<contour_point_t>\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\20contour_point_t::*\\29\n7088:OT::glyf_impl::composite_iter_tmpl<OT::glyf_impl::CompositeGlyphRecord>::set_current\\28OT::glyf_impl::CompositeGlyphRecord\\20const*\\29\n7089:OT::glyf_impl::composite_iter_tmpl<OT::glyf_impl::CompositeGlyphRecord>::__next__\\28\\29\n7090:OT::glyf_impl::SimpleGlyph::read_points\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*&\\2c\\20hb_array_t<contour_point_t>\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\2c\\20float\\20contour_point_t::*\\2c\\20OT::glyf_impl::SimpleGlyph::simple_glyph_flag_t\\2c\\20OT::glyf_impl::SimpleGlyph::simple_glyph_flag_t\\29\n7091:OT::glyf_impl::Glyph::get_composite_iterator\\28\\29\\20const\n7092:OT::glyf_impl::CompositeGlyphRecord::transform\\28float\\20const\\20\\28&\\29\\20\\5b4\\5d\\2c\\20hb_array_t<contour_point_t>\\29\n7093:OT::glyf_impl::CompositeGlyphRecord::get_transformation\\28float\\20\\28&\\29\\20\\5b4\\5d\\2c\\20contour_point_t&\\29\\20const\n7094:OT::glyf_accelerator_t::get_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\29\\20const\n7095:OT::fvar::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7096:OT::cmap::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7097:OT::cmap::accelerator_t::get_nominal_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_cache_t<21u\\2c\\2016u\\2c\\208u\\2c\\20true>*\\29\\20const\n7098:OT::cmap::accelerator_t::_cached_get\\28unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_cache_t<21u\\2c\\2016u\\2c\\208u\\2c\\20true>*\\29\\20const\n7099:OT::cff2::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7100:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\\2c\\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::_fini\\28\\29\n7101:OT::cff1::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7102:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::glyph_to_sid\\28unsigned\\20int\\2c\\20CFF::code_pair_t*\\29\\20const\n7103:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::_fini\\28\\29\n7104:OT::cff1::accelerator_t::gname_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n7105:OT::avar::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7106:OT::VariationDevice::get_delta\\28hb_font_t*\\2c\\20OT::VariationStore\\20const&\\2c\\20float*\\29\\20const\n7107:OT::VarData::get_row_size\\28\\29\\20const\n7108:OT::VVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7109:OT::VORG::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7110:OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short\\2c\\202u>\\2c\\2014u>>\\20const&\\20OT::operator+<hb_blob_ptr_t<OT::gvar>\\2c\\20\\28void*\\290>\\28hb_blob_ptr_t<OT::gvar>\\20const&\\2c\\20OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short\\2c\\202u>\\2c\\2014u>>\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>\\2c\\20false>\\20const&\\29\n7111:OT::TupleVariationHeader::get_size\\28unsigned\\20int\\29\\20const\n7112:OT::TupleVariationData::unpack_points\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*&\\2c\\20hb_vector_t<unsigned\\20int\\2c\\20false>&\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\29\n7113:OT::TupleVariationData::unpack_deltas\\28OT::IntType<unsigned\\20char\\2c\\201u>\\20const*&\\2c\\20hb_vector_t<int\\2c\\20false>&\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>\\20const*\\29\n7114:OT::TupleVariationData::tuple_iterator_t::is_valid\\28\\29\\20const\n7115:OT::SortedArrayOf<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::serialize\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\29\n7116:OT::SVG::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7117:OT::RuleSet<OT::Layout::SmallTypes>::would_apply\\28OT::hb_would_apply_context_t*\\2c\\20OT::ContextApplyLookupContext\\20const&\\29\\20const\n7118:OT::RuleSet<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ContextApplyLookupContext\\20const&\\29\\20const\n7119:OT::ResourceMap::get_type_record\\28unsigned\\20int\\29\\20const\n7120:OT::ResourceMap::get_type_count\\28\\29\\20const\n7121:OT::RecordArrayOf<OT::LangSys>::find_index\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n7122:OT::PaintTranslate::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7123:OT::PaintSolid::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7124:OT::PaintSkewAroundCenter::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7125:OT::PaintSkewAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7126:OT::PaintSkew::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7127:OT::PaintScaleUniformAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7128:OT::PaintScaleUniform::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7129:OT::PaintScaleAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7130:OT::PaintScale::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7131:OT::PaintRotateAroundCenter::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7132:OT::PaintRotateAroundCenter::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7133:OT::PaintRotate::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7134:OT::PaintRotate::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7135:OT::OpenTypeFontFile::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7136:OT::OffsetTo<OT::LangSys\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20true>::neuter\\28hb_sanitize_context_t*\\29\\20const\n7137:OT::OS2::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7138:OT::MVAR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7139:OT::Lookup::serialize\\28hb_serialize_context_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n7140:OT::Lookup*\\20hb_serialize_context_t::extend_size<OT::Lookup>\\28OT::Lookup*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n7141:OT::Layout::propagate_attachment_offsets\\28hb_glyph_position_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20unsigned\\20int\\29\n7142:OT::Layout::GPOS_impl::reverse_cursive_minor_offset\\28hb_glyph_position_t*\\2c\\20unsigned\\20int\\2c\\20hb_direction_t\\2c\\20unsigned\\20int\\29\n7143:OT::Layout::GPOS_impl::ValueFormat::sanitize_value_devices\\28hb_sanitize_context_t*\\2c\\20void\\20const*\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>\\20const*\\29\\20const\n7144:OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>\\20const&\\20OT::SortedArrayOf<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::bsearch<unsigned\\20int>\\28unsigned\\20int\\20const&\\2c\\20OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>\\20const&\\29\\20const\n7145:OT::Layout::Common::CoverageFormat2_4<OT::Layout::SmallTypes>*\\20hb_serialize_context_t::extend_min<OT::Layout::Common::CoverageFormat2_4<OT::Layout::SmallTypes>>\\28OT::Layout::Common::CoverageFormat2_4<OT::Layout::SmallTypes>*\\29\n7146:OT::Layout::Common::Coverage::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7147:OT::Layout::Common::Coverage::get_population\\28\\29\\20const\n7148:OT::LangSys::sanitize\\28hb_sanitize_context_t*\\2c\\20OT::Record_sanitize_closure_t\\20const*\\29\\20const\n7149:OT::IndexSubtableRecord::get_image_data\\28unsigned\\20int\\2c\\20void\\20const*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n7150:OT::IndexArray::get_indexes\\28unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n7151:OT::HintingDevice::get_delta\\28unsigned\\20int\\2c\\20int\\29\\20const\n7152:OT::HVARVVAR::get_advance_delta_unscaled\\28unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20float*\\29\\20const\n7153:OT::GSUBGPOS::get_script_list\\28\\29\\20const\n7154:OT::GSUBGPOS::get_feature_variations\\28\\29\\20const\n7155:OT::GSUBGPOS::accelerator_t<OT::Layout::GPOS>::get_accel\\28unsigned\\20int\\29\\20const\n7156:OT::GDEF::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7157:OT::GDEF::get_mark_glyph_sets\\28\\29\\20const\n7158:OT::GDEF::accelerator_t::get_glyph_props\\28unsigned\\20int\\29\\20const\n7159:OT::Feature::sanitize\\28hb_sanitize_context_t*\\2c\\20OT::Record_sanitize_closure_t\\20const*\\29\\20const\n7160:OT::ContextFormat2_5<OT::Layout::SmallTypes>::_apply\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\\20const\n7161:OT::ColorStop::get_color_stop\\28OT::hb_paint_context_t*\\2c\\20hb_color_stop_t*\\2c\\20unsigned\\20int\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n7162:OT::ColorLine<OT::NoVariable>::static_get_extend\\28hb_color_line_t*\\2c\\20void*\\2c\\20void*\\29\n7163:OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat12>::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n7164:OT::CmapSubtableLongGroup\\20const&\\20OT::SortedArrayOf<OT::CmapSubtableLongGroup\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>>::bsearch<unsigned\\20int>\\28unsigned\\20int\\20const&\\2c\\20OT::CmapSubtableLongGroup\\20const&\\29\\20const\n7165:OT::CmapSubtableFormat4::accelerator_t::init\\28OT::CmapSubtableFormat4\\20const*\\29\n7166:OT::CmapSubtableFormat4::accelerator_t::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int*\\29\\20const\n7167:OT::ClipBoxFormat1::get_clip_box\\28OT::ClipBoxData&\\2c\\20OT::VarStoreInstancer\\20const&\\29\\20const\n7168:OT::ClassDef::cost\\28\\29\\20const\n7169:OT::ChainRuleSet<OT::Layout::SmallTypes>::would_apply\\28OT::hb_would_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n7170:OT::ChainRuleSet<OT::Layout::SmallTypes>::apply\\28OT::hb_ot_apply_context_t*\\2c\\20OT::ChainContextApplyLookupContext\\20const&\\29\\20const\n7171:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::_apply\\28OT::hb_ot_apply_context_t*\\2c\\20bool\\29\\20const\n7172:OT::CPAL::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7173:OT::COLR::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7174:OT::COLR::get_base_glyph_paint\\28unsigned\\20int\\29\\20const\n7175:OT::CBLC::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7176:OT::CBLC::choose_strike\\28hb_font_t*\\29\\20const\n7177:OT::CBDT::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7178:OT::CBDT::accelerator_t::get_extents\\28hb_font_t*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20bool\\29\\20const\n7179:OT::BitmapSizeTable::find_table\\28unsigned\\20int\\2c\\20void\\20const*\\2c\\20void\\20const**\\29\\20const\n7180:OT::ArrayOf<OT::LookupRecord\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n7181:OT::ArrayOf<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>\\2c\\20OT::IntType<unsigned\\20short\\2c\\202u>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n7182:OT::ArrayOf<OT::CmapSubtableLongGroup\\2c\\20OT::IntType<unsigned\\20int\\2c\\204u>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n7183:OT::ArrayOf<AAT::KernPair\\2c\\20OT::BinSearchHeader<OT::IntType<unsigned\\20short\\2c\\202u>>>::sanitize_shallow\\28hb_sanitize_context_t*\\29\\20const\n7184:OT::Affine2x3::paint_glyph\\28OT::hb_paint_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7185:MaskValue*\\20SkTLazy<MaskValue>::init<MaskValue\\20const&>\\28MaskValue\\20const&\\29\n7186:MakeRasterCopyPriv\\28SkPixmap\\20const&\\2c\\20unsigned\\20int\\29\n7187:Load_SBit_Png\n7188:LineQuadraticIntersections::verticalIntersect\\28double\\2c\\20double*\\29\n7189:LineQuadraticIntersections::intersectRay\\28double*\\29\n7190:LineQuadraticIntersections::horizontalIntersect\\28double\\2c\\20double*\\29\n7191:LineCubicIntersections::intersectRay\\28double*\\29\n7192:LineCubicIntersections::VerticalIntersect\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double*\\29\n7193:LineCubicIntersections::HorizontalIntersect\\28SkDCubic\\20const&\\2c\\20double\\2c\\20double*\\29\n7194:LineConicIntersections::verticalIntersect\\28double\\2c\\20double*\\29\n7195:LineConicIntersections::intersectRay\\28double*\\29\n7196:LineConicIntersections::horizontalIntersect\\28double\\2c\\20double*\\29\n7197:Ins_UNKNOWN\n7198:Ins_SxVTL\n7199:HandleCoincidence\\28SkOpContourHead*\\2c\\20SkOpCoincidence*\\29\n7200:GrWritePixelsTask::~GrWritePixelsTask\\28\\29\n7201:GrWindowRectsState::operator=\\28GrWindowRectsState\\20const&\\29\n7202:GrWindowRectsState::operator==\\28GrWindowRectsState\\20const&\\29\\20const\n7203:GrWindowRectangles::GrWindowRectangles\\28GrWindowRectangles\\20const&\\29\n7204:GrWaitRenderTask::~GrWaitRenderTask\\28\\29\n7205:GrVertexBufferAllocPool::makeSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n7206:GrVertexBufferAllocPool::makeSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n7207:GrTriangulator::polysToTriangles\\28GrTriangulator::Poly*\\2c\\20SkPathFillType\\2c\\20skgpu::VertexWriter\\29\\20const\n7208:GrTriangulator::polysToTriangles\\28GrTriangulator::Poly*\\2c\\20GrEagerVertexAllocator*\\29\\20const\n7209:GrTriangulator::mergeEdgesBelow\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n7210:GrTriangulator::mergeEdgesAbove\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::EdgeList*\\2c\\20GrTriangulator::Vertex**\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n7211:GrTriangulator::makeSortedVertex\\28SkPoint\\20const&\\2c\\20unsigned\\20char\\2c\\20GrTriangulator::VertexList*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n7212:GrTriangulator::makeEdge\\28GrTriangulator::Vertex*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrTriangulator::EdgeType\\2c\\20GrTriangulator::Comparator\\20const&\\29\n7213:GrTriangulator::computeBisector\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Edge*\\2c\\20GrTriangulator::Vertex*\\29\\20const\n7214:GrTriangulator::appendQuadraticToContour\\28SkPoint\\20const*\\2c\\20float\\2c\\20GrTriangulator::VertexList*\\29\\20const\n7215:GrTriangulator::allocateMonotonePoly\\28GrTriangulator::Edge*\\2c\\20GrTriangulator::Side\\2c\\20int\\29\n7216:GrTriangulator::Edge::recompute\\28\\29\n7217:GrTriangulator::Edge::intersect\\28GrTriangulator::Edge\\20const&\\2c\\20SkPoint*\\2c\\20unsigned\\20char*\\29\\20const\n7218:GrTriangulator::CountPoints\\28GrTriangulator::Poly*\\2c\\20SkPathFillType\\29\n7219:GrTriangulator::BreadcrumbTriangleList::concat\\28GrTriangulator::BreadcrumbTriangleList&&\\29\n7220:GrTransferFromRenderTask::~GrTransferFromRenderTask\\28\\29\n7221:GrThreadSafeCache::makeNewEntryMRU\\28GrThreadSafeCache::Entry*\\29\n7222:GrThreadSafeCache::makeExistingEntryMRU\\28GrThreadSafeCache::Entry*\\29\n7223:GrThreadSafeCache::findVertsWithData\\28skgpu::UniqueKey\\20const&\\29\n7224:GrThreadSafeCache::addVertsWithData\\28skgpu::UniqueKey\\20const&\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\2c\\20bool\\20\\28*\\29\\28SkData*\\2c\\20SkData*\\29\\29\n7225:GrThreadSafeCache::Trampoline::~Trampoline\\28\\29\n7226:GrThreadSafeCache::Entry::set\\28skgpu::UniqueKey\\20const&\\2c\\20sk_sp<GrThreadSafeCache::VertexData>\\29\n7227:GrThreadSafeCache::Entry::makeEmpty\\28\\29\n7228:GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29\n7229:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\\28\\29\n7230:GrTextureRenderTargetProxy::initSurfaceFlags\\28GrCaps\\20const&\\29\n7231:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\\28sk_sp<GrSurface>\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\29\n7232:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\\28GrCaps\\20const&\\2c\\20std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20GrMipmapStatus\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7233:GrTextureProxy::~GrTextureProxy\\28\\29.2\n7234:GrTextureProxy::~GrTextureProxy\\28\\29.1\n7235:GrTextureProxy::setUniqueKey\\28GrProxyProvider*\\2c\\20skgpu::UniqueKey\\20const&\\29\n7236:GrTextureProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n7237:GrTextureProxy::instantiate\\28GrResourceProvider*\\29\n7238:GrTextureProxy::createSurface\\28GrResourceProvider*\\29\\20const\n7239:GrTextureProxy::callbackDesc\\28\\29\\20const\n7240:GrTextureProxy::ProxiesAreCompatibleAsDynamicState\\28GrSurfaceProxy\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29\n7241:GrTextureProxy::GrTextureProxy\\28sk_sp<GrSurface>\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20GrDDLProvider\\29\n7242:GrTextureEffect::~GrTextureEffect\\28\\29\n7243:GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::$_1::operator\\28\\29\\28int\\2c\\20GrSamplerState::WrapMode\\2c\\20GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::Span\\2c\\20GrTextureEffect::Sampling::Sampling\\28GrSurfaceProxy\\20const&\\2c\\20GrSamplerState\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const*\\2c\\20float\\20const*\\2c\\20bool\\2c\\20GrCaps\\20const&\\2c\\20SkPoint\\29::Span\\2c\\20float\\29\\20const\n7244:GrTextureEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29::$_0::operator\\28\\29\\28float*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n7245:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::$_2::operator\\28\\29\\28GrTextureEffect::ShaderMode\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n7246:GrTexture::onGpuMemorySize\\28\\29\\20const\n7247:GrTexture::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n7248:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::~GrTDeferredProxyUploader\\28\\29\n7249:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::~GrTDeferredProxyUploader\\28\\29\n7250:GrSurfaceProxyView::operator=\\28GrSurfaceProxyView\\20const&\\29\n7251:GrSurfaceProxyView::operator==\\28GrSurfaceProxyView\\20const&\\29\\20const\n7252:GrSurfaceProxyPriv::exactify\\28\\29\n7253:GrSurfaceProxyPriv::assign\\28sk_sp<GrSurface>\\29\n7254:GrSurfaceProxy::GrSurfaceProxy\\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7255:GrSurfaceProxy::GrSurfaceProxy\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrInternalSurfaceFlags\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7256:GrSurface::onRelease\\28\\29\n7257:GrStyledShape::setInheritedKey\\28GrStyledShape\\20const&\\2c\\20GrStyle::Apply\\2c\\20float\\29\n7258:GrStyledShape::asRRect\\28SkRRect*\\2c\\20SkPathDirection*\\2c\\20unsigned\\20int*\\2c\\20bool*\\29\\20const\n7259:GrStyledShape::asLine\\28SkPoint*\\2c\\20bool*\\29\\20const\n7260:GrStyledShape::GrStyledShape\\28SkRRect\\20const&\\2c\\20SkPathDirection\\2c\\20unsigned\\20int\\2c\\20bool\\2c\\20GrStyle\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n7261:GrStyledShape::GrStyledShape\\28SkRRect\\20const&\\2c\\20GrStyle\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n7262:GrStyledShape::GrStyledShape\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20GrStyledShape::DoSimplify\\29\n7263:GrStyle::resetToInitStyle\\28SkStrokeRec::InitStyle\\29\n7264:GrStyle::applyToPath\\28SkPath*\\2c\\20SkStrokeRec::InitStyle*\\2c\\20SkPath\\20const&\\2c\\20float\\29\\20const\n7265:GrStyle::applyPathEffect\\28SkPath*\\2c\\20SkStrokeRec*\\2c\\20SkPath\\20const&\\29\\20const\n7266:GrStyle::MatrixToScaleFactor\\28SkMatrix\\20const&\\29\n7267:GrStyle::DashInfo::operator=\\28GrStyle::DashInfo\\20const&\\29\n7268:GrStrokeTessellationShader::~GrStrokeTessellationShader\\28\\29\n7269:GrStrokeTessellationShader::Impl::~Impl\\28\\29\n7270:GrStagingBufferManager::detachBuffers\\28\\29\n7271:GrSkSLFP::~GrSkSLFP\\28\\29\n7272:GrSkSLFP::Impl::~Impl\\28\\29\n7273:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::defineStruct\\28char\\20const*\\29\n7274:GrSimpleMesh::~GrSimpleMesh\\28\\29\n7275:GrShape::simplify\\28unsigned\\20int\\29\n7276:GrShape::setArc\\28GrArc\\20const&\\29\n7277:GrShape::segmentMask\\28\\29\\20const\n7278:GrShape::conservativeContains\\28SkRect\\20const&\\29\\20const\n7279:GrShape::closed\\28\\29\\20const\n7280:GrShape::GrShape\\28SkRect\\20const&\\29\n7281:GrShape::GrShape\\28SkRRect\\20const&\\29\n7282:GrShape::GrShape\\28SkPath\\20const&\\29\n7283:GrShaderVar::GrShaderVar\\28SkString\\2c\\20SkSLType\\2c\\20GrShaderVar::TypeModifier\\2c\\20int\\2c\\20SkString\\2c\\20SkString\\29\n7284:GrScissorState::operator==\\28GrScissorState\\20const&\\29\\20const\n7285:GrScissorState::intersect\\28SkIRect\\20const&\\29\n7286:GrSWMaskHelper::toTextureView\\28GrRecordingContext*\\2c\\20SkBackingFit\\29\n7287:GrSWMaskHelper::drawShape\\28GrStyledShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAA\\2c\\20unsigned\\20char\\29\n7288:GrSWMaskHelper::drawShape\\28GrShape\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrAA\\2c\\20unsigned\\20char\\29\n7289:GrResourceProvider::writePixels\\28sk_sp<GrTexture>\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrMipLevel\\20const*\\2c\\20int\\29\\20const\n7290:GrResourceProvider::wrapBackendSemaphore\\28GrBackendSemaphore\\20const&\\2c\\20GrSemaphoreWrapType\\2c\\20GrWrapOwnership\\29\n7291:GrResourceProvider::prepareLevels\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20skia_private::AutoSTArray<14\\2c\\20GrMipLevel>*\\2c\\20skia_private::AutoSTArray<14\\2c\\20std::__2::unique_ptr<char\\20\\5b\\5d\\2c\\20std::__2::default_delete<char\\20\\5b\\5d>>>*\\29\\20const\n7292:GrResourceProvider::getExactScratch\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7293:GrResourceProvider::findAndRefScratchTexture\\28skgpu::ScratchKey\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7294:GrResourceProvider::findAndRefScratchTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7295:GrResourceProvider::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7296:GrResourceProvider::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20GrColorType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMipLevel\\20const*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7297:GrResourceProvider::createBuffer\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n7298:GrResourceProvider::createApproxTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7299:GrResourceCache::removeResource\\28GrGpuResource*\\29\n7300:GrResourceCache::removeFromNonpurgeableArray\\28GrGpuResource*\\29\n7301:GrResourceCache::releaseAll\\28\\29\n7302:GrResourceCache::refAndMakeResourceMRU\\28GrGpuResource*\\29\n7303:GrResourceCache::processFreedGpuResources\\28\\29\n7304:GrResourceCache::insertResource\\28GrGpuResource*\\29\n7305:GrResourceCache::findAndRefUniqueResource\\28skgpu::UniqueKey\\20const&\\29\n7306:GrResourceCache::didChangeBudgetStatus\\28GrGpuResource*\\29\n7307:GrResourceCache::addToNonpurgeableArray\\28GrGpuResource*\\29\n7308:GrResourceAllocator::~GrResourceAllocator\\28\\29\n7309:GrResourceAllocator::planAssignment\\28\\29\n7310:GrResourceAllocator::expire\\28unsigned\\20int\\29\n7311:GrResourceAllocator::Register*\\20SkArenaAlloc::make<GrResourceAllocator::Register\\2c\\20GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceProvider*&>\\28GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey&&\\2c\\20GrResourceProvider*&\\29\n7312:GrResourceAllocator::IntervalList::popHead\\28\\29\n7313:GrResourceAllocator::IntervalList::insertByIncreasingStart\\28GrResourceAllocator::Interval*\\29\n7314:GrRenderTask::makeSkippable\\28\\29\n7315:GrRenderTask::isUsed\\28GrSurfaceProxy*\\29\\20const\n7316:GrRenderTask::isInstantiated\\28\\29\\20const\n7317:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.2\n7318:GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.1\n7319:GrRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n7320:GrRenderTargetProxy::isMSAADirty\\28\\29\\20const\n7321:GrRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n7322:GrRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n7323:GrRenderTargetProxy::callbackDesc\\28\\29\\20const\n7324:GrRenderTarget::GrRenderTarget\\28GrGpu*\\2c\\20SkISize\\20const&\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20sk_sp<GrAttachment>\\29\n7325:GrRecordingContextPriv::createDevice\\28skgpu::Budgeted\\2c\\20SkImageInfo\\20const&\\2c\\20SkBackingFit\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrSurfaceOrigin\\2c\\20SkSurfaceProps\\20const&\\2c\\20skgpu::ganesh::Device::InitContents\\29\n7326:GrRecordingContext::init\\28\\29\n7327:GrRecordingContext::destroyDrawingManager\\28\\29\n7328:GrRecordingContext::colorTypeSupportedAsSurface\\28SkColorType\\29\\20const\n7329:GrRecordingContext::abandoned\\28\\29\n7330:GrRecordingContext::abandonContext\\28\\29\n7331:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\\28\\29\n7332:GrRRectEffect::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20GrClipEdgeType\\2c\\20SkRRect\\20const&\\2c\\20GrShaderCaps\\20const&\\29\n7333:GrQuadUtils::TessellationHelper::outset\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuad*\\2c\\20GrQuad*\\29\n7334:GrQuadUtils::TessellationHelper::getOutsetRequest\\28skvx::Vec<4\\2c\\20float>\\20const&\\29\n7335:GrQuadUtils::TessellationHelper::adjustVertices\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuadUtils::TessellationHelper::Vertices*\\29\n7336:GrQuadUtils::TessellationHelper::adjustDegenerateVertices\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20GrQuadUtils::TessellationHelper::Vertices*\\29\n7337:GrQuadUtils::TessellationHelper::Vertices::moveTo\\28skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20float>\\20const&\\2c\\20skvx::Vec<4\\2c\\20int>\\20const&\\29\n7338:GrQuadUtils::ClipToW0\\28DrawQuad*\\2c\\20DrawQuad*\\29\n7339:GrQuadBuffer<\\28anonymous\\20namespace\\29::TextureOpImpl::ColorSubsetAndAA>::append\\28GrQuad\\20const&\\2c\\20\\28anonymous\\20namespace\\29::TextureOpImpl::ColorSubsetAndAA&&\\2c\\20GrQuad\\20const*\\29\n7340:GrQuadBuffer<\\28anonymous\\20namespace\\29::TextureOpImpl::ColorSubsetAndAA>::GrQuadBuffer\\28int\\2c\\20bool\\29\n7341:GrQuad::point\\28int\\29\\20const\n7342:GrQuad::bounds\\28\\29\\20const::'lambda0'\\28float\\20const*\\29::operator\\28\\29\\28float\\20const*\\29\\20const\n7343:GrQuad::bounds\\28\\29\\20const::'lambda'\\28float\\20const*\\29::operator\\28\\29\\28float\\20const*\\29\\20const\n7344:GrProxyProvider::removeUniqueKeyFromProxy\\28GrTextureProxy*\\29\n7345:GrProxyProvider::processInvalidUniqueKeyImpl\\28skgpu::UniqueKey\\20const&\\2c\\20GrTextureProxy*\\2c\\20GrProxyProvider::InvalidateGPUResource\\2c\\20GrProxyProvider::RemoveTableEntry\\29\n7346:GrProxyProvider::createLazyProxy\\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>&&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20skgpu::Mipmapped\\2c\\20GrMipmapStatus\\2c\\20GrInternalSurfaceFlags\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20GrSurfaceProxy::UseAllocator\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7347:GrProxyProvider::adoptUniqueKeyFromSurface\\28GrTextureProxy*\\2c\\20GrSurface\\20const*\\29\n7348:GrProcessorSet::operator==\\28GrProcessorSet\\20const&\\29\\20const\n7349:GrPorterDuffXPFactory::Get\\28SkBlendMode\\29\n7350:GrPixmap::GrPixmap\\28SkPixmap\\20const&\\29\n7351:GrPipeline::peekDstTexture\\28\\29\\20const\n7352:GrPipeline::GrPipeline\\28GrPipeline::InitArgs\\20const&\\2c\\20sk_sp<GrXferProcessor\\20const>\\2c\\20GrAppliedHardClip\\20const&\\29\n7353:GrPersistentCacheUtils::ShaderMetadata::~ShaderMetadata\\28\\29\n7354:GrPersistentCacheUtils::GetType\\28SkReadBuffer*\\29\n7355:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\\28\\29\n7356:GrPathUtils::QuadUVMatrix::set\\28SkPoint\\20const*\\29\n7357:GrPathUtils::QuadUVMatrix::apply\\28void*\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\\20const\n7358:GrPathTessellationShader::MakeStencilOnlyPipeline\\28GrTessellationShader::ProgramArgs\\20const&\\2c\\20GrAAType\\2c\\20GrAppliedHardClip\\20const&\\2c\\20GrPipeline::InputFlags\\29\n7359:GrPathTessellationShader::Impl::~Impl\\28\\29\n7360:GrOpsRenderPass::~GrOpsRenderPass\\28\\29\n7361:GrOpsRenderPass::resetActiveBuffers\\28\\29\n7362:GrOpsRenderPass::draw\\28int\\2c\\20int\\29\n7363:GrOpsRenderPass::drawIndexPattern\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n7364:GrOpFlushState::~GrOpFlushState\\28\\29.1\n7365:GrOpFlushState::smallPathAtlasManager\\28\\29\\20const\n7366:GrOpFlushState::reset\\28\\29\n7367:GrOpFlushState::recordDraw\\28GrGeometryProcessor\\20const*\\2c\\20GrSimpleMesh\\20const*\\2c\\20int\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPrimitiveType\\29\n7368:GrOpFlushState::putBackIndices\\28int\\29\n7369:GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp\\28GrOp\\20const*\\2c\\20SkRect\\20const&\\2c\\20GrPipeline\\20const*\\2c\\20GrUserStencilSettings\\20const*\\29\n7370:GrOpFlushState::drawIndexedInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n7371:GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29\n7372:GrOpFlushState::addASAPUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29\n7373:GrOpFlushState::OpArgs::OpArgs\\28GrOp*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7374:GrOp::setTransformedBounds\\28SkRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20GrOp::HasAABloat\\2c\\20GrOp::IsHairline\\29\n7375:GrOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7376:GrOp::combineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n7377:GrNonAtomicRef<GrXferProcessor>::unref\\28\\29\\20const\n7378:GrNonAtomicRef<GrCpuBuffer>::unref\\28\\29\\20const\n7379:GrNonAtomicRef<GrBufferAllocPool::CpuBufferCache>::unref\\28\\29\\20const\n7380:GrNativeRect::operator!=\\28GrNativeRect\\20const&\\29\\20const\n7381:GrMeshDrawTarget::allocPrimProcProxyPtrs\\28int\\29\n7382:GrMeshDrawOp::PatternHelper::init\\28GrMeshDrawTarget*\\2c\\20GrPrimitiveType\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n7383:GrMemoryPool::allocate\\28unsigned\\20long\\29\n7384:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29\n7385:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::changed\\28\\29\n7386:GrMakeCachedBitmapProxyView\\28GrRecordingContext*\\2c\\20SkBitmap\\20const&\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skgpu::Mipmapped\\29::$_0::operator\\28\\29\\28GrTextureProxy*\\29\\20const\n7387:GrIndexBufferAllocPool::makeSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n7388:GrIndexBufferAllocPool::makeSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n7389:GrImageInfo::operator=\\28GrImageInfo&&\\29\n7390:GrImageInfo::GrImageInfo\\28GrColorType\\2c\\20SkAlphaType\\2c\\20sk_sp<SkColorSpace>\\2c\\20int\\2c\\20int\\29\n7391:GrImageContext::abandonContext\\28\\29\n7392:GrHashMapWithCache<unsigned\\20int\\2c\\20GrRenderTask*\\2c\\20GrDrawingManager::SurfaceIDKeyTraits\\2c\\20GrCheapHash>::find\\28unsigned\\20int\\20const&\\29\\20const\n7393:GrGradientBitmapCache::release\\28GrGradientBitmapCache::Entry*\\29\\20const\n7394:GrGradientBitmapCache::Entry::~Entry\\28\\29\n7395:GrGpuResource::setLabel\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7396:GrGpuResource::makeBudgeted\\28\\29\n7397:GrGpuResource::GrGpuResource\\28GrGpu*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7398:GrGpuResource::CacheAccess::abandon\\28\\29\n7399:GrGpuBuffer::ComputeScratchKeyForDynamicBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20skgpu::ScratchKey*\\29\n7400:GrGpu::~GrGpu\\28\\29\n7401:GrGpu::regenerateMipMapLevels\\28GrTexture*\\29\n7402:GrGpu::executeFlushInfo\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n7403:GrGpu::createTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7404:GrGpu::createTextureCommon\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20GrTextureType\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7405:GrGpu::createBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n7406:GrGpu::callSubmittedProcs\\28bool\\29\n7407:GrGeometryProcessor::AttributeSet::addToKey\\28skgpu::KeyBuilder*\\29\\20const\n7408:GrGeometryProcessor::AttributeSet::Iter::skipUninitialized\\28\\29\n7409:GrGeometryProcessor::Attribute&\\20skia_private::TArray<GrGeometryProcessor::Attribute\\2c\\20true>::emplace_back<char\\20const\\20\\28&\\29\\20\\5b26\\5d\\2c\\20GrVertexAttribType\\2c\\20SkSLType>\\28char\\20const\\20\\28&\\29\\20\\5b26\\5d\\2c\\20GrVertexAttribType&&\\2c\\20SkSLType&&\\29\n7410:GrGLVertexArray::bind\\28GrGLGpu*\\29\n7411:GrGLTextureParameters::invalidate\\28\\29\n7412:GrGLTextureParameters::SamplerOverriddenState::SamplerOverriddenState\\28\\29\n7413:GrGLTexture::~GrGLTexture\\28\\29.2\n7414:GrGLTexture::~GrGLTexture\\28\\29.1\n7415:GrGLTexture::MakeWrapped\\28GrGLGpu*\\2c\\20GrMipmapStatus\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7416:GrGLTexture::GrGLTexture\\28GrGLGpu*\\2c\\20skgpu::Budgeted\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7417:GrGLTexture::GrGLTexture\\28GrGLGpu*\\2c\\20GrGLTexture::Desc\\20const&\\2c\\20sk_sp<GrGLTextureParameters>\\2c\\20GrMipmapStatus\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7418:GrGLSemaphore::~GrGLSemaphore\\28\\29\n7419:GrGLSLVaryingHandler::addAttribute\\28GrShaderVar\\20const&\\29\n7420:GrGLSLVarying::vsOutVar\\28\\29\\20const\n7421:GrGLSLVarying::fsInVar\\28\\29\\20const\n7422:GrGLSLUniformHandler::liftUniformToVertexShader\\28GrProcessor\\20const&\\2c\\20SkString\\29\n7423:GrGLSLShaderBuilder::nextStage\\28\\29\n7424:GrGLSLShaderBuilder::finalize\\28unsigned\\20int\\29\n7425:GrGLSLShaderBuilder::emitFunction\\28char\\20const*\\2c\\20char\\20const*\\29\n7426:GrGLSLShaderBuilder::emitFunctionPrototype\\28char\\20const*\\29\n7427:GrGLSLShaderBuilder::appendTextureLookupAndBlend\\28char\\20const*\\2c\\20SkBlendMode\\2c\\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29\n7428:GrGLSLShaderBuilder::appendDecls\\28SkTBlockList<GrShaderVar\\2c\\201>\\20const&\\2c\\20SkString*\\29\\20const\n7429:GrGLSLShaderBuilder::appendColorGamutXform\\28SkString*\\2c\\20char\\20const*\\2c\\20GrGLSLColorSpaceXformHelper*\\29::$_0::operator\\28\\29\\28char\\20const*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20skcms_TFType\\29\\20const\n7430:GrGLSLShaderBuilder::GrGLSLShaderBuilder\\28GrGLSLProgramBuilder*\\29\n7431:GrGLSLProgramDataManager::setRuntimeEffectUniforms\\28SkSpan<SkRuntimeEffect::Uniform\\20const>\\2c\\20SkSpan<GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\20const>\\2c\\20SkSpan<GrGLSLProgramDataManager::Specialized\\20const>\\2c\\20void\\20const*\\29\\20const\n7432:GrGLSLProgramBuilder::~GrGLSLProgramBuilder\\28\\29\n7433:GrGLSLFragmentShaderBuilder::onFinalize\\28\\29\n7434:GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\\28skgpu::BlendEquation\\29\n7435:GrGLSLColorSpaceXformHelper::isNoop\\28\\29\\20const\n7436:GrGLSLBlend::SetBlendModeUniformData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20SkBlendMode\\29\n7437:GrGLSLBlend::BlendExpression\\28GrProcessor\\20const*\\2c\\20GrGLSLUniformHandler*\\2c\\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20SkBlendMode\\29\n7438:GrGLRenderTarget::~GrGLRenderTarget\\28\\29.2\n7439:GrGLRenderTarget::~GrGLRenderTarget\\28\\29.1\n7440:GrGLRenderTarget::setFlags\\28GrGLCaps\\20const&\\2c\\20GrGLRenderTarget::IDs\\20const&\\29\n7441:GrGLRenderTarget::onGpuMemorySize\\28\\29\\20const\n7442:GrGLRenderTarget::bind\\28bool\\29\n7443:GrGLRenderTarget::backendFormat\\28\\29\\20const\n7444:GrGLRenderTarget::GrGLRenderTarget\\28GrGLGpu*\\2c\\20SkISize\\20const&\\2c\\20GrGLFormat\\2c\\20int\\2c\\20GrGLRenderTarget::IDs\\20const&\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7445:GrGLProgramDataManager::set4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n7446:GrGLProgramDataManager::set2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n7447:GrGLProgramBuilder::uniformHandler\\28\\29\n7448:GrGLProgramBuilder::compileAndAttachShaders\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20SkTDArray<unsigned\\20int>*\\2c\\20bool\\2c\\20skgpu::ShaderErrorHandler*\\29\n7449:GrGLProgramBuilder::PrecompileProgram\\28GrDirectContext*\\2c\\20GrGLPrecompiledProgram*\\2c\\20SkData\\20const&\\29::$_0::operator\\28\\29\\28SkSL::ProgramKind\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\2c\\20unsigned\\20int\\29\\20const\n7450:GrGLProgramBuilder::CreateProgram\\28GrDirectContext*\\2c\\20GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\2c\\20GrGLPrecompiledProgram\\20const*\\29\n7451:GrGLProgram::~GrGLProgram\\28\\29\n7452:GrGLMakeNativeInterface\\28\\29\n7453:GrGLInterface::~GrGLInterface\\28\\29\n7454:GrGLGpu::~GrGLGpu\\28\\29\n7455:GrGLGpu::waitSemaphore\\28GrSemaphore*\\29\n7456:GrGLGpu::uploadTexData\\28SkISize\\2c\\20unsigned\\20int\\2c\\20SkIRect\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20GrMipLevel\\20const*\\2c\\20int\\29\n7457:GrGLGpu::uploadCompressedTexData\\28SkTextureCompressionType\\2c\\20GrGLFormat\\2c\\20SkISize\\2c\\20skgpu::Mipmapped\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n7458:GrGLGpu::uploadColorToTex\\28GrGLFormat\\2c\\20SkISize\\2c\\20unsigned\\20int\\2c\\20std::__2::array<float\\2c\\204ul>\\2c\\20unsigned\\20int\\29\n7459:GrGLGpu::readOrTransferPixelsFrom\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20void*\\2c\\20int\\29\n7460:GrGLGpu::onFBOChanged\\28\\29\n7461:GrGLGpu::getCompatibleStencilIndex\\28GrGLFormat\\29\n7462:GrGLGpu::flushWireframeState\\28bool\\29\n7463:GrGLGpu::flushScissorRect\\28SkIRect\\20const&\\2c\\20int\\2c\\20GrSurfaceOrigin\\29\n7464:GrGLGpu::flushProgram\\28unsigned\\20int\\29\n7465:GrGLGpu::flushProgram\\28sk_sp<GrGLProgram>\\29\n7466:GrGLGpu::flushFramebufferSRGB\\28bool\\29\n7467:GrGLGpu::flushConservativeRasterState\\28bool\\29\n7468:GrGLGpu::deleteSync\\28__GLsync*\\29\n7469:GrGLGpu::deleteFence\\28__GLsync*\\29\n7470:GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29\n7471:GrGLGpu::createCompressedTexture2D\\28SkISize\\2c\\20SkTextureCompressionType\\2c\\20GrGLFormat\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrGLTextureParameters::SamplerOverriddenState*\\29\n7472:GrGLGpu::bindVertexArray\\28unsigned\\20int\\29\n7473:GrGLGpu::TextureUnitBindings::setBoundID\\28unsigned\\20int\\2c\\20GrGpuResource::UniqueID\\29\n7474:GrGLGpu::TextureUnitBindings::invalidateAllTargets\\28bool\\29\n7475:GrGLGpu::TextureToCopyProgramIdx\\28GrTexture*\\29\n7476:GrGLGpu::ProgramCache::~ProgramCache\\28\\29\n7477:GrGLGpu::ProgramCache::findOrCreateProgramImpl\\28GrDirectContext*\\2c\\20GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\2c\\20GrThreadSafePipelineBuilder::Stats::ProgramCacheResult*\\29\n7478:GrGLGpu::HWVertexArrayState::invalidate\\28\\29\n7479:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n7480:GrGLFunction<void\\20\\28int\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\29\n7481:GrGLFinishCallbacks::check\\28\\29\n7482:GrGLContext::~GrGLContext\\28\\29.1\n7483:GrGLCaps::~GrGLCaps\\28\\29\n7484:GrGLCaps::getTexSubImageExternalFormatAndType\\28GrGLFormat\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n7485:GrGLCaps::getExternalFormat\\28GrGLFormat\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrGLCaps::ExternalFormatUsage\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\\20const\n7486:GrGLCaps::canCopyTexSubImage\\28GrGLFormat\\2c\\20bool\\2c\\20GrTextureType\\20const*\\2c\\20GrGLFormat\\2c\\20bool\\2c\\20GrTextureType\\20const*\\29\\20const\n7487:GrGLCaps::canCopyAsBlit\\28GrGLFormat\\2c\\20int\\2c\\20GrTextureType\\20const*\\2c\\20GrGLFormat\\2c\\20int\\2c\\20GrTextureType\\20const*\\2c\\20SkRect\\20const&\\2c\\20bool\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\\20const\n7488:GrGLBuffer::~GrGLBuffer\\28\\29.1\n7489:GrGLAttribArrayState::resize\\28int\\29\n7490:GrGLAttribArrayState::GrGLAttribArrayState\\28int\\29\n7491:GrFragmentProcessors::MakeChildFP\\28SkRuntimeEffect::ChildPtr\\20const&\\2c\\20GrFPArgs\\20const&\\29\n7492:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29\n7493:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29\n7494:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::Make\\28\\29\n7495:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n7496:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n7497:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::Make\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n7498:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n7499:GrFragmentProcessor::ClampOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n7500:GrFixedClip::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n7501:GrFixedClip::apply\\28GrAppliedHardClip*\\2c\\20SkIRect*\\29\\20const\n7502:GrEagerDynamicVertexAllocator::unlock\\28int\\29\n7503:GrDynamicAtlas::~GrDynamicAtlas\\28\\29\n7504:GrDynamicAtlas::Node::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n7505:GrDrawingManager::flush\\28SkSpan<GrSurfaceProxy*>\\2c\\20SkSurfaces::BackendSurfaceAccess\\2c\\20GrFlushInfo\\20const&\\2c\\20skgpu::MutableTextureState\\20const*\\29\n7506:GrDrawingManager::closeAllTasks\\28\\29\n7507:GrDrawOpAtlas::uploadToPage\\28unsigned\\20int\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n7508:GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29\n7509:GrDrawOpAtlas::setLastUseToken\\28skgpu::AtlasLocator\\20const&\\2c\\20skgpu::AtlasToken\\29\n7510:GrDrawOpAtlas::processEviction\\28skgpu::PlotLocator\\29\n7511:GrDrawOpAtlas::hasID\\28skgpu::PlotLocator\\20const&\\29\n7512:GrDrawOpAtlas::compact\\28skgpu::AtlasToken\\29\n7513:GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29\n7514:GrDrawOpAtlas::Make\\28GrProxyProvider*\\2c\\20GrBackendFormat\\20const&\\2c\\20SkColorType\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20skgpu::AtlasGenerationCounter*\\2c\\20GrDrawOpAtlas::AllowMultitexturing\\2c\\20skgpu::PlotEvictionCallback*\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n7515:GrDrawIndirectBufferAllocPool::putBack\\28int\\29\n7516:GrDrawIndirectBufferAllocPool::putBackIndexed\\28int\\29\n7517:GrDrawIndirectBufferAllocPool::makeSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n7518:GrDrawIndirectBufferAllocPool::makeIndexedSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n7519:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\\28\\29\n7520:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\\28\\29\n7521:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29\n7522:GrDistanceFieldA8TextGeoProc::onTextureSampler\\28int\\29\\20const\n7523:GrDisableColorXPFactory::MakeXferProcessor\\28\\29\n7524:GrDirectContextPriv::validPMUPMConversionExists\\28\\29\n7525:GrDirectContext::~GrDirectContext\\28\\29\n7526:GrDirectContext::syncAllOutstandingGpuWork\\28bool\\29\n7527:GrDirectContext::submit\\28GrSyncCpu\\29\n7528:GrDirectContext::abandoned\\28\\29\n7529:GrDeferredProxyUploader::signalAndFreeData\\28\\29\n7530:GrDeferredProxyUploader::GrDeferredProxyUploader\\28\\29\n7531:GrCopyRenderTask::~GrCopyRenderTask\\28\\29\n7532:GrCopyRenderTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n7533:GrCopyBaseMipMapToView\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20skgpu::Budgeted\\29\n7534:GrCopyBaseMipMapToTextureProxy\\28GrRecordingContext*\\2c\\20sk_sp<GrSurfaceProxy>\\2c\\20GrSurfaceOrigin\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skgpu::Budgeted\\29\n7535:GrContext_Base::~GrContext_Base\\28\\29.1\n7536:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\\28\\29\n7537:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29\n7538:GrColorInfo::makeColorType\\28GrColorType\\29\\20const\n7539:GrColorInfo::isLinearlyBlended\\28\\29\\20const\n7540:GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis\\28GrProcessorAnalysisColor\\20const&\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\20const*\\2c\\20int\\29\n7541:GrCaps::~GrCaps\\28\\29\n7542:GrCaps::surfaceSupportsWritePixels\\28GrSurface\\20const*\\29\\20const\n7543:GrCaps::getDstSampleFlagsForProxy\\28GrRenderTargetProxy\\20const*\\2c\\20bool\\29\\20const\n7544:GrCPixmap::GrCPixmap\\28GrPixmap\\20const&\\29\n7545:GrBufferAllocPool::resetCpuData\\28unsigned\\20long\\29\n7546:GrBufferAllocPool::makeSpaceAtLeast\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\2c\\20unsigned\\20long*\\29\n7547:GrBufferAllocPool::flushCpuData\\28GrBufferAllocPool::BufferBlock\\20const&\\2c\\20unsigned\\20long\\29\n7548:GrBufferAllocPool::destroyBlock\\28\\29\n7549:GrBufferAllocPool::deleteBlocks\\28\\29\n7550:GrBufferAllocPool::createBlock\\28unsigned\\20long\\29\n7551:GrBufferAllocPool::CpuBufferCache::makeBuffer\\28unsigned\\20long\\2c\\20bool\\29\n7552:GrBlurUtils::mask_release_proc\\28void*\\2c\\20void*\\29\n7553:GrBlurUtils::make_unnormalized_half_kernel\\28float*\\2c\\20int\\2c\\20float\\29\n7554:GrBlurUtils::draw_shape_with_mask_filter\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkMaskFilterBase\\20const*\\2c\\20GrStyledShape\\20const&\\29\n7555:GrBlurUtils::draw_mask\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20GrPaint&&\\2c\\20GrSurfaceProxyView\\29\n7556:GrBlurUtils::create_data\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n7557:GrBlurUtils::convolve_gaussian_1d\\28skgpu::ganesh::SurfaceFillContext*\\2c\\20GrSurfaceProxyView\\2c\\20SkIRect\\20const&\\2c\\20SkIPoint\\2c\\20SkIRect\\20const&\\2c\\20SkAlphaType\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\29\n7558:GrBlurUtils::convolve_gaussian\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\29::$_0::operator\\28\\29\\28SkIRect\\29\\20const\n7559:GrBlurUtils::convolve_gaussian\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\2c\\20GrColorType\\2c\\20SkAlphaType\\2c\\20SkIRect\\2c\\20SkIRect\\2c\\20GrBlurUtils::\\28anonymous\\20namespace\\29::Direction\\2c\\20int\\2c\\20float\\2c\\20SkTileMode\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkBackingFit\\29\n7560:GrBlurUtils::clip_bounds_quick_reject\\28SkIRect\\20const&\\2c\\20SkIRect\\20const&\\29\n7561:GrBlurUtils::\\28anonymous\\20namespace\\29::make_texture_effect\\28GrCaps\\20const*\\2c\\20GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20GrSamplerState\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\20const&\\29\n7562:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\\28\\29\n7563:GrBitmapTextGeoProc::addNewViews\\28GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\29\n7564:GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\n7565:GrBicubicEffect::Make\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n7566:GrBicubicEffect::MakeSubset\\28GrSurfaceProxyView\\2c\\20SkAlphaType\\2c\\20SkMatrix\\20const&\\2c\\20GrSamplerState::WrapMode\\2c\\20GrSamplerState::WrapMode\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkCubicResampler\\2c\\20GrBicubicEffect::Direction\\2c\\20GrCaps\\20const&\\29\n7567:GrBackendTexture::operator=\\28GrBackendTexture\\20const&\\29\n7568:GrBackendTexture::GrBackendTexture<GrGLBackendTextureData>\\28int\\2c\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20skgpu::Mipmapped\\2c\\20GrBackendApi\\2c\\20GrTextureType\\2c\\20GrGLBackendTextureData\\20const&\\29\n7569:GrBackendRenderTarget::isProtected\\28\\29\\20const\n7570:GrBackendFormatBytesPerBlock\\28GrBackendFormat\\20const&\\29\n7571:GrBackendFormat::operator!=\\28GrBackendFormat\\20const&\\29\\20const\n7572:GrBackendFormat::makeTexture2D\\28\\29\\20const\n7573:GrBackendFormat::isMockStencilFormat\\28\\29\\20const\n7574:GrAuditTrail::opsCombined\\28GrOp\\20const*\\2c\\20GrOp\\20const*\\29\n7575:GrAttachment::ComputeSharedAttachmentUniqueKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20GrAttachment::UsageFlags\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\2c\\20skgpu::UniqueKey*\\29\n7576:GrAttachment::ComputeScratchKey\\28GrCaps\\20const&\\2c\\20GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20GrAttachment::UsageFlags\\2c\\20int\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\2c\\20skgpu::ScratchKey*\\29\n7577:GrAtlasManager::~GrAtlasManager\\28\\29\n7578:GrAtlasManager::getViews\\28skgpu::MaskFormat\\2c\\20unsigned\\20int*\\29\n7579:GrAtlasManager::atlasGeneration\\28skgpu::MaskFormat\\29\\20const\n7580:GrAppliedClip::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n7581:GrAppliedClip::addCoverageFP\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29\n7582:GrAATriangulator::makeEvent\\28GrAATriangulator::SSEdge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrAATriangulator::SSEdge*\\2c\\20GrTriangulator::Vertex*\\2c\\20GrAATriangulator::EventList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\\20const\n7583:GrAATriangulator::connectPartners\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\29\n7584:GrAATriangulator::collapseOverlapRegions\\28GrTriangulator::VertexList*\\2c\\20GrTriangulator::Comparator\\20const&\\2c\\20GrAATriangulator::EventComparator\\29\n7585:GrAATriangulator::Event*\\20SkArenaAlloc::make<GrAATriangulator::Event\\2c\\20GrAATriangulator::SSEdge*&\\2c\\20SkPoint&\\2c\\20unsigned\\20char&>\\28GrAATriangulator::SSEdge*&\\2c\\20SkPoint&\\2c\\20unsigned\\20char&\\29\n7586:GrAAConvexTessellator::~GrAAConvexTessellator\\28\\29\n7587:GrAAConvexTessellator::quadTo\\28SkPoint\\20const*\\29\n7588:GrAAConvexTessellator::fanRing\\28GrAAConvexTessellator::Ring\\20const&\\29\n7589:GetVariationDesignPosition\\28AutoFTAccess&\\2c\\20SkFontArguments::VariationPosition::Coordinate*\\2c\\20int\\29\n7590:GetShortIns\n7591:FontMgrRunIterator::~FontMgrRunIterator\\28\\29\n7592:FontMgrRunIterator::endOfCurrentRun\\28\\29\\20const\n7593:FontMgrRunIterator::atEnd\\28\\29\\20const\n7594:FindSortableTop\\28SkOpContourHead*\\29\n7595:FT_Vector_NormLen\n7596:FT_Sfnt_Table_Info\n7597:FT_Select_Size\n7598:FT_Render_Glyph\n7599:FT_Remove_Module\n7600:FT_Outline_Get_Orientation\n7601:FT_Outline_EmboldenXY\n7602:FT_Outline_Decompose\n7603:FT_Open_Face\n7604:FT_New_Library\n7605:FT_New_GlyphSlot\n7606:FT_Match_Size\n7607:FT_GlyphLoader_Reset\n7608:FT_GlyphLoader_Prepare\n7609:FT_GlyphLoader_CheckSubGlyphs\n7610:FT_Get_Var_Design_Coordinates\n7611:FT_Get_Postscript_Name\n7612:FT_Get_Paint_Layers\n7613:FT_Get_PS_Font_Info\n7614:FT_Get_Glyph_Name\n7615:FT_Get_FSType_Flags\n7616:FT_Get_Color_Glyph_ClipBox\n7617:FT_Done_Size\n7618:FT_Done_Library\n7619:FT_Done_GlyphSlot\n7620:FT_Bitmap_Done\n7621:FT_Bitmap_Convert\n7622:FT_Add_Default_Modules\n7623:EmptyFontLoader::loadSystemFonts\\28SkFontScanner\\20const*\\2c\\20skia_private::TArray<sk_sp<SkFontStyleSet_Custom>\\2c\\20true>*\\29\\20const\n7624:EllipticalRRectOp::~EllipticalRRectOp\\28\\29.1\n7625:EllipticalRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n7626:EllipticalRRectOp::EllipticalRRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint\\2c\\20bool\\29\n7627:EllipseOp::EllipseOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20EllipseOp::DeviceSpaceParams\\20const&\\2c\\20SkStrokeRec\\20const&\\29\n7628:EllipseGeometryProcessor::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n7629:Dot2AngleType\\28float\\29\n7630:DIEllipseOp::~DIEllipseOp\\28\\29\n7631:DIEllipseOp::DIEllipseOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20DIEllipseOp::DeviceSpaceParams\\20const&\\2c\\20SkMatrix\\20const&\\29\n7632:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrXferProcessor\\20const&\\29\n7633:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::emitBlendCodeForDstRead\\28GrGLSLXPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrXferProcessor\\20const&\\29\n7634:Cr_z_inflateReset2\n7635:Cr_z_inflateReset\n7636:CoverageSetOpXP::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n7637:Convexicator::close\\28\\29\n7638:Convexicator::addVec\\28SkPoint\\20const&\\29\n7639:Convexicator::addPt\\28SkPoint\\20const&\\29\n7640:ContourIter::next\\28\\29\n7641:Contour&\\20std::__2::vector<Contour\\2c\\20std::__2::allocator<Contour>>::emplace_back<SkRect&\\2c\\20int&\\2c\\20int&>\\28SkRect&\\2c\\20int&\\2c\\20int&\\29\n7642:CircularRRectOp::~CircularRRectOp\\28\\29.1\n7643:CircularRRectOp::CircularRRectOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29\n7644:CircleOp::~CircleOp\\28\\29\n7645:CircleOp::Make\\28GrRecordingContext*\\2c\\20GrPaint&&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20GrStyle\\20const&\\2c\\20CircleOp::ArcParams\\20const*\\29\n7646:CircleOp::CircleOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20GrStyle\\20const&\\2c\\20CircleOp::ArcParams\\20const*\\29\n7647:CircleGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29\n7648:CircleGeometryProcessor::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n7649:CFF::dict_interpreter_t<CFF::cff1_private_dict_opset_t\\2c\\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\\2c\\20CFF::interp_env_t<CFF::number_t>>::interpret\\28CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>&\\29\n7650:CFF::cs_opset_t<CFF::number_t\\2c\\20cff2_cs_opset_path_t\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>\\2c\\20cff2_path_param_t\\2c\\20cff2_path_procs_path_t>::process_op\\28unsigned\\20int\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_path_param_t&\\29\n7651:CFF::cs_opset_t<CFF::number_t\\2c\\20cff2_cs_opset_extents_t\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>\\2c\\20cff2_extents_param_t\\2c\\20cff2_path_procs_extents_t>::process_op\\28unsigned\\20int\\2c\\20CFF::cff2_cs_interp_env_t<CFF::number_t>&\\2c\\20cff2_extents_param_t&\\29\n7652:CFF::cff_stack_t<CFF::call_context_t\\2c\\2010>::cff_stack_t\\28\\29\n7653:CFF::cff2_cs_interp_env_t<CFF::number_t>::process_vsindex\\28\\29\n7654:CFF::cff2_cs_interp_env_t<CFF::number_t>::process_blend\\28\\29\n7655:CFF::cff2_cs_interp_env_t<CFF::number_t>::fetch_op\\28\\29\n7656:CFF::cff2_cs_interp_env_t<CFF::number_t>::cff2_cs_interp_env_t<OT::cff2::accelerator_t\\20const>\\28hb_array_t<unsigned\\20char\\20const>\\20const&\\2c\\20OT::cff2::accelerator_t\\20const&\\2c\\20unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\29\n7657:CFF::cff2_cs_interp_env_t<CFF::number_t>::blend_deltas\\28hb_array_t<CFF::number_t\\20const>\\29\\20const\n7658:CFF::cff1_top_dict_values_t::init\\28\\29\n7659:CFF::cff1_cs_interp_env_t::cff1_cs_interp_env_t<OT::cff1::accelerator_t\\20const>\\28hb_array_t<unsigned\\20char\\20const>\\20const&\\2c\\20OT::cff1::accelerator_t\\20const&\\2c\\20unsigned\\20int\\2c\\20int\\20const*\\2c\\20unsigned\\20int\\29\n7660:CFF::biased_subrs_t<CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>>::init\\28CFF::Subrs<OT::IntType<unsigned\\20short\\2c\\202u>>\\20const*\\29\n7661:CFF::biased_subrs_t<CFF::Subrs<OT::IntType<unsigned\\20int\\2c\\204u>>>::init\\28CFF::Subrs<OT::IntType<unsigned\\20int\\2c\\204u>>\\20const*\\29\n7662:CFF::FDSelect::get_fd\\28unsigned\\20int\\29\\20const\n7663:CFF::FDSelect3_4<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>>::sentinel\\28\\29\\20const\n7664:CFF::FDSelect3_4<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>>::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7665:CFF::FDSelect3_4<OT::IntType<unsigned\\20short\\2c\\202u>\\2c\\20OT::IntType<unsigned\\20char\\2c\\201u>>::get_fd\\28unsigned\\20int\\29\\20const\n7666:CFF::FDSelect0::sanitize\\28hb_sanitize_context_t*\\2c\\20unsigned\\20int\\29\\20const\n7667:CFF::Charset::get_glyph\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n7668:CFF::CFF2FDSelect::get_fd\\28unsigned\\20int\\29\\20const\n7669:ButtCapDashedCircleOp::ButtCapDashedCircleOp\\28GrProcessorSet*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n7670:BlockIndexIterator<skgpu::ganesh::ClipStack::RawElement\\20const&\\2c\\20false\\2c\\20true\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::Decrement\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<skgpu::ganesh::ClipStack::RawElement\\2c\\201>::GetItem\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29>::begin\\28\\29\\20const\n7671:BlockIndexIterator<GrShaderVar\\20const&\\2c\\20true\\2c\\20true\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::First\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Last\\28SkBlockAllocator::Block\\20const*\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::Increment\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29\\2c\\20&SkTBlockList<GrShaderVar\\2c\\201>::GetItem\\28SkBlockAllocator::Block\\20const*\\2c\\20int\\29>::Item::operator++\\28\\29\n7672:AutoRestoreInverseness::~AutoRestoreInverseness\\28\\29\n7673:AutoRestoreInverseness::AutoRestoreInverseness\\28GrShape*\\2c\\20GrStyle\\20const&\\29\n7674:AutoLayerForImageFilter::addLayer\\28SkPaint\\20const&\\2c\\20SkRect\\20const*\\2c\\20bool\\29\n7675:AngleWinding\\28SkOpSpanBase*\\2c\\20SkOpSpanBase*\\2c\\20int*\\2c\\20bool*\\29\n7676:AddIntersectTs\\28SkOpContour*\\2c\\20SkOpContour*\\2c\\20SkOpCoincidence*\\29\n7677:ActiveEdgeList::replace\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n7678:ActiveEdgeList::remove\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n7679:ActiveEdgeList::insert\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n7680:ActiveEdgeList::allocate\\28SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\29\n7681:AAT::trak::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7682:AAT::mortmorx<AAT::ObsoleteTypes\\2c\\201836020340u>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7683:AAT::mortmorx<AAT::ExtendedTypes\\2c\\201836020344u>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7684:AAT::ltag::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7685:AAT::ltag::get_language\\28unsigned\\20int\\29\\20const\n7686:AAT::feat::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7687:AAT::ankr::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7688:AAT::ankr::get_anchor\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n7689:AAT::TrackData::get_tracking\\28void\\20const*\\2c\\20float\\29\\20const\n7690:AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_value_or_null\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n7691:AAT::Lookup<OT::IntType<unsigned\\20short\\2c\\202u>>::get_value\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n7692:AAT::Lookup<OT::IntType<unsigned\\20int\\2c\\204u>>::get_value_or_null\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\\20const\n7693:AAT::KerxTable<AAT::kerx>::sanitize\\28hb_sanitize_context_t*\\29\\20const\n7694:AAT::KernPair\\20const*\\20hb_sorted_array_t<AAT::KernPair\\20const>::bsearch<AAT::hb_glyph_pair_t>\\28AAT::hb_glyph_pair_t\\20const&\\2c\\20AAT::KernPair\\20const*\\29\n7695:AAT::KernPair\\20const&\\20OT::SortedArrayOf<AAT::KernPair\\2c\\20OT::BinSearchHeader<OT::IntType<unsigned\\20short\\2c\\202u>>>::bsearch<AAT::hb_glyph_pair_t>\\28AAT::hb_glyph_pair_t\\20const&\\2c\\20AAT::KernPair\\20const&\\29\\20const\n7696:AAT::ChainSubtable<AAT::ObsoleteTypes>::apply\\28AAT::hb_aat_apply_context_t*\\29\\20const\n7697:AAT::ChainSubtable<AAT::ExtendedTypes>::apply\\28AAT::hb_aat_apply_context_t*\\29\\20const\n7698:xyzd50_to_hcl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n7699:void\\20mergeT<unsigned\\20short>\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20void*\\29\n7700:void\\20mergeT<unsigned\\20char>\\28void\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\2c\\20void*\\29\n7701:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7702:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7703:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7704:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7705:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7706:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7707:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7708:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7709:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7710:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7711:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7712:void\\20\\28anonymous\\20namespace\\29::downsample_3_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7713:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7714:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7715:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7716:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7717:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7718:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7719:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7720:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7721:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7722:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7723:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7724:void\\20\\28anonymous\\20namespace\\29::downsample_3_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7725:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7726:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7727:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7728:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7729:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7730:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7731:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7732:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7733:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7734:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7735:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7736:void\\20\\28anonymous\\20namespace\\29::downsample_3_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7737:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7738:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7739:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7740:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7741:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7742:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7743:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7744:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7745:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7746:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7747:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7748:void\\20\\28anonymous\\20namespace\\29::downsample_2_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7749:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7750:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7751:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7752:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7753:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7754:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7755:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7756:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7757:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7758:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7759:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7760:void\\20\\28anonymous\\20namespace\\29::downsample_2_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7761:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7762:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7763:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7764:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7765:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7766:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7767:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7768:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7769:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7770:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7771:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7772:void\\20\\28anonymous\\20namespace\\29::downsample_2_1<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7773:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7774:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7775:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7776:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7777:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7778:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7779:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7780:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7781:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7782:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7783:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7784:void\\20\\28anonymous\\20namespace\\29::downsample_1_3<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7785:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_RGBA_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7786:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_F16F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7787:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_Alpha_F16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7788:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7789:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_88>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7790:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_8888>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7791:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_565>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7792:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_4444>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7793:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7794:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7795:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_16161616>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7796:void\\20\\28anonymous\\20namespace\\29::downsample_1_2<\\28anonymous\\20namespace\\29::ColorTypeFilter_1010102>\\28void*\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n7797:virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n7798:virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n7799:virtual\\20thunk\\20to\\20std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29.1\n7800:virtual\\20thunk\\20to\\20std::__2::basic_istream<char\\2c\\20std::__2::char_traits<char>>::~basic_istream\\28\\29\n7801:virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n7802:virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n7803:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n7804:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n7805:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n7806:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n7807:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n7808:virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n7809:virtual\\20thunk\\20to\\20GrTextureProxy::~GrTextureProxy\\28\\29.1\n7810:virtual\\20thunk\\20to\\20GrTextureProxy::~GrTextureProxy\\28\\29\n7811:virtual\\20thunk\\20to\\20GrTextureProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n7812:virtual\\20thunk\\20to\\20GrTextureProxy::instantiate\\28GrResourceProvider*\\29\n7813:virtual\\20thunk\\20to\\20GrTextureProxy::getUniqueKey\\28\\29\\20const\n7814:virtual\\20thunk\\20to\\20GrTextureProxy::createSurface\\28GrResourceProvider*\\29\\20const\n7815:virtual\\20thunk\\20to\\20GrTextureProxy::callbackDesc\\28\\29\\20const\n7816:virtual\\20thunk\\20to\\20GrTextureProxy::asTextureProxy\\28\\29\\20const\n7817:virtual\\20thunk\\20to\\20GrTextureProxy::asTextureProxy\\28\\29\n7818:virtual\\20thunk\\20to\\20GrTexture::onGpuMemorySize\\28\\29\\20const\n7819:virtual\\20thunk\\20to\\20GrTexture::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n7820:virtual\\20thunk\\20to\\20GrTexture::asTexture\\28\\29\\20const\n7821:virtual\\20thunk\\20to\\20GrTexture::asTexture\\28\\29\n7822:virtual\\20thunk\\20to\\20GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29.1\n7823:virtual\\20thunk\\20to\\20GrRenderTargetProxy::~GrRenderTargetProxy\\28\\29\n7824:virtual\\20thunk\\20to\\20GrRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n7825:virtual\\20thunk\\20to\\20GrRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n7826:virtual\\20thunk\\20to\\20GrRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n7827:virtual\\20thunk\\20to\\20GrRenderTargetProxy::callbackDesc\\28\\29\\20const\n7828:virtual\\20thunk\\20to\\20GrRenderTargetProxy::asRenderTargetProxy\\28\\29\\20const\n7829:virtual\\20thunk\\20to\\20GrRenderTargetProxy::asRenderTargetProxy\\28\\29\n7830:virtual\\20thunk\\20to\\20GrRenderTarget::onRelease\\28\\29\n7831:virtual\\20thunk\\20to\\20GrRenderTarget::onAbandon\\28\\29\n7832:virtual\\20thunk\\20to\\20GrRenderTarget::asRenderTarget\\28\\29\\20const\n7833:virtual\\20thunk\\20to\\20GrRenderTarget::asRenderTarget\\28\\29\n7834:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n7835:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n7836:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onRelease\\28\\29\n7837:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n7838:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onAbandon\\28\\29\n7839:virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n7840:virtual\\20thunk\\20to\\20GrGLTexture::~GrGLTexture\\28\\29.1\n7841:virtual\\20thunk\\20to\\20GrGLTexture::~GrGLTexture\\28\\29\n7842:virtual\\20thunk\\20to\\20GrGLTexture::onRelease\\28\\29\n7843:virtual\\20thunk\\20to\\20GrGLTexture::onAbandon\\28\\29\n7844:virtual\\20thunk\\20to\\20GrGLTexture::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n7845:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n7846:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n7847:virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::onFinalize\\28\\29\n7848:virtual\\20thunk\\20to\\20GrGLRenderTarget::~GrGLRenderTarget\\28\\29.1\n7849:virtual\\20thunk\\20to\\20GrGLRenderTarget::~GrGLRenderTarget\\28\\29\n7850:virtual\\20thunk\\20to\\20GrGLRenderTarget::onRelease\\28\\29\n7851:virtual\\20thunk\\20to\\20GrGLRenderTarget::onGpuMemorySize\\28\\29\\20const\n7852:virtual\\20thunk\\20to\\20GrGLRenderTarget::onAbandon\\28\\29\n7853:virtual\\20thunk\\20to\\20GrGLRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n7854:virtual\\20thunk\\20to\\20GrGLRenderTarget::backendFormat\\28\\29\\20const\n7855:vertices_dispose\n7856:vertices_create\n7857:unicodePositionBuffer_create\n7858:typefaces_filterCoveredCodePoints\n7859:typeface_create\n7860:tt_vadvance_adjust\n7861:tt_slot_init\n7862:tt_size_request\n7863:tt_size_init\n7864:tt_size_done\n7865:tt_sbit_decoder_load_png\n7866:tt_sbit_decoder_load_compound\n7867:tt_sbit_decoder_load_byte_aligned\n7868:tt_sbit_decoder_load_bit_aligned\n7869:tt_property_set\n7870:tt_property_get\n7871:tt_name_ascii_from_utf16\n7872:tt_name_ascii_from_other\n7873:tt_hadvance_adjust\n7874:tt_glyph_load\n7875:tt_get_var_blend\n7876:tt_get_interface\n7877:tt_get_glyph_name\n7878:tt_get_cmap_info\n7879:tt_get_advances\n7880:tt_face_set_sbit_strike\n7881:tt_face_load_strike_metrics\n7882:tt_face_load_sbit_image\n7883:tt_face_load_sbit\n7884:tt_face_load_post\n7885:tt_face_load_pclt\n7886:tt_face_load_os2\n7887:tt_face_load_name\n7888:tt_face_load_maxp\n7889:tt_face_load_kern\n7890:tt_face_load_hmtx\n7891:tt_face_load_hhea\n7892:tt_face_load_head\n7893:tt_face_load_gasp\n7894:tt_face_load_font_dir\n7895:tt_face_load_cpal\n7896:tt_face_load_colr\n7897:tt_face_load_cmap\n7898:tt_face_load_bhed\n7899:tt_face_load_any\n7900:tt_face_init\n7901:tt_face_get_paint_layers\n7902:tt_face_get_paint\n7903:tt_face_get_kerning\n7904:tt_face_get_colr_layer\n7905:tt_face_get_colr_glyph_paint\n7906:tt_face_get_colorline_stops\n7907:tt_face_get_color_glyph_clipbox\n7908:tt_face_free_sbit\n7909:tt_face_free_ps_names\n7910:tt_face_free_name\n7911:tt_face_free_cpal\n7912:tt_face_free_colr\n7913:tt_face_done\n7914:tt_face_colr_blend_layer\n7915:tt_driver_init\n7916:tt_cmap_unicode_init\n7917:tt_cmap_unicode_char_next\n7918:tt_cmap_unicode_char_index\n7919:tt_cmap_init\n7920:tt_cmap8_validate\n7921:tt_cmap8_get_info\n7922:tt_cmap8_char_next\n7923:tt_cmap8_char_index\n7924:tt_cmap6_validate\n7925:tt_cmap6_get_info\n7926:tt_cmap6_char_next\n7927:tt_cmap6_char_index\n7928:tt_cmap4_validate\n7929:tt_cmap4_init\n7930:tt_cmap4_get_info\n7931:tt_cmap4_char_next\n7932:tt_cmap4_char_index\n7933:tt_cmap2_validate\n7934:tt_cmap2_get_info\n7935:tt_cmap2_char_next\n7936:tt_cmap2_char_index\n7937:tt_cmap14_variants\n7938:tt_cmap14_variant_chars\n7939:tt_cmap14_validate\n7940:tt_cmap14_init\n7941:tt_cmap14_get_info\n7942:tt_cmap14_done\n7943:tt_cmap14_char_variants\n7944:tt_cmap14_char_var_isdefault\n7945:tt_cmap14_char_var_index\n7946:tt_cmap14_char_next\n7947:tt_cmap13_validate\n7948:tt_cmap13_get_info\n7949:tt_cmap13_char_next\n7950:tt_cmap13_char_index\n7951:tt_cmap12_validate\n7952:tt_cmap12_get_info\n7953:tt_cmap12_char_next\n7954:tt_cmap12_char_index\n7955:tt_cmap10_validate\n7956:tt_cmap10_get_info\n7957:tt_cmap10_char_next\n7958:tt_cmap10_char_index\n7959:tt_cmap0_validate\n7960:tt_cmap0_get_info\n7961:tt_cmap0_char_next\n7962:tt_cmap0_char_index\n7963:textStyle_setWordSpacing\n7964:textStyle_setTextBaseline\n7965:textStyle_setLocale\n7966:textStyle_setLetterSpacing\n7967:textStyle_setHeight\n7968:textStyle_setHalfLeading\n7969:textStyle_setForeground\n7970:textStyle_setFontVariations\n7971:textStyle_setFontStyle\n7972:textStyle_setFontSize\n7973:textStyle_setDecorationColor\n7974:textStyle_setColor\n7975:textStyle_setBackground\n7976:textStyle_dispose\n7977:textStyle_create\n7978:textStyle_copy\n7979:textStyle_clearFontFamilies\n7980:textStyle_addShadow\n7981:textStyle_addFontFeature\n7982:textStyle_addFontFamilies\n7983:textBoxList_getLength\n7984:textBoxList_getBoxAtIndex\n7985:textBoxList_dispose\n7986:t2_hints_stems\n7987:t2_hints_open\n7988:t1_make_subfont\n7989:t1_hints_stem\n7990:t1_hints_open\n7991:t1_decrypt\n7992:t1_decoder_parse_metrics\n7993:t1_decoder_init\n7994:t1_decoder_done\n7995:t1_cmap_unicode_init\n7996:t1_cmap_unicode_char_next\n7997:t1_cmap_unicode_char_index\n7998:t1_cmap_std_done\n7999:t1_cmap_std_char_next\n8000:t1_cmap_standard_init\n8001:t1_cmap_expert_init\n8002:t1_cmap_custom_init\n8003:t1_cmap_custom_done\n8004:t1_cmap_custom_char_next\n8005:t1_cmap_custom_char_index\n8006:t1_builder_start_point\n8007:swizzle_or_premul\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkColorSpaceXformSteps\\20const&\\29\n8008:surface_renderPicturesOnWorker\n8009:surface_renderPictures\n8010:surface_rasterizeImage\n8011:surface_onRenderComplete\n8012:surface_destroy\n8013:surface_create\n8014:strutStyle_setLeading\n8015:strutStyle_setHeight\n8016:strutStyle_setHalfLeading\n8017:strutStyle_setForceStrutHeight\n8018:strutStyle_setFontStyle\n8019:strutStyle_setFontFamilies\n8020:strutStyle_dispose\n8021:strutStyle_create\n8022:string_read\n8023:std::exception::what\\28\\29\\20const\n8024:std::bad_variant_access::what\\28\\29\\20const\n8025:std::bad_optional_access::what\\28\\29\\20const\n8026:std::bad_array_new_length::what\\28\\29\\20const\n8027:std::bad_alloc::what\\28\\29\\20const\n8028:std::__2::time_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n8029:std::__2::time_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20tm\\20const*\\2c\\20char\\2c\\20char\\29\\20const\n8030:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_year\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8031:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_weekday\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8032:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_time\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8033:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_monthname\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8034:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get_date\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8035:std::__2::time_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\2c\\20char\\29\\20const\n8036:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_year\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8037:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_weekday\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8038:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_time\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8039:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_monthname\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8040:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get_date\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\29\\20const\n8041:std::__2::time_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20tm*\\2c\\20char\\2c\\20char\\29\\20const\n8042:std::__2::numpunct<wchar_t>::~numpunct\\28\\29\n8043:std::__2::numpunct<wchar_t>::do_truename\\28\\29\\20const\n8044:std::__2::numpunct<wchar_t>::do_grouping\\28\\29\\20const\n8045:std::__2::numpunct<wchar_t>::do_falsename\\28\\29\\20const\n8046:std::__2::numpunct<char>::~numpunct\\28\\29\n8047:std::__2::numpunct<char>::do_truename\\28\\29\\20const\n8048:std::__2::numpunct<char>::do_thousands_sep\\28\\29\\20const\n8049:std::__2::numpunct<char>::do_grouping\\28\\29\\20const\n8050:std::__2::numpunct<char>::do_falsename\\28\\29\\20const\n8051:std::__2::numpunct<char>::do_decimal_point\\28\\29\\20const\n8052:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20void\\20const*\\29\\20const\n8053:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20unsigned\\20long\\29\\20const\n8054:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20unsigned\\20long\\20long\\29\\20const\n8055:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\29\\20const\n8056:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20long\\29\\20const\n8057:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20double\\29\\20const\n8058:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20double\\29\\20const\n8059:std::__2::num_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20bool\\29\\20const\n8060:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20void\\20const*\\29\\20const\n8061:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20unsigned\\20long\\29\\20const\n8062:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20unsigned\\20long\\20long\\29\\20const\n8063:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\29\\20const\n8064:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20long\\29\\20const\n8065:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20double\\29\\20const\n8066:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20double\\29\\20const\n8067:std::__2::num_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20bool\\29\\20const\n8068:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20void*&\\29\\20const\n8069:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20short&\\29\\20const\n8070:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20long\\20long&\\29\\20const\n8071:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20long&\\29\\20const\n8072:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n8073:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long&\\29\\20const\n8074:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20float&\\29\\20const\n8075:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20double&\\29\\20const\n8076:std::__2::num_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20bool&\\29\\20const\n8077:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20void*&\\29\\20const\n8078:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20short&\\29\\20const\n8079:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20unsigned\\20long\\20long&\\29\\20const\n8080:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20long&\\29\\20const\n8081:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n8082:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long&\\29\\20const\n8083:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20float&\\29\\20const\n8084:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20double&\\29\\20const\n8085:std::__2::num_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20bool&\\29\\20const\n8086:std::__2::money_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\29\\20const\n8087:std::__2::money_put<wchar_t\\2c\\20std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_put\\28std::__2::ostreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20wchar_t\\2c\\20long\\20double\\29\\20const\n8088:std::__2::money_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\\20const\n8089:std::__2::money_put<char\\2c\\20std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_put\\28std::__2::ostreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20char\\2c\\20long\\20double\\29\\20const\n8090:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>&\\29\\20const\n8091:std::__2::money_get<wchar_t\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>>::do_get\\28std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20std::__2::istreambuf_iterator<wchar_t\\2c\\20std::__2::char_traits<wchar_t>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n8092:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>&\\29\\20const\n8093:std::__2::money_get<char\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>>::do_get\\28std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20std::__2::istreambuf_iterator<char\\2c\\20std::__2::char_traits<char>>\\2c\\20bool\\2c\\20std::__2::ios_base&\\2c\\20unsigned\\20int&\\2c\\20long\\20double&\\29\\20const\n8094:std::__2::messages<wchar_t>::do_get\\28long\\2c\\20int\\2c\\20int\\2c\\20std::__2::basic_string<wchar_t\\2c\\20std::__2::char_traits<wchar_t>\\2c\\20std::__2::allocator<wchar_t>>\\20const&\\29\\20const\n8095:std::__2::messages<char>::do_get\\28long\\2c\\20int\\2c\\20int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\20const&\\29\\20const\n8096:std::__2::locale::id::__init\\28\\29\n8097:std::__2::locale::__imp::~__imp\\28\\29\n8098:std::__2::ios_base::~ios_base\\28\\29.1\n8099:std::__2::ctype<wchar_t>::do_widen\\28char\\20const*\\2c\\20char\\20const*\\2c\\20wchar_t*\\29\\20const\n8100:std::__2::ctype<wchar_t>::do_toupper\\28wchar_t\\29\\20const\n8101:std::__2::ctype<wchar_t>::do_toupper\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n8102:std::__2::ctype<wchar_t>::do_tolower\\28wchar_t\\29\\20const\n8103:std::__2::ctype<wchar_t>::do_tolower\\28wchar_t*\\2c\\20wchar_t\\20const*\\29\\20const\n8104:std::__2::ctype<wchar_t>::do_scan_not\\28unsigned\\20long\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n8105:std::__2::ctype<wchar_t>::do_scan_is\\28unsigned\\20long\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n8106:std::__2::ctype<wchar_t>::do_narrow\\28wchar_t\\2c\\20char\\29\\20const\n8107:std::__2::ctype<wchar_t>::do_narrow\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20char\\2c\\20char*\\29\\20const\n8108:std::__2::ctype<wchar_t>::do_is\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20unsigned\\20long*\\29\\20const\n8109:std::__2::ctype<wchar_t>::do_is\\28unsigned\\20long\\2c\\20wchar_t\\29\\20const\n8110:std::__2::ctype<char>::~ctype\\28\\29\n8111:std::__2::ctype<char>::do_widen\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char*\\29\\20const\n8112:std::__2::ctype<char>::do_toupper\\28char\\29\\20const\n8113:std::__2::ctype<char>::do_toupper\\28char*\\2c\\20char\\20const*\\29\\20const\n8114:std::__2::ctype<char>::do_tolower\\28char\\29\\20const\n8115:std::__2::ctype<char>::do_tolower\\28char*\\2c\\20char\\20const*\\29\\20const\n8116:std::__2::ctype<char>::do_narrow\\28char\\2c\\20char\\29\\20const\n8117:std::__2::ctype<char>::do_narrow\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\2c\\20char*\\29\\20const\n8118:std::__2::collate<wchar_t>::do_transform\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n8119:std::__2::collate<wchar_t>::do_hash\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n8120:std::__2::collate<wchar_t>::do_compare\\28wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\29\\20const\n8121:std::__2::collate<char>::do_transform\\28char\\20const*\\2c\\20char\\20const*\\29\\20const\n8122:std::__2::collate<char>::do_hash\\28char\\20const*\\2c\\20char\\20const*\\29\\20const\n8123:std::__2::collate<char>::do_compare\\28char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n8124:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::~codecvt\\28\\29\n8125:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_unshift\\28__mbstate_t&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n8126:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_out\\28__mbstate_t&\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*\\2c\\20wchar_t\\20const*&\\2c\\20char*\\2c\\20char*\\2c\\20char*&\\29\\20const\n8127:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_max_length\\28\\29\\20const\n8128:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n8129:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_in\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*&\\2c\\20wchar_t*\\2c\\20wchar_t*\\2c\\20wchar_t*&\\29\\20const\n8130:std::__2::codecvt<wchar_t\\2c\\20char\\2c\\20__mbstate_t>::do_encoding\\28\\29\\20const\n8131:std::__2::codecvt<char\\2c\\20char\\2c\\20__mbstate_t>::do_length\\28__mbstate_t&\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20unsigned\\20long\\29\\20const\n8132:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringbuf\\28\\29.1\n8133:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::underflow\\28\\29\n8134:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::seekpos\\28std::__2::fpos<__mbstate_t>\\2c\\20unsigned\\20int\\29\n8135:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::seekoff\\28long\\20long\\2c\\20std::__2::ios_base::seekdir\\2c\\20unsigned\\20int\\29\n8136:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::pbackfail\\28int\\29\n8137:std::__2::basic_stringbuf<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::overflow\\28int\\29\n8138:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::~basic_streambuf\\28\\29.1\n8139:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::xsputn\\28char\\20const*\\2c\\20long\\29\n8140:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::xsgetn\\28char*\\2c\\20long\\29\n8141:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::uflow\\28\\29\n8142:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::setbuf\\28char*\\2c\\20long\\29\n8143:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::seekpos\\28std::__2::fpos<__mbstate_t>\\2c\\20unsigned\\20int\\29\n8144:std::__2::basic_streambuf<char\\2c\\20std::__2::char_traits<char>>::seekoff\\28long\\20long\\2c\\20std::__2::ios_base::seekdir\\2c\\20unsigned\\20int\\29\n8145:std::__2::bad_function_call::what\\28\\29\\20const\n8146:std::__2::__time_get_c_storage<wchar_t>::__x\\28\\29\\20const\n8147:std::__2::__time_get_c_storage<wchar_t>::__weeks\\28\\29\\20const\n8148:std::__2::__time_get_c_storage<wchar_t>::__r\\28\\29\\20const\n8149:std::__2::__time_get_c_storage<wchar_t>::__months\\28\\29\\20const\n8150:std::__2::__time_get_c_storage<wchar_t>::__c\\28\\29\\20const\n8151:std::__2::__time_get_c_storage<wchar_t>::__am_pm\\28\\29\\20const\n8152:std::__2::__time_get_c_storage<wchar_t>::__X\\28\\29\\20const\n8153:std::__2::__time_get_c_storage<char>::__x\\28\\29\\20const\n8154:std::__2::__time_get_c_storage<char>::__weeks\\28\\29\\20const\n8155:std::__2::__time_get_c_storage<char>::__r\\28\\29\\20const\n8156:std::__2::__time_get_c_storage<char>::__months\\28\\29\\20const\n8157:std::__2::__time_get_c_storage<char>::__c\\28\\29\\20const\n8158:std::__2::__time_get_c_storage<char>::__am_pm\\28\\29\\20const\n8159:std::__2::__time_get_c_storage<char>::__X\\28\\29\\20const\n8160:std::__2::__shared_ptr_pointer<_IO_FILE*\\2c\\20void\\20\\28*\\29\\28_IO_FILE*\\29\\2c\\20std::__2::allocator<_IO_FILE>>::__on_zero_shared\\28\\29\n8161:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\\28\\29\n8162:std::__2::__shared_ptr_emplace<skia::textlayout::Run\\2c\\20std::__2::allocator<skia::textlayout::Run>>::__on_zero_shared\\28\\29\n8163:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\\28\\29\n8164:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\\2c\\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::__on_zero_shared\\28\\29\n8165:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\\2c\\20std::__2::allocator<SkUnicode_client::Data>>::~__shared_ptr_emplace\\28\\29\n8166:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\\2c\\20std::__2::allocator<SkUnicode_client::Data>>::__on_zero_shared\\28\\29\n8167:std::__2::__shared_ptr_emplace<SkSL::Context\\2c\\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\\28\\29\n8168:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8169:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8170:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8171:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8172:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8173:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_2::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8174:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8175:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8176:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8177:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8178:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8179:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_1::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8180:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8181:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8182:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8183:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8184:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8185:std::__2::__function::__func<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::paint\\28skia::textlayout::ParagraphPainter*\\2c\\20float\\2c\\20float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8186:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::Cluster\\20const*&&\\2c\\20unsigned\\20long&&\\2c\\20bool&&\\29\n8187:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n8188:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_1\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_1>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n8189:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::Cluster\\20const*&&\\2c\\20unsigned\\20long&&\\2c\\20bool&&\\29\n8190:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>*\\29\\20const\n8191:std::__2::__function::__func<skia::textlayout::TextLine::justify\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::justify\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Cluster\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29>::__clone\\28\\29\\20const\n8192:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8193:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8194:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8195:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8196:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8197:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\2c\\20std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8198:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8199:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8200:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\\28std::__2::vector<skia::textlayout::TextBox\\2c\\20std::__2::allocator<skia::textlayout::TextBox>>&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8201:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8202:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8203:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8204:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8205:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8206:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\\28\\29\\20const::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8207:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8208:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8209:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8210:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8211:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8212:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\\28float\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8213:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8214:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8215:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8216:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8217:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8218:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8219:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8220:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8221:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8222:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8223:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8224:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8225:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::operator\\28\\29\\28skia::textlayout::Run\\20const*&&\\2c\\20float&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float*&&\\29\n8226:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>*\\29\\20const\n8227:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0>\\2c\\20bool\\20\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29>::__clone\\28\\29\\20const\n8228:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\n8229:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>*\\29\\20const\n8230:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29>::__clone\\28\\29\\20const\n8231:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20float&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20SkPoint&&\\2c\\20SkPoint&&\\2c\\20skia::textlayout::InternalLineMetrics&&\\2c\\20bool&&\\29\n8232:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>*\\29\\20const\n8233:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\\28float\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPoint\\2c\\20SkPoint\\2c\\20skia::textlayout::InternalLineMetrics\\2c\\20bool\\29>::__clone\\28\\29\\20const\n8234:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::operator\\28\\29\\28skia::textlayout::Cluster*&&\\29\n8235:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::Cluster*\\29>*\\29\\20const\n8236:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::Cluster*\\29>::__clone\\28\\29\\20const\n8237:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>*\\29\\20const\n8238:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\\28\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::ParagraphImpl*\\2c\\20char\\20const*\\2c\\20bool\\29>::__clone\\28\\29\\20const\n8239:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\2c\\20SkSpan<skia::textlayout::Block>&&\\2c\\20float&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20char&&\\29\n8240:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28std::__2::__function::__base<float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>*\\29\\20const\n8241:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0>\\2c\\20float\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29>::__clone\\28\\29\\20const\n8242:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::operator\\28\\29\\28skia::textlayout::Block&&\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>&&\\29\n8243:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>*\\29\\20const\n8244:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>\\2c\\20void\\20\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29>::__clone\\28\\29\\20const\n8245:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::operator\\28\\29\\28sk_sp<SkTypeface>&&\\29\n8246:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::__clone\\28std::__2::__function::__base<skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>*\\29\\20const\n8247:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\\28\\29::$_0::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20SkSpan<skia::textlayout::Block>\\2c\\20float&\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char\\29\\20const::'lambda'\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29::operator\\28\\29\\28skia::textlayout::Block\\2c\\20skia_private::TArray<SkShaper::Feature\\2c\\20true>\\29\\20const::'lambda'\\28sk_sp<SkTypeface>\\29>\\2c\\20skia::textlayout::OneLineShaper::Resolved\\20\\28sk_sp<SkTypeface>\\29>::__clone\\28\\29\\20const\n8248:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>&&\\29\n8249:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::__clone\\28std::__2::__function::__base<void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>*\\29\\20const\n8250:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28skia::textlayout::SkRange<unsigned\\20long>\\29>::__clone\\28\\29\\20const\n8251:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\n8252:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28std::__2::__function::__base<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>*\\29\\20const\n8253:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\\28SkCanvas*\\2c\\20GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkStrikeDeviceInfo\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28\\29\\20const\n8254:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::~__func\\28\\29.1\n8255:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::operator\\28\\29\\28void*&&\\2c\\20void\\20const*&&\\29\n8256:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::destroy_deallocate\\28\\29\n8257:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::destroy\\28\\29\n8258:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28void*\\2c\\20void\\20const*\\29>*\\29\\20const\n8259:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\\28GrColorType\\2c\\20SkIRect\\20const&\\29::$_0>\\2c\\20void\\20\\28void*\\2c\\20void\\20const*\\29>::__clone\\28\\29\\20const\n8260:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n8261:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8262:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8263:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n8264:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8265:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\\28GrOpFlushState*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8266:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n8267:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n8268:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n8269:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n8270:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n8271:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n8272:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::operator\\28\\29\\28GrSurfaceProxy*&&\\2c\\20skgpu::Mipmapped&&\\29\n8273:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n8274:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\\28GrDrawingManager*\\2c\\20std::__2::unique_ptr<GrOp\\2c\\20std::__2::default_delete<GrOp>>\\2c\\20bool\\2c\\20GrProcessorSet::Analysis\\20const&\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrTextureResolveManager\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n8275:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::operator\\28\\29\\28sktext::gpu::AtlasSubRun\\20const*&&\\2c\\20SkPoint&&\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20sktext::gpu::RendererData&&\\29\n8276:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28std::__2::__function::__base<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>*\\29\\20const\n8277:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29::$_0>\\2c\\20void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>::__clone\\28\\29\\20const\n8278:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::operator\\28\\29\\28sktext::gpu::GlyphVector*&&\\2c\\20int&&\\2c\\20int&&\\2c\\20skgpu::MaskFormat&&\\2c\\20int&&\\29\n8279:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::__clone\\28std::__2::__function::__base<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>*\\29\\20const\n8280:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29::$_1>\\2c\\20std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>::__clone\\28\\29\\20const\n8281:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::operator\\28\\29\\28GrSurfaceProxy\\20const*&&\\29\n8282:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28GrSurfaceProxy\\20const*\\29>*\\29\\20const\n8283:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0\\2c\\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\\28skgpu::ganesh::SurfaceDrawContext\\20const*\\2c\\20GrOp\\20const*\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20SkIRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\29::$_0>\\2c\\20bool\\20\\28GrSurfaceProxy\\20const*\\29>::__clone\\28\\29\\20const\n8284:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20char\\20const*&&\\29\n8285:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20char\\20const*\\29>*\\29\\20const\n8286:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29\\2c\\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29::'lambda'\\28int\\2c\\20char\\20const*\\29>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28\\29\\20const\n8287:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n8288:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrOp>\\28GrOp\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n8289:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>*\\29\\20const\n8290:std::__2::__function::__func<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29\\2c\\20std::__2::allocator<bool\\20\\28anonymous\\20namespace\\29::refs_atlas<GrFragmentProcessor>\\28GrFragmentProcessor\\20const*\\2c\\20GrSurfaceProxy\\20const*\\29::'lambda'\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\2c\\20void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>::__clone\\28\\29\\20const\n8291:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n8292:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8293:std::__2::__function::__func<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::render_sw_mask\\28GrRecordingContext*\\2c\\20SkIRect\\20const&\\2c\\20skgpu::ganesh::ClipStack::Element\\20const**\\2c\\20int\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8294:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n8295:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8296:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_1>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8297:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8298:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint_bounds\\28SkMatrix*\\2c\\20SkRect*\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8299:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8300:std::__2::__function::__func<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::colrv1_traverse_paint\\28SkCanvas*\\2c\\20SkSpan<unsigned\\20int>\\20const&\\2c\\20unsigned\\20int\\2c\\20FT_FaceRec_*\\2c\\20FT_Opaque_Paint_\\2c\\20skia_private::THashSet<FT_Opaque_Paint_\\2c\\20\\28anonymous\\20namespace\\29::OpaquePaintHasher>*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8301:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n8302:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n8303:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n8304:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n8305:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n8306:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n8307:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n8308:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n8309:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::MeshGP\\28sk_sp<SkMeshSpecification>\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20SkMatrix\\20const&\\2c\\20std::__2::optional<SkRGBA4f<\\28SkAlphaType\\292>>\\20const&\\2c\\20bool\\2c\\20sk_sp<SkData\\20const>\\2c\\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>>\\29::'lambda'\\28GrTextureEffect\\20const&\\29>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n8310:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n8311:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n8312:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n8313:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n8314:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n8315:std::__2::__function::__func<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\\2c\\20std::__2::allocator<\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29::'lambda'\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n8316:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::~__func\\28\\29.1\n8317:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n8318:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::destroy_deallocate\\28\\29\n8319:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::destroy\\28\\29\n8320:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8321:std::__2::__function::__func<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0\\2c\\20std::__2::allocator<SkTaskGroup::add\\28std::__2::function<void\\20\\28\\29>\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8322:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::operator\\28\\29\\28int&&\\2c\\20char\\20const*&&\\29\n8323:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28std::__2::__function::__base<void\\20\\28int\\2c\\20char\\20const*\\29>*\\29\\20const\n8324:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0\\2c\\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\\28char\\20const*\\2c\\20char\\20const*\\29::$_0>\\2c\\20void\\20\\28int\\2c\\20char\\20const*\\29>::__clone\\28\\29\\20const\n8325:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\2c\\20unsigned\\20long&&\\29\n8326:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n8327:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_1\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_1>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n8328:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_0>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>*\\29\\20const\n8329:std::__2::__function::__func<SkRasterPipeline::compile\\28\\29\\20const::$_0\\2c\\20std::__2::allocator<SkRasterPipeline::compile\\28\\29\\20const::$_0>\\2c\\20void\\20\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n8330:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::operator\\28\\29\\28SkVertices\\20const*&&\\2c\\20SkBlendMode&&\\2c\\20SkPaint\\20const&\\2c\\20float&&\\2c\\20float&&\\2c\\20bool&&\\29\n8331:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::__clone\\28std::__2::__function::__base<void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>*\\29\\20const\n8332:std::__2::__function::__func<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkDevice::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29::$_0>\\2c\\20void\\20\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\29>::__clone\\28\\29\\20const\n8333:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::operator\\28\\29\\28SkIRect\\20const&\\29\n8334:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28SkIRect\\20const&\\29>*\\29\\20const\n8335:std::__2::__function::__func<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0\\2c\\20std::__2::allocator<SkBlitter::blitRegion\\28SkRegion\\20const&\\29::$_0>\\2c\\20void\\20\\28SkIRect\\20const&\\29>::__clone\\28\\29\\20const\n8336:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n8337:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n8338:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n8339:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n8340:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n8341:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0\\2c\\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\\28GrDirectContext*\\2c\\20GrColorType\\2c\\20SkISize\\2c\\20GrSurfaceOrigin\\2c\\20SkBackingFit\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n8342:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n8343:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n8344:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n8345:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n8346:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n8347:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20SkBackingFit\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n8348:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::~__func\\28\\29.1\n8349:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n8350:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy_deallocate\\28\\29\n8351:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::destroy\\28\\29\n8352:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n8353:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0\\2c\\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\\28SkBitmap\\20const&\\2c\\20skgpu::Budgeted\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n8354:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::operator\\28\\29\\28GrTextureProxy*&&\\2c\\20SkIRect&&\\2c\\20GrColorType&&\\2c\\20void\\20const*&&\\2c\\20unsigned\\20long&&\\29\n8355:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::__clone\\28std::__2::__function::__base<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>*\\29\\20const\n8356:std::__2::__function::__func<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0\\2c\\20std::__2::allocator<GrOpFlushState::doUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\2c\\20bool\\29::$_0>\\2c\\20bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>::__clone\\28\\29\\20const\n8357:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::operator\\28\\29\\28GrBackendTexture&&\\29\n8358:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0\\2c\\20std::__2::allocator<GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29::$_0>\\2c\\20void\\20\\28GrBackendTexture\\29>::__clone\\28\\29\\20const\n8359:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n8360:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n8361:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0\\2c\\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\2c\\20int*\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n8362:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::operator\\28\\29\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29\n8363:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>*\\29\\20const\n8364:std::__2::__function::__func<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::updateUniforms\\28GrRenderTarget\\20const*\\2c\\20GrProgramInfo\\20const&\\29::$_0>\\2c\\20void\\20\\28GrFragmentProcessor\\20const&\\2c\\20GrFragmentProcessor::ProgramImpl&\\29>::__clone\\28\\29\\20const\n8365:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n8366:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n8367:std::__2::__function::__func<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrGLProgram::bindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n8368:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::operator\\28\\29\\28\\29\n8369:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28std::__2::__function::__base<void\\20\\28\\29>*\\29\\20const\n8370:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0\\2c\\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\\28GrGLTexture::Desc\\20const&\\2c\\20int\\2c\\20GrGLRenderTarget::IDs*\\29::$_0>\\2c\\20void\\20\\28\\29>::__clone\\28\\29\\20const\n8371:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::operator\\28\\29\\28GrTextureEffect\\20const&\\29\n8372:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28GrTextureEffect\\20const&\\29>*\\29\\20const\n8373:std::__2::__function::__func<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0\\2c\\20std::__2::allocator<GrFragmentProcessor::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const::$_0>\\2c\\20void\\20\\28GrTextureEffect\\20const&\\29>::__clone\\28\\29\\20const\n8374:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::operator\\28\\29\\28GrResourceProvider*&&\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29\n8375:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>*\\29\\20const\n8376:std::__2::__function::__func<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0\\2c\\20std::__2::allocator<GrDynamicAtlas::reset\\28SkISize\\2c\\20GrCaps\\20const&\\29::$_0>\\2c\\20GrSurfaceProxy::LazyCallbackResult\\20\\28GrResourceProvider*\\2c\\20GrSurfaceProxy::LazySurfaceDesc\\20const&\\29>::__clone\\28\\29\\20const\n8377:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29.1\n8378:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n8379:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDrawOpAtlas::updatePlot\\28GrDeferredUploadTarget*\\2c\\20skgpu::AtlasLocator*\\2c\\20skgpu::Plot*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n8380:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::~__func\\28\\29.1\n8381:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n8382:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0\\2c\\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\\28GrResourceProvider*\\2c\\20GrDeferredUploadTarget*\\2c\\20int\\2c\\20int\\2c\\20void\\20const*\\2c\\20skgpu::AtlasLocator*\\29::$_0>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n8383:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::operator\\28\\29\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\n8384:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28std::__2::__function::__base<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>*\\29\\20const\n8385:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29\\2c\\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\\28GrOpFlushState*\\2c\\20GrTextureProxy*\\29::'lambda'\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>::__clone\\28\\29\\20const\n8386:stackSave\n8387:stackRestore\n8388:stackAlloc\n8389:srgb_to_hwb\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n8390:srcover_p\\28unsigned\\20char\\2c\\20unsigned\\20char\\29\n8391:sn_write\n8392:sktext::gpu::post_purge_blob_message\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n8393:sktext::gpu::TextBlob::~TextBlob\\28\\29.1\n8394:sktext::gpu::SlugImpl::~SlugImpl\\28\\29.1\n8395:sktext::gpu::SlugImpl::sourceBounds\\28\\29\\20const\n8396:sktext::gpu::SlugImpl::sourceBoundsWithOrigin\\28\\29\\20const\n8397:sktext::gpu::SlugImpl::doFlatten\\28SkWriteBuffer&\\29\\20const\n8398:sktext::gpu::SDFMaskFilterImpl::getTypeName\\28\\29\\20const\n8399:sktext::gpu::SDFMaskFilterImpl::filterMask\\28SkMaskBuilder*\\2c\\20SkMask\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\29\\20const\n8400:sktext::gpu::SDFMaskFilterImpl::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n8401:skif::\\28anonymous\\20namespace\\29::RasterBackend::~RasterBackend\\28\\29\n8402:skif::\\28anonymous\\20namespace\\29::RasterBackend::makeImage\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\29\\20const\n8403:skif::\\28anonymous\\20namespace\\29::RasterBackend::makeDevice\\28SkISize\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const*\\29\\20const\n8404:skif::\\28anonymous\\20namespace\\29::RasterBackend::getCachedBitmap\\28SkBitmap\\20const&\\29\\20const\n8405:skif::\\28anonymous\\20namespace\\29::GaneshBackend::makeImage\\28SkIRect\\20const&\\2c\\20sk_sp<SkImage>\\29\\20const\n8406:skif::\\28anonymous\\20namespace\\29::GaneshBackend::makeDevice\\28SkISize\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkSurfaceProps\\20const*\\29\\20const\n8407:skif::\\28anonymous\\20namespace\\29::GaneshBackend::getCachedBitmap\\28SkBitmap\\20const&\\29\\20const\n8408:skif::\\28anonymous\\20namespace\\29::GaneshBackend::getBlurEngine\\28\\29\\20const\n8409:skif::\\28anonymous\\20namespace\\29::GaneshBackend::findAlgorithm\\28SkSize\\2c\\20SkColorType\\29\\20const\n8410:skia_png_zfree\n8411:skia_png_zalloc\n8412:skia_png_set_read_fn\n8413:skia_png_set_expand_gray_1_2_4_to_8\n8414:skia_png_read_start_row\n8415:skia_png_read_finish_row\n8416:skia_png_handle_zTXt\n8417:skia_png_handle_unknown\n8418:skia_png_handle_tRNS\n8419:skia_png_handle_tIME\n8420:skia_png_handle_tEXt\n8421:skia_png_handle_sRGB\n8422:skia_png_handle_sPLT\n8423:skia_png_handle_sCAL\n8424:skia_png_handle_sBIT\n8425:skia_png_handle_pHYs\n8426:skia_png_handle_pCAL\n8427:skia_png_handle_oFFs\n8428:skia_png_handle_iTXt\n8429:skia_png_handle_iCCP\n8430:skia_png_handle_hIST\n8431:skia_png_handle_gAMA\n8432:skia_png_handle_cHRM\n8433:skia_png_handle_bKGD\n8434:skia_png_handle_PLTE\n8435:skia_png_handle_IHDR\n8436:skia_png_handle_IEND\n8437:skia_png_get_IHDR\n8438:skia_png_do_read_transformations\n8439:skia_png_destroy_read_struct\n8440:skia_png_default_read_data\n8441:skia_png_create_png_struct\n8442:skia_png_combine_row\n8443:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\\28\\29.1\n8444:skia::textlayout::TypefaceFontStyleSet::getStyle\\28int\\2c\\20SkFontStyle*\\2c\\20SkString*\\29\n8445:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\\28\\29.1\n8446:skia::textlayout::TypefaceFontProvider::onMatchFamily\\28char\\20const*\\29\\20const\n8447:skia::textlayout::TypefaceFontProvider::onMatchFamilyStyle\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\29\\20const\n8448:skia::textlayout::TypefaceFontProvider::onGetFamilyName\\28int\\2c\\20SkString*\\29\\20const\n8449:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::~ShapeHandler\\28\\29.1\n8450:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::runBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n8451:skia::textlayout::TextLine::shapeEllipsis\\28SkString\\20const&\\2c\\20skia::textlayout::Cluster\\20const*\\29::ShapeHandler::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n8452:skia::textlayout::ParagraphImpl::~ParagraphImpl\\28\\29.1\n8453:skia::textlayout::ParagraphImpl::visit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::VisitorInfo\\20const*\\29>\\20const&\\29\n8454:skia::textlayout::ParagraphImpl::updateTextAlign\\28skia::textlayout::TextAlign\\29\n8455:skia::textlayout::ParagraphImpl::updateForegroundPaint\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\29\n8456:skia::textlayout::ParagraphImpl::updateFontSize\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20float\\29\n8457:skia::textlayout::ParagraphImpl::updateBackgroundPaint\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkPaint\\29\n8458:skia::textlayout::ParagraphImpl::unresolvedGlyphs\\28\\29\n8459:skia::textlayout::ParagraphImpl::unresolvedCodepoints\\28\\29\n8460:skia::textlayout::ParagraphImpl::paint\\28SkCanvas*\\2c\\20float\\2c\\20float\\29\n8461:skia::textlayout::ParagraphImpl::markDirty\\28\\29\n8462:skia::textlayout::ParagraphImpl::lineNumber\\28\\29\n8463:skia::textlayout::ParagraphImpl::layout\\28float\\29\n8464:skia::textlayout::ParagraphImpl::getWordBoundary\\28unsigned\\20int\\29\n8465:skia::textlayout::ParagraphImpl::getRectsForRange\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20skia::textlayout::RectHeightStyle\\2c\\20skia::textlayout::RectWidthStyle\\29\n8466:skia::textlayout::ParagraphImpl::getRectsForPlaceholders\\28\\29\n8467:skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29::$_0::operator\\28\\29\\28skia::textlayout::Run\\20const*\\2c\\20float\\2c\\20skia::textlayout::SkRange<unsigned\\20long>\\2c\\20float*\\29\\20const::'lambda'\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29::operator\\28\\29\\28skia::textlayout::SkRange<unsigned\\20long>\\2c\\20skia::textlayout::TextStyle\\20const&\\2c\\20skia::textlayout::TextLine::ClipContext\\20const&\\29\\20const::'lambda'\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29::__invoke\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\n8468:skia::textlayout::ParagraphImpl::getPath\\28int\\2c\\20SkPath*\\29\n8469:skia::textlayout::ParagraphImpl::getLineNumberAtUTF16Offset\\28unsigned\\20long\\29\n8470:skia::textlayout::ParagraphImpl::getLineMetrics\\28std::__2::vector<skia::textlayout::LineMetrics\\2c\\20std::__2::allocator<skia::textlayout::LineMetrics>>&\\29\n8471:skia::textlayout::ParagraphImpl::getLineMetricsAt\\28int\\2c\\20skia::textlayout::LineMetrics*\\29\\20const\n8472:skia::textlayout::ParagraphImpl::getFonts\\28\\29\\20const\n8473:skia::textlayout::ParagraphImpl::getFontAt\\28unsigned\\20long\\29\\20const\n8474:skia::textlayout::ParagraphImpl::getFontAtUTF16Offset\\28unsigned\\20long\\29\n8475:skia::textlayout::ParagraphImpl::getClosestUTF16GlyphInfoAt\\28float\\2c\\20float\\2c\\20skia::textlayout::Paragraph::GlyphInfo*\\29\n8476:skia::textlayout::ParagraphImpl::getClosestGlyphClusterAt\\28float\\2c\\20float\\2c\\20skia::textlayout::Paragraph::GlyphClusterInfo*\\29\n8477:skia::textlayout::ParagraphImpl::getActualTextRange\\28int\\2c\\20bool\\29\\20const\n8478:skia::textlayout::ParagraphImpl::extendedVisit\\28std::__2::function<void\\20\\28int\\2c\\20skia::textlayout::Paragraph::ExtendedVisitorInfo\\20const*\\29>\\20const&\\29\n8479:skia::textlayout::ParagraphImpl::containsEmoji\\28SkTextBlob*\\29\n8480:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\\28SkTextBlob*\\29::$_0::__invoke\\28SkPath\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20void*\\29\n8481:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\\28SkTextBlob*\\29\n8482:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\\28\\29.1\n8483:skia::textlayout::ParagraphBuilderImpl::setWordsUtf8\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n8484:skia::textlayout::ParagraphBuilderImpl::setWordsUtf16\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n8485:skia::textlayout::ParagraphBuilderImpl::setLineBreaksUtf8\\28std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>\\29\n8486:skia::textlayout::ParagraphBuilderImpl::setLineBreaksUtf16\\28std::__2::vector<SkUnicode::LineBreakBefore\\2c\\20std::__2::allocator<SkUnicode::LineBreakBefore>>\\29\n8487:skia::textlayout::ParagraphBuilderImpl::setGraphemeBreaksUtf8\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n8488:skia::textlayout::ParagraphBuilderImpl::setGraphemeBreaksUtf16\\28std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>\\29\n8489:skia::textlayout::ParagraphBuilderImpl::pushStyle\\28skia::textlayout::TextStyle\\20const&\\29\n8490:skia::textlayout::ParagraphBuilderImpl::pop\\28\\29\n8491:skia::textlayout::ParagraphBuilderImpl::peekStyle\\28\\29\n8492:skia::textlayout::ParagraphBuilderImpl::getText\\28\\29\n8493:skia::textlayout::ParagraphBuilderImpl::getParagraphStyle\\28\\29\\20const\n8494:skia::textlayout::ParagraphBuilderImpl::addText\\28std::__2::basic_string<char16_t\\2c\\20std::__2::char_traits<char16_t>\\2c\\20std::__2::allocator<char16_t>>\\20const&\\29\n8495:skia::textlayout::ParagraphBuilderImpl::addText\\28char\\20const*\\2c\\20unsigned\\20long\\29\n8496:skia::textlayout::ParagraphBuilderImpl::addText\\28char\\20const*\\29\n8497:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\\28skia::textlayout::PlaceholderStyle\\20const&\\29\n8498:skia::textlayout::ParagraphBuilderImpl::SetUnicode\\28sk_sp<SkUnicode>\\29\n8499:skia::textlayout::ParagraphBuilderImpl::Reset\\28\\29\n8500:skia::textlayout::ParagraphBuilderImpl::Build\\28\\29\n8501:skia::textlayout::Paragraph::FontInfo::~FontInfo\\28\\29.1\n8502:skia::textlayout::OneLineShaper::~OneLineShaper\\28\\29.1\n8503:skia::textlayout::OneLineShaper::runBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n8504:skia::textlayout::OneLineShaper::commitRunBuffer\\28SkShaper::RunHandler::RunInfo\\20const&\\29\n8505:skia::textlayout::LangIterator::~LangIterator\\28\\29.1\n8506:skia::textlayout::LangIterator::~LangIterator\\28\\29\n8507:skia::textlayout::LangIterator::endOfCurrentRun\\28\\29\\20const\n8508:skia::textlayout::LangIterator::currentLanguage\\28\\29\\20const\n8509:skia::textlayout::LangIterator::consume\\28\\29\n8510:skia::textlayout::LangIterator::atEnd\\28\\29\\20const\n8511:skia::textlayout::FontCollection::~FontCollection\\28\\29.1\n8512:skia::textlayout::CanvasParagraphPainter::translate\\28float\\2c\\20float\\29\n8513:skia::textlayout::CanvasParagraphPainter::save\\28\\29\n8514:skia::textlayout::CanvasParagraphPainter::restore\\28\\29\n8515:skia::textlayout::CanvasParagraphPainter::drawTextShadow\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20unsigned\\20int\\2c\\20float\\29\n8516:skia::textlayout::CanvasParagraphPainter::drawTextBlob\\28sk_sp<SkTextBlob>\\20const&\\2c\\20float\\2c\\20float\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n8517:skia::textlayout::CanvasParagraphPainter::drawRect\\28SkRect\\20const&\\2c\\20std::__2::variant<SkPaint\\2c\\20int>\\20const&\\29\n8518:skia::textlayout::CanvasParagraphPainter::drawPath\\28SkPath\\20const&\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n8519:skia::textlayout::CanvasParagraphPainter::drawLine\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n8520:skia::textlayout::CanvasParagraphPainter::drawFilledRect\\28SkRect\\20const&\\2c\\20skia::textlayout::ParagraphPainter::DecorationStyle\\20const&\\29\n8521:skia::textlayout::CanvasParagraphPainter::clipRect\\28SkRect\\20const&\\29\n8522:skgpu::tess::FixedCountWedges::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n8523:skgpu::tess::FixedCountWedges::WriteIndexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n8524:skgpu::tess::FixedCountStrokes::WriteVertexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n8525:skgpu::tess::FixedCountCurves::WriteIndexBuffer\\28skgpu::VertexWriter\\2c\\20unsigned\\20long\\29\n8526:skgpu::ganesh::texture_proxy_view_from_planes\\28GrRecordingContext*\\2c\\20SkImage_Lazy\\20const*\\2c\\20skgpu::Budgeted\\29::$_0::__invoke\\28void*\\2c\\20void*\\29\n8527:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::~SmallPathOp\\28\\29.1\n8528:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8529:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8530:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8531:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8532:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::name\\28\\29\\20const\n8533:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::fixedFunctionFlags\\28\\29\\20const\n8534:skgpu::ganesh::\\28anonymous\\20namespace\\29::SmallPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8535:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::name\\28\\29\\20const\n8536:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8537:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8538:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8539:skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8540:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::~HullShader\\28\\29.1\n8541:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::name\\28\\29\\20const\n8542:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8543:skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8544:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\\28\\29.1\n8545:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8546:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8547:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8548:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8549:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8550:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::name\\28\\29\\20const\n8551:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::fixedFunctionFlags\\28\\29\\20const\n8552:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAFlatteningConvexPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8553:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::~AAConvexPathOp\\28\\29.1\n8554:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8555:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8556:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8557:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8558:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8559:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::name\\28\\29\\20const\n8560:skgpu::ganesh::\\28anonymous\\20namespace\\29::AAConvexPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8561:skgpu::ganesh::TriangulatingPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8562:skgpu::ganesh::TriangulatingPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8563:skgpu::ganesh::TriangulatingPathRenderer::name\\28\\29\\20const\n8564:skgpu::ganesh::TessellationPathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n8565:skgpu::ganesh::TessellationPathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n8566:skgpu::ganesh::TessellationPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8567:skgpu::ganesh::TessellationPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8568:skgpu::ganesh::TessellationPathRenderer::name\\28\\29\\20const\n8569:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\\28\\29\n8570:skgpu::ganesh::SurfaceDrawContext::willReplaceOpsTask\\28skgpu::ganesh::OpsTask*\\2c\\20skgpu::ganesh::OpsTask*\\29\n8571:skgpu::ganesh::SurfaceDrawContext::canDiscardPreviousOpsOnFullClear\\28\\29\\20const\n8572:skgpu::ganesh::SurfaceContext::~SurfaceContext\\28\\29.1\n8573:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\\28GrDirectContext*\\2c\\20SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\20const&\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n8574:skgpu::ganesh::SurfaceContext::asyncReadPixels\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\2c\\20SkColorType\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n8575:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\\28\\29.1\n8576:skgpu::ganesh::StrokeTessellateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8577:skgpu::ganesh::StrokeTessellateOp::usesStencil\\28\\29\\20const\n8578:skgpu::ganesh::StrokeTessellateOp::onPrepare\\28GrOpFlushState*\\29\n8579:skgpu::ganesh::StrokeTessellateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8580:skgpu::ganesh::StrokeTessellateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8581:skgpu::ganesh::StrokeTessellateOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8582:skgpu::ganesh::StrokeTessellateOp::name\\28\\29\\20const\n8583:skgpu::ganesh::StrokeTessellateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8584:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\\28\\29.1\n8585:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8586:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::programInfo\\28\\29\n8587:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8588:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8589:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8590:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::name\\28\\29\\20const\n8591:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::NonAAStrokeRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8592:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::~AAStrokeRectOp\\28\\29.1\n8593:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8594:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::programInfo\\28\\29\n8595:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8596:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8597:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8598:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8599:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::name\\28\\29\\20const\n8600:skgpu::ganesh::StrokeRectOp::\\28anonymous\\20namespace\\29::AAStrokeRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8601:skgpu::ganesh::StencilClip::~StencilClip\\28\\29.1\n8602:skgpu::ganesh::StencilClip::~StencilClip\\28\\29\n8603:skgpu::ganesh::StencilClip::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n8604:skgpu::ganesh::StencilClip::getConservativeBounds\\28\\29\\20const\n8605:skgpu::ganesh::StencilClip::apply\\28GrAppliedHardClip*\\2c\\20SkIRect*\\29\\20const\n8606:skgpu::ganesh::SoftwarePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8607:skgpu::ganesh::SoftwarePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8608:skgpu::ganesh::SoftwarePathRenderer::name\\28\\29\\20const\n8609:skgpu::ganesh::SmallPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8610:skgpu::ganesh::SmallPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8611:skgpu::ganesh::SmallPathRenderer::name\\28\\29\\20const\n8612:skgpu::ganesh::SmallPathAtlasMgr::postFlush\\28skgpu::AtlasToken\\29\n8613:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::~RegionOpImpl\\28\\29.1\n8614:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8615:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::programInfo\\28\\29\n8616:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8617:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8618:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8619:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8620:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::name\\28\\29\\20const\n8621:skgpu::ganesh::RegionOp::\\28anonymous\\20namespace\\29::RegionOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8622:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_quad_generic\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8623:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8624:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8625:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_cov_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8626:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_cov_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8627:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color_uv_strict\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8628:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color_uv\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8629:skgpu::ganesh::QuadPerEdgeAA::\\28anonymous\\20namespace\\29::write_2d_color\\28skgpu::VertexWriter*\\2c\\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\\20const&\\2c\\20GrQuad\\20const*\\2c\\20GrQuad\\20const*\\2c\\20float\\20const*\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\29\n8630:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\\28\\29.1\n8631:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::onTextureSampler\\28int\\29\\20const\n8632:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::name\\28\\29\\20const\n8633:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8634:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8635:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8636:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8637:skgpu::ganesh::PathWedgeTessellator::prepare\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n8638:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\\28\\29.1\n8639:skgpu::ganesh::PathTessellateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8640:skgpu::ganesh::PathTessellateOp::usesStencil\\28\\29\\20const\n8641:skgpu::ganesh::PathTessellateOp::onPrepare\\28GrOpFlushState*\\29\n8642:skgpu::ganesh::PathTessellateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8643:skgpu::ganesh::PathTessellateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8644:skgpu::ganesh::PathTessellateOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8645:skgpu::ganesh::PathTessellateOp::name\\28\\29\\20const\n8646:skgpu::ganesh::PathTessellateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8647:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\\28\\29.1\n8648:skgpu::ganesh::PathStencilCoverOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8649:skgpu::ganesh::PathStencilCoverOp::onPrepare\\28GrOpFlushState*\\29\n8650:skgpu::ganesh::PathStencilCoverOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8651:skgpu::ganesh::PathStencilCoverOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8652:skgpu::ganesh::PathStencilCoverOp::name\\28\\29\\20const\n8653:skgpu::ganesh::PathStencilCoverOp::fixedFunctionFlags\\28\\29\\20const\n8654:skgpu::ganesh::PathStencilCoverOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8655:skgpu::ganesh::PathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n8656:skgpu::ganesh::PathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n8657:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\\28\\29.1\n8658:skgpu::ganesh::PathInnerTriangulateOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8659:skgpu::ganesh::PathInnerTriangulateOp::onPrepare\\28GrOpFlushState*\\29\n8660:skgpu::ganesh::PathInnerTriangulateOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8661:skgpu::ganesh::PathInnerTriangulateOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8662:skgpu::ganesh::PathInnerTriangulateOp::name\\28\\29\\20const\n8663:skgpu::ganesh::PathInnerTriangulateOp::fixedFunctionFlags\\28\\29\\20const\n8664:skgpu::ganesh::PathInnerTriangulateOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8665:skgpu::ganesh::PathCurveTessellator::prepare\\28GrMeshDrawTarget*\\2c\\20SkMatrix\\20const&\\2c\\20skgpu::ganesh::PathTessellator::PathDrawList\\20const&\\2c\\20int\\29\n8666:skgpu::ganesh::OpsTask::~OpsTask\\28\\29.1\n8667:skgpu::ganesh::OpsTask::onPrepare\\28GrOpFlushState*\\29\n8668:skgpu::ganesh::OpsTask::onPrePrepare\\28GrRecordingContext*\\29\n8669:skgpu::ganesh::OpsTask::onMakeSkippable\\28\\29\n8670:skgpu::ganesh::OpsTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n8671:skgpu::ganesh::OpsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n8672:skgpu::ganesh::OpsTask::endFlush\\28GrDrawingManager*\\29\n8673:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::~NonAALatticeOp\\28\\29.1\n8674:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8675:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8676:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8677:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8678:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8679:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::name\\28\\29\\20const\n8680:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::NonAALatticeOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8681:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::~LatticeGP\\28\\29.1\n8682:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::onTextureSampler\\28int\\29\\20const\n8683:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::name\\28\\29\\20const\n8684:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8685:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8686:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8687:skgpu::ganesh::LatticeOp::\\28anonymous\\20namespace\\29::LatticeGP::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8688:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::~FillRRectOpImpl\\28\\29.1\n8689:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8690:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::programInfo\\28\\29\n8691:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8692:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8693:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8694:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8695:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::name\\28\\29\\20const\n8696:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8697:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::clipToShape\\28skgpu::ganesh::SurfaceDrawContext*\\2c\\20SkClipOp\\2c\\20SkMatrix\\20const&\\2c\\20GrShape\\20const&\\2c\\20GrAA\\29\n8698:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::~Processor\\28\\29.1\n8699:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::~Processor\\28\\29\n8700:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::name\\28\\29\\20const\n8701:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8702:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n8703:skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8704:skgpu::ganesh::DrawableOp::~DrawableOp\\28\\29.1\n8705:skgpu::ganesh::DrawableOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8706:skgpu::ganesh::DrawableOp::name\\28\\29\\20const\n8707:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\\28\\29.1\n8708:skgpu::ganesh::DrawAtlasPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8709:skgpu::ganesh::DrawAtlasPathOp::onPrepare\\28GrOpFlushState*\\29\n8710:skgpu::ganesh::DrawAtlasPathOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8711:skgpu::ganesh::DrawAtlasPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8712:skgpu::ganesh::DrawAtlasPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8713:skgpu::ganesh::DrawAtlasPathOp::name\\28\\29\\20const\n8714:skgpu::ganesh::DrawAtlasPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8715:skgpu::ganesh::Device::~Device\\28\\29.1\n8716:skgpu::ganesh::Device::strikeDeviceInfo\\28\\29\\20const\n8717:skgpu::ganesh::Device::snapSpecial\\28SkIRect\\20const&\\2c\\20bool\\29\n8718:skgpu::ganesh::Device::snapSpecialScaled\\28SkIRect\\20const&\\2c\\20SkISize\\20const&\\29\n8719:skgpu::ganesh::Device::replaceClip\\28SkIRect\\20const&\\29\n8720:skgpu::ganesh::Device::recordingContext\\28\\29\\20const\n8721:skgpu::ganesh::Device::pushClipStack\\28\\29\n8722:skgpu::ganesh::Device::popClipStack\\28\\29\n8723:skgpu::ganesh::Device::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n8724:skgpu::ganesh::Device::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n8725:skgpu::ganesh::Device::onDrawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n8726:skgpu::ganesh::Device::onClipShader\\28sk_sp<SkShader>\\29\n8727:skgpu::ganesh::Device::makeSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n8728:skgpu::ganesh::Device::makeSpecial\\28SkImage\\20const*\\29\n8729:skgpu::ganesh::Device::isClipWideOpen\\28\\29\\20const\n8730:skgpu::ganesh::Device::isClipRect\\28\\29\\20const\n8731:skgpu::ganesh::Device::isClipEmpty\\28\\29\\20const\n8732:skgpu::ganesh::Device::isClipAntiAliased\\28\\29\\20const\n8733:skgpu::ganesh::Device::drawVertices\\28SkVertices\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n8734:skgpu::ganesh::Device::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n8735:skgpu::ganesh::Device::drawShadow\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n8736:skgpu::ganesh::Device::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n8737:skgpu::ganesh::Device::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n8738:skgpu::ganesh::Device::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n8739:skgpu::ganesh::Device::drawPaint\\28SkPaint\\20const&\\29\n8740:skgpu::ganesh::Device::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n8741:skgpu::ganesh::Device::drawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n8742:skgpu::ganesh::Device::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n8743:skgpu::ganesh::Device::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const&\\29\n8744:skgpu::ganesh::Device::drawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n8745:skgpu::ganesh::Device::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n8746:skgpu::ganesh::Device::drawDrawable\\28SkCanvas*\\2c\\20SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n8747:skgpu::ganesh::Device::drawDevice\\28SkDevice*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n8748:skgpu::ganesh::Device::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n8749:skgpu::ganesh::Device::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n8750:skgpu::ganesh::Device::drawAsTiledImageRect\\28SkCanvas*\\2c\\20SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n8751:skgpu::ganesh::Device::drawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n8752:skgpu::ganesh::Device::devClipBounds\\28\\29\\20const\n8753:skgpu::ganesh::Device::createImageFilteringBackend\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\29\\20const\n8754:skgpu::ganesh::Device::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n8755:skgpu::ganesh::Device::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n8756:skgpu::ganesh::Device::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n8757:skgpu::ganesh::Device::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n8758:skgpu::ganesh::Device::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n8759:skgpu::ganesh::Device::android_utils_clipWithStencil\\28\\29\n8760:skgpu::ganesh::DefaultPathRenderer::onStencilPath\\28skgpu::ganesh::PathRenderer::StencilPathArgs\\20const&\\29\n8761:skgpu::ganesh::DefaultPathRenderer::onGetStencilSupport\\28GrStyledShape\\20const&\\29\\20const\n8762:skgpu::ganesh::DefaultPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8763:skgpu::ganesh::DefaultPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8764:skgpu::ganesh::DefaultPathRenderer::name\\28\\29\\20const\n8765:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::name\\28\\29\\20const\n8766:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8767:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8768:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingLineEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8769:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::name\\28\\29\\20const\n8770:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n8771:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n8772:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashingCircleEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n8773:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::~DashOpImpl\\28\\29.1\n8774:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8775:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::programInfo\\28\\29\n8776:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8777:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8778:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n8779:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8780:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::name\\28\\29\\20const\n8781:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::fixedFunctionFlags\\28\\29\\20const\n8782:skgpu::ganesh::DashOp::\\28anonymous\\20namespace\\29::DashOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8783:skgpu::ganesh::DashLinePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8784:skgpu::ganesh::DashLinePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8785:skgpu::ganesh::DashLinePathRenderer::name\\28\\29\\20const\n8786:skgpu::ganesh::ClipStack::~ClipStack\\28\\29.1\n8787:skgpu::ganesh::ClipStack::preApply\\28SkRect\\20const&\\2c\\20GrAA\\29\\20const\n8788:skgpu::ganesh::ClipStack::apply\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrDrawOp*\\2c\\20GrAAType\\2c\\20GrAppliedClip*\\2c\\20SkRect*\\29\\20const\n8789:skgpu::ganesh::ClearOp::~ClearOp\\28\\29\n8790:skgpu::ganesh::ClearOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8791:skgpu::ganesh::ClearOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8792:skgpu::ganesh::ClearOp::name\\28\\29\\20const\n8793:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\\28\\29.1\n8794:skgpu::ganesh::AtlasTextOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n8795:skgpu::ganesh::AtlasTextOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n8796:skgpu::ganesh::AtlasTextOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n8797:skgpu::ganesh::AtlasTextOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n8798:skgpu::ganesh::AtlasTextOp::name\\28\\29\\20const\n8799:skgpu::ganesh::AtlasTextOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n8800:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\\28\\29.1\n8801:skgpu::ganesh::AtlasRenderTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n8802:skgpu::ganesh::AtlasRenderTask::onExecute\\28GrOpFlushState*\\29\n8803:skgpu::ganesh::AtlasPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8804:skgpu::ganesh::AtlasPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8805:skgpu::ganesh::AtlasPathRenderer::name\\28\\29\\20const\n8806:skgpu::ganesh::AALinearizingConvexPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8807:skgpu::ganesh::AALinearizingConvexPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8808:skgpu::ganesh::AALinearizingConvexPathRenderer::name\\28\\29\\20const\n8809:skgpu::ganesh::AAHairLinePathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8810:skgpu::ganesh::AAHairLinePathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8811:skgpu::ganesh::AAHairLinePathRenderer::name\\28\\29\\20const\n8812:skgpu::ganesh::AAConvexPathRenderer::onDrawPath\\28skgpu::ganesh::PathRenderer::DrawPathArgs\\20const&\\29\n8813:skgpu::ganesh::AAConvexPathRenderer::onCanDrawPath\\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\\20const&\\29\\20const\n8814:skgpu::ganesh::AAConvexPathRenderer::name\\28\\29\\20const\n8815:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\\28\\29.1\n8816:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::rowBytes\\28int\\29\\20const\n8817:skgpu::TAsyncReadResult<GrGpuBuffer\\2c\\20GrDirectContext::DirectContextID\\2c\\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::data\\28int\\29\\20const\n8818:skgpu::StringKeyBuilder::~StringKeyBuilder\\28\\29.1\n8819:skgpu::StringKeyBuilder::appendComment\\28char\\20const*\\29\n8820:skgpu::StringKeyBuilder::addBits\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n8821:skgpu::ShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n8822:skgpu::RectanizerSkyline::~RectanizerSkyline\\28\\29.1\n8823:skgpu::RectanizerSkyline::~RectanizerSkyline\\28\\29\n8824:skgpu::RectanizerSkyline::percentFull\\28\\29\\20const\n8825:skgpu::RectanizerPow2::reset\\28\\29\n8826:skgpu::RectanizerPow2::percentFull\\28\\29\\20const\n8827:skgpu::RectanizerPow2::addRect\\28int\\2c\\20int\\2c\\20SkIPoint16*\\29\n8828:skgpu::Plot::~Plot\\28\\29.1\n8829:skgpu::KeyBuilder::~KeyBuilder\\28\\29\n8830:skgpu::DefaultShaderErrorHandler\\28\\29::DefaultShaderErrorHandler::compileError\\28char\\20const*\\2c\\20char\\20const*\\29\n8831:sk_mmap_releaseproc\\28void\\20const*\\2c\\20void*\\29\n8832:sk_ft_stream_io\\28FT_StreamRec_*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20char*\\2c\\20unsigned\\20long\\29\n8833:sk_ft_realloc\\28FT_MemoryRec_*\\2c\\20long\\2c\\20long\\2c\\20void*\\29\n8834:sk_ft_alloc\\28FT_MemoryRec_*\\2c\\20long\\29\n8835:sk_fclose\\28_IO_FILE*\\29\n8836:skString_getData\n8837:skString_free\n8838:skString_allocate\n8839:skString16_getData\n8840:skString16_free\n8841:skString16_allocate\n8842:skData_dispose\n8843:skData_create\n8844:shader_createSweepGradient\n8845:shader_createRuntimeEffectShader\n8846:shader_createRadialGradient\n8847:shader_createLinearGradient\n8848:shader_createFromImage\n8849:shader_createConicalGradient\n8850:sfnt_table_info\n8851:sfnt_stream_close\n8852:sfnt_load_face\n8853:sfnt_is_postscript\n8854:sfnt_is_alphanumeric\n8855:sfnt_init_face\n8856:sfnt_get_ps_name\n8857:sfnt_get_name_index\n8858:sfnt_get_interface\n8859:sfnt_get_glyph_name\n8860:sfnt_get_charset_id\n8861:sfnt_done_face\n8862:setup_syllables_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8863:setup_syllables_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8864:setup_syllables_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8865:setup_syllables_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8866:setup_masks_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8867:setup_masks_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8868:setup_masks_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8869:setup_masks_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8870:setup_masks_hangul\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8871:setup_masks_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8872:runtimeEffect_getUniformSize\n8873:runtimeEffect_create\n8874:reverse_hit_compare_y\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n8875:reverse_hit_compare_x\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n8876:reorder_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8877:reorder_myanmar\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8878:reorder_marks_hebrew\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n8879:reorder_marks_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n8880:reorder_khmer\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8881:release_data\\28void*\\2c\\20void*\\29\n8882:rect_memcpy\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkColorSpaceXformSteps\\20const&\\29\n8883:record_stch\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8884:record_rphf_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8885:record_pref_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n8886:receive_notification\n8887:read_data_from_FT_Stream\n8888:pthread_self\n8889:psnames_get_service\n8890:pshinter_get_t2_funcs\n8891:pshinter_get_t1_funcs\n8892:pshinter_get_globals_funcs\n8893:psh_globals_new\n8894:psh_globals_destroy\n8895:psaux_get_glyph_name\n8896:ps_table_release\n8897:ps_table_new\n8898:ps_table_done\n8899:ps_table_add\n8900:ps_property_set\n8901:ps_property_get\n8902:ps_parser_to_int\n8903:ps_parser_to_fixed_array\n8904:ps_parser_to_fixed\n8905:ps_parser_to_coord_array\n8906:ps_parser_to_bytes\n8907:ps_parser_load_field_table\n8908:ps_parser_init\n8909:ps_hints_t2mask\n8910:ps_hints_t2counter\n8911:ps_hints_t1stem3\n8912:ps_hints_t1reset\n8913:ps_hints_close\n8914:ps_hints_apply\n8915:ps_hinter_init\n8916:ps_hinter_done\n8917:ps_get_standard_strings\n8918:ps_get_macintosh_name\n8919:ps_decoder_init\n8920:preprocess_text_use\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8921:preprocess_text_thai\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8922:preprocess_text_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8923:preprocess_text_hangul\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8924:premultiply_data\n8925:premul_rgb\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n8926:premul_polar\\28SkRGBA4f<\\28SkAlphaType\\292>\\29\n8927:postprocess_glyphs_arabic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_buffer_t*\\2c\\20hb_font_t*\\29\n8928:portable::xy_to_unit_angle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8929:portable::xy_to_radius\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8930:portable::xy_to_2pt_conical_well_behaved\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8931:portable::xy_to_2pt_conical_strip\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8932:portable::xy_to_2pt_conical_smaller\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8933:portable::xy_to_2pt_conical_greater\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8934:portable::xy_to_2pt_conical_focal_on_circle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8935:portable::xor_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8936:portable::white_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8937:portable::unpremul_polar\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8938:portable::unpremul\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8939:portable::trace_var\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8940:portable::trace_scope\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8941:portable::trace_line\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8942:portable::trace_exit\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8943:portable::trace_enter\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8944:portable::tan_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8945:portable::swizzle_copy_to_indirect_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8946:portable::swizzle_copy_slot_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8947:portable::swizzle_copy_4_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8948:portable::swizzle_copy_3_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8949:portable::swizzle_copy_2_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8950:portable::swizzle_4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8951:portable::swizzle_3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8952:portable::swizzle_2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8953:portable::swizzle_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8954:portable::swizzle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8955:portable::swap_src_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8956:portable::swap_rb_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8957:portable::swap_rb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8958:portable::sub_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8959:portable::sub_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8960:portable::sub_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8961:portable::sub_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8962:portable::sub_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8963:portable::sub_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8964:portable::sub_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8965:portable::sub_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8966:portable::sub_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8967:portable::sub_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8968:portable::store_src_rg\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8969:portable::store_src_a\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8970:portable::store_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8971:portable::store_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8972:portable::store_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8973:portable::store_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8974:portable::store_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8975:portable::store_r8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8976:portable::store_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8977:portable::store_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8978:portable::store_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8979:portable::store_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8980:portable::store_device_xy01\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8981:portable::store_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8982:portable::store_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8983:portable::store_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8984:portable::store_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8985:portable::store_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8986:portable::store_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8987:portable::store_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8988:portable::store_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8989:portable::store_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8990:portable::store_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8991:portable::store_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8992:portable::start_pipeline\\28unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20SkRasterPipelineStage*\\2c\\20SkSpan<SkRasterPipeline_MemoryCtxPatch>\\2c\\20unsigned\\20char*\\29\n8993:portable::stack_rewind\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8994:portable::stack_checkpoint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8995:portable::srcover_rgba_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8996:portable::srcover\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8997:portable::srcout\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8998:portable::srcin\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n8999:portable::srcatop\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9000:portable::sqrt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9001:portable::splat_4_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9002:portable::splat_3_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9003:portable::splat_2_constants\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9004:portable::softlight\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9005:portable::smoothstep_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9006:portable::sin_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9007:portable::shuffle\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9008:portable::set_base_pointer\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9009:portable::seed_shader\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9010:portable::screen\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9011:portable::scale_u8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9012:portable::scale_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9013:portable::saturation\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9014:portable::rgb_to_hsl\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9015:portable::repeat_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9016:portable::repeat_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9017:portable::repeat_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9018:portable::refract_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9019:portable::reenable_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9020:portable::premul_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9021:portable::premul\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9022:portable::pow_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9023:portable::plus_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9024:portable::perlin_noise\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9025:portable::parametric\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9026:portable::overlay\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9027:portable::negate_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9028:portable::multiply\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9029:portable::mul_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9030:portable::mul_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9031:portable::mul_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9032:portable::mul_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9033:portable::mul_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9034:portable::mul_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9035:portable::mul_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9036:portable::mul_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9037:portable::mul_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9038:portable::mul_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9039:portable::mul_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9040:portable::mul_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9041:portable::move_src_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9042:portable::move_dst_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9043:portable::modulate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9044:portable::mod_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9045:portable::mod_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9046:portable::mod_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9047:portable::mod_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9048:portable::mod_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9049:portable::mix_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9050:portable::mix_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9051:portable::mix_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9052:portable::mix_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9053:portable::mix_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9054:portable::mix_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9055:portable::mix_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9056:portable::mix_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9057:portable::mix_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9058:portable::mix_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9059:portable::mirror_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9060:portable::mirror_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9061:portable::mirror_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9062:portable::mipmap_linear_update\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9063:portable::mipmap_linear_init\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9064:portable::mipmap_linear_finish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9065:portable::min_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9066:portable::min_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9067:portable::min_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9068:portable::min_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9069:portable::min_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9070:portable::min_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9071:portable::min_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9072:portable::min_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9073:portable::min_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9074:portable::min_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9075:portable::min_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9076:portable::min_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9077:portable::min_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9078:portable::min_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9079:portable::min_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9080:portable::min_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9081:portable::merge_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9082:portable::merge_inv_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9083:portable::merge_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9084:portable::max_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9085:portable::max_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9086:portable::max_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9087:portable::max_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9088:portable::max_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9089:portable::max_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9090:portable::max_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9091:portable::max_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9092:portable::max_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9093:portable::max_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9094:portable::max_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9095:portable::max_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9096:portable::max_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9097:portable::max_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9098:portable::max_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9099:portable::max_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9100:portable::matrix_translate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9101:portable::matrix_scale_translate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9102:portable::matrix_perspective\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9103:portable::matrix_multiply_4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9104:portable::matrix_multiply_3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9105:portable::matrix_multiply_2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9106:portable::matrix_4x5\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9107:portable::matrix_4x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9108:portable::matrix_3x4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9109:portable::matrix_3x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9110:portable::matrix_2x3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9111:portable::mask_off_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9112:portable::mask_off_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9113:portable::mask_2pt_conical_nan\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9114:portable::mask_2pt_conical_degenerates\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9115:portable::luminosity\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9116:portable::log_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9117:portable::log2_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9118:portable::load_src_rg\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9119:portable::load_rgf16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9120:portable::load_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9121:portable::load_rg88_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9122:portable::load_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9123:portable::load_rg1616_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9124:portable::load_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9125:portable::load_return_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9126:portable::load_loop_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9127:portable::load_f32_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9128:portable::load_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9129:portable::load_f16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9130:portable::load_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9131:portable::load_condition_mask\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9132:portable::load_af16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9133:portable::load_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9134:portable::load_a8_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9135:portable::load_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9136:portable::load_a16_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9137:portable::load_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9138:portable::load_8888_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9139:portable::load_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9140:portable::load_565_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9141:portable::load_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9142:portable::load_4444_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9143:portable::load_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9144:portable::load_16161616_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9145:portable::load_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9146:portable::load_10x6_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9147:portable::load_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9148:portable::load_1010102_xr_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9149:portable::load_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9150:portable::load_1010102_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9151:portable::load_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9152:portable::lighten\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9153:portable::lerp_u8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9154:portable::lerp_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9155:portable::just_return\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9156:portable::jump\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9157:portable::invsqrt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9158:portable::invsqrt_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9159:portable::invsqrt_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9160:portable::invsqrt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9161:portable::inverse_mat4\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9162:portable::inverse_mat3\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9163:portable::inverse_mat2\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9164:portable::init_lane_masks\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9165:portable::hue\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9166:portable::hsl_to_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9167:portable::hardlight\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9168:portable::gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9169:portable::gauss_a_to_rgba\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9170:portable::gather_rgf16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9171:portable::gather_rg88\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9172:portable::gather_rg1616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9173:portable::gather_f32\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9174:portable::gather_f16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9175:portable::gather_af16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9176:portable::gather_a8\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9177:portable::gather_a16\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9178:portable::gather_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9179:portable::gather_565\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9180:portable::gather_4444\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9181:portable::gather_16161616\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9182:portable::gather_10x6\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9183:portable::gather_1010102_xr\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9184:portable::gather_1010102\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9185:portable::gamma_\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9186:portable::force_opaque_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9187:portable::force_opaque\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9188:portable::floor_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9189:portable::floor_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9190:portable::floor_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9191:portable::floor_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9192:portable::exp_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9193:portable::exp2_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9194:portable::exclusion\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9195:portable::exchange_src\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9196:portable::evenly_spaced_gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9197:portable::evenly_spaced_2_stop_gradient\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9198:portable::emboss\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9199:portable::dstover\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9200:portable::dstout\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9201:portable::dstin\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9202:portable::dstatop\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9203:portable::dot_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9204:portable::dot_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9205:portable::dot_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9206:portable::div_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9207:portable::div_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9208:portable::div_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9209:portable::div_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9210:portable::div_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9211:portable::div_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9212:portable::div_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9213:portable::div_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9214:portable::div_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9215:portable::div_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9216:portable::div_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9217:portable::div_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9218:portable::div_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9219:portable::div_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9220:portable::div_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9221:portable::dither\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9222:portable::difference\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9223:portable::decal_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9224:portable::decal_x_and_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9225:portable::decal_x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9226:portable::darken\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9227:portable::css_oklab_to_linear_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9228:portable::css_oklab_gamut_map_to_linear_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9229:portable::css_lab_to_xyz\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9230:portable::css_hwb_to_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9231:portable::css_hsl_to_srgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9232:portable::css_hcl_to_lab\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9233:portable::cos_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9234:portable::copy_uniform\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9235:portable::copy_to_indirect_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9236:portable::copy_slot_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9237:portable::copy_slot_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9238:portable::copy_immutable_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9239:portable::copy_constant\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9240:portable::copy_4_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9241:portable::copy_4_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9242:portable::copy_4_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9243:portable::copy_4_immutables_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9244:portable::copy_3_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9245:portable::copy_3_slots_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9246:portable::copy_3_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9247:portable::copy_3_immutables_unmasked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9248:portable::copy_2_uniforms\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9249:portable::copy_2_slots_masked\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9250:portable::continue_op\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9251:portable::colordodge\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9252:portable::colorburn\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9253:portable::color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9254:portable::cmpne_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9255:portable::cmpne_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9256:portable::cmpne_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9257:portable::cmpne_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9258:portable::cmpne_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9259:portable::cmpne_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9260:portable::cmpne_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9261:portable::cmpne_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9262:portable::cmpne_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9263:portable::cmpne_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9264:portable::cmpne_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9265:portable::cmpne_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9266:portable::cmplt_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9267:portable::cmplt_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9268:portable::cmplt_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9269:portable::cmplt_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9270:portable::cmplt_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9271:portable::cmplt_imm_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9272:portable::cmplt_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9273:portable::cmplt_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9274:portable::cmplt_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9275:portable::cmplt_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9276:portable::cmplt_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9277:portable::cmplt_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9278:portable::cmplt_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9279:portable::cmplt_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9280:portable::cmplt_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9281:portable::cmplt_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9282:portable::cmplt_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9283:portable::cmplt_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9284:portable::cmple_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9285:portable::cmple_n_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9286:portable::cmple_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9287:portable::cmple_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9288:portable::cmple_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9289:portable::cmple_imm_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9290:portable::cmple_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9291:portable::cmple_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9292:portable::cmple_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9293:portable::cmple_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9294:portable::cmple_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9295:portable::cmple_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9296:portable::cmple_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9297:portable::cmple_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9298:portable::cmple_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9299:portable::cmple_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9300:portable::cmple_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9301:portable::cmple_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9302:portable::cmpeq_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9303:portable::cmpeq_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9304:portable::cmpeq_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9305:portable::cmpeq_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9306:portable::cmpeq_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9307:portable::cmpeq_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9308:portable::cmpeq_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9309:portable::cmpeq_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9310:portable::cmpeq_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9311:portable::cmpeq_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9312:portable::cmpeq_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9313:portable::cmpeq_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9314:portable::clear\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9315:portable::clamp_x_and_y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9316:portable::clamp_x_1\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9317:portable::clamp_gamut\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9318:portable::clamp_01\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9319:portable::ceil_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9320:portable::ceil_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9321:portable::ceil_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9322:portable::ceil_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9323:portable::cast_to_uint_from_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9324:portable::cast_to_uint_from_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9325:portable::cast_to_uint_from_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9326:portable::cast_to_uint_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9327:portable::cast_to_int_from_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9328:portable::cast_to_int_from_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9329:portable::cast_to_int_from_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9330:portable::cast_to_int_from_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9331:portable::cast_to_float_from_uint\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9332:portable::cast_to_float_from_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9333:portable::cast_to_float_from_4_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9334:portable::cast_to_float_from_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9335:portable::cast_to_float_from_3_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9336:portable::cast_to_float_from_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9337:portable::cast_to_float_from_2_uints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9338:portable::cast_to_float_from_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9339:portable::case_op\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9340:portable::callback\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9341:portable::byte_tables\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9342:portable::bt709_luminance_or_luma_to_rgb\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9343:portable::bt709_luminance_or_luma_to_alpha\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9344:portable::branch_if_no_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9345:portable::branch_if_no_active_lanes_eq\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9346:portable::branch_if_any_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9347:portable::branch_if_all_lanes_active\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9348:portable::blit_row_s32a_opaque\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9349:portable::black_color\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9350:portable::bitwise_xor_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9351:portable::bitwise_xor_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9352:portable::bitwise_xor_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9353:portable::bitwise_xor_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9354:portable::bitwise_xor_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9355:portable::bitwise_xor_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9356:portable::bitwise_or_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9357:portable::bitwise_or_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9358:portable::bitwise_or_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9359:portable::bitwise_or_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9360:portable::bitwise_or_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9361:portable::bitwise_and_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9362:portable::bitwise_and_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9363:portable::bitwise_and_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9364:portable::bitwise_and_imm_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9365:portable::bitwise_and_imm_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9366:portable::bitwise_and_imm_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9367:portable::bitwise_and_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9368:portable::bitwise_and_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9369:portable::bitwise_and_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9370:portable::bilinear_setup\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9371:portable::bilinear_py\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9372:portable::bilinear_px\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9373:portable::bilinear_ny\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9374:portable::bilinear_nx\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9375:portable::bilerp_clamp_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9376:portable::bicubic_setup\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9377:portable::bicubic_p3y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9378:portable::bicubic_p3x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9379:portable::bicubic_p1y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9380:portable::bicubic_p1x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9381:portable::bicubic_n3y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9382:portable::bicubic_n3x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9383:portable::bicubic_n1y\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9384:portable::bicubic_n1x\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9385:portable::bicubic_clamp_8888\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9386:portable::atan_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9387:portable::atan2_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9388:portable::asin_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9389:portable::alter_2pt_conical_unswap\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9390:portable::alter_2pt_conical_compensate_focal\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9391:portable::alpha_to_red_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9392:portable::alpha_to_red\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9393:portable::alpha_to_gray_dst\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9394:portable::alpha_to_gray\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9395:portable::add_n_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9396:portable::add_n_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9397:portable::add_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9398:portable::add_imm_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9399:portable::add_imm_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9400:portable::add_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9401:portable::add_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9402:portable::add_4_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9403:portable::add_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9404:portable::add_3_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9405:portable::add_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9406:portable::add_2_floats\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9407:portable::acos_float\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9408:portable::accumulate\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9409:portable::abs_int\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9410:portable::abs_4_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9411:portable::abs_3_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9412:portable::abs_2_ints\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9413:portable::RGBA_to_rgbA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n9414:portable::RGBA_to_bgrA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n9415:portable::RGBA_to_BGRA\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\29\n9416:portable::PQish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9417:portable::HLGish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9418:portable::HLGinvish\\28portable::Params*\\2c\\20SkRasterPipelineStage*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n9419:pop_arg_long_double\n9420:png_read_filter_row_up\n9421:png_read_filter_row_sub\n9422:png_read_filter_row_paeth_multibyte_pixel\n9423:png_read_filter_row_paeth_1byte_pixel\n9424:png_read_filter_row_avg\n9425:picture_getCullRect\n9426:pictureRecorder_endRecording\n9427:pictureRecorder_dispose\n9428:pictureRecorder_create\n9429:pictureRecorder_beginRecording\n9430:path_transform\n9431:path_setFillType\n9432:path_reset\n9433:path_relativeQuadraticBezierTo\n9434:path_relativeMoveTo\n9435:path_relativeLineTo\n9436:path_relativeCubicTo\n9437:path_relativeConicTo\n9438:path_relativeArcToRotated\n9439:path_moveTo\n9440:path_lineTo\n9441:path_getFillType\n9442:path_getBounds\n9443:path_dispose\n9444:path_create\n9445:path_copy\n9446:path_contains\n9447:path_conicTo\n9448:path_combine\n9449:path_close\n9450:path_arcToRotated\n9451:path_arcToOval\n9452:path_addRect\n9453:path_addRRect\n9454:path_addPolygon\n9455:path_addPath\n9456:path_addArc\n9457:paragraph_layout\n9458:paragraph_getWordBoundary\n9459:paragraph_getWidth\n9460:paragraph_getUnresolvedCodePoints\n9461:paragraph_getPositionForOffset\n9462:paragraph_getMinIntrinsicWidth\n9463:paragraph_getMaxIntrinsicWidth\n9464:paragraph_getLongestLine\n9465:paragraph_getLineNumberAt\n9466:paragraph_getLineMetricsAtIndex\n9467:paragraph_getLineCount\n9468:paragraph_getIdeographicBaseline\n9469:paragraph_getHeight\n9470:paragraph_getGlyphInfoAt\n9471:paragraph_getDidExceedMaxLines\n9472:paragraph_getClosestGlyphInfoAtCoordinate\n9473:paragraph_getBoxesForRange\n9474:paragraph_getBoxesForPlaceholders\n9475:paragraph_getAlphabeticBaseline\n9476:paragraphStyle_setTextStyle\n9477:paragraphStyle_setTextHeightBehavior\n9478:paragraphStyle_setTextDirection\n9479:paragraphStyle_setTextAlign\n9480:paragraphStyle_setStrutStyle\n9481:paragraphStyle_setMaxLines\n9482:paragraphStyle_setHeight\n9483:paragraphStyle_setEllipsis\n9484:paragraphStyle_setApplyRoundingHack\n9485:paragraphStyle_dispose\n9486:paragraphStyle_create\n9487:paragraphBuilder_setWordBreaksUtf16\n9488:paragraphBuilder_setLineBreaksUtf16\n9489:paragraphBuilder_setGraphemeBreaksUtf16\n9490:paragraphBuilder_pushStyle\n9491:paragraphBuilder_pop\n9492:paragraphBuilder_getUtf8Text\n9493:paragraphBuilder_create\n9494:paragraphBuilder_addText\n9495:paragraphBuilder_addPlaceholder\n9496:paint_setStyle\n9497:paint_setStrokeWidth\n9498:paint_setStrokeJoin\n9499:paint_setStrokeCap\n9500:paint_setShader\n9501:paint_setMiterLimit\n9502:paint_setMaskFilter\n9503:paint_setImageFilter\n9504:paint_setColorInt\n9505:paint_setColorFilter\n9506:paint_setBlendMode\n9507:paint_setAntiAlias\n9508:paint_getStyle\n9509:paint_getStrokeJoin\n9510:paint_getStrokeCap\n9511:paint_getMiterLImit\n9512:paint_getColorInt\n9513:paint_getAntiAlias\n9514:paint_dispose\n9515:paint_create\n9516:override_features_khmer\\28hb_ot_shape_planner_t*\\29\n9517:override_features_indic\\28hb_ot_shape_planner_t*\\29\n9518:override_features_hangul\\28hb_ot_shape_planner_t*\\29\n9519:non-virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29.1\n9520:non-virtual\\20thunk\\20to\\20std::__2::basic_stringstream<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>::~basic_stringstream\\28\\29\n9521:non-virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29.1\n9522:non-virtual\\20thunk\\20to\\20std::__2::basic_iostream<char\\2c\\20std::__2::char_traits<char>>::~basic_iostream\\28\\29\n9523:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.3\n9524:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.2\n9525:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29.1\n9526:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::~GaneshBackend\\28\\29\n9527:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::findAlgorithm\\28SkSize\\2c\\20SkColorType\\29\\20const\n9528:non-virtual\\20thunk\\20to\\20skif::\\28anonymous\\20namespace\\29::GaneshBackend::blur\\28SkSize\\2c\\20sk_sp<SkSpecialImage>\\2c\\20SkIRect\\20const&\\2c\\20SkTileMode\\2c\\20SkIRect\\20const&\\29\\20const\n9529:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29.1\n9530:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\\28\\29\n9531:non-virtual\\20thunk\\20to\\20skgpu::ganesh::SmallPathAtlasMgr::evict\\28skgpu::PlotLocator\\29\n9532:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29.1\n9533:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\\28\\29\n9534:non-virtual\\20thunk\\20to\\20skgpu::ganesh::AtlasPathRenderer::preFlush\\28GrOnFlushResourceProvider*\\29\n9535:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n9536:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n9537:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n9538:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::instanceFlags\\28\\29\\20const\n9539:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::TransformedMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n9540:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29.1\n9541:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::~SDFTSubRun\\28\\29\n9542:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n9543:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n9544:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::glyphCount\\28\\29\\20const\n9545:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::SDFTSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n9546:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n9547:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::regenerateAtlas\\28int\\2c\\20int\\2c\\20std::__2::function<std::__2::tuple<bool\\2c\\20int>\\20\\28sktext::gpu::GlyphVector*\\2c\\20int\\2c\\20int\\2c\\20skgpu::MaskFormat\\2c\\20int\\29>\\29\\20const\n9548:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::makeAtlasTextOp\\28GrClip\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>&&\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\29\\20const\n9549:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::instanceFlags\\28\\29\\20const\n9550:non-virtual\\20thunk\\20to\\20\\28anonymous\\20namespace\\29::DirectMaskSubRun::fillVertexData\\28void*\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkPoint\\2c\\20SkIRect\\29\\20const\n9551:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29.1\n9552:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\\28\\29\n9553:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\\28\\29\\20const\n9554:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::instantiate\\28GrResourceProvider*\\29\n9555:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::createSurface\\28GrResourceProvider*\\29\\20const\n9556:non-virtual\\20thunk\\20to\\20GrTextureRenderTargetProxy::callbackDesc\\28\\29\\20const\n9557:non-virtual\\20thunk\\20to\\20GrOpFlushState::~GrOpFlushState\\28\\29.1\n9558:non-virtual\\20thunk\\20to\\20GrOpFlushState::~GrOpFlushState\\28\\29\n9559:non-virtual\\20thunk\\20to\\20GrOpFlushState::writeView\\28\\29\\20const\n9560:non-virtual\\20thunk\\20to\\20GrOpFlushState::usesMSAASurface\\28\\29\\20const\n9561:non-virtual\\20thunk\\20to\\20GrOpFlushState::threadSafeCache\\28\\29\\20const\n9562:non-virtual\\20thunk\\20to\\20GrOpFlushState::strikeCache\\28\\29\\20const\n9563:non-virtual\\20thunk\\20to\\20GrOpFlushState::smallPathAtlasManager\\28\\29\\20const\n9564:non-virtual\\20thunk\\20to\\20GrOpFlushState::sampledProxyArray\\28\\29\n9565:non-virtual\\20thunk\\20to\\20GrOpFlushState::rtProxy\\28\\29\\20const\n9566:non-virtual\\20thunk\\20to\\20GrOpFlushState::resourceProvider\\28\\29\\20const\n9567:non-virtual\\20thunk\\20to\\20GrOpFlushState::renderPassBarriers\\28\\29\\20const\n9568:non-virtual\\20thunk\\20to\\20GrOpFlushState::recordDraw\\28GrGeometryProcessor\\20const*\\2c\\20GrSimpleMesh\\20const*\\2c\\20int\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPrimitiveType\\29\n9569:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackVertices\\28int\\2c\\20unsigned\\20long\\29\n9570:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndirectDraws\\28int\\29\n9571:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndices\\28int\\29\n9572:non-virtual\\20thunk\\20to\\20GrOpFlushState::putBackIndexedIndirectDraws\\28int\\29\n9573:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeVertexSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n9574:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeVertexSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n9575:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeIndexSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n9576:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeIndexSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n9577:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeDrawIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n9578:non-virtual\\20thunk\\20to\\20GrOpFlushState::makeDrawIndexedIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n9579:non-virtual\\20thunk\\20to\\20GrOpFlushState::dstProxyView\\28\\29\\20const\n9580:non-virtual\\20thunk\\20to\\20GrOpFlushState::detachAppliedClip\\28\\29\n9581:non-virtual\\20thunk\\20to\\20GrOpFlushState::colorLoadOp\\28\\29\\20const\n9582:non-virtual\\20thunk\\20to\\20GrOpFlushState::caps\\28\\29\\20const\n9583:non-virtual\\20thunk\\20to\\20GrOpFlushState::atlasManager\\28\\29\\20const\n9584:non-virtual\\20thunk\\20to\\20GrOpFlushState::appliedClip\\28\\29\\20const\n9585:non-virtual\\20thunk\\20to\\20GrGpuBuffer::unref\\28\\29\\20const\n9586:non-virtual\\20thunk\\20to\\20GrGpuBuffer::ref\\28\\29\\20const\n9587:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29.1\n9588:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\\28\\29\n9589:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onSetLabel\\28\\29\n9590:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onRelease\\28\\29\n9591:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onGpuMemorySize\\28\\29\\20const\n9592:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::onAbandon\\28\\29\n9593:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n9594:non-virtual\\20thunk\\20to\\20GrGLTextureRenderTarget::backendFormat\\28\\29\\20const\n9595:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29.1\n9596:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n9597:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::hasSecondaryOutput\\28\\29\\20const\n9598:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\\28skgpu::BlendEquation\\29\n9599:non-virtual\\20thunk\\20to\\20GrGLSLFragmentShaderBuilder::dstColor\\28\\29\n9600:non-virtual\\20thunk\\20to\\20GrGLBuffer::~GrGLBuffer\\28\\29.1\n9601:non-virtual\\20thunk\\20to\\20GrGLBuffer::~GrGLBuffer\\28\\29\n9602:maskFilter_createBlur\n9603:lineMetrics_getWidth\n9604:lineMetrics_getUnscaledAscent\n9605:lineMetrics_getLeft\n9606:lineMetrics_getHeight\n9607:lineMetrics_getDescent\n9608:lineMetrics_getBaseline\n9609:lineMetrics_getAscent\n9610:lineMetrics_dispose\n9611:lineMetrics_create\n9612:lineBreakBuffer_create\n9613:lin_srgb_to_okhcl\\28SkRGBA4f<\\28SkAlphaType\\292>\\2c\\20bool*\\29\n9614:legalfunc$glWaitSync\n9615:legalfunc$glClientWaitSync\n9616:lcd_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n9617:is_deleted_glyph\\28hb_glyph_info_t\\20const*\\29\n9618:initial_reordering_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9619:image_getHeight\n9620:image_createFromTextureSource\n9621:image_createFromPixels\n9622:image_createFromPicture\n9623:imageFilter_getFilterBounds\n9624:imageFilter_createMatrix\n9625:imageFilter_createFromColorFilter\n9626:imageFilter_createErode\n9627:imageFilter_createDilate\n9628:imageFilter_createBlur\n9629:imageFilter_compose\n9630:hit_compare_y\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n9631:hit_compare_x\\28SkOpRayHit\\20const*\\2c\\20SkOpRayHit\\20const*\\29\n9632:hb_unicode_script_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9633:hb_unicode_general_category_nil\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9634:hb_ucd_script\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9635:hb_ucd_mirroring\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9636:hb_ucd_general_category\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9637:hb_ucd_decompose\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9638:hb_ucd_compose\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9639:hb_ucd_combining_class\\28hb_unicode_funcs_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9640:hb_syllabic_clear_var\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9641:hb_paint_sweep_gradient_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9642:hb_paint_push_transform_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9643:hb_paint_push_clip_rectangle_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9644:hb_paint_image_nil\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n9645:hb_paint_extents_push_transform\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9646:hb_paint_extents_push_group\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n9647:hb_paint_extents_push_clip_rectangle\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9648:hb_paint_extents_push_clip_glyph\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_font_t*\\2c\\20void*\\29\n9649:hb_paint_extents_pop_transform\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n9650:hb_paint_extents_pop_group\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_paint_composite_mode_t\\2c\\20void*\\29\n9651:hb_paint_extents_pop_clip\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n9652:hb_paint_extents_paint_sweep_gradient\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_color_line_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9653:hb_paint_extents_paint_image\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20hb_blob_t*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n9654:hb_paint_extents_paint_color\\28hb_paint_funcs_t*\\2c\\20void*\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9655:hb_outline_recording_pen_quadratic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9656:hb_outline_recording_pen_move_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9657:hb_outline_recording_pen_line_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9658:hb_outline_recording_pen_cubic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9659:hb_outline_recording_pen_close_path\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20void*\\29\n9660:hb_ot_paint_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9661:hb_ot_map_t::lookup_map_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n9662:hb_ot_map_t::feature_map_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n9663:hb_ot_map_builder_t::feature_info_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n9664:hb_ot_get_variation_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9665:hb_ot_get_nominal_glyphs\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9666:hb_ot_get_nominal_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9667:hb_ot_get_glyph_v_origin\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9668:hb_ot_get_glyph_v_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9669:hb_ot_get_glyph_name\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9670:hb_ot_get_glyph_h_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9671:hb_ot_get_glyph_from_name\\28hb_font_t*\\2c\\20void*\\2c\\20char\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9672:hb_ot_get_glyph_extents\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n9673:hb_ot_get_font_v_extents\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n9674:hb_ot_get_font_h_extents\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n9675:hb_ot_draw_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n9676:hb_font_paint_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9677:hb_font_paint_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_paint_funcs_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9678:hb_font_get_variation_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9679:hb_font_get_nominal_glyphs_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9680:hb_font_get_nominal_glyph_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9681:hb_font_get_nominal_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9682:hb_font_get_glyph_v_origin_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9683:hb_font_get_glyph_v_origin_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9684:hb_font_get_glyph_v_kerning_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9685:hb_font_get_glyph_v_advances_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9686:hb_font_get_glyph_v_advance_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9687:hb_font_get_glyph_v_advance_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9688:hb_font_get_glyph_name_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9689:hb_font_get_glyph_name_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20char*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9690:hb_font_get_glyph_h_origin_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9691:hb_font_get_glyph_h_origin_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9692:hb_font_get_glyph_h_kerning_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9693:hb_font_get_glyph_h_advances_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9694:hb_font_get_glyph_h_advance_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9695:hb_font_get_glyph_h_advance_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9696:hb_font_get_glyph_from_name_default\\28hb_font_t*\\2c\\20void*\\2c\\20char\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n9697:hb_font_get_glyph_extents_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n9698:hb_font_get_glyph_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n9699:hb_font_get_glyph_contour_point_nil\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9700:hb_font_get_glyph_contour_point_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20int*\\2c\\20void*\\29\n9701:hb_font_get_font_v_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n9702:hb_font_get_font_h_extents_default\\28hb_font_t*\\2c\\20void*\\2c\\20hb_font_extents_t*\\2c\\20void*\\29\n9703:hb_font_draw_glyph_default\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_draw_funcs_t*\\2c\\20void*\\2c\\20void*\\29\n9704:hb_draw_quadratic_to_nil\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9705:hb_draw_quadratic_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9706:hb_draw_move_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9707:hb_draw_line_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9708:hb_draw_extents_quadratic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9709:hb_draw_extents_cubic_to\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9710:hb_draw_cubic_to_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20void*\\29\n9711:hb_draw_close_path_default\\28hb_draw_funcs_t*\\2c\\20void*\\2c\\20hb_draw_state_t*\\2c\\20void*\\29\n9712:hb_buffer_t::_cluster_group_func\\28hb_glyph_info_t\\20const&\\2c\\20hb_glyph_info_t\\20const&\\29\n9713:hb_aat_map_builder_t::feature_event_t::cmp\\28void\\20const*\\2c\\20void\\20const*\\29\n9714:gray_raster_render\n9715:gray_raster_new\n9716:gray_raster_done\n9717:gray_move_to\n9718:gray_line_to\n9719:gray_cubic_to\n9720:gray_conic_to\n9721:get_sfnt_table\n9722:ft_smooth_transform\n9723:ft_smooth_set_mode\n9724:ft_smooth_render\n9725:ft_smooth_overlap_spans\n9726:ft_smooth_lcd_spans\n9727:ft_smooth_init\n9728:ft_smooth_get_cbox\n9729:ft_gzip_free\n9730:ft_ansi_stream_io\n9731:ft_ansi_stream_close\n9732:fquad_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9733:fontCollection_registerTypeface\n9734:fontCollection_dispose\n9735:fontCollection_create\n9736:fontCollection_clearCaches\n9737:fmt_fp\n9738:fline_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9739:final_reordering_indic\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9740:fcubic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9741:fconic_dxdy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9742:error_callback\n9743:emscripten_stack_set_limits\n9744:emscripten_current_thread_process_queued_calls\n9745:dquad_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9746:dline_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9747:dispose_external_texture\\28void*\\29\n9748:decompose_unicode\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n9749:decompose_khmer\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n9750:decompose_indic\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int*\\29\n9751:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::Make\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::QuadEdgeEffect::Make\\28SkArenaAlloc*\\2c\\20SkMatrix\\20const&\\2c\\20bool\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9752:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader*\\20SkArenaAlloc::make<skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&>\\28SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::\\28anonymous\\20namespace\\29::HullShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9753:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList*\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList\\2c\\20skgpu::ganesh::StrokeTessellator::PathStrokeList>\\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9754:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator*\\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator\\2c\\20skgpu::tess::PatchAttribs&>\\28skgpu::tess::PatchAttribs&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::StrokeTessellator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9755:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList*\\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList\\2c\\20SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkPath\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::PathTessellator::PathDrawList&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9756:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Make\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29::'lambda'\\28void*\\29>\\28skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::Processor::Make\\28SkArenaAlloc*\\2c\\20GrAAType\\2c\\20skgpu::ganesh::FillRRectOp::\\28anonymous\\20namespace\\29::FillRRectOpImpl::ProcessorFlags\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9757:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::RectanizerSkyline*\\20SkArenaAlloc::make<skgpu::RectanizerSkyline\\2c\\20int&\\2c\\20int&>\\28int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28skgpu::RectanizerSkyline&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9758:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<skgpu::RectanizerPow2*\\20SkArenaAlloc::make<skgpu::RectanizerPow2\\2c\\20int&\\2c\\20int&>\\28int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28skgpu::RectanizerPow2&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9759:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TextureOpImpl::Desc>\\28\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::TextureOpImpl::Desc&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9760:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TentPass*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::TentPass\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&>\\28skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::TentPass&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9761:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::SimpleTriangleShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::SimpleTriangleShader\\2c\\20SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&>\\28SkMatrix\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::SimpleTriangleShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9762:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::GaussPass\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&>\\28skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20skvx::Vec<4\\2c\\20unsigned\\20int>*&\\2c\\20int&\\2c\\20int&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::GaussPass&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9763:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::DrawAtlasPathShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::DrawAtlasPathShader\\2c\\20bool&\\2c\\20skgpu::ganesh::AtlasInstancedHelper*\\2c\\20GrShaderCaps\\20const&>\\28bool&\\2c\\20skgpu::ganesh::AtlasInstancedHelper*&&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::DrawAtlasPathShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9764:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::BoundingBoxShader*\\20SkArenaAlloc::make<\\28anonymous\\20namespace\\29::BoundingBoxShader\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&>\\28SkRGBA4f<\\28SkAlphaType\\292>&\\2c\\20GrShaderCaps\\20const&\\29::'lambda'\\28void*\\29>\\28\\28anonymous\\20namespace\\29::BoundingBoxShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9765:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<Sprite_D32_S32*\\20SkArenaAlloc::make<Sprite_D32_S32\\2c\\20SkPixmap\\20const&\\2c\\20unsigned\\20char>\\28SkPixmap\\20const&\\2c\\20unsigned\\20char&&\\29::'lambda'\\28void*\\29>\\28Sprite_D32_S32&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9766:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTriColorShader*\\20SkArenaAlloc::make<SkTriColorShader\\2c\\20bool\\2c\\20bool\\20const&>\\28bool&&\\2c\\20bool\\20const&\\29::'lambda'\\28void*\\29>\\28SkTriColorShader&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9767:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTCubic*\\20SkArenaAlloc::make<SkTCubic>\\28\\29::'lambda'\\28void*\\29>\\28SkTCubic&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9768:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkTConic*\\20SkArenaAlloc::make<SkTConic>\\28\\29::'lambda'\\28void*\\29>\\28SkTConic&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9769:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy*\\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy\\2c\\20SkPixmap\\20const&>\\28SkPixmap\\20const&\\29::'lambda'\\28void*\\29>\\28SkSpriteBlitter_Memcpy&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9770:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter*\\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter\\2c\\20SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\2c\\20sk_sp<SkShader>&>\\28SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\2c\\20sk_sp<SkShader>&\\29::'lambda'\\28void*\\29>\\28SkRasterPipelineSpriteBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9771:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkRasterPipelineBlitter*\\20SkArenaAlloc::make<SkRasterPipelineBlitter\\2c\\20SkPixmap\\20const&\\2c\\20SkArenaAlloc*&>\\28SkPixmap\\20const&\\2c\\20SkArenaAlloc*&\\29::'lambda'\\28void*\\29>\\28SkRasterPipelineBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9772:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkNullBlitter*\\20SkArenaAlloc::make<SkNullBlitter>\\28\\29::'lambda'\\28void*\\29>\\28SkNullBlitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9773:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkMipmapAccessor*\\20SkArenaAlloc::make<SkMipmapAccessor\\2c\\20SkImage_Base\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode&>\\28SkImage_Base\\20const*&&\\2c\\20SkMatrix\\20const&\\2c\\20SkMipmapMode&\\29::'lambda'\\28void*\\29>\\28SkMipmapAccessor&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9774:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph::PathData*\\20SkArenaAlloc::make<SkGlyph::PathData>\\28\\29::'lambda'\\28void*\\29>\\28SkGlyph::PathData&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9775:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph::DrawableData*\\20SkArenaAlloc::make<SkGlyph::DrawableData>\\28\\29::'lambda'\\28void*\\29>\\28SkGlyph::DrawableData&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9776:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkGlyph*\\20SkArenaAlloc::make<SkGlyph\\2c\\20SkGlyph>\\28SkGlyph&&\\29::'lambda'\\28void*\\29>\\28SkGlyph&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9777:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9778:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>\\2c\\20skgpu::AtlasToken>\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\2c\\20skgpu::AtlasToken&&\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9779:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node*\\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node>\\28\\29::'lambda'\\28void*\\29>\\28SkArenaAllocList<GrOpFlushState::Draw>::Node&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9780:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<SkA8_Coverage_Blitter*\\20SkArenaAlloc::make<SkA8_Coverage_Blitter\\2c\\20SkPixmap\\20const&\\2c\\20SkPaint\\20const&>\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\29::'lambda'\\28void*\\29>\\28SkA8_Coverage_Blitter&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9781:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrSimpleMesh*\\20SkArenaAlloc::make<GrSimpleMesh>\\28\\29::'lambda'\\28void*\\29>\\28GrSimpleMesh&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9782:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrResourceAllocator::Register*\\20SkArenaAlloc::make<GrResourceAllocator::Register\\2c\\20GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey\\2c\\20GrResourceProvider*&>\\28GrSurfaceProxy*&\\2c\\20skgpu::ScratchKey&&\\2c\\20GrResourceProvider*&\\29::'lambda'\\28void*\\29>\\28GrResourceAllocator::Register&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9783:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrInnerFanTriangulator*\\20SkArenaAlloc::make<GrInnerFanTriangulator\\2c\\20SkPath\\20const&\\2c\\20SkArenaAlloc*\\20const&>\\28SkPath\\20const&\\2c\\20SkArenaAlloc*\\20const&\\29::'lambda'\\28void*\\29>\\28GrInnerFanTriangulator&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9784:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrDistanceFieldLCDTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28GrDistanceFieldLCDTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\\2c\\20unsigned\\20int\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9785:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29>\\28GrBitmapTextGeoProc::Make\\28SkArenaAlloc*\\2c\\20GrShaderCaps\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20bool\\2c\\20sk_sp<GrColorSpaceXform>\\2c\\20GrSurfaceProxyView\\20const*\\2c\\20int\\2c\\20GrSamplerState\\2c\\20skgpu::MaskFormat\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9786:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<GrAppliedClip*\\20SkArenaAlloc::make<GrAppliedClip\\2c\\20GrAppliedClip>\\28GrAppliedClip&&\\29::'lambda'\\28void*\\29>\\28GrAppliedClip&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9787:decltype\\28fp\\28nullptr\\29\\29\\20SkArenaAlloc::make<EllipseGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29>\\28EllipseGeometryProcessor::Make\\28SkArenaAlloc*\\2c\\20bool\\2c\\20bool\\2c\\20bool\\2c\\20SkMatrix\\20const&\\29::'lambda'\\28void*\\29&&\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n9788:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>&\\2c\\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9789:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9790:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\\2c\\201ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9791:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\29\n9792:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_construct\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>&\\2c\\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9793:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&&\\29::'lambda'\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&>\\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&&\\29\n9794:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<void\\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>>::__generic_assign\\5babi:v160004\\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\29::'lambda'\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20auto&&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9795:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9796:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\\2c\\200ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&>\\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>\\20const&\\29\n9797:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20sk_sp<SkStrike>\\2c\\20std::__2::unique_ptr<SkStrikeSpec\\2c\\20std::__2::default_delete<SkStrikeSpec>>>&\\29\n9798:decltype\\28auto\\29\\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\\5babi:v160004\\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\\2c\\20int>\\2c\\20\\28std::__2::__variant_detail::_Trait\\291>::__destroy\\5babi:v160004\\5d\\28\\29::'lambda'\\28auto&\\29&&\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&>\\28auto\\2c\\20std::__2::__variant_detail::__base<\\28std::__2::__variant_detail::_Trait\\291\\2c\\20SkPaint\\2c\\20int>&\\29\n9799:deallocate_buffer_var\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9800:ddquad_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9801:ddquad_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9802:ddline_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9803:ddline_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9804:ddcubic_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9805:ddcubic_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9806:ddconic_xy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9807:ddconic_dxdy_at_t\\28SkDCurve\\20const&\\2c\\20double\\29\n9808:dconic_xy_at_t\\28SkPoint\\20const*\\2c\\20float\\2c\\20double\\29\n9809:data_destroy_use\\28void*\\29\n9810:data_create_use\\28hb_ot_shape_plan_t\\20const*\\29\n9811:data_create_khmer\\28hb_ot_shape_plan_t\\20const*\\29\n9812:data_create_indic\\28hb_ot_shape_plan_t\\20const*\\29\n9813:data_create_hangul\\28hb_ot_shape_plan_t\\20const*\\29\n9814:convert_to_alpha8\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageInfo\\20const&\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\2c\\20SkColorSpaceXformSteps\\20const&\\29\n9815:convert_bytes_to_data\n9816:contourMeasure_isClosed\n9817:contourMeasure_getSegment\n9818:contourMeasure_getPosTan\n9819:contourMeasureIter_next\n9820:contourMeasureIter_dispose\n9821:contourMeasureIter_create\n9822:compose_unicode\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9823:compose_indic\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9824:compose_hebrew\\28hb_ot_shape_normalize_context_t\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9825:compare_ppem\n9826:compare_offsets\n9827:compare_myanmar_order\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\n9828:compare_combining_class\\28hb_glyph_info_t\\20const*\\2c\\20hb_glyph_info_t\\20const*\\29\n9829:colorFilter_createSRGBToLinearGamma\n9830:colorFilter_createMode\n9831:colorFilter_createMatrix\n9832:colorFilter_createLinearToSRGBGamma\n9833:colorFilter_compose\n9834:collect_features_use\\28hb_ot_shape_planner_t*\\29\n9835:collect_features_myanmar\\28hb_ot_shape_planner_t*\\29\n9836:collect_features_khmer\\28hb_ot_shape_planner_t*\\29\n9837:collect_features_indic\\28hb_ot_shape_planner_t*\\29\n9838:collect_features_hangul\\28hb_ot_shape_planner_t*\\29\n9839:collect_features_arabic\\28hb_ot_shape_planner_t*\\29\n9840:clip\\28SkPath\\20const&\\2c\\20SkHalfPlane\\20const&\\29::$_0::__invoke\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\n9841:cleanup\n9842:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitStatement\\28SkSL::Statement\\20const&\\29\n9843:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n9844:check_for_passthrough_local_coords_and_dead_varyings\\28SkSL::Program\\20const&\\2c\\20unsigned\\20int*\\29::Visitor::visitExpression\\28SkSL::Expression\\20const&\\29\n9845:cff_slot_init\n9846:cff_slot_done\n9847:cff_size_request\n9848:cff_size_init\n9849:cff_size_done\n9850:cff_sid_to_glyph_name\n9851:cff_set_var_design\n9852:cff_set_mm_weightvector\n9853:cff_set_mm_blend\n9854:cff_set_instance\n9855:cff_random\n9856:cff_ps_has_glyph_names\n9857:cff_ps_get_font_info\n9858:cff_ps_get_font_extra\n9859:cff_parse_vsindex\n9860:cff_parse_private_dict\n9861:cff_parse_multiple_master\n9862:cff_parse_maxstack\n9863:cff_parse_font_matrix\n9864:cff_parse_font_bbox\n9865:cff_parse_cid_ros\n9866:cff_parse_blend\n9867:cff_metrics_adjust\n9868:cff_hadvance_adjust\n9869:cff_get_var_design\n9870:cff_get_var_blend\n9871:cff_get_standard_encoding\n9872:cff_get_ros\n9873:cff_get_ps_name\n9874:cff_get_name_index\n9875:cff_get_mm_weightvector\n9876:cff_get_mm_var\n9877:cff_get_mm_blend\n9878:cff_get_is_cid\n9879:cff_get_interface\n9880:cff_get_glyph_name\n9881:cff_get_cmap_info\n9882:cff_get_cid_from_glyph_index\n9883:cff_get_advances\n9884:cff_free_glyph_data\n9885:cff_face_init\n9886:cff_face_done\n9887:cff_driver_init\n9888:cff_done_blend\n9889:cff_decoder_prepare\n9890:cff_decoder_init\n9891:cff_cmap_unicode_init\n9892:cff_cmap_unicode_char_next\n9893:cff_cmap_unicode_char_index\n9894:cff_cmap_encoding_init\n9895:cff_cmap_encoding_done\n9896:cff_cmap_encoding_char_next\n9897:cff_cmap_encoding_char_index\n9898:cff_builder_start_point\n9899:cf2_free_instance\n9900:cf2_decoder_parse_charstrings\n9901:cf2_builder_moveTo\n9902:cf2_builder_lineTo\n9903:cf2_builder_cubeTo\n9904:canvas_translate\n9905:canvas_transform\n9906:canvas_skew\n9907:canvas_scale\n9908:canvas_saveLayer\n9909:canvas_save\n9910:canvas_rotate\n9911:canvas_restoreToCount\n9912:canvas_restore\n9913:canvas_getTransform\n9914:canvas_getSaveCount\n9915:canvas_getLocalClipBounds\n9916:canvas_getDeviceClipBounds\n9917:canvas_drawVertices\n9918:canvas_drawShadow\n9919:canvas_drawRect\n9920:canvas_drawRRect\n9921:canvas_drawPoints\n9922:canvas_drawPicture\n9923:canvas_drawPath\n9924:canvas_drawParagraph\n9925:canvas_drawPaint\n9926:canvas_drawOval\n9927:canvas_drawLine\n9928:canvas_drawImageRect\n9929:canvas_drawImageNine\n9930:canvas_drawImage\n9931:canvas_drawDRRect\n9932:canvas_drawColor\n9933:canvas_drawCircle\n9934:canvas_drawAtlas\n9935:canvas_drawArc\n9936:canvas_clipRect\n9937:canvas_clipRRect\n9938:canvas_clipPath\n9939:cancel_notification\n9940:bw_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n9941:bw_square_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9942:bw_pt_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9943:bw_poly_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9944:bw_line_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9945:bool\\20\\28anonymous\\20namespace\\29::FindVisitor<\\28anonymous\\20namespace\\29::SpotVerticesFactory>\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9946:bool\\20\\28anonymous\\20namespace\\29::FindVisitor<\\28anonymous\\20namespace\\29::AmbientVerticesFactory>\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n9947:bool\\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9948:bool\\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9949:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9950:bool\\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\\28void\\20const*\\2c\\20OT::hb_ot_apply_context_t*\\29\n9951:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&_hb_arabic_pua_trad_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9952:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&_hb_arabic_pua_simp_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9953:bool\\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\\2c\\20&OT::_hb_symbol_pua_map\\28unsigned\\20int\\29>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9954:bool\\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtableFormat12>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9955:bool\\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtable>\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n9956:blur_y_radius_4\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9957:blur_y_radius_3\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9958:blur_y_radius_2\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9959:blur_y_radius_1\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9960:blur_x_radius_4\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9961:blur_x_radius_3\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9962:blur_x_radius_2\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9963:blur_x_radius_1\\28skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>\\20const&\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\2c\\20skvx::Vec<8\\2c\\20unsigned\\20short>*\\29\n9964:blit_row_s32a_blend\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9965:blit_row_s32_opaque\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9966:blit_row_s32_blend\\28unsigned\\20int*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int\\29\n9967:argb32_to_a8\\28unsigned\\20char*\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n9968:arabic_fallback_shape\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9969:afm_parser_parse\n9970:afm_parser_init\n9971:afm_parser_done\n9972:afm_compare_kern_pairs\n9973:af_property_set\n9974:af_property_get\n9975:af_latin_metrics_scale\n9976:af_latin_metrics_init\n9977:af_latin_hints_init\n9978:af_latin_hints_apply\n9979:af_latin_get_standard_widths\n9980:af_indic_metrics_scale\n9981:af_indic_metrics_init\n9982:af_indic_hints_init\n9983:af_indic_hints_apply\n9984:af_get_interface\n9985:af_face_globals_free\n9986:af_dummy_hints_init\n9987:af_dummy_hints_apply\n9988:af_cjk_metrics_init\n9989:af_autofitter_load_glyph\n9990:af_autofitter_init\n9991:aa_square_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9992:aa_poly_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9993:aa_line_hair_proc\\28PtProcRec\\20const&\\2c\\20SkPoint\\20const*\\2c\\20int\\2c\\20SkBlitter*\\29\n9994:_hb_ot_font_destroy\\28void*\\29\n9995:_hb_glyph_info_is_default_ignorable\\28hb_glyph_info_t\\20const*\\29\n9996:_hb_face_for_data_reference_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n9997:_hb_face_for_data_closure_destroy\\28void*\\29\n9998:_hb_clear_substitution_flags\\28hb_ot_shape_plan_t\\20const*\\2c\\20hb_font_t*\\2c\\20hb_buffer_t*\\29\n9999:_hb_blob_destroy\\28void*\\29\n10000:_emscripten_tls_init\n10001:_emscripten_thread_init\n10002:_emscripten_thread_free_data\n10003:_emscripten_thread_exit\n10004:_emscripten_thread_crashed\n10005:_emscripten_run_in_main_runtime_thread_js\n10006:_emscripten_check_mailbox\n10007:__wasm_init_memory\n10008:__wasm_call_ctors\n10009:__stdio_write\n10010:__stdio_seek\n10011:__stdio_read\n10012:__stdio_close\n10013:__emscripten_stdout_seek\n10014:__cxxabiv1::__vmi_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n10015:__cxxabiv1::__vmi_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n10016:__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n10017:__cxxabiv1::__si_class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n10018:__cxxabiv1::__si_class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n10019:__cxxabiv1::__si_class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n10020:__cxxabiv1::__class_type_info::search_below_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n10021:__cxxabiv1::__class_type_info::search_above_dst\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void\\20const*\\2c\\20void\\20const*\\2c\\20int\\2c\\20bool\\29\\20const\n10022:__cxxabiv1::__class_type_info::has_unambiguous_public_base\\28__cxxabiv1::__dynamic_cast_info*\\2c\\20void*\\2c\\20int\\29\\20const\n10023:__cxxabiv1::__class_type_info::can_catch\\28__cxxabiv1::__shim_type_info\\20const*\\2c\\20void*&\\29\\20const\n10024:__cxx_global_array_dtor.9439\n10025:__cxx_global_array_dtor.87\n10026:__cxx_global_array_dtor.7957\n10027:__cxx_global_array_dtor.72\n10028:__cxx_global_array_dtor.6084\n10029:__cxx_global_array_dtor.57\n10030:__cxx_global_array_dtor.5029\n10031:__cxx_global_array_dtor.4718\n10032:__cxx_global_array_dtor.44\n10033:__cxx_global_array_dtor.42\n10034:__cxx_global_array_dtor.4158\n10035:__cxx_global_array_dtor.402\n10036:__cxx_global_array_dtor.40\n10037:__cxx_global_array_dtor.38\n10038:__cxx_global_array_dtor.3738\n10039:__cxx_global_array_dtor.36\n10040:__cxx_global_array_dtor.34\n10041:__cxx_global_array_dtor.331\n10042:__cxx_global_array_dtor.32\n10043:__cxx_global_array_dtor.1964\n10044:__cxx_global_array_dtor.138\n10045:__cxx_global_array_dtor.135\n10046:__cxx_global_array_dtor.111\n10047:__cxx_global_array_dtor.1\n10048:__cxx_global_array_dtor\n10049:__cxa_is_pointer_type\n10050:\\28anonymous\\20namespace\\29::skhb_nominal_glyphs\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n10051:\\28anonymous\\20namespace\\29::skhb_nominal_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n10052:\\28anonymous\\20namespace\\29::skhb_glyph_h_advances\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\20const*\\2c\\20unsigned\\20int\\2c\\20int*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n10053:\\28anonymous\\20namespace\\29::skhb_glyph_h_advance\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n10054:\\28anonymous\\20namespace\\29::skhb_glyph_extents\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20hb_glyph_extents_t*\\2c\\20void*\\29\n10055:\\28anonymous\\20namespace\\29::skhb_glyph\\28hb_font_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20void*\\29\n10056:\\28anonymous\\20namespace\\29::skhb_get_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29::$_0::__invoke\\28void*\\29\n10057:\\28anonymous\\20namespace\\29::skhb_get_table\\28hb_face_t*\\2c\\20unsigned\\20int\\2c\\20void*\\29\n10058:\\28anonymous\\20namespace\\29::make_morphology\\28\\28anonymous\\20namespace\\29::MorphType\\2c\\20SkSize\\2c\\20sk_sp<SkImageFilter>\\2c\\20SkImageFilters::CropRect\\20const&\\29\n10059:\\28anonymous\\20namespace\\29::create_sub_hb_font\\28SkFont\\20const&\\2c\\20std::__2::unique_ptr<hb_font_t\\2c\\20SkOverloadedFunctionObject<void\\20\\28hb_font_t*\\29\\2c\\20&hb_font_destroy>>\\20const&\\29::$_0::__invoke\\28void*\\29\n10060:\\28anonymous\\20namespace\\29::YUVPlanesRec::~YUVPlanesRec\\28\\29.1\n10061:\\28anonymous\\20namespace\\29::YUVPlanesRec::getCategory\\28\\29\\20const\n10062:\\28anonymous\\20namespace\\29::YUVPlanesRec::diagnostic_only_getDiscardable\\28\\29\\20const\n10063:\\28anonymous\\20namespace\\29::YUVPlanesRec::bytesUsed\\28\\29\\20const\n10064:\\28anonymous\\20namespace\\29::YUVPlanesRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n10065:\\28anonymous\\20namespace\\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\\28\\29.1\n10066:\\28anonymous\\20namespace\\29::TriangulatingPathOp::~TriangulatingPathOp\\28\\29.1\n10067:\\28anonymous\\20namespace\\29::TriangulatingPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10068:\\28anonymous\\20namespace\\29::TriangulatingPathOp::programInfo\\28\\29\n10069:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10070:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10071:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10072:\\28anonymous\\20namespace\\29::TriangulatingPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10073:\\28anonymous\\20namespace\\29::TriangulatingPathOp::name\\28\\29\\20const\n10074:\\28anonymous\\20namespace\\29::TriangulatingPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10075:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::unflattenSize\\28\\29\\20const\n10076:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::instanceFlags\\28\\29\\20const\n10077:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n10078:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n10079:\\28anonymous\\20namespace\\29::TransformedMaskSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n10080:\\28anonymous\\20namespace\\29::TextureOpImpl::~TextureOpImpl\\28\\29.1\n10081:\\28anonymous\\20namespace\\29::TextureOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10082:\\28anonymous\\20namespace\\29::TextureOpImpl::programInfo\\28\\29\n10083:\\28anonymous\\20namespace\\29::TextureOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10084:\\28anonymous\\20namespace\\29::TextureOpImpl::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10085:\\28anonymous\\20namespace\\29::TextureOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10086:\\28anonymous\\20namespace\\29::TextureOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10087:\\28anonymous\\20namespace\\29::TextureOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10088:\\28anonymous\\20namespace\\29::TextureOpImpl::name\\28\\29\\20const\n10089:\\28anonymous\\20namespace\\29::TextureOpImpl::fixedFunctionFlags\\28\\29\\20const\n10090:\\28anonymous\\20namespace\\29::TextureOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10091:\\28anonymous\\20namespace\\29::TentPass::startBlur\\28\\29\n10092:\\28anonymous\\20namespace\\29::TentPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n10093:\\28anonymous\\20namespace\\29::TentPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::makePass\\28void*\\2c\\20SkArenaAlloc*\\29\\20const\n10094:\\28anonymous\\20namespace\\29::TentPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::bufferSizeBytes\\28\\29\\20const\n10095:\\28anonymous\\20namespace\\29::StaticVertexAllocator::~StaticVertexAllocator\\28\\29.1\n10096:\\28anonymous\\20namespace\\29::StaticVertexAllocator::unlock\\28int\\29\n10097:\\28anonymous\\20namespace\\29::StaticVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n10098:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::currentScript\\28\\29\\20const\n10099:\\28anonymous\\20namespace\\29::SkUnicodeHbScriptRunIterator::consume\\28\\29\n10100:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10101:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10102:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10103:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::getTypeName\\28\\29\\20const\n10104:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10105:\\28anonymous\\20namespace\\29::SkMorphologyImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10106:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10107:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10108:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10109:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::getTypeName\\28\\29\\20const\n10110:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10111:\\28anonymous\\20namespace\\29::SkMatrixTransformImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10112:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Quad\\28FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20void*\\29\n10113:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Move\\28FT_Vector_\\20const*\\2c\\20void*\\29\n10114:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Line\\28FT_Vector_\\20const*\\2c\\20void*\\29\n10115:\\28anonymous\\20namespace\\29::SkFTGeometrySink::Cubic\\28FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20FT_Vector_\\20const*\\2c\\20void*\\29\n10116:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n10117:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onGetFamilyName\\28SkString*\\29\\20const\n10118:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n10119:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCreateFamilyNameIterator\\28\\29\\20const\n10120:\\28anonymous\\20namespace\\29::SkEmptyTypeface::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n10121:\\28anonymous\\20namespace\\29::SkCropImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10122:\\28anonymous\\20namespace\\29::SkCropImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10123:\\28anonymous\\20namespace\\29::SkCropImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10124:\\28anonymous\\20namespace\\29::SkCropImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n10125:\\28anonymous\\20namespace\\29::SkCropImageFilter::getTypeName\\28\\29\\20const\n10126:\\28anonymous\\20namespace\\29::SkCropImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10127:\\28anonymous\\20namespace\\29::SkCropImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10128:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10129:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10130:\\28anonymous\\20namespace\\29::SkComposeImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10131:\\28anonymous\\20namespace\\29::SkComposeImageFilter::getTypeName\\28\\29\\20const\n10132:\\28anonymous\\20namespace\\29::SkComposeImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10133:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\\28\\29.1\n10134:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onIsColorFilterNode\\28SkColorFilter**\\29\\20const\n10135:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10136:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10137:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10138:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n10139:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::getTypeName\\28\\29\\20const\n10140:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10141:\\28anonymous\\20namespace\\29::SkColorFilterImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10142:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10143:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10144:\\28anonymous\\20namespace\\29::SkBlurImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10145:\\28anonymous\\20namespace\\29::SkBlurImageFilter::getTypeName\\28\\29\\20const\n10146:\\28anonymous\\20namespace\\29::SkBlurImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10147:\\28anonymous\\20namespace\\29::SkBlurImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10148:\\28anonymous\\20namespace\\29::SkBlendImageFilter::~SkBlendImageFilter\\28\\29.1\n10149:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onGetOutputLayerBounds\\28skif::Mapping\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10150:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onGetInputLayerBounds\\28skif::Mapping\\20const&\\2c\\20skif::LayerSpace<SkIRect>\\20const&\\2c\\20std::__2::optional<skif::LayerSpace<SkIRect>>\\29\\20const\n10151:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onFilterImage\\28skif::Context\\20const&\\29\\20const\n10152:\\28anonymous\\20namespace\\29::SkBlendImageFilter::onAffectsTransparentBlack\\28\\29\\20const\n10153:\\28anonymous\\20namespace\\29::SkBlendImageFilter::getTypeName\\28\\29\\20const\n10154:\\28anonymous\\20namespace\\29::SkBlendImageFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10155:\\28anonymous\\20namespace\\29::SkBlendImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n10156:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::~SkBidiIterator_icu\\28\\29.1\n10157:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::getLevelAt\\28int\\29\n10158:\\28anonymous\\20namespace\\29::SkBidiIterator_icu::getLength\\28\\29\n10159:\\28anonymous\\20namespace\\29::SimpleTriangleShader::name\\28\\29\\20const\n10160:\\28anonymous\\20namespace\\29::SimpleTriangleShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10161:\\28anonymous\\20namespace\\29::SimpleTriangleShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10162:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::FontRunIterator&\\2c\\20SkShaper::BiDiRunIterator&\\2c\\20SkShaper::ScriptRunIterator&\\2c\\20SkShaper::LanguageRunIterator&\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n10163:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::FontRunIterator&\\2c\\20SkShaper::BiDiRunIterator&\\2c\\20SkShaper::ScriptRunIterator&\\2c\\20SkShaper::LanguageRunIterator&\\2c\\20SkShaper::Feature\\20const*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n10164:\\28anonymous\\20namespace\\29::ShaperHarfBuzz::shape\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkFont\\20const&\\2c\\20bool\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n10165:\\28anonymous\\20namespace\\29::ShapeDontWrapOrReorder::~ShapeDontWrapOrReorder\\28\\29\n10166:\\28anonymous\\20namespace\\29::ShapeDontWrapOrReorder::wrap\\28char\\20const*\\2c\\20unsigned\\20long\\2c\\20SkShaper::BiDiRunIterator\\20const&\\2c\\20SkShaper::LanguageRunIterator\\20const&\\2c\\20SkShaper::ScriptRunIterator\\20const&\\2c\\20SkShaper::FontRunIterator\\20const&\\2c\\20\\28anonymous\\20namespace\\29::RunIteratorQueue&\\2c\\20SkShaper::Feature\\20const*\\2c\\20unsigned\\20long\\2c\\20float\\2c\\20SkShaper::RunHandler*\\29\\20const\n10167:\\28anonymous\\20namespace\\29::ShadowInvalidator::~ShadowInvalidator\\28\\29.1\n10168:\\28anonymous\\20namespace\\29::ShadowInvalidator::changed\\28\\29\n10169:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\\28\\29.1\n10170:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10171:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::programInfo\\28\\29\n10172:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10173:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10174:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10175:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10176:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::name\\28\\29\\20const\n10177:\\28anonymous\\20namespace\\29::ShadowCircularRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10178:\\28anonymous\\20namespace\\29::SDFTSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n10179:\\28anonymous\\20namespace\\29::SDFTSubRun::vertexFiller\\28\\29\\20const\n10180:\\28anonymous\\20namespace\\29::SDFTSubRun::unflattenSize\\28\\29\\20const\n10181:\\28anonymous\\20namespace\\29::SDFTSubRun::testingOnly_packedGlyphIDToGlyph\\28sktext::gpu::StrikeCache*\\29\\20const\n10182:\\28anonymous\\20namespace\\29::SDFTSubRun::glyphs\\28\\29\\20const\n10183:\\28anonymous\\20namespace\\29::SDFTSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n10184:\\28anonymous\\20namespace\\29::SDFTSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n10185:\\28anonymous\\20namespace\\29::SDFTSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n10186:\\28anonymous\\20namespace\\29::RectsBlurRec::~RectsBlurRec\\28\\29.1\n10187:\\28anonymous\\20namespace\\29::RectsBlurRec::getCategory\\28\\29\\20const\n10188:\\28anonymous\\20namespace\\29::RectsBlurRec::diagnostic_only_getDiscardable\\28\\29\\20const\n10189:\\28anonymous\\20namespace\\29::RectsBlurRec::bytesUsed\\28\\29\\20const\n10190:\\28anonymous\\20namespace\\29::RectsBlurRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n10191:\\28anonymous\\20namespace\\29::RRectBlurRec::~RRectBlurRec\\28\\29.1\n10192:\\28anonymous\\20namespace\\29::RRectBlurRec::getCategory\\28\\29\\20const\n10193:\\28anonymous\\20namespace\\29::RRectBlurRec::diagnostic_only_getDiscardable\\28\\29\\20const\n10194:\\28anonymous\\20namespace\\29::RRectBlurRec::bytesUsed\\28\\29\\20const\n10195:\\28anonymous\\20namespace\\29::RRectBlurRec::Visitor\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n10196:\\28anonymous\\20namespace\\29::PathSubRun::~PathSubRun\\28\\29.1\n10197:\\28anonymous\\20namespace\\29::PathSubRun::unflattenSize\\28\\29\\20const\n10198:\\28anonymous\\20namespace\\29::PathSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n10199:\\28anonymous\\20namespace\\29::PathSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n10200:\\28anonymous\\20namespace\\29::MipMapRec::~MipMapRec\\28\\29.1\n10201:\\28anonymous\\20namespace\\29::MipMapRec::getCategory\\28\\29\\20const\n10202:\\28anonymous\\20namespace\\29::MipMapRec::diagnostic_only_getDiscardable\\28\\29\\20const\n10203:\\28anonymous\\20namespace\\29::MipMapRec::bytesUsed\\28\\29\\20const\n10204:\\28anonymous\\20namespace\\29::MipMapRec::Finder\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n10205:\\28anonymous\\20namespace\\29::MiddleOutShader::~MiddleOutShader\\28\\29.1\n10206:\\28anonymous\\20namespace\\29::MiddleOutShader::name\\28\\29\\20const\n10207:\\28anonymous\\20namespace\\29::MiddleOutShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::emitVertexCode\\28GrShaderCaps\\20const&\\2c\\20GrPathTessellationShader\\20const&\\2c\\20GrGLSLVertexBuilder*\\2c\\20GrGLSLVaryingHandler*\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10208:\\28anonymous\\20namespace\\29::MiddleOutShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10209:\\28anonymous\\20namespace\\29::MiddleOutShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10210:\\28anonymous\\20namespace\\29::MeshOp::~MeshOp\\28\\29.1\n10211:\\28anonymous\\20namespace\\29::MeshOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10212:\\28anonymous\\20namespace\\29::MeshOp::programInfo\\28\\29\n10213:\\28anonymous\\20namespace\\29::MeshOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10214:\\28anonymous\\20namespace\\29::MeshOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10215:\\28anonymous\\20namespace\\29::MeshOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10216:\\28anonymous\\20namespace\\29::MeshOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10217:\\28anonymous\\20namespace\\29::MeshOp::name\\28\\29\\20const\n10218:\\28anonymous\\20namespace\\29::MeshOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10219:\\28anonymous\\20namespace\\29::MeshGP::~MeshGP\\28\\29.1\n10220:\\28anonymous\\20namespace\\29::MeshGP::onTextureSampler\\28int\\29\\20const\n10221:\\28anonymous\\20namespace\\29::MeshGP::name\\28\\29\\20const\n10222:\\28anonymous\\20namespace\\29::MeshGP::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10223:\\28anonymous\\20namespace\\29::MeshGP::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10224:\\28anonymous\\20namespace\\29::MeshGP::Impl::~Impl\\28\\29.1\n10225:\\28anonymous\\20namespace\\29::MeshGP::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10226:\\28anonymous\\20namespace\\29::MeshGP::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10227:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::toLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10228:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleShader\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10229:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleColorFilter\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10230:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::sampleBlender\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10231:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::getMainName\\28\\29\n10232:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::fromLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n10233:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::defineFunction\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n10234:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::declareUniform\\28SkSL::VarDeclaration\\20const*\\29\n10235:\\28anonymous\\20namespace\\29::MeshGP::Impl::MeshCallbacks::declareFunction\\28char\\20const*\\29\n10236:\\28anonymous\\20namespace\\29::HQDownSampler::buildLevel\\28SkPixmap\\20const&\\2c\\20SkPixmap\\20const&\\29\n10237:\\28anonymous\\20namespace\\29::GaussPass::startBlur\\28\\29\n10238:\\28anonymous\\20namespace\\29::GaussPass::blurSegment\\28int\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20unsigned\\20int*\\2c\\20int\\29\n10239:\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::makePass\\28void*\\2c\\20SkArenaAlloc*\\29\\20const\n10240:\\28anonymous\\20namespace\\29::GaussPass::MakeMaker\\28double\\2c\\20SkArenaAlloc*\\29::Maker::bufferSizeBytes\\28\\29\\20const\n10241:\\28anonymous\\20namespace\\29::FillRectOpImpl::~FillRectOpImpl\\28\\29.1\n10242:\\28anonymous\\20namespace\\29::FillRectOpImpl::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10243:\\28anonymous\\20namespace\\29::FillRectOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10244:\\28anonymous\\20namespace\\29::FillRectOpImpl::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10245:\\28anonymous\\20namespace\\29::FillRectOpImpl::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10246:\\28anonymous\\20namespace\\29::FillRectOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10247:\\28anonymous\\20namespace\\29::FillRectOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10248:\\28anonymous\\20namespace\\29::FillRectOpImpl::name\\28\\29\\20const\n10249:\\28anonymous\\20namespace\\29::FillRectOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10250:\\28anonymous\\20namespace\\29::ExternalWebGLTexture::~ExternalWebGLTexture\\28\\29.1\n10251:\\28anonymous\\20namespace\\29::ExternalWebGLTexture::getBackendTexture\\28\\29\n10252:\\28anonymous\\20namespace\\29::ExternalWebGLTexture::dispose\\28\\29\n10253:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onMakeProgramImpl\\28\\29\\20const\n10254:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10255:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::name\\28\\29\\20const\n10256:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::clone\\28\\29\\20const\n10257:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10258:\\28anonymous\\20namespace\\29::EllipticalRRectEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10259:\\28anonymous\\20namespace\\29::DrawableSubRun::~DrawableSubRun\\28\\29.1\n10260:\\28anonymous\\20namespace\\29::DrawableSubRun::unflattenSize\\28\\29\\20const\n10261:\\28anonymous\\20namespace\\29::DrawableSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n10262:\\28anonymous\\20namespace\\29::DrawableSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n10263:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::~DrawAtlasPathShader\\28\\29.1\n10264:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::onTextureSampler\\28int\\29\\20const\n10265:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::name\\28\\29\\20const\n10266:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10267:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10268:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10269:\\28anonymous\\20namespace\\29::DrawAtlasPathShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10270:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\\28\\29.1\n10271:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10272:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10273:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10274:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::name\\28\\29\\20const\n10275:\\28anonymous\\20namespace\\29::DrawAtlasOpImpl::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10276:\\28anonymous\\20namespace\\29::DirectMaskSubRun::vertexStride\\28SkMatrix\\20const&\\29\\20const\n10277:\\28anonymous\\20namespace\\29::DirectMaskSubRun::unflattenSize\\28\\29\\20const\n10278:\\28anonymous\\20namespace\\29::DirectMaskSubRun::instanceFlags\\28\\29\\20const\n10279:\\28anonymous\\20namespace\\29::DirectMaskSubRun::draw\\28SkCanvas*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20std::__2::function<void\\20\\28sktext::gpu::AtlasSubRun\\20const*\\2c\\20SkPoint\\2c\\20SkPaint\\20const&\\2c\\20sk_sp<SkRefCnt>\\2c\\20sktext::gpu::RendererData\\29>\\20const&\\29\\20const\n10280:\\28anonymous\\20namespace\\29::DirectMaskSubRun::doFlatten\\28SkWriteBuffer&\\29\\20const\n10281:\\28anonymous\\20namespace\\29::DirectMaskSubRun::canReuse\\28SkPaint\\20const&\\2c\\20SkMatrix\\20const&\\29\\20const\n10282:\\28anonymous\\20namespace\\29::DefaultPathOp::~DefaultPathOp\\28\\29.1\n10283:\\28anonymous\\20namespace\\29::DefaultPathOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10284:\\28anonymous\\20namespace\\29::DefaultPathOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10285:\\28anonymous\\20namespace\\29::DefaultPathOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10286:\\28anonymous\\20namespace\\29::DefaultPathOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10287:\\28anonymous\\20namespace\\29::DefaultPathOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10288:\\28anonymous\\20namespace\\29::DefaultPathOp::name\\28\\29\\20const\n10289:\\28anonymous\\20namespace\\29::DefaultPathOp::fixedFunctionFlags\\28\\29\\20const\n10290:\\28anonymous\\20namespace\\29::DefaultPathOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10291:\\28anonymous\\20namespace\\29::CircularRRectEffect::onMakeProgramImpl\\28\\29\\20const\n10292:\\28anonymous\\20namespace\\29::CircularRRectEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n10293:\\28anonymous\\20namespace\\29::CircularRRectEffect::name\\28\\29\\20const\n10294:\\28anonymous\\20namespace\\29::CircularRRectEffect::clone\\28\\29\\20const\n10295:\\28anonymous\\20namespace\\29::CircularRRectEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n10296:\\28anonymous\\20namespace\\29::CircularRRectEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n10297:\\28anonymous\\20namespace\\29::CachedTessellationsRec::~CachedTessellationsRec\\28\\29.1\n10298:\\28anonymous\\20namespace\\29::CachedTessellationsRec::getCategory\\28\\29\\20const\n10299:\\28anonymous\\20namespace\\29::CachedTessellationsRec::bytesUsed\\28\\29\\20const\n10300:\\28anonymous\\20namespace\\29::CachedTessellations::~CachedTessellations\\28\\29.1\n10301:\\28anonymous\\20namespace\\29::CacheImpl::~CacheImpl\\28\\29.1\n10302:\\28anonymous\\20namespace\\29::CacheImpl::set\\28SkImageFilterCacheKey\\20const&\\2c\\20SkImageFilter\\20const*\\2c\\20skif::FilterResult\\20const&\\29\n10303:\\28anonymous\\20namespace\\29::CacheImpl::purge\\28\\29\n10304:\\28anonymous\\20namespace\\29::CacheImpl::purgeByImageFilter\\28SkImageFilter\\20const*\\29\n10305:\\28anonymous\\20namespace\\29::CacheImpl::get\\28SkImageFilterCacheKey\\20const&\\2c\\20skif::FilterResult*\\29\\20const\n10306:\\28anonymous\\20namespace\\29::BoundingBoxShader::name\\28\\29\\20const\n10307:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n10308:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n10309:\\28anonymous\\20namespace\\29::BoundingBoxShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n10310:\\28anonymous\\20namespace\\29::AAHairlineOp::~AAHairlineOp\\28\\29.1\n10311:\\28anonymous\\20namespace\\29::AAHairlineOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n10312:\\28anonymous\\20namespace\\29::AAHairlineOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n10313:\\28anonymous\\20namespace\\29::AAHairlineOp::onPrePrepareDraws\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10314:\\28anonymous\\20namespace\\29::AAHairlineOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n10315:\\28anonymous\\20namespace\\29::AAHairlineOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n10316:\\28anonymous\\20namespace\\29::AAHairlineOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n10317:\\28anonymous\\20namespace\\29::AAHairlineOp::name\\28\\29\\20const\n10318:\\28anonymous\\20namespace\\29::AAHairlineOp::fixedFunctionFlags\\28\\29\\20const\n10319:\\28anonymous\\20namespace\\29::AAHairlineOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n10320:Write_CVT_Stretched\n10321:Write_CVT\n10322:Vertish_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10323:Vertish_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10324:VertState::Triangles\\28VertState*\\29\n10325:VertState::TrianglesX\\28VertState*\\29\n10326:VertState::TriangleStrip\\28VertState*\\29\n10327:VertState::TriangleStripX\\28VertState*\\29\n10328:VertState::TriangleFan\\28VertState*\\29\n10329:VertState::TriangleFanX\\28VertState*\\29\n10330:VLine_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10331:VLine_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10332:TextureSourceImageGenerator::~TextureSourceImageGenerator\\28\\29.1\n10333:TextureSourceImageGenerator::generateExternalTexture\\28GrRecordingContext*\\2c\\20skgpu::Mipmapped\\29\n10334:TT_Set_MM_Blend\n10335:TT_RunIns\n10336:TT_Load_Simple_Glyph\n10337:TT_Load_Glyph_Header\n10338:TT_Load_Composite_Glyph\n10339:TT_Get_Var_Design\n10340:TT_Get_MM_Blend\n10341:TT_Forget_Glyph_Frame\n10342:TT_Access_Glyph_Frame\n10343:TOUPPER\\28unsigned\\20char\\29\n10344:TOLOWER\\28unsigned\\20char\\29\n10345:SquareCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n10346:Sprite_D32_S32::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10347:Skwasm::Surface::fRasterizeImage\\28Skwasm::Surface*\\2c\\20SkImage*\\2c\\20Skwasm::ImageByteFormat\\2c\\20unsigned\\20int\\29\n10348:Skwasm::Surface::fOnRasterizeComplete\\28Skwasm::Surface*\\2c\\20SkData*\\2c\\20unsigned\\20int\\29\n10349:Skwasm::Surface::fDispose\\28Skwasm::Surface*\\29\n10350:Skwasm::Surface::Surface\\28\\29::$_0::__invoke\\28void*\\29\n10351:SkWeakRefCnt::internal_dispose\\28\\29\\20const\n10352:SkUnicode_client::~SkUnicode_client\\28\\29.1\n10353:SkUnicode_client::toUpper\\28SkString\\20const&\\2c\\20char\\20const*\\29\n10354:SkUnicode_client::toUpper\\28SkString\\20const&\\29\n10355:SkUnicode_client::reorderVisual\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\n10356:SkUnicode_client::makeBreakIterator\\28char\\20const*\\2c\\20SkUnicode::BreakType\\29\n10357:SkUnicode_client::makeBreakIterator\\28SkUnicode::BreakType\\29\n10358:SkUnicode_client::makeBidiIterator\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\n10359:SkUnicode_client::makeBidiIterator\\28char\\20const*\\2c\\20int\\2c\\20SkBidiIterator::Direction\\29\n10360:SkUnicode_client::getWords\\28char\\20const*\\2c\\20int\\2c\\20char\\20const*\\2c\\20std::__2::vector<unsigned\\20long\\2c\\20std::__2::allocator<unsigned\\20long>>*\\29\n10361:SkUnicode_client::getBidiRegions\\28char\\20const*\\2c\\20int\\2c\\20SkUnicode::TextDirection\\2c\\20std::__2::vector<SkUnicode::BidiRegion\\2c\\20std::__2::allocator<SkUnicode::BidiRegion>>*\\29\n10362:SkUnicode_client::computeCodeUnitFlags\\28char16_t*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29\n10363:SkUnicode_client::computeCodeUnitFlags\\28char*\\2c\\20int\\2c\\20bool\\2c\\20skia_private::TArray<SkUnicode::CodeUnitFlags\\2c\\20true>*\\29\n10364:SkUnicodeHardCodedCharProperties::isWhitespace\\28int\\29\n10365:SkUnicodeHardCodedCharProperties::isTabulation\\28int\\29\n10366:SkUnicodeHardCodedCharProperties::isSpace\\28int\\29\n10367:SkUnicodeHardCodedCharProperties::isIdeographic\\28int\\29\n10368:SkUnicodeHardCodedCharProperties::isHardBreak\\28int\\29\n10369:SkUnicodeHardCodedCharProperties::isControl\\28int\\29\n10370:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\\28\\29.1\n10371:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\\28\\29\n10372:SkUnicodeBidiRunIterator::endOfCurrentRun\\28\\29\\20const\n10373:SkUnicodeBidiRunIterator::currentLevel\\28\\29\\20const\n10374:SkUnicodeBidiRunIterator::consume\\28\\29\n10375:SkUnicodeBidiRunIterator::atEnd\\28\\29\\20const\n10376:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\\28\\29.1\n10377:SkTypeface_FreeTypeStream::onOpenStream\\28int*\\29\\20const\n10378:SkTypeface_FreeTypeStream::onMakeFontData\\28\\29\\20const\n10379:SkTypeface_FreeTypeStream::onMakeClone\\28SkFontArguments\\20const&\\29\\20const\n10380:SkTypeface_FreeTypeStream::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n10381:SkTypeface_FreeType::onGlyphMaskNeedsCurrentColor\\28\\29\\20const\n10382:SkTypeface_FreeType::onGetVariationDesignPosition\\28SkFontArguments::VariationPosition::Coordinate*\\2c\\20int\\29\\20const\n10383:SkTypeface_FreeType::onGetVariationDesignParameters\\28SkFontParameters::Variation::Axis*\\2c\\20int\\29\\20const\n10384:SkTypeface_FreeType::onGetUPEM\\28\\29\\20const\n10385:SkTypeface_FreeType::onGetTableTags\\28unsigned\\20int*\\29\\20const\n10386:SkTypeface_FreeType::onGetTableData\\28unsigned\\20int\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20void*\\29\\20const\n10387:SkTypeface_FreeType::onGetPostScriptName\\28SkString*\\29\\20const\n10388:SkTypeface_FreeType::onGetKerningPairAdjustments\\28unsigned\\20short\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n10389:SkTypeface_FreeType::onGetAdvancedMetrics\\28\\29\\20const\n10390:SkTypeface_FreeType::onFilterRec\\28SkScalerContextRec*\\29\\20const\n10391:SkTypeface_FreeType::onCreateScalerContext\\28SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29\\20const\n10392:SkTypeface_FreeType::onCreateFamilyNameIterator\\28\\29\\20const\n10393:SkTypeface_FreeType::onCountGlyphs\\28\\29\\20const\n10394:SkTypeface_FreeType::onCopyTableData\\28unsigned\\20int\\29\\20const\n10395:SkTypeface_FreeType::onCharsToGlyphs\\28int\\20const*\\2c\\20int\\2c\\20unsigned\\20short*\\29\\20const\n10396:SkTypeface_FreeType::getPostScriptGlyphNames\\28SkString*\\29\\20const\n10397:SkTypeface_FreeType::getGlyphToUnicodeMap\\28int*\\29\\20const\n10398:SkTypeface_Empty::~SkTypeface_Empty\\28\\29\n10399:SkTypeface_Custom::onGetFontDescriptor\\28SkFontDescriptor*\\2c\\20bool*\\29\\20const\n10400:SkTypeface::onOpenExistingStream\\28int*\\29\\20const\n10401:SkTypeface::onCopyTableData\\28unsigned\\20int\\29\\20const\n10402:SkTypeface::onComputeBounds\\28SkRect*\\29\\20const\n10403:SkTriColorShader::type\\28\\29\\20const\n10404:SkTriColorShader::isOpaque\\28\\29\\20const\n10405:SkTriColorShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10406:SkTransformShader::type\\28\\29\\20const\n10407:SkTransformShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10408:SkTQuad::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n10409:SkTQuad::setBounds\\28SkDRect*\\29\\20const\n10410:SkTQuad::ptAtT\\28double\\29\\20const\n10411:SkTQuad::make\\28SkArenaAlloc&\\29\\20const\n10412:SkTQuad::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n10413:SkTQuad::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n10414:SkTQuad::dxdyAtT\\28double\\29\\20const\n10415:SkTQuad::debugInit\\28\\29\n10416:SkTCubic::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n10417:SkTCubic::setBounds\\28SkDRect*\\29\\20const\n10418:SkTCubic::ptAtT\\28double\\29\\20const\n10419:SkTCubic::otherPts\\28int\\2c\\20SkDPoint\\20const**\\29\\20const\n10420:SkTCubic::make\\28SkArenaAlloc&\\29\\20const\n10421:SkTCubic::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n10422:SkTCubic::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n10423:SkTCubic::hullIntersects\\28SkDCubic\\20const&\\2c\\20bool*\\29\\20const\n10424:SkTCubic::dxdyAtT\\28double\\29\\20const\n10425:SkTCubic::debugInit\\28\\29\n10426:SkTCubic::controlsInside\\28\\29\\20const\n10427:SkTCubic::collapsed\\28\\29\\20const\n10428:SkTConic::subDivide\\28double\\2c\\20double\\2c\\20SkTCurve*\\29\\20const\n10429:SkTConic::setBounds\\28SkDRect*\\29\\20const\n10430:SkTConic::ptAtT\\28double\\29\\20const\n10431:SkTConic::make\\28SkArenaAlloc&\\29\\20const\n10432:SkTConic::intersectRay\\28SkIntersections*\\2c\\20SkDLine\\20const&\\29\\20const\n10433:SkTConic::hullIntersects\\28SkTCurve\\20const&\\2c\\20bool*\\29\\20const\n10434:SkTConic::hullIntersects\\28SkDQuad\\20const&\\2c\\20bool*\\29\\20const\n10435:SkTConic::dxdyAtT\\28double\\29\\20const\n10436:SkTConic::debugInit\\28\\29\n10437:SkSweepGradient::getTypeName\\28\\29\\20const\n10438:SkSweepGradient::flatten\\28SkWriteBuffer&\\29\\20const\n10439:SkSweepGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10440:SkSweepGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n10441:SkSurface_Raster::~SkSurface_Raster\\28\\29.1\n10442:SkSurface_Raster::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n10443:SkSurface_Raster::onRestoreBackingMutability\\28\\29\n10444:SkSurface_Raster::onNewSurface\\28SkImageInfo\\20const&\\29\n10445:SkSurface_Raster::onNewImageSnapshot\\28SkIRect\\20const*\\29\n10446:SkSurface_Raster::onNewCanvas\\28\\29\n10447:SkSurface_Raster::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10448:SkSurface_Raster::onCopyOnWrite\\28SkSurface::ContentChangeMode\\29\n10449:SkSurface_Raster::imageInfo\\28\\29\\20const\n10450:SkSurface_Ganesh::~SkSurface_Ganesh\\28\\29.1\n10451:SkSurface_Ganesh::replaceBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrSurfaceOrigin\\2c\\20SkSurface::ContentChangeMode\\2c\\20void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n10452:SkSurface_Ganesh::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n10453:SkSurface_Ganesh::onWait\\28int\\2c\\20GrBackendSemaphore\\20const*\\2c\\20bool\\29\n10454:SkSurface_Ganesh::onNewSurface\\28SkImageInfo\\20const&\\29\n10455:SkSurface_Ganesh::onNewImageSnapshot\\28SkIRect\\20const*\\29\n10456:SkSurface_Ganesh::onNewCanvas\\28\\29\n10457:SkSurface_Ganesh::onIsCompatible\\28GrSurfaceCharacterization\\20const&\\29\\20const\n10458:SkSurface_Ganesh::onGetRecordingContext\\28\\29\\20const\n10459:SkSurface_Ganesh::onDraw\\28SkCanvas*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10460:SkSurface_Ganesh::onCopyOnWrite\\28SkSurface::ContentChangeMode\\29\n10461:SkSurface_Ganesh::onCharacterize\\28GrSurfaceCharacterization*\\29\\20const\n10462:SkSurface_Ganesh::onCapabilities\\28\\29\n10463:SkSurface_Ganesh::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n10464:SkSurface_Ganesh::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n10465:SkSurface_Ganesh::imageInfo\\28\\29\\20const\n10466:SkSurface_Base::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\n10467:SkSurface::imageInfo\\28\\29\\20const\n10468:SkStrikeCache::~SkStrikeCache\\28\\29.1\n10469:SkStrikeCache::findOrCreateScopedStrike\\28SkStrikeSpec\\20const&\\29\n10470:SkStrike::~SkStrike\\28\\29.1\n10471:SkStrike::strikePromise\\28\\29\n10472:SkStrike::roundingSpec\\28\\29\\20const\n10473:SkStrike::getDescriptor\\28\\29\\20const\n10474:SkSpriteBlitter_Memcpy::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10475:SkSpriteBlitter::setup\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\n10476:SkSpriteBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10477:SkSpriteBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10478:SkSpriteBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10479:SkSpecialImage_Raster::~SkSpecialImage_Raster\\28\\29.1\n10480:SkSpecialImage_Raster::onMakeBackingStoreSubset\\28SkIRect\\20const&\\29\\20const\n10481:SkSpecialImage_Raster::getSize\\28\\29\\20const\n10482:SkSpecialImage_Raster::backingStoreDimensions\\28\\29\\20const\n10483:SkSpecialImage_Raster::asShader\\28SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\\20const\n10484:SkSpecialImage_Raster::asImage\\28\\29\\20const\n10485:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\\28\\29.1\n10486:SkSpecialImage_Gpu::onMakeBackingStoreSubset\\28SkIRect\\20const&\\29\\20const\n10487:SkSpecialImage_Gpu::getSize\\28\\29\\20const\n10488:SkSpecialImage_Gpu::backingStoreDimensions\\28\\29\\20const\n10489:SkSpecialImage_Gpu::asImage\\28\\29\\20const\n10490:SkSpecialImage::asShader\\28SkTileMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20bool\\29\\20const\n10491:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\\28\\29.1\n10492:SkShaper::TrivialLanguageRunIterator::currentLanguage\\28\\29\\20const\n10493:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\\28\\29.1\n10494:SkShaper::TrivialBiDiRunIterator::currentLevel\\28\\29\\20const\n10495:SkScan::HairSquarePath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10496:SkScan::HairRoundPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10497:SkScan::HairPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10498:SkScan::AntiHairSquarePath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10499:SkScan::AntiHairRoundPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10500:SkScan::AntiHairPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10501:SkScan::AntiFillPath\\28SkPath\\20const&\\2c\\20SkRasterClip\\20const&\\2c\\20SkBlitter*\\29\n10502:SkScalerContext_FreeType::~SkScalerContext_FreeType\\28\\29.1\n10503:SkScalerContext_FreeType::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n10504:SkScalerContext_FreeType::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n10505:SkScalerContext_FreeType::generateImage\\28SkGlyph\\20const&\\2c\\20void*\\29\n10506:SkScalerContext_FreeType::generateFontMetrics\\28SkFontMetrics*\\29\n10507:SkScalerContext_FreeType::generateDrawable\\28SkGlyph\\20const&\\29\n10508:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::~SkScalerContext_Empty\\28\\29\n10509:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generatePath\\28SkGlyph\\20const&\\2c\\20SkPath*\\29\n10510:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generateMetrics\\28SkGlyph\\20const&\\2c\\20SkArenaAlloc*\\29\n10511:SkScalerContext::MakeEmpty\\28sk_sp<SkTypeface>\\2c\\20SkScalerContextEffects\\20const&\\2c\\20SkDescriptor\\20const*\\29::SkScalerContext_Empty::generateFontMetrics\\28SkFontMetrics*\\29\n10512:SkSRGBColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n10513:SkSRGBColorSpaceLuminance::fromLuma\\28float\\2c\\20float\\29\\20const\n10514:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_3::__invoke\\28double\\2c\\20double\\29\n10515:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_2::__invoke\\28double\\2c\\20double\\29\n10516:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_1::__invoke\\28double\\2c\\20double\\29\n10517:SkSL::simplify_componentwise\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::Expression\\20const&\\2c\\20SkSL::Operator\\2c\\20SkSL::Expression\\20const&\\29::$_0::__invoke\\28double\\2c\\20double\\29\n10518:SkSL::negate_value\\28double\\29\n10519:SkSL::eliminate_unreachable_code\\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\\28\\29.1\n10520:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\\28\\29.1\n10521:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>&\\29\n10522:SkSL::eliminate_dead_local_variables\\28SkSL::Context\\20const&\\2c\\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\\2c\\20std::__2::default_delete<SkSL::ProgramElement>>>\\2c\\20SkSL::ProgramUsage*\\29::DeadLocalVariableEliminator::visitExpressionPtr\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>&\\29\n10523:SkSL::count_returns_at_end_of_control_flow\\28SkSL::FunctionDefinition\\20const&\\29::CountReturnsAtEndOfControlFlow::visitStatement\\28SkSL::Statement\\20const&\\29\n10524:SkSL::bitwise_not_value\\28double\\29\n10525:SkSL::\\28anonymous\\20namespace\\29::VariableWriteVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10526:SkSL::\\28anonymous\\20namespace\\29::SampleOutsideMainVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n10527:SkSL::\\28anonymous\\20namespace\\29::SampleOutsideMainVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10528:SkSL::\\28anonymous\\20namespace\\29::ReturnsNonOpaqueColorVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n10529:SkSL::\\28anonymous\\20namespace\\29::ReturnsInputAlphaVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n10530:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n10531:SkSL::\\28anonymous\\20namespace\\29::NodeCountVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10532:SkSL::\\28anonymous\\20namespace\\29::MergeSampleUsageVisitor::visitProgramElement\\28SkSL::ProgramElement\\20const&\\29\n10533:SkSL::\\28anonymous\\20namespace\\29::MergeSampleUsageVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10534:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::~FinalizationVisitor\\28\\29.1\n10535:SkSL::\\28anonymous\\20namespace\\29::FinalizationVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10536:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::~ES2IndexingVisitor\\28\\29.1\n10537:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n10538:SkSL::\\28anonymous\\20namespace\\29::ES2IndexingVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10539:SkSL::VectorType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n10540:SkSL::VectorType::isAllowedInES2\\28\\29\\20const\n10541:SkSL::VariableReference::clone\\28SkSL::Position\\29\\20const\n10542:SkSL::Variable::~Variable\\28\\29.1\n10543:SkSL::Variable::setInterfaceBlock\\28SkSL::InterfaceBlock*\\29\n10544:SkSL::Variable::mangledName\\28\\29\\20const\n10545:SkSL::Variable::layout\\28\\29\\20const\n10546:SkSL::Variable::description\\28\\29\\20const\n10547:SkSL::VarDeclaration::~VarDeclaration\\28\\29.1\n10548:SkSL::VarDeclaration::description\\28\\29\\20const\n10549:SkSL::TypeReference::clone\\28SkSL::Position\\29\\20const\n10550:SkSL::Type::minimumValue\\28\\29\\20const\n10551:SkSL::Type::maximumValue\\28\\29\\20const\n10552:SkSL::Type::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n10553:SkSL::Type::fields\\28\\29\\20const\n10554:SkSL::Type::description\\28\\29\\20const\n10555:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\\28SkSL::Context\\20const&\\2c\\20std::__2::unique_ptr<SkSL::SwitchStatement\\2c\\20std::__2::default_delete<SkSL::SwitchStatement>>\\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\\28\\29.1\n10556:SkSL::Tracer::var\\28int\\2c\\20int\\29\n10557:SkSL::Tracer::scope\\28int\\29\n10558:SkSL::Tracer::line\\28int\\29\n10559:SkSL::Tracer::exit\\28int\\29\n10560:SkSL::Tracer::enter\\28int\\29\n10561:SkSL::TextureType::textureAccess\\28\\29\\20const\n10562:SkSL::TextureType::isMultisampled\\28\\29\\20const\n10563:SkSL::TextureType::isDepth\\28\\29\\20const\n10564:SkSL::TextureType::isArrayedTexture\\28\\29\\20const\n10565:SkSL::TernaryExpression::~TernaryExpression\\28\\29.1\n10566:SkSL::TernaryExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10567:SkSL::TernaryExpression::clone\\28SkSL::Position\\29\\20const\n10568:SkSL::TProgramVisitor<SkSL::ProgramWriterTypes>::visitExpression\\28SkSL::Expression&\\29\n10569:SkSL::Swizzle::~Swizzle\\28\\29.1\n10570:SkSL::Swizzle::description\\28SkSL::OperatorPrecedence\\29\\20const\n10571:SkSL::Swizzle::clone\\28SkSL::Position\\29\\20const\n10572:SkSL::SwitchStatement::description\\28\\29\\20const\n10573:SkSL::SwitchCase::description\\28\\29\\20const\n10574:SkSL::StructType::structNestingDepth\\28\\29\\20const\n10575:SkSL::StructType::slotType\\28unsigned\\20long\\29\\20const\n10576:SkSL::StructType::isOrContainsUnsizedArray\\28\\29\\20const\n10577:SkSL::StructType::isOrContainsAtomic\\28\\29\\20const\n10578:SkSL::StructType::isOrContainsArray\\28\\29\\20const\n10579:SkSL::StructType::isInterfaceBlock\\28\\29\\20const\n10580:SkSL::StructType::isBuiltin\\28\\29\\20const\n10581:SkSL::StructType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n10582:SkSL::StructType::isAllowedInES2\\28\\29\\20const\n10583:SkSL::StructType::fields\\28\\29\\20const\n10584:SkSL::StructDefinition::description\\28\\29\\20const\n10585:SkSL::StringStream::~StringStream\\28\\29.1\n10586:SkSL::StringStream::write\\28void\\20const*\\2c\\20unsigned\\20long\\29\n10587:SkSL::StringStream::writeText\\28char\\20const*\\29\n10588:SkSL::StringStream::write8\\28unsigned\\20char\\29\n10589:SkSL::Setting::description\\28SkSL::OperatorPrecedence\\29\\20const\n10590:SkSL::Setting::clone\\28SkSL::Position\\29\\20const\n10591:SkSL::ScalarType::priority\\28\\29\\20const\n10592:SkSL::ScalarType::numberKind\\28\\29\\20const\n10593:SkSL::ScalarType::minimumValue\\28\\29\\20const\n10594:SkSL::ScalarType::maximumValue\\28\\29\\20const\n10595:SkSL::ScalarType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n10596:SkSL::ScalarType::isAllowedInES2\\28\\29\\20const\n10597:SkSL::ScalarType::bitWidth\\28\\29\\20const\n10598:SkSL::SamplerType::textureAccess\\28\\29\\20const\n10599:SkSL::SamplerType::isMultisampled\\28\\29\\20const\n10600:SkSL::SamplerType::isDepth\\28\\29\\20const\n10601:SkSL::SamplerType::isArrayedTexture\\28\\29\\20const\n10602:SkSL::SamplerType::dimensions\\28\\29\\20const\n10603:SkSL::ReturnStatement::description\\28\\29\\20const\n10604:SkSL::RP::VariableLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10605:SkSL::RP::VariableLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10606:SkSL::RP::VariableLValue::isWritable\\28\\29\\20const\n10607:SkSL::RP::UnownedLValueSlice::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10608:SkSL::RP::UnownedLValueSlice::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10609:SkSL::RP::UnownedLValueSlice::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10610:SkSL::RP::SwizzleLValue::~SwizzleLValue\\28\\29.1\n10611:SkSL::RP::SwizzleLValue::swizzle\\28\\29\n10612:SkSL::RP::SwizzleLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10613:SkSL::RP::SwizzleLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10614:SkSL::RP::SwizzleLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10615:SkSL::RP::ScratchLValue::~ScratchLValue\\28\\29.1\n10616:SkSL::RP::ScratchLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10617:SkSL::RP::ScratchLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10618:SkSL::RP::LValueSlice::~LValueSlice\\28\\29.1\n10619:SkSL::RP::ImmutableLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10620:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\\28\\29.1\n10621:SkSL::RP::DynamicIndexLValue::store\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10622:SkSL::RP::DynamicIndexLValue::push\\28SkSL::RP::Generator*\\2c\\20SkSL::RP::SlotRange\\2c\\20SkSL::RP::AutoStack*\\2c\\20SkSpan<signed\\20char\\20const>\\29\n10623:SkSL::RP::DynamicIndexLValue::isWritable\\28\\29\\20const\n10624:SkSL::RP::DynamicIndexLValue::fixedSlotRange\\28SkSL::RP::Generator*\\29\n10625:SkSL::ProgramVisitor::visitStatementPtr\\28std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\20const&\\29\n10626:SkSL::ProgramVisitor::visitExpressionPtr\\28std::__2::unique_ptr<SkSL::Expression\\2c\\20std::__2::default_delete<SkSL::Expression>>\\20const&\\29\n10627:SkSL::PrefixExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10628:SkSL::PrefixExpression::clone\\28SkSL::Position\\29\\20const\n10629:SkSL::PostfixExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10630:SkSL::PostfixExpression::clone\\28SkSL::Position\\29\\20const\n10631:SkSL::Poison::description\\28SkSL::OperatorPrecedence\\29\\20const\n10632:SkSL::Poison::clone\\28SkSL::Position\\29\\20const\n10633:SkSL::PipelineStage::Callbacks::getMainName\\28\\29\n10634:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\\28\\29.1\n10635:SkSL::Parser::Checkpoint::ForwardingErrorReporter::handleError\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n10636:SkSL::Nop::description\\28\\29\\20const\n10637:SkSL::ModifiersDeclaration::description\\28\\29\\20const\n10638:SkSL::MethodReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n10639:SkSL::MethodReference::clone\\28SkSL::Position\\29\\20const\n10640:SkSL::MatrixType::slotCount\\28\\29\\20const\n10641:SkSL::MatrixType::rows\\28\\29\\20const\n10642:SkSL::MatrixType::isAllowedInES2\\28\\29\\20const\n10643:SkSL::LiteralType::minimumValue\\28\\29\\20const\n10644:SkSL::LiteralType::maximumValue\\28\\29\\20const\n10645:SkSL::Literal::getConstantValue\\28int\\29\\20const\n10646:SkSL::Literal::description\\28SkSL::OperatorPrecedence\\29\\20const\n10647:SkSL::Literal::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n10648:SkSL::Literal::clone\\28SkSL::Position\\29\\20const\n10649:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_uintBitsToFloat\\28double\\2c\\20double\\2c\\20double\\29\n10650:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_trunc\\28double\\2c\\20double\\2c\\20double\\29\n10651:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_tanh\\28double\\2c\\20double\\2c\\20double\\29\n10652:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_tan\\28double\\2c\\20double\\2c\\20double\\29\n10653:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sub\\28double\\2c\\20double\\2c\\20double\\29\n10654:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_step\\28double\\2c\\20double\\2c\\20double\\29\n10655:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sqrt\\28double\\2c\\20double\\2c\\20double\\29\n10656:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_smoothstep\\28double\\2c\\20double\\2c\\20double\\29\n10657:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sinh\\28double\\2c\\20double\\2c\\20double\\29\n10658:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sin\\28double\\2c\\20double\\2c\\20double\\29\n10659:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_sign\\28double\\2c\\20double\\2c\\20double\\29\n10660:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_saturate\\28double\\2c\\20double\\2c\\20double\\29\n10661:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_round\\28double\\2c\\20double\\2c\\20double\\29\n10662:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_radians\\28double\\2c\\20double\\2c\\20double\\29\n10663:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_pow\\28double\\2c\\20double\\2c\\20double\\29\n10664:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_opposite_sign\\28double\\2c\\20double\\2c\\20double\\29\n10665:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_not\\28double\\2c\\20double\\2c\\20double\\29\n10666:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mod\\28double\\2c\\20double\\2c\\20double\\29\n10667:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_mix\\28double\\2c\\20double\\2c\\20double\\29\n10668:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_min\\28double\\2c\\20double\\2c\\20double\\29\n10669:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_max\\28double\\2c\\20double\\2c\\20double\\29\n10670:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_log\\28double\\2c\\20double\\2c\\20double\\29\n10671:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_log2\\28double\\2c\\20double\\2c\\20double\\29\n10672:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_inversesqrt\\28double\\2c\\20double\\2c\\20double\\29\n10673:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_intBitsToFloat\\28double\\2c\\20double\\2c\\20double\\29\n10674:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_fract\\28double\\2c\\20double\\2c\\20double\\29\n10675:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_fma\\28double\\2c\\20double\\2c\\20double\\29\n10676:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floor\\28double\\2c\\20double\\2c\\20double\\29\n10677:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floatBitsToUint\\28double\\2c\\20double\\2c\\20double\\29\n10678:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_floatBitsToInt\\28double\\2c\\20double\\2c\\20double\\29\n10679:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_exp\\28double\\2c\\20double\\2c\\20double\\29\n10680:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_exp2\\28double\\2c\\20double\\2c\\20double\\29\n10681:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_div\\28double\\2c\\20double\\2c\\20double\\29\n10682:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_degrees\\28double\\2c\\20double\\2c\\20double\\29\n10683:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_cosh\\28double\\2c\\20double\\2c\\20double\\29\n10684:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_cos\\28double\\2c\\20double\\2c\\20double\\29\n10685:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_clamp\\28double\\2c\\20double\\2c\\20double\\29\n10686:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_ceil\\28double\\2c\\20double\\2c\\20double\\29\n10687:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atanh\\28double\\2c\\20double\\2c\\20double\\29\n10688:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atan\\28double\\2c\\20double\\2c\\20double\\29\n10689:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_atan2\\28double\\2c\\20double\\2c\\20double\\29\n10690:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_asinh\\28double\\2c\\20double\\2c\\20double\\29\n10691:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_asin\\28double\\2c\\20double\\2c\\20double\\29\n10692:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_add\\28double\\2c\\20double\\2c\\20double\\29\n10693:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_acosh\\28double\\2c\\20double\\2c\\20double\\29\n10694:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_acos\\28double\\2c\\20double\\2c\\20double\\29\n10695:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::evaluate_abs\\28double\\2c\\20double\\2c\\20double\\29\n10696:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_notEqual\\28double\\2c\\20double\\29\n10697:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_lessThan\\28double\\2c\\20double\\29\n10698:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_lessThanEqual\\28double\\2c\\20double\\29\n10699:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_greaterThan\\28double\\2c\\20double\\29\n10700:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_greaterThanEqual\\28double\\2c\\20double\\29\n10701:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::compare_equal\\28double\\2c\\20double\\29\n10702:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_length\\28double\\2c\\20double\\2c\\20double\\29\n10703:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_dot\\28double\\2c\\20double\\2c\\20double\\29\n10704:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_distance\\28double\\2c\\20double\\2c\\20double\\29\n10705:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_any\\28double\\2c\\20double\\2c\\20double\\29\n10706:SkSL::Intrinsics::\\28anonymous\\20namespace\\29::coalesce_all\\28double\\2c\\20double\\2c\\20double\\29\n10707:SkSL::InterfaceBlock::~InterfaceBlock\\28\\29.1\n10708:SkSL::InterfaceBlock::~InterfaceBlock\\28\\29\n10709:SkSL::InterfaceBlock::description\\28\\29\\20const\n10710:SkSL::IndexExpression::~IndexExpression\\28\\29.1\n10711:SkSL::IndexExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10712:SkSL::IndexExpression::clone\\28SkSL::Position\\29\\20const\n10713:SkSL::IfStatement::~IfStatement\\28\\29.1\n10714:SkSL::IfStatement::description\\28\\29\\20const\n10715:SkSL::GlobalVarDeclaration::description\\28\\29\\20const\n10716:SkSL::GenericType::slotType\\28unsigned\\20long\\29\\20const\n10717:SkSL::GenericType::coercibleTypes\\28\\29\\20const\n10718:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\\28\\29.1\n10719:SkSL::FunctionReference::description\\28SkSL::OperatorPrecedence\\29\\20const\n10720:SkSL::FunctionReference::clone\\28SkSL::Position\\29\\20const\n10721:SkSL::FunctionPrototype::description\\28\\29\\20const\n10722:SkSL::FunctionDefinition::description\\28\\29\\20const\n10723:SkSL::FunctionDefinition::Convert\\28SkSL::Context\\20const&\\2c\\20SkSL::Position\\2c\\20SkSL::FunctionDeclaration\\20const&\\2c\\20std::__2::unique_ptr<SkSL::Statement\\2c\\20std::__2::default_delete<SkSL::Statement>>\\2c\\20bool\\29::Finalizer::~Finalizer\\28\\29.1\n10724:SkSL::FunctionCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n10725:SkSL::FunctionCall::clone\\28SkSL::Position\\29\\20const\n10726:SkSL::ForStatement::~ForStatement\\28\\29.1\n10727:SkSL::ForStatement::description\\28\\29\\20const\n10728:SkSL::FieldSymbol::description\\28\\29\\20const\n10729:SkSL::FieldAccess::clone\\28SkSL::Position\\29\\20const\n10730:SkSL::Extension::description\\28\\29\\20const\n10731:SkSL::ExtendedVariable::~ExtendedVariable\\28\\29.1\n10732:SkSL::ExtendedVariable::setInterfaceBlock\\28SkSL::InterfaceBlock*\\29\n10733:SkSL::ExtendedVariable::mangledName\\28\\29\\20const\n10734:SkSL::ExtendedVariable::layout\\28\\29\\20const\n10735:SkSL::ExtendedVariable::interfaceBlock\\28\\29\\20const\n10736:SkSL::ExtendedVariable::detachDeadInterfaceBlock\\28\\29\n10737:SkSL::ExpressionStatement::description\\28\\29\\20const\n10738:SkSL::Expression::getConstantValue\\28int\\29\\20const\n10739:SkSL::Expression::description\\28\\29\\20const\n10740:SkSL::EmptyExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10741:SkSL::EmptyExpression::clone\\28SkSL::Position\\29\\20const\n10742:SkSL::DoStatement::description\\28\\29\\20const\n10743:SkSL::DiscardStatement::description\\28\\29\\20const\n10744:SkSL::DebugTracePriv::~DebugTracePriv\\28\\29.1\n10745:SkSL::DebugTracePriv::writeTrace\\28SkWStream*\\29\\20const\n10746:SkSL::DebugTracePriv::dump\\28SkWStream*\\29\\20const\n10747:SkSL::CountReturnsWithLimit::visitStatement\\28SkSL::Statement\\20const&\\29\n10748:SkSL::ContinueStatement::description\\28\\29\\20const\n10749:SkSL::ConstructorStruct::clone\\28SkSL::Position\\29\\20const\n10750:SkSL::ConstructorSplat::getConstantValue\\28int\\29\\20const\n10751:SkSL::ConstructorSplat::clone\\28SkSL::Position\\29\\20const\n10752:SkSL::ConstructorScalarCast::clone\\28SkSL::Position\\29\\20const\n10753:SkSL::ConstructorMatrixResize::getConstantValue\\28int\\29\\20const\n10754:SkSL::ConstructorMatrixResize::clone\\28SkSL::Position\\29\\20const\n10755:SkSL::ConstructorDiagonalMatrix::getConstantValue\\28int\\29\\20const\n10756:SkSL::ConstructorDiagonalMatrix::clone\\28SkSL::Position\\29\\20const\n10757:SkSL::ConstructorCompoundCast::clone\\28SkSL::Position\\29\\20const\n10758:SkSL::ConstructorCompound::clone\\28SkSL::Position\\29\\20const\n10759:SkSL::ConstructorArrayCast::clone\\28SkSL::Position\\29\\20const\n10760:SkSL::ConstructorArray::clone\\28SkSL::Position\\29\\20const\n10761:SkSL::Compiler::CompilerErrorReporter::handleError\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\2c\\20SkSL::Position\\29\n10762:SkSL::CodeGenerator::~CodeGenerator\\28\\29\n10763:SkSL::ChildCall::description\\28SkSL::OperatorPrecedence\\29\\20const\n10764:SkSL::ChildCall::clone\\28SkSL::Position\\29\\20const\n10765:SkSL::BreakStatement::description\\28\\29\\20const\n10766:SkSL::Block::~Block\\28\\29.1\n10767:SkSL::Block::description\\28\\29\\20const\n10768:SkSL::BinaryExpression::~BinaryExpression\\28\\29.1\n10769:SkSL::BinaryExpression::description\\28SkSL::OperatorPrecedence\\29\\20const\n10770:SkSL::BinaryExpression::clone\\28SkSL::Position\\29\\20const\n10771:SkSL::ArrayType::slotType\\28unsigned\\20long\\29\\20const\n10772:SkSL::ArrayType::slotCount\\28\\29\\20const\n10773:SkSL::ArrayType::isUnsizedArray\\28\\29\\20const\n10774:SkSL::ArrayType::isOrContainsUnsizedArray\\28\\29\\20const\n10775:SkSL::ArrayType::isOrContainsAtomic\\28\\29\\20const\n10776:SkSL::ArrayType::isBuiltin\\28\\29\\20const\n10777:SkSL::ArrayType::isAllowedInUniform\\28SkSL::Position*\\29\\20const\n10778:SkSL::AnyConstructor::getConstantValue\\28int\\29\\20const\n10779:SkSL::AnyConstructor::description\\28SkSL::OperatorPrecedence\\29\\20const\n10780:SkSL::AnyConstructor::compareConstant\\28SkSL::Expression\\20const&\\29\\20const\n10781:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::~ProgramSizeVisitor\\28\\29.1\n10782:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitStatement\\28SkSL::Statement\\20const&\\29\n10783:SkSL::Analysis::CheckProgramStructure\\28SkSL::Program\\20const&\\2c\\20bool\\29::ProgramSizeVisitor::visitExpression\\28SkSL::Expression\\20const&\\29\n10784:SkSL::AliasType::textureAccess\\28\\29\\20const\n10785:SkSL::AliasType::slotType\\28unsigned\\20long\\29\\20const\n10786:SkSL::AliasType::slotCount\\28\\29\\20const\n10787:SkSL::AliasType::rows\\28\\29\\20const\n10788:SkSL::AliasType::priority\\28\\29\\20const\n10789:SkSL::AliasType::isVector\\28\\29\\20const\n10790:SkSL::AliasType::isUnsizedArray\\28\\29\\20const\n10791:SkSL::AliasType::isStruct\\28\\29\\20const\n10792:SkSL::AliasType::isScalar\\28\\29\\20const\n10793:SkSL::AliasType::isMultisampled\\28\\29\\20const\n10794:SkSL::AliasType::isMatrix\\28\\29\\20const\n10795:SkSL::AliasType::isLiteral\\28\\29\\20const\n10796:SkSL::AliasType::isInterfaceBlock\\28\\29\\20const\n10797:SkSL::AliasType::isDepth\\28\\29\\20const\n10798:SkSL::AliasType::isArrayedTexture\\28\\29\\20const\n10799:SkSL::AliasType::isArray\\28\\29\\20const\n10800:SkSL::AliasType::dimensions\\28\\29\\20const\n10801:SkSL::AliasType::componentType\\28\\29\\20const\n10802:SkSL::AliasType::columns\\28\\29\\20const\n10803:SkSL::AliasType::coercibleTypes\\28\\29\\20const\n10804:SkRuntimeShader::~SkRuntimeShader\\28\\29.1\n10805:SkRuntimeShader::type\\28\\29\\20const\n10806:SkRuntimeShader::isOpaque\\28\\29\\20const\n10807:SkRuntimeShader::getTypeName\\28\\29\\20const\n10808:SkRuntimeShader::flatten\\28SkWriteBuffer&\\29\\20const\n10809:SkRuntimeShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n10810:SkRuntimeEffect::~SkRuntimeEffect\\28\\29.1\n10811:SkRuntimeEffect::MakeFromSource\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\2c\\20SkSL::ProgramKind\\29\n10812:SkRuntimeEffect::MakeForColorFilter\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n10813:SkRuntimeEffect::MakeForBlender\\28SkString\\2c\\20SkRuntimeEffect::Options\\20const&\\29\n10814:SkRgnClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10815:SkRgnClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10816:SkRgnClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10817:SkRgnClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10818:SkRgnClipBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10819:SkRgnClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10820:SkRgnBuilder::~SkRgnBuilder\\28\\29.1\n10821:SkRgnBuilder::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10822:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::~Result\\28\\29.1\n10823:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::rowBytes\\28int\\29\\20const\n10824:SkRescaleAndReadPixels\\28SkBitmap\\2c\\20SkImageInfo\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29::Result::data\\28int\\29\\20const\n10825:SkRectClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10826:SkRectClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10827:SkRectClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n10828:SkRectClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10829:SkRectClipBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n10830:SkRectClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10831:SkRecorder::~SkRecorder\\28\\29.1\n10832:SkRecorder::willSave\\28\\29\n10833:SkRecorder::onResetClip\\28\\29\n10834:SkRecorder::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10835:SkRecorder::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n10836:SkRecorder::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n10837:SkRecorder::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n10838:SkRecorder::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10839:SkRecorder::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10840:SkRecorder::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n10841:SkRecorder::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n10842:SkRecorder::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n10843:SkRecorder::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10844:SkRecorder::onDrawPaint\\28SkPaint\\20const&\\29\n10845:SkRecorder::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10846:SkRecorder::onDrawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n10847:SkRecorder::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10848:SkRecorder::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n10849:SkRecorder::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10850:SkRecorder::onDrawGlyphRunList\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n10851:SkRecorder::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n10852:SkRecorder::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10853:SkRecorder::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n10854:SkRecorder::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10855:SkRecorder::onDrawBehind\\28SkPaint\\20const&\\29\n10856:SkRecorder::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n10857:SkRecorder::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n10858:SkRecorder::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n10859:SkRecorder::onDoSaveBehind\\28SkRect\\20const*\\29\n10860:SkRecorder::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n10861:SkRecorder::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10862:SkRecorder::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10863:SkRecorder::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10864:SkRecorder::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10865:SkRecorder::getSaveLayerStrategy\\28SkCanvas::SaveLayerRec\\20const&\\29\n10866:SkRecorder::didTranslate\\28float\\2c\\20float\\29\n10867:SkRecorder::didSetM44\\28SkM44\\20const&\\29\n10868:SkRecorder::didScale\\28float\\2c\\20float\\29\n10869:SkRecorder::didRestore\\28\\29\n10870:SkRecorder::didConcat44\\28SkM44\\20const&\\29\n10871:SkRecordedDrawable::~SkRecordedDrawable\\28\\29.1\n10872:SkRecordedDrawable::onMakePictureSnapshot\\28\\29\n10873:SkRecordedDrawable::onGetBounds\\28\\29\n10874:SkRecordedDrawable::onDraw\\28SkCanvas*\\29\n10875:SkRecordedDrawable::onApproximateBytesUsed\\28\\29\n10876:SkRecordedDrawable::getTypeName\\28\\29\\20const\n10877:SkRecordedDrawable::flatten\\28SkWriteBuffer&\\29\\20const\n10878:SkRecord::~SkRecord\\28\\29.1\n10879:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\\28\\29.1\n10880:SkRasterPipelineSpriteBlitter::setup\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\2c\\20SkPaint\\20const&\\29\n10881:SkRasterPipelineSpriteBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10882:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\\28\\29.1\n10883:SkRasterPipelineBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n10884:SkRasterPipelineBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n10885:SkRasterPipelineBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n10886:SkRasterPipelineBlitter::blitAntiV2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n10887:SkRasterPipelineBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n10888:SkRasterPipelineBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n10889:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_3::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10890:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_2::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10891:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_1::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10892:SkRasterPipelineBlitter::Create\\28SkPixmap\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkArenaAlloc*\\2c\\20SkRasterPipeline\\20const&\\2c\\20bool\\2c\\20bool\\2c\\20SkShader\\20const*\\29::$_0::__invoke\\28SkPixmap*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20long\\20long\\29\n10893:SkRadialGradient::getTypeName\\28\\29\\20const\n10894:SkRadialGradient::flatten\\28SkWriteBuffer&\\29\\20const\n10895:SkRadialGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n10896:SkRadialGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n10897:SkRTree::~SkRTree\\28\\29.1\n10898:SkRTree::search\\28SkRect\\20const&\\2c\\20std::__2::vector<int\\2c\\20std::__2::allocator<int>>*\\29\\20const\n10899:SkRTree::insert\\28SkRect\\20const*\\2c\\20int\\29\n10900:SkRTree::bytesUsed\\28\\29\\20const\n10901:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_3::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10902:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_2::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10903:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_1::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10904:SkPixmap::erase\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkIRect\\20const*\\29\\20const::$_0::__invoke\\28void*\\2c\\20unsigned\\20long\\20long\\2c\\20int\\29\n10905:SkPixelRef::~SkPixelRef\\28\\29.1\n10906:SkPictureRecord::~SkPictureRecord\\28\\29.1\n10907:SkPictureRecord::willSave\\28\\29\n10908:SkPictureRecord::willRestore\\28\\29\n10909:SkPictureRecord::onResetClip\\28\\29\n10910:SkPictureRecord::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10911:SkPictureRecord::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n10912:SkPictureRecord::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n10913:SkPictureRecord::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n10914:SkPictureRecord::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n10915:SkPictureRecord::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10916:SkPictureRecord::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10917:SkPictureRecord::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n10918:SkPictureRecord::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n10919:SkPictureRecord::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n10920:SkPictureRecord::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n10921:SkPictureRecord::onDrawPaint\\28SkPaint\\20const&\\29\n10922:SkPictureRecord::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10923:SkPictureRecord::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10924:SkPictureRecord::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n10925:SkPictureRecord::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n10926:SkPictureRecord::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n10927:SkPictureRecord::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n10928:SkPictureRecord::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n10929:SkPictureRecord::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n10930:SkPictureRecord::onDrawBehind\\28SkPaint\\20const&\\29\n10931:SkPictureRecord::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n10932:SkPictureRecord::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n10933:SkPictureRecord::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n10934:SkPictureRecord::onDoSaveBehind\\28SkRect\\20const*\\29\n10935:SkPictureRecord::onClipShader\\28sk_sp<SkShader>\\2c\\20SkClipOp\\29\n10936:SkPictureRecord::onClipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10937:SkPictureRecord::onClipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10938:SkPictureRecord::onClipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10939:SkPictureRecord::onClipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20SkCanvas::ClipEdgeStyle\\29\n10940:SkPictureRecord::getSaveLayerStrategy\\28SkCanvas::SaveLayerRec\\20const&\\29\n10941:SkPictureRecord::didTranslate\\28float\\2c\\20float\\29\n10942:SkPictureRecord::didSetM44\\28SkM44\\20const&\\29\n10943:SkPictureRecord::didScale\\28float\\2c\\20float\\29\n10944:SkPictureRecord::didConcat44\\28SkM44\\20const&\\29\n10945:SkPictureImageGenerator::~SkPictureImageGenerator\\28\\29.1\n10946:SkPictureImageGenerator::onGetPixels\\28SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20SkImageGenerator::Options\\20const&\\29\n10947:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\\28\\29.1\n10948:SkOTUtils::LocalizedStrings_SingleName::next\\28SkTypeface::LocalizedString*\\29\n10949:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\\28\\29.1\n10950:SkOTUtils::LocalizedStrings_NameTable::next\\28SkTypeface::LocalizedString*\\29\n10951:SkNoPixelsDevice::~SkNoPixelsDevice\\28\\29.1\n10952:SkNoPixelsDevice::replaceClip\\28SkIRect\\20const&\\29\n10953:SkNoPixelsDevice::pushClipStack\\28\\29\n10954:SkNoPixelsDevice::popClipStack\\28\\29\n10955:SkNoPixelsDevice::onClipShader\\28sk_sp<SkShader>\\29\n10956:SkNoPixelsDevice::isClipWideOpen\\28\\29\\20const\n10957:SkNoPixelsDevice::isClipRect\\28\\29\\20const\n10958:SkNoPixelsDevice::isClipEmpty\\28\\29\\20const\n10959:SkNoPixelsDevice::isClipAntiAliased\\28\\29\\20const\n10960:SkNoPixelsDevice::devClipBounds\\28\\29\\20const\n10961:SkNoPixelsDevice::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n10962:SkNoPixelsDevice::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10963:SkNoPixelsDevice::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10964:SkNoPixelsDevice::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n10965:SkNoPixelsDevice::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n10966:SkMipmap::~SkMipmap\\28\\29.1\n10967:SkMipmap::onDataChange\\28void*\\2c\\20void*\\29\n10968:SkMemoryStream::~SkMemoryStream\\28\\29.1\n10969:SkMemoryStream::setMemory\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20bool\\29\n10970:SkMemoryStream::seek\\28unsigned\\20long\\29\n10971:SkMemoryStream::rewind\\28\\29\n10972:SkMemoryStream::read\\28void*\\2c\\20unsigned\\20long\\29\n10973:SkMemoryStream::peek\\28void*\\2c\\20unsigned\\20long\\29\\20const\n10974:SkMemoryStream::onFork\\28\\29\\20const\n10975:SkMemoryStream::onDuplicate\\28\\29\\20const\n10976:SkMemoryStream::move\\28long\\29\n10977:SkMemoryStream::isAtEnd\\28\\29\\20const\n10978:SkMemoryStream::getMemoryBase\\28\\29\n10979:SkMemoryStream::getLength\\28\\29\\20const\n10980:SkMemoryStream::getData\\28\\29\\20const\n10981:SkMatrixColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n10982:SkMatrixColorFilter::onAsAColorMatrix\\28float*\\29\\20const\n10983:SkMatrixColorFilter::getTypeName\\28\\29\\20const\n10984:SkMatrixColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n10985:SkMatrixColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n10986:SkMatrix::Trans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10987:SkMatrix::Trans_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10988:SkMatrix::Scale_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10989:SkMatrix::Scale_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10990:SkMatrix::ScaleTrans_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10991:SkMatrix::Poly4Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n10992:SkMatrix::Poly3Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n10993:SkMatrix::Poly2Proc\\28SkPoint\\20const*\\2c\\20SkMatrix*\\29\n10994:SkMatrix::Persp_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10995:SkMatrix::Persp_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10996:SkMatrix::Identity_xy\\28SkMatrix\\20const&\\2c\\20float\\2c\\20float\\2c\\20SkPoint*\\29\n10997:SkMatrix::Identity_pts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10998:SkMatrix::Affine_vpts\\28SkMatrix\\20const&\\2c\\20SkPoint*\\2c\\20SkPoint\\20const*\\2c\\20int\\29\n10999:SkMaskFilterBase::filterRectsToNine\\28SkRect\\20const*\\2c\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n11000:SkMaskFilterBase::filterRRectToNine\\28SkRRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n11001:SkMallocPixelRef::MakeAllocate\\28SkImageInfo\\20const&\\2c\\20unsigned\\20long\\29::PixelRef::~PixelRef\\28\\29.1\n11002:SkMakePixelRefWithProc\\28int\\2c\\20int\\2c\\20unsigned\\20long\\2c\\20void*\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20void*\\29\\2c\\20void*\\29::PixelRef::~PixelRef\\28\\29.1\n11003:SkLocalMatrixShader::~SkLocalMatrixShader\\28\\29.1\n11004:SkLocalMatrixShader::~SkLocalMatrixShader\\28\\29\n11005:SkLocalMatrixShader::onIsAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n11006:SkLocalMatrixShader::makeAsALocalMatrixShader\\28SkMatrix*\\29\\20const\n11007:SkLocalMatrixShader::isOpaque\\28\\29\\20const\n11008:SkLocalMatrixShader::isConstant\\28\\29\\20const\n11009:SkLocalMatrixShader::getTypeName\\28\\29\\20const\n11010:SkLocalMatrixShader::flatten\\28SkWriteBuffer&\\29\\20const\n11011:SkLocalMatrixShader::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n11012:SkLocalMatrixShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11013:SkLinearGradient::getTypeName\\28\\29\\20const\n11014:SkLinearGradient::flatten\\28SkWriteBuffer&\\29\\20const\n11015:SkLinearGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n11016:SkJSONWriter::popScope\\28\\29\n11017:SkIntersections::hasOppT\\28double\\29\\20const\n11018:SkImage_Raster::~SkImage_Raster\\28\\29.1\n11019:SkImage_Raster::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n11020:SkImage_Raster::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n11021:SkImage_Raster::onPeekPixels\\28SkPixmap*\\29\\20const\n11022:SkImage_Raster::onPeekMips\\28\\29\\20const\n11023:SkImage_Raster::onPeekBitmap\\28\\29\\20const\n11024:SkImage_Raster::onMakeWithMipmaps\\28sk_sp<SkMipmap>\\29\\20const\n11025:SkImage_Raster::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n11026:SkImage_Raster::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n11027:SkImage_Raster::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n11028:SkImage_Raster::onHasMipmaps\\28\\29\\20const\n11029:SkImage_Raster::onAsLegacyBitmap\\28GrDirectContext*\\2c\\20SkBitmap*\\29\\20const\n11030:SkImage_Raster::notifyAddedToRasterCache\\28\\29\\20const\n11031:SkImage_Raster::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n11032:SkImage_LazyTexture::readPixelsProxy\\28GrDirectContext*\\2c\\20SkPixmap\\20const&\\29\\20const\n11033:SkImage_LazyTexture::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n11034:SkImage_Lazy::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n11035:SkImage_Lazy::onRefEncoded\\28\\29\\20const\n11036:SkImage_Lazy::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n11037:SkImage_Lazy::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n11038:SkImage_Lazy::onMakeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n11039:SkImage_Lazy::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n11040:SkImage_Lazy::onIsProtected\\28\\29\\20const\n11041:SkImage_Lazy::isValid\\28GrRecordingContext*\\29\\20const\n11042:SkImage_Lazy::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n11043:SkImage_GaneshBase::onReadPixels\\28GrDirectContext*\\2c\\20SkImageInfo\\20const&\\2c\\20void*\\2c\\20unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20SkImage::CachingHint\\29\\20const\n11044:SkImage_GaneshBase::onMakeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n11045:SkImage_GaneshBase::makeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n11046:SkImage_GaneshBase::makeColorTypeAndColorSpace\\28skgpu::graphite::Recorder*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n11047:SkImage_GaneshBase::makeColorTypeAndColorSpace\\28GrDirectContext*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n11048:SkImage_GaneshBase::isValid\\28GrRecordingContext*\\29\\20const\n11049:SkImage_GaneshBase::getROPixels\\28GrDirectContext*\\2c\\20SkBitmap*\\2c\\20SkImage::CachingHint\\29\\20const\n11050:SkImage_GaneshBase::directContext\\28\\29\\20const\n11051:SkImage_Ganesh::~SkImage_Ganesh\\28\\29.1\n11052:SkImage_Ganesh::textureSize\\28\\29\\20const\n11053:SkImage_Ganesh::onReinterpretColorSpace\\28sk_sp<SkColorSpace>\\29\\20const\n11054:SkImage_Ganesh::onMakeColorTypeAndColorSpace\\28SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20GrDirectContext*\\29\\20const\n11055:SkImage_Ganesh::onIsProtected\\28\\29\\20const\n11056:SkImage_Ganesh::onHasMipmaps\\28\\29\\20const\n11057:SkImage_Ganesh::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n11058:SkImage_Ganesh::onAsyncRescaleAndReadPixelsYUV420\\28SkYUVColorSpace\\2c\\20bool\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkIRect\\2c\\20SkISize\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n11059:SkImage_Ganesh::generatingSurfaceIsDeleted\\28\\29\n11060:SkImage_Ganesh::flush\\28GrDirectContext*\\2c\\20GrFlushInfo\\20const&\\29\\20const\n11061:SkImage_Ganesh::asView\\28GrRecordingContext*\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\\20const\n11062:SkImage_Ganesh::asFragmentProcessor\\28GrRecordingContext*\\2c\\20SkSamplingOptions\\2c\\20SkTileMode\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const*\\29\\20const\n11063:SkImage_Base::onAsyncRescaleAndReadPixels\\28SkImageInfo\\20const&\\2c\\20SkIRect\\2c\\20SkImage::RescaleGamma\\2c\\20SkImage::RescaleMode\\2c\\20void\\20\\28*\\29\\28void*\\2c\\20std::__2::unique_ptr<SkImage::AsyncReadResult\\20const\\2c\\20std::__2::default_delete<SkImage::AsyncReadResult\\20const>>\\29\\2c\\20void*\\29\\20const\n11064:SkImage_Base::notifyAddedToRasterCache\\28\\29\\20const\n11065:SkImage_Base::makeSubset\\28skgpu::graphite::Recorder*\\2c\\20SkIRect\\20const&\\2c\\20SkImage::RequiredProperties\\29\\20const\n11066:SkImage_Base::makeSubset\\28GrDirectContext*\\2c\\20SkIRect\\20const&\\29\\20const\n11067:SkImage_Base::makeColorTypeAndColorSpace\\28skgpu::graphite::Recorder*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n11068:SkImage_Base::makeColorTypeAndColorSpace\\28GrDirectContext*\\2c\\20SkColorType\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n11069:SkImage_Base::makeColorSpace\\28skgpu::graphite::Recorder*\\2c\\20sk_sp<SkColorSpace>\\2c\\20SkImage::RequiredProperties\\29\\20const\n11070:SkImage_Base::makeColorSpace\\28GrDirectContext*\\2c\\20sk_sp<SkColorSpace>\\29\\20const\n11071:SkImage_Base::isTextureBacked\\28\\29\\20const\n11072:SkImage_Base::isLazyGenerated\\28\\29\\20const\n11073:SkImageShader::~SkImageShader\\28\\29.1\n11074:SkImageShader::type\\28\\29\\20const\n11075:SkImageShader::onIsAImage\\28SkMatrix*\\2c\\20SkTileMode*\\29\\20const\n11076:SkImageShader::isOpaque\\28\\29\\20const\n11077:SkImageShader::getTypeName\\28\\29\\20const\n11078:SkImageShader::flatten\\28SkWriteBuffer&\\29\\20const\n11079:SkImageShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11080:SkImageGenerator::~SkImageGenerator\\28\\29.1\n11081:SkImageFilter::computeFastBounds\\28SkRect\\20const&\\29\\20const\n11082:SkGradientBaseShader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n11083:SkGradientBaseShader::isOpaque\\28\\29\\20const\n11084:SkGradientBaseShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11085:SkGaussianColorFilter::getTypeName\\28\\29\\20const\n11086:SkGaussianColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n11087:SkGammaColorSpaceLuminance::toLuma\\28float\\2c\\20float\\29\\20const\n11088:SkGammaColorSpaceLuminance::fromLuma\\28float\\2c\\20float\\29\\20const\n11089:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\\28\\29.1\n11090:SkFontStyleSet_Custom::getStyle\\28int\\2c\\20SkFontStyle*\\2c\\20SkString*\\29\n11091:SkFontScanner_FreeType::~SkFontScanner_FreeType\\28\\29.1\n11092:SkFontScanner_FreeType::scanFile\\28SkStreamAsset*\\2c\\20int*\\29\\20const\n11093:SkFontScanner_FreeType::scanFace\\28SkStreamAsset*\\2c\\20int\\2c\\20int*\\29\\20const\n11094:SkFontMgr_Custom::~SkFontMgr_Custom\\28\\29.1\n11095:SkFontMgr_Custom::onMatchFamily\\28char\\20const*\\29\\20const\n11096:SkFontMgr_Custom::onMatchFamilyStyle\\28char\\20const*\\2c\\20SkFontStyle\\20const&\\29\\20const\n11097:SkFontMgr_Custom::onMakeFromStreamIndex\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20int\\29\\20const\n11098:SkFontMgr_Custom::onMakeFromStreamArgs\\28std::__2::unique_ptr<SkStreamAsset\\2c\\20std::__2::default_delete<SkStreamAsset>>\\2c\\20SkFontArguments\\20const&\\29\\20const\n11099:SkFontMgr_Custom::onMakeFromFile\\28char\\20const*\\2c\\20int\\29\\20const\n11100:SkFontMgr_Custom::onMakeFromData\\28sk_sp<SkData>\\2c\\20int\\29\\20const\n11101:SkFontMgr_Custom::onLegacyMakeTypeface\\28char\\20const*\\2c\\20SkFontStyle\\29\\20const\n11102:SkFontMgr_Custom::onGetFamilyName\\28int\\2c\\20SkString*\\29\\20const\n11103:SkFILEStream::~SkFILEStream\\28\\29.1\n11104:SkFILEStream::seek\\28unsigned\\20long\\29\n11105:SkFILEStream::rewind\\28\\29\n11106:SkFILEStream::read\\28void*\\2c\\20unsigned\\20long\\29\n11107:SkFILEStream::onFork\\28\\29\\20const\n11108:SkFILEStream::onDuplicate\\28\\29\\20const\n11109:SkFILEStream::move\\28long\\29\n11110:SkFILEStream::isAtEnd\\28\\29\\20const\n11111:SkFILEStream::getPosition\\28\\29\\20const\n11112:SkFILEStream::getLength\\28\\29\\20const\n11113:SkEmptyShader::getTypeName\\28\\29\\20const\n11114:SkEmptyPicture::~SkEmptyPicture\\28\\29\n11115:SkEmptyPicture::cullRect\\28\\29\\20const\n11116:SkEmptyPicture::approximateBytesUsed\\28\\29\\20const\n11117:SkEmptyFontMgr::onMatchFamily\\28char\\20const*\\29\\20const\n11118:SkEdgeBuilder::build\\28SkPath\\20const&\\2c\\20SkIRect\\20const*\\2c\\20bool\\29::$_0::__invoke\\28SkEdgeClipper*\\2c\\20bool\\2c\\20void*\\29\n11119:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\\28\\29.1\n11120:SkDynamicMemoryWStream::bytesWritten\\28\\29\\20const\n11121:SkDraw::paintMasks\\28SkZip<SkGlyph\\20const*\\2c\\20SkPoint>\\2c\\20SkPaint\\20const&\\29\\20const\n11122:SkDevice::strikeDeviceInfo\\28\\29\\20const\n11123:SkDevice::drawSlug\\28SkCanvas*\\2c\\20sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n11124:SkDevice::drawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n11125:SkDevice::drawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n11126:SkDevice::drawImageLattice\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const&\\29\n11127:SkDevice::drawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n11128:SkDevice::drawEdgeAAImageSet\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n11129:SkDevice::drawDrawable\\28SkCanvas*\\2c\\20SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n11130:SkDevice::drawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11131:SkDevice::drawCoverageMask\\28SkSpecialImage\\20const*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\29\n11132:SkDevice::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n11133:SkDevice::drawAsTiledImageRect\\28SkCanvas*\\2c\\20SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n11134:SkDevice::createImageFilteringBackend\\28SkSurfaceProps\\20const&\\2c\\20SkColorType\\29\\20const\n11135:SkDashImpl::~SkDashImpl\\28\\29.1\n11136:SkDashImpl::onFilterPath\\28SkPath*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec*\\2c\\20SkRect\\20const*\\2c\\20SkMatrix\\20const&\\29\\20const\n11137:SkDashImpl::onAsPoints\\28SkPathEffectBase::PointData*\\2c\\20SkPath\\20const&\\2c\\20SkStrokeRec\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkRect\\20const*\\29\\20const\n11138:SkDashImpl::onAsADash\\28SkPathEffect::DashInfo*\\29\\20const\n11139:SkDashImpl::getTypeName\\28\\29\\20const\n11140:SkDashImpl::flatten\\28SkWriteBuffer&\\29\\20const\n11141:SkDCurve::nearPoint\\28SkPath::Verb\\2c\\20SkDPoint\\20const&\\2c\\20SkDPoint\\20const&\\29\\20const\n11142:SkContourMeasure::~SkContourMeasure\\28\\29.1\n11143:SkConicalGradient::getTypeName\\28\\29\\20const\n11144:SkConicalGradient::flatten\\28SkWriteBuffer&\\29\\20const\n11145:SkConicalGradient::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n11146:SkConicalGradient::appendGradientStages\\28SkArenaAlloc*\\2c\\20SkRasterPipeline*\\2c\\20SkRasterPipeline*\\29\\20const\n11147:SkComposeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n11148:SkComposeColorFilter::getTypeName\\28\\29\\20const\n11149:SkComposeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n11150:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\\28\\29.1\n11151:SkColorSpaceXformColorFilter::getTypeName\\28\\29\\20const\n11152:SkColorSpaceXformColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n11153:SkColorSpaceXformColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n11154:SkColorShader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n11155:SkColorShader::isOpaque\\28\\29\\20const\n11156:SkColorShader::getTypeName\\28\\29\\20const\n11157:SkColorShader::flatten\\28SkWriteBuffer&\\29\\20const\n11158:SkColorShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11159:SkColorFilterShader::~SkColorFilterShader\\28\\29.1\n11160:SkColorFilterShader::isOpaque\\28\\29\\20const\n11161:SkColorFilterShader::getTypeName\\28\\29\\20const\n11162:SkColorFilterShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11163:SkColorFilterBase::onFilterColor4f\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\2c\\20SkColorSpace*\\29\\20const\n11164:SkColor4Shader::~SkColor4Shader\\28\\29.1\n11165:SkColor4Shader::onAsLuminanceColor\\28SkRGBA4f<\\28SkAlphaType\\293>*\\29\\20const\n11166:SkColor4Shader::isOpaque\\28\\29\\20const\n11167:SkColor4Shader::getTypeName\\28\\29\\20const\n11168:SkColor4Shader::flatten\\28SkWriteBuffer&\\29\\20const\n11169:SkColor4Shader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11170:SkCoincidentSpans::setOppPtTStart\\28SkOpPtT\\20const*\\29\n11171:SkCoincidentSpans::setOppPtTEnd\\28SkOpPtT\\20const*\\29\n11172:SkCoincidentSpans::setCoinPtTStart\\28SkOpPtT\\20const*\\29\n11173:SkCoincidentSpans::setCoinPtTEnd\\28SkOpPtT\\20const*\\29\n11174:SkCanvas::~SkCanvas\\28\\29.1\n11175:SkCanvas::recordingContext\\28\\29\\20const\n11176:SkCanvas::recorder\\28\\29\\20const\n11177:SkCanvas::onPeekPixels\\28SkPixmap*\\29\n11178:SkCanvas::onNewSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n11179:SkCanvas::onImageInfo\\28\\29\\20const\n11180:SkCanvas::onGetProps\\28SkSurfaceProps*\\2c\\20bool\\29\\20const\n11181:SkCanvas::onDrawVerticesObject\\28SkVertices\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n11182:SkCanvas::onDrawTextBlob\\28SkTextBlob\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkPaint\\20const&\\29\n11183:SkCanvas::onDrawSlug\\28sktext::gpu::Slug\\20const*\\2c\\20SkPaint\\20const&\\29\n11184:SkCanvas::onDrawShadowRec\\28SkPath\\20const&\\2c\\20SkDrawShadowRec\\20const&\\29\n11185:SkCanvas::onDrawRegion\\28SkRegion\\20const&\\2c\\20SkPaint\\20const&\\29\n11186:SkCanvas::onDrawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11187:SkCanvas::onDrawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11188:SkCanvas::onDrawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n11189:SkCanvas::onDrawPicture\\28SkPicture\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkPaint\\20const*\\29\n11190:SkCanvas::onDrawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\29\n11191:SkCanvas::onDrawPatch\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20SkPoint\\20const*\\2c\\20SkBlendMode\\2c\\20SkPaint\\20const&\\29\n11192:SkCanvas::onDrawPaint\\28SkPaint\\20const&\\29\n11193:SkCanvas::onDrawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11194:SkCanvas::onDrawMesh\\28SkMesh\\20const&\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n11195:SkCanvas::onDrawImageRect2\\28SkImage\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n11196:SkCanvas::onDrawImageLattice2\\28SkImage\\20const*\\2c\\20SkCanvas::Lattice\\20const&\\2c\\20SkRect\\20const&\\2c\\20SkFilterMode\\2c\\20SkPaint\\20const*\\29\n11197:SkCanvas::onDrawImage2\\28SkImage\\20const*\\2c\\20float\\2c\\20float\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\29\n11198:SkCanvas::onDrawGlyphRunList\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n11199:SkCanvas::onDrawEdgeAAQuad\\28SkRect\\20const&\\2c\\20SkPoint\\20const*\\2c\\20SkCanvas::QuadAAFlags\\2c\\20SkRGBA4f<\\28SkAlphaType\\293>\\20const&\\2c\\20SkBlendMode\\29\n11200:SkCanvas::onDrawEdgeAAImageSet2\\28SkCanvas::ImageSetEntry\\20const*\\2c\\20int\\2c\\20SkPoint\\20const*\\2c\\20SkMatrix\\20const*\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const*\\2c\\20SkCanvas::SrcRectConstraint\\29\n11201:SkCanvas::onDrawDrawable\\28SkDrawable*\\2c\\20SkMatrix\\20const*\\29\n11202:SkCanvas::onDrawDRRect\\28SkRRect\\20const&\\2c\\20SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11203:SkCanvas::onDrawBehind\\28SkPaint\\20const&\\29\n11204:SkCanvas::onDrawAtlas2\\28SkImage\\20const*\\2c\\20SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20SkBlendMode\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkRect\\20const*\\2c\\20SkPaint\\20const*\\29\n11205:SkCanvas::onDrawArc\\28SkRect\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20SkPaint\\20const&\\29\n11206:SkCanvas::onDrawAnnotation\\28SkRect\\20const&\\2c\\20char\\20const*\\2c\\20SkData*\\29\n11207:SkCanvas::onDiscard\\28\\29\n11208:SkCanvas::onConvertGlyphRunListToSlug\\28sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n11209:SkCanvas::onAccessTopLayerPixels\\28SkPixmap*\\29\n11210:SkCanvas::isClipRect\\28\\29\\20const\n11211:SkCanvas::isClipEmpty\\28\\29\\20const\n11212:SkCanvas::getBaseLayerSize\\28\\29\\20const\n11213:SkCachedData::~SkCachedData\\28\\29.1\n11214:SkCTMShader::~SkCTMShader\\28\\29.1\n11215:SkCTMShader::~SkCTMShader\\28\\29\n11216:SkCTMShader::isConstant\\28\\29\\20const\n11217:SkCTMShader::getTypeName\\28\\29\\20const\n11218:SkCTMShader::asGradient\\28SkShaderBase::GradientInfo*\\2c\\20SkMatrix*\\29\\20const\n11219:SkCTMShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11220:SkBreakIterator_client::~SkBreakIterator_client\\28\\29.1\n11221:SkBreakIterator_client::status\\28\\29\n11222:SkBreakIterator_client::setText\\28char\\20const*\\2c\\20int\\29\n11223:SkBreakIterator_client::setText\\28char16_t\\20const*\\2c\\20int\\29\n11224:SkBreakIterator_client::next\\28\\29\n11225:SkBreakIterator_client::isDone\\28\\29\n11226:SkBreakIterator_client::first\\28\\29\n11227:SkBreakIterator_client::current\\28\\29\n11228:SkBlurMaskFilterImpl::getTypeName\\28\\29\\20const\n11229:SkBlurMaskFilterImpl::flatten\\28SkWriteBuffer&\\29\\20const\n11230:SkBlurMaskFilterImpl::filterRectsToNine\\28SkRect\\20const*\\2c\\20int\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n11231:SkBlurMaskFilterImpl::filterRRectToNine\\28SkRRect\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIRect\\20const&\\2c\\20SkTLazy<SkMaskFilterBase::NinePatch>*\\29\\20const\n11232:SkBlurMaskFilterImpl::filterMask\\28SkMaskBuilder*\\2c\\20SkMask\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkIPoint*\\29\\20const\n11233:SkBlurMaskFilterImpl::computeFastBounds\\28SkRect\\20const&\\2c\\20SkRect*\\29\\20const\n11234:SkBlurMaskFilterImpl::asImageFilter\\28SkMatrix\\20const&\\29\\20const\n11235:SkBlurMaskFilterImpl::asABlur\\28SkMaskFilterBase::BlurRec*\\29\\20const\n11236:SkBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11237:SkBlitter::blitAntiV2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n11238:SkBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n11239:SkBlitter::blitAntiH2\\28int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n11240:SkBlitter::allocBlitMemory\\28unsigned\\20long\\29\n11241:SkBlendShader::getTypeName\\28\\29\\20const\n11242:SkBlendShader::flatten\\28SkWriteBuffer&\\29\\20const\n11243:SkBlendShader::appendStages\\28SkStageRec\\20const&\\2c\\20SkShaders::MatrixRec\\20const&\\29\\20const\n11244:SkBlendModeColorFilter::onIsAlphaUnchanged\\28\\29\\20const\n11245:SkBlendModeColorFilter::onAsAColorMode\\28unsigned\\20int*\\2c\\20SkBlendMode*\\29\\20const\n11246:SkBlendModeColorFilter::getTypeName\\28\\29\\20const\n11247:SkBlendModeColorFilter::flatten\\28SkWriteBuffer&\\29\\20const\n11248:SkBlendModeColorFilter::appendStages\\28SkStageRec\\20const&\\2c\\20bool\\29\\20const\n11249:SkBlendModeBlender::onAppendStages\\28SkStageRec\\20const&\\29\\20const\n11250:SkBlendModeBlender::getTypeName\\28\\29\\20const\n11251:SkBlendModeBlender::flatten\\28SkWriteBuffer&\\29\\20const\n11252:SkBlendModeBlender::asBlendMode\\28\\29\\20const\n11253:SkBitmapDevice::~SkBitmapDevice\\28\\29.1\n11254:SkBitmapDevice::snapSpecial\\28SkIRect\\20const&\\2c\\20bool\\29\n11255:SkBitmapDevice::setImmutable\\28\\29\n11256:SkBitmapDevice::replaceClip\\28SkIRect\\20const&\\29\n11257:SkBitmapDevice::pushClipStack\\28\\29\n11258:SkBitmapDevice::popClipStack\\28\\29\n11259:SkBitmapDevice::onWritePixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n11260:SkBitmapDevice::onReadPixels\\28SkPixmap\\20const&\\2c\\20int\\2c\\20int\\29\n11261:SkBitmapDevice::onPeekPixels\\28SkPixmap*\\29\n11262:SkBitmapDevice::onDrawGlyphRunList\\28SkCanvas*\\2c\\20sktext::GlyphRunList\\20const&\\2c\\20SkPaint\\20const&\\29\n11263:SkBitmapDevice::onClipShader\\28sk_sp<SkShader>\\29\n11264:SkBitmapDevice::onAccessPixels\\28SkPixmap*\\29\n11265:SkBitmapDevice::makeSurface\\28SkImageInfo\\20const&\\2c\\20SkSurfaceProps\\20const&\\29\n11266:SkBitmapDevice::makeSpecial\\28SkImage\\20const*\\29\n11267:SkBitmapDevice::makeSpecial\\28SkBitmap\\20const&\\29\n11268:SkBitmapDevice::isClipWideOpen\\28\\29\\20const\n11269:SkBitmapDevice::isClipRect\\28\\29\\20const\n11270:SkBitmapDevice::isClipEmpty\\28\\29\\20const\n11271:SkBitmapDevice::isClipAntiAliased\\28\\29\\20const\n11272:SkBitmapDevice::getRasterHandle\\28\\29\\20const\n11273:SkBitmapDevice::drawVertices\\28SkVertices\\20const*\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n11274:SkBitmapDevice::drawSpecial\\28SkSpecialImage*\\2c\\20SkMatrix\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n11275:SkBitmapDevice::drawRect\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11276:SkBitmapDevice::drawRRect\\28SkRRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11277:SkBitmapDevice::drawPoints\\28SkCanvas::PointMode\\2c\\20unsigned\\20long\\2c\\20SkPoint\\20const*\\2c\\20SkPaint\\20const&\\29\n11278:SkBitmapDevice::drawPath\\28SkPath\\20const&\\2c\\20SkPaint\\20const&\\2c\\20bool\\29\n11279:SkBitmapDevice::drawPaint\\28SkPaint\\20const&\\29\n11280:SkBitmapDevice::drawOval\\28SkRect\\20const&\\2c\\20SkPaint\\20const&\\29\n11281:SkBitmapDevice::drawImageRect\\28SkImage\\20const*\\2c\\20SkRect\\20const*\\2c\\20SkRect\\20const&\\2c\\20SkSamplingOptions\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkCanvas::SrcRectConstraint\\29\n11282:SkBitmapDevice::drawAtlas\\28SkRSXform\\20const*\\2c\\20SkRect\\20const*\\2c\\20unsigned\\20int\\20const*\\2c\\20int\\2c\\20sk_sp<SkBlender>\\2c\\20SkPaint\\20const&\\29\n11283:SkBitmapDevice::devClipBounds\\28\\29\\20const\n11284:SkBitmapDevice::createDevice\\28SkDevice::CreateInfo\\20const&\\2c\\20SkPaint\\20const*\\29\n11285:SkBitmapDevice::clipRegion\\28SkRegion\\20const&\\2c\\20SkClipOp\\29\n11286:SkBitmapDevice::clipRect\\28SkRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n11287:SkBitmapDevice::clipRRect\\28SkRRect\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n11288:SkBitmapDevice::clipPath\\28SkPath\\20const&\\2c\\20SkClipOp\\2c\\20bool\\29\n11289:SkBitmapDevice::android_utils_clipAsRgn\\28SkRegion*\\29\\20const\n11290:SkBitmapCache::Rec::~Rec\\28\\29.1\n11291:SkBitmapCache::Rec::postAddInstall\\28void*\\29\n11292:SkBitmapCache::Rec::getCategory\\28\\29\\20const\n11293:SkBitmapCache::Rec::canBePurged\\28\\29\n11294:SkBitmapCache::Rec::bytesUsed\\28\\29\\20const\n11295:SkBitmapCache::Rec::ReleaseProc\\28void*\\2c\\20void*\\29\n11296:SkBitmapCache::Rec::Finder\\28SkResourceCache::Rec\\20const&\\2c\\20void*\\29\n11297:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\\28\\29.1\n11298:SkBinaryWriteBuffer::write\\28SkM44\\20const&\\29\n11299:SkBinaryWriteBuffer::writeTypeface\\28SkTypeface*\\29\n11300:SkBinaryWriteBuffer::writeString\\28std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n11301:SkBinaryWriteBuffer::writeStream\\28SkStream*\\2c\\20unsigned\\20long\\29\n11302:SkBinaryWriteBuffer::writeScalar\\28float\\29\n11303:SkBinaryWriteBuffer::writeSampling\\28SkSamplingOptions\\20const&\\29\n11304:SkBinaryWriteBuffer::writeRegion\\28SkRegion\\20const&\\29\n11305:SkBinaryWriteBuffer::writeRect\\28SkRect\\20const&\\29\n11306:SkBinaryWriteBuffer::writePoint\\28SkPoint\\20const&\\29\n11307:SkBinaryWriteBuffer::writePointArray\\28SkPoint\\20const*\\2c\\20unsigned\\20int\\29\n11308:SkBinaryWriteBuffer::writePoint3\\28SkPoint3\\20const&\\29\n11309:SkBinaryWriteBuffer::writePath\\28SkPath\\20const&\\29\n11310:SkBinaryWriteBuffer::writePaint\\28SkPaint\\20const&\\29\n11311:SkBinaryWriteBuffer::writePad32\\28void\\20const*\\2c\\20unsigned\\20long\\29\n11312:SkBinaryWriteBuffer::writeMatrix\\28SkMatrix\\20const&\\29\n11313:SkBinaryWriteBuffer::writeImage\\28SkImage\\20const*\\29\n11314:SkBinaryWriteBuffer::writeColor4fArray\\28SkRGBA4f<\\28SkAlphaType\\293>\\20const*\\2c\\20unsigned\\20int\\29\n11315:SkBinaryWriteBuffer::writeBool\\28bool\\29\n11316:SkBigPicture::~SkBigPicture\\28\\29.1\n11317:SkBigPicture::playback\\28SkCanvas*\\2c\\20SkPicture::AbortCallback*\\29\\20const\n11318:SkBigPicture::cullRect\\28\\29\\20const\n11319:SkBigPicture::approximateOpCount\\28bool\\29\\20const\n11320:SkBigPicture::approximateBytesUsed\\28\\29\\20const\n11321:SkBidiSubsetFactory::errorName\\28UErrorCode\\29\\20const\n11322:SkBidiSubsetFactory::bidi_setPara\\28UBiDi*\\2c\\20char16_t\\20const*\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char*\\2c\\20UErrorCode*\\29\\20const\n11323:SkBidiSubsetFactory::bidi_reorderVisual\\28unsigned\\20char\\20const*\\2c\\20int\\2c\\20int*\\29\\20const\n11324:SkBidiSubsetFactory::bidi_openSized\\28int\\2c\\20int\\2c\\20UErrorCode*\\29\\20const\n11325:SkBidiSubsetFactory::bidi_getLevelAt\\28UBiDi\\20const*\\2c\\20int\\29\\20const\n11326:SkBidiSubsetFactory::bidi_getLength\\28UBiDi\\20const*\\29\\20const\n11327:SkBidiSubsetFactory::bidi_getDirection\\28UBiDi\\20const*\\29\\20const\n11328:SkBidiSubsetFactory::bidi_close_callback\\28\\29\\20const\n11329:SkBasicEdgeBuilder::recoverClip\\28SkIRect\\20const&\\29\\20const\n11330:SkBasicEdgeBuilder::allocEdges\\28unsigned\\20long\\2c\\20unsigned\\20long*\\29\n11331:SkBasicEdgeBuilder::addQuad\\28SkPoint\\20const*\\29\n11332:SkBasicEdgeBuilder::addPolyLine\\28SkPoint\\20const*\\2c\\20char*\\2c\\20char**\\29\n11333:SkBasicEdgeBuilder::addLine\\28SkPoint\\20const*\\29\n11334:SkBasicEdgeBuilder::addCubic\\28SkPoint\\20const*\\29\n11335:SkBBoxHierarchy::insert\\28SkRect\\20const*\\2c\\20SkBBoxHierarchy::Metadata\\20const*\\2c\\20int\\29\n11336:SkArenaAlloc::SkipPod\\28char*\\29\n11337:SkArenaAlloc::NextBlock\\28char*\\29\n11338:SkAnalyticEdgeBuilder::recoverClip\\28SkIRect\\20const&\\29\\20const\n11339:SkAnalyticEdgeBuilder::allocEdges\\28unsigned\\20long\\2c\\20unsigned\\20long*\\29\n11340:SkAnalyticEdgeBuilder::addQuad\\28SkPoint\\20const*\\29\n11341:SkAnalyticEdgeBuilder::addPolyLine\\28SkPoint\\20const*\\2c\\20char*\\2c\\20char**\\29\n11342:SkAnalyticEdgeBuilder::addLine\\28SkPoint\\20const*\\29\n11343:SkAnalyticEdgeBuilder::addCubic\\28SkPoint\\20const*\\29\n11344:SkAAClipBlitter::~SkAAClipBlitter\\28\\29.1\n11345:SkAAClipBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11346:SkAAClipBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11347:SkAAClipBlitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11348:SkAAClipBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11349:SkAAClipBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n11350:SkAAClip::Builder::operateY\\28SkAAClip\\20const&\\2c\\20SkAAClip\\20const&\\2c\\20SkClipOp\\29::$_1::__invoke\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n11351:SkAAClip::Builder::operateY\\28SkAAClip\\20const&\\2c\\20SkAAClip\\20const&\\2c\\20SkClipOp\\29::$_0::__invoke\\28unsigned\\20int\\2c\\20unsigned\\20int\\29\n11352:SkAAClip::Builder::Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11353:SkAAClip::Builder::Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11354:SkAAClip::Builder::Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11355:SkAAClip::Builder::Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11356:SkAAClip::Builder::Blitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n11357:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\\28\\29.1\n11358:SkA8_Coverage_Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11359:SkA8_Coverage_Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11360:SkA8_Coverage_Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11361:SkA8_Coverage_Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11362:SkA8_Coverage_Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n11363:SkA8_Blitter::~SkA8_Blitter\\28\\29.1\n11364:SkA8_Blitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11365:SkA8_Blitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11366:SkA8_Blitter::blitMask\\28SkMask\\20const&\\2c\\20SkIRect\\20const&\\29\n11367:SkA8_Blitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11368:SkA8_Blitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20short\\20const*\\29\n11369:SkA8Blitter_Choose\\28SkPixmap\\20const&\\2c\\20SkMatrix\\20const&\\2c\\20SkPaint\\20const&\\2c\\20SkArenaAlloc*\\2c\\20bool\\2c\\20sk_sp<SkShader>\\2c\\20SkSurfaceProps\\20const&\\29\n11370:ShaderPDXferProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11371:ShaderPDXferProcessor::name\\28\\29\\20const\n11372:ShaderPDXferProcessor::makeProgramImpl\\28\\29\\20const\n11373:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11374:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n11375:SafeRLEAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11376:RuntimeEffectRPCallbacks::toLinearSrgb\\28void\\20const*\\29\n11377:RuntimeEffectRPCallbacks::fromLinearSrgb\\28void\\20const*\\29\n11378:RuntimeEffectRPCallbacks::appendShader\\28int\\29\n11379:RuntimeEffectRPCallbacks::appendColorFilter\\28int\\29\n11380:RuntimeEffectRPCallbacks::appendBlender\\28int\\29\n11381:RunBasedAdditiveBlitter::getRealBlitter\\28bool\\29\n11382:RunBasedAdditiveBlitter::flush_if_y_changed\\28int\\2c\\20int\\29\n11383:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11384:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n11385:RunBasedAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11386:Round_Up_To_Grid\n11387:Round_To_Half_Grid\n11388:Round_To_Grid\n11389:Round_To_Double_Grid\n11390:Round_Super_45\n11391:Round_Super\n11392:Round_None\n11393:Round_Down_To_Grid\n11394:RoundJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n11395:RoundCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n11396:Read_CVT_Stretched\n11397:Read_CVT\n11398:Project_y\n11399:Project\n11400:PrePostInverseBlitterProc\\28SkBlitter*\\2c\\20int\\2c\\20bool\\29\n11401:PorterDuffXferProcessor::onHasSecondaryOutput\\28\\29\\20const\n11402:PorterDuffXferProcessor::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11403:PorterDuffXferProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11404:PorterDuffXferProcessor::name\\28\\29\\20const\n11405:PorterDuffXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11406:PorterDuffXferProcessor::makeProgramImpl\\28\\29\\20const\n11407:PDLCDXferProcessor::onIsEqual\\28GrXferProcessor\\20const&\\29\\20const\n11408:PDLCDXferProcessor::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11409:PDLCDXferProcessor::name\\28\\29\\20const\n11410:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrXferProcessor\\20const&\\29\n11411:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11412:PDLCDXferProcessor::makeProgramImpl\\28\\29\\20const\n11413:OT::match_glyph\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11414:OT::match_coverage\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11415:OT::match_class_cached\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11416:OT::match_class_cached2\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11417:OT::match_class_cached1\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11418:OT::match_class\\28hb_glyph_info_t&\\2c\\20unsigned\\20int\\2c\\20void\\20const*\\29\n11419:OT::hb_ot_apply_context_t::return_t\\20OT::Layout::GSUB_impl::SubstLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\29\n11420:OT::hb_ot_apply_context_t::return_t\\20OT::Layout::GPOS_impl::PosLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\\28OT::hb_ot_apply_context_t*\\2c\\20unsigned\\20int\\29\n11421:OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>::cmp_range\\28void\\20const*\\2c\\20void\\20const*\\29\n11422:OT::ColorLine<OT::Variable>::static_get_color_stops\\28hb_color_line_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_color_stop_t*\\2c\\20void*\\29\n11423:OT::ColorLine<OT::NoVariable>::static_get_color_stops\\28hb_color_line_t*\\2c\\20void*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\2c\\20hb_color_stop_t*\\2c\\20void*\\29\n11424:OT::CmapSubtableFormat4::accelerator_t::get_glyph_func\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int*\\29\n11425:Move_CVT_Stretched\n11426:Move_CVT\n11427:MiterJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n11428:MaskAdditiveBlitter::~MaskAdditiveBlitter\\28\\29.1\n11429:MaskAdditiveBlitter::getWidth\\28\\29\n11430:MaskAdditiveBlitter::getRealBlitter\\28bool\\29\n11431:MaskAdditiveBlitter::blitV\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11432:MaskAdditiveBlitter::blitRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11433:MaskAdditiveBlitter::blitAntiRect\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\2c\\20unsigned\\20char\\29\n11434:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11435:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20unsigned\\20char\\20const*\\2c\\20int\\29\n11436:MaskAdditiveBlitter::blitAntiH\\28int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20char\\29\n11437:InverseBlitter::blitH\\28int\\2c\\20int\\2c\\20int\\29\n11438:Horish_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11439:Horish_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11440:HLine_SkAntiHairBlitter::drawLine\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11441:HLine_SkAntiHairBlitter::drawCap\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11442:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11443:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11444:GrYUVtoRGBEffect::onMakeProgramImpl\\28\\29\\20const\n11445:GrYUVtoRGBEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11446:GrYUVtoRGBEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11447:GrYUVtoRGBEffect::name\\28\\29\\20const\n11448:GrYUVtoRGBEffect::clone\\28\\29\\20const\n11449:GrXferProcessor::ProgramImpl::emitWriteSwizzle\\28GrGLSLXPFragmentBuilder*\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\2c\\20char\\20const*\\29\\20const\n11450:GrXferProcessor::ProgramImpl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11451:GrXferProcessor::ProgramImpl::emitBlendCodeForDstRead\\28GrGLSLXPFragmentBuilder*\\2c\\20GrGLSLUniformHandler*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20char\\20const*\\2c\\20GrXferProcessor\\20const&\\29\n11452:GrWritePixelsTask::~GrWritePixelsTask\\28\\29.1\n11453:GrWritePixelsTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n11454:GrWritePixelsTask::onExecute\\28GrOpFlushState*\\29\n11455:GrWritePixelsTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11456:GrWaitRenderTask::~GrWaitRenderTask\\28\\29.1\n11457:GrWaitRenderTask::onIsUsed\\28GrSurfaceProxy*\\29\\20const\n11458:GrWaitRenderTask::onExecute\\28GrOpFlushState*\\29\n11459:GrWaitRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11460:GrTransferFromRenderTask::~GrTransferFromRenderTask\\28\\29.1\n11461:GrTransferFromRenderTask::onExecute\\28GrOpFlushState*\\29\n11462:GrTransferFromRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11463:GrThreadSafeCache::Trampoline::~Trampoline\\28\\29.1\n11464:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\\28\\29.1\n11465:GrTextureResolveRenderTask::onExecute\\28GrOpFlushState*\\29\n11466:GrTextureResolveRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11467:GrTextureEffect::~GrTextureEffect\\28\\29.1\n11468:GrTextureEffect::onMakeProgramImpl\\28\\29\\20const\n11469:GrTextureEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11470:GrTextureEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11471:GrTextureEffect::name\\28\\29\\20const\n11472:GrTextureEffect::clone\\28\\29\\20const\n11473:GrTextureEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11474:GrTextureEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11475:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::~GrTDeferredProxyUploader\\28\\29.1\n11476:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\\2c\\20true>>::freeData\\28\\29\n11477:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::~GrTDeferredProxyUploader\\28\\29.1\n11478:GrTDeferredProxyUploader<\\28anonymous\\20namespace\\29::SoftwarePathData>::freeData\\28\\29\n11479:GrSurfaceProxy::getUniqueKey\\28\\29\\20const\n11480:GrSurface::getResourceType\\28\\29\\20const\n11481:GrStrokeTessellationShader::~GrStrokeTessellationShader\\28\\29.1\n11482:GrStrokeTessellationShader::name\\28\\29\\20const\n11483:GrStrokeTessellationShader::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11484:GrStrokeTessellationShader::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11485:GrStrokeTessellationShader::Impl::~Impl\\28\\29.1\n11486:GrStrokeTessellationShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11487:GrStrokeTessellationShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11488:GrSkSLFP::~GrSkSLFP\\28\\29.1\n11489:GrSkSLFP::onMakeProgramImpl\\28\\29\\20const\n11490:GrSkSLFP::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11491:GrSkSLFP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11492:GrSkSLFP::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11493:GrSkSLFP::clone\\28\\29\\20const\n11494:GrSkSLFP::Impl::~Impl\\28\\29.1\n11495:GrSkSLFP::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11496:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::toLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11497:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleShader\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11498:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleColorFilter\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11499:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::sampleBlender\\28int\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\2c\\20std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11500:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::getMangledName\\28char\\20const*\\29\n11501:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::fromLinearSrgb\\28std::__2::basic_string<char\\2c\\20std::__2::char_traits<char>\\2c\\20std::__2::allocator<char>>\\29\n11502:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::defineFunction\\28char\\20const*\\2c\\20char\\20const*\\2c\\20bool\\29\n11503:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::declareUniform\\28SkSL::VarDeclaration\\20const*\\29\n11504:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29::FPCallbacks::declareFunction\\28char\\20const*\\29\n11505:GrSkSLFP::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11506:GrSimpleMesh*\\20SkArenaAlloc::allocUninitializedArray<GrSimpleMesh>\\28unsigned\\20long\\29::'lambda'\\28char*\\29::__invoke\\28char*\\29\n11507:GrRingBuffer::FinishSubmit\\28void*\\29\n11508:GrResourceCache::CompareTimestamp\\28GrGpuResource*\\20const&\\2c\\20GrGpuResource*\\20const&\\29\n11509:GrRenderTask::disown\\28GrDrawingManager*\\29\n11510:GrRecordingContext::~GrRecordingContext\\28\\29.1\n11511:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\\28\\29.1\n11512:GrRRectShadowGeoProc::onTextureSampler\\28int\\29\\20const\n11513:GrRRectShadowGeoProc::name\\28\\29\\20const\n11514:GrRRectShadowGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11515:GrRRectShadowGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11516:GrQuadEffect::name\\28\\29\\20const\n11517:GrQuadEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11518:GrQuadEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11519:GrQuadEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11520:GrQuadEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11521:GrPorterDuffXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11522:GrPorterDuffXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11523:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\\28\\29.1\n11524:GrPerlinNoise2Effect::onMakeProgramImpl\\28\\29\\20const\n11525:GrPerlinNoise2Effect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11526:GrPerlinNoise2Effect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11527:GrPerlinNoise2Effect::name\\28\\29\\20const\n11528:GrPerlinNoise2Effect::clone\\28\\29\\20const\n11529:GrPerlinNoise2Effect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11530:GrPerlinNoise2Effect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11531:GrPathTessellationShader::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11532:GrPathTessellationShader::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11533:GrOpsRenderPass::onExecuteDrawable\\28std::__2::unique_ptr<SkDrawable::GpuDrawHandler\\2c\\20std::__2::default_delete<SkDrawable::GpuDrawHandler>>\\29\n11534:GrOpsRenderPass::onDrawIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11535:GrOpsRenderPass::onDrawIndexedIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11536:GrOpFlushState::writeView\\28\\29\\20const\n11537:GrOpFlushState::usesMSAASurface\\28\\29\\20const\n11538:GrOpFlushState::tokenTracker\\28\\29\n11539:GrOpFlushState::threadSafeCache\\28\\29\\20const\n11540:GrOpFlushState::strikeCache\\28\\29\\20const\n11541:GrOpFlushState::sampledProxyArray\\28\\29\n11542:GrOpFlushState::rtProxy\\28\\29\\20const\n11543:GrOpFlushState::resourceProvider\\28\\29\\20const\n11544:GrOpFlushState::renderPassBarriers\\28\\29\\20const\n11545:GrOpFlushState::putBackVertices\\28int\\2c\\20unsigned\\20long\\29\n11546:GrOpFlushState::putBackIndirectDraws\\28int\\29\n11547:GrOpFlushState::putBackIndexedIndirectDraws\\28int\\29\n11548:GrOpFlushState::makeVertexSpace\\28unsigned\\20long\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n11549:GrOpFlushState::makeVertexSpaceAtLeast\\28unsigned\\20long\\2c\\20int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n11550:GrOpFlushState::makeIndexSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\29\n11551:GrOpFlushState::makeIndexSpaceAtLeast\\28int\\2c\\20int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20int*\\2c\\20int*\\29\n11552:GrOpFlushState::makeDrawIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n11553:GrOpFlushState::makeDrawIndexedIndirectSpace\\28int\\2c\\20sk_sp<GrBuffer\\20const>*\\2c\\20unsigned\\20long*\\29\n11554:GrOpFlushState::dstProxyView\\28\\29\\20const\n11555:GrOpFlushState::colorLoadOp\\28\\29\\20const\n11556:GrOpFlushState::caps\\28\\29\\20const\n11557:GrOpFlushState::atlasManager\\28\\29\\20const\n11558:GrOpFlushState::appliedClip\\28\\29\\20const\n11559:GrOpFlushState::addInlineUpload\\28std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&&\\29\n11560:GrOnFlushCallbackObject::postFlush\\28skgpu::AtlasToken\\29\n11561:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11562:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11563:GrModulateAtlasCoverageEffect::onMakeProgramImpl\\28\\29\\20const\n11564:GrModulateAtlasCoverageEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11565:GrModulateAtlasCoverageEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11566:GrModulateAtlasCoverageEffect::name\\28\\29\\20const\n11567:GrModulateAtlasCoverageEffect::clone\\28\\29\\20const\n11568:GrMeshDrawOp::onPrepare\\28GrOpFlushState*\\29\n11569:GrMeshDrawOp::onPrePrepare\\28GrRecordingContext*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20GrAppliedClip*\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11570:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11571:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11572:GrMatrixEffect::onMakeProgramImpl\\28\\29\\20const\n11573:GrMatrixEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11574:GrMatrixEffect::name\\28\\29\\20const\n11575:GrMatrixEffect::clone\\28\\29\\20const\n11576:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::Listener::~Listener\\28\\29.1\n11577:GrMakeUniqueKeyInvalidationListener\\28skgpu::UniqueKey*\\2c\\20unsigned\\20int\\29::$_0::__invoke\\28void\\20const*\\2c\\20void*\\29\n11578:GrImageContext::~GrImageContext\\28\\29\n11579:GrHardClip::apply\\28GrRecordingContext*\\2c\\20skgpu::ganesh::SurfaceDrawContext*\\2c\\20GrDrawOp*\\2c\\20GrAAType\\2c\\20GrAppliedClip*\\2c\\20SkRect*\\29\\20const\n11580:GrGpuResource::dumpMemoryStatistics\\28SkTraceMemoryDump*\\29\\20const\n11581:GrGpuBuffer::unref\\28\\29\\20const\n11582:GrGpuBuffer::getResourceType\\28\\29\\20const\n11583:GrGpuBuffer::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n11584:GrGeometryProcessor::onTextureSampler\\28int\\29\\20const\n11585:GrGLVaryingHandler::~GrGLVaryingHandler\\28\\29\n11586:GrGLUniformHandler::~GrGLUniformHandler\\28\\29.1\n11587:GrGLUniformHandler::samplerVariable\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n11588:GrGLUniformHandler::samplerSwizzle\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n11589:GrGLUniformHandler::internalAddUniformArray\\28GrProcessor\\20const*\\2c\\20unsigned\\20int\\2c\\20SkSLType\\2c\\20char\\20const*\\2c\\20bool\\2c\\20int\\2c\\20char\\20const**\\29\n11590:GrGLUniformHandler::getUniformCStr\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\29\\20const\n11591:GrGLUniformHandler::appendUniformDecls\\28GrShaderFlags\\2c\\20SkString*\\29\\20const\n11592:GrGLUniformHandler::addSampler\\28GrBackendFormat\\20const&\\2c\\20GrSamplerState\\2c\\20skgpu::Swizzle\\20const&\\2c\\20char\\20const*\\2c\\20GrShaderCaps\\20const*\\29\n11593:GrGLTextureRenderTarget::onSetLabel\\28\\29\n11594:GrGLTextureRenderTarget::backendFormat\\28\\29\\20const\n11595:GrGLTexture::textureParamsModified\\28\\29\n11596:GrGLTexture::onStealBackendTexture\\28GrBackendTexture*\\2c\\20std::__2::function<void\\20\\28GrBackendTexture\\29>*\\29\n11597:GrGLTexture::getBackendTexture\\28\\29\\20const\n11598:GrGLSemaphore::~GrGLSemaphore\\28\\29.1\n11599:GrGLSemaphore::setIsOwned\\28\\29\n11600:GrGLSemaphore::backendSemaphore\\28\\29\\20const\n11601:GrGLSLVertexBuilder::~GrGLSLVertexBuilder\\28\\29\n11602:GrGLSLVertexBuilder::onFinalize\\28\\29\n11603:GrGLSLUniformHandler::inputSamplerSwizzle\\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\\29\\20const\n11604:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\\28\\29\n11605:GrGLSLFragmentShaderBuilder::hasSecondaryOutput\\28\\29\\20const\n11606:GrGLSLFragmentShaderBuilder::forceHighPrecision\\28\\29\n11607:GrGLRenderTarget::getBackendRenderTarget\\28\\29\\20const\n11608:GrGLRenderTarget::completeStencilAttachment\\28GrAttachment*\\2c\\20bool\\29\n11609:GrGLRenderTarget::canAttemptStencilAttachment\\28bool\\29\\20const\n11610:GrGLRenderTarget::alwaysClearStencil\\28\\29\\20const\n11611:GrGLProgramDataManager::~GrGLProgramDataManager\\28\\29.1\n11612:GrGLProgramDataManager::setMatrix4fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11613:GrGLProgramDataManager::setMatrix4f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n11614:GrGLProgramDataManager::setMatrix3fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11615:GrGLProgramDataManager::setMatrix3f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n11616:GrGLProgramDataManager::setMatrix2fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11617:GrGLProgramDataManager::setMatrix2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\20const*\\29\\20const\n11618:GrGLProgramDataManager::set4iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11619:GrGLProgramDataManager::set4i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n11620:GrGLProgramDataManager::set4f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\20const\n11621:GrGLProgramDataManager::set3iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11622:GrGLProgramDataManager::set3i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\2c\\20int\\29\\20const\n11623:GrGLProgramDataManager::set3fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11624:GrGLProgramDataManager::set3f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\2c\\20float\\29\\20const\n11625:GrGLProgramDataManager::set2iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11626:GrGLProgramDataManager::set2i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\29\\20const\n11627:GrGLProgramDataManager::set2f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\2c\\20float\\29\\20const\n11628:GrGLProgramDataManager::set1iv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20int\\20const*\\29\\20const\n11629:GrGLProgramDataManager::set1i\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\29\\20const\n11630:GrGLProgramDataManager::set1fv\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20int\\2c\\20float\\20const*\\29\\20const\n11631:GrGLProgramDataManager::set1f\\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\\2c\\20float\\29\\20const\n11632:GrGLProgramBuilder::~GrGLProgramBuilder\\28\\29.1\n11633:GrGLProgramBuilder::varyingHandler\\28\\29\n11634:GrGLProgramBuilder::caps\\28\\29\\20const\n11635:GrGLProgram::~GrGLProgram\\28\\29.1\n11636:GrGLOpsRenderPass::~GrGLOpsRenderPass\\28\\29\n11637:GrGLOpsRenderPass::onSetScissorRect\\28SkIRect\\20const&\\29\n11638:GrGLOpsRenderPass::onEnd\\28\\29\n11639:GrGLOpsRenderPass::onDraw\\28int\\2c\\20int\\29\n11640:GrGLOpsRenderPass::onDrawInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11641:GrGLOpsRenderPass::onDrawIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11642:GrGLOpsRenderPass::onDrawIndexed\\28int\\2c\\20int\\2c\\20unsigned\\20short\\2c\\20unsigned\\20short\\2c\\20int\\29\n11643:GrGLOpsRenderPass::onDrawIndexedInstanced\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\29\n11644:GrGLOpsRenderPass::onDrawIndexedIndirect\\28GrBuffer\\20const*\\2c\\20unsigned\\20long\\2c\\20int\\29\n11645:GrGLOpsRenderPass::onClear\\28GrScissorState\\20const&\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n11646:GrGLOpsRenderPass::onClearStencilClip\\28GrScissorState\\20const&\\2c\\20bool\\29\n11647:GrGLOpsRenderPass::onBindTextures\\28GrGeometryProcessor\\20const&\\2c\\20GrSurfaceProxy\\20const*\\20const*\\2c\\20GrPipeline\\20const&\\29\n11648:GrGLOpsRenderPass::onBindPipeline\\28GrProgramInfo\\20const&\\2c\\20SkRect\\20const&\\29\n11649:GrGLOpsRenderPass::onBindBuffers\\28sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20sk_sp<GrBuffer\\20const>\\2c\\20GrPrimitiveRestart\\29\n11650:GrGLOpsRenderPass::onBegin\\28\\29\n11651:GrGLOpsRenderPass::inlineUpload\\28GrOpFlushState*\\2c\\20std::__2::function<void\\20\\28std::__2::function<bool\\20\\28GrTextureProxy*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29>&\\29>&\\29\n11652:GrGLInterface::~GrGLInterface\\28\\29.1\n11653:GrGLGpu::~GrGLGpu\\28\\29.1\n11654:GrGLGpu::xferBarrier\\28GrRenderTarget*\\2c\\20GrXferBarrierType\\29\n11655:GrGLGpu::wrapBackendSemaphore\\28GrBackendSemaphore\\20const&\\2c\\20GrSemaphoreWrapType\\2c\\20GrWrapOwnership\\29\n11656:GrGLGpu::willExecute\\28\\29\n11657:GrGLGpu::submit\\28GrOpsRenderPass*\\29\n11658:GrGLGpu::stagingBufferManager\\28\\29\n11659:GrGLGpu::refPipelineBuilder\\28\\29\n11660:GrGLGpu::prepareTextureForCrossContextUsage\\28GrTexture*\\29\n11661:GrGLGpu::precompileShader\\28SkData\\20const&\\2c\\20SkData\\20const&\\29\n11662:GrGLGpu::pipelineBuilder\\28\\29\n11663:GrGLGpu::onWritePixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20GrMipLevel\\20const*\\2c\\20int\\2c\\20bool\\29\n11664:GrGLGpu::onWrapRenderableBackendTexture\\28GrBackendTexture\\20const&\\2c\\20int\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\29\n11665:GrGLGpu::onWrapCompressedBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\29\n11666:GrGLGpu::onWrapBackendTexture\\28GrBackendTexture\\20const&\\2c\\20GrWrapOwnership\\2c\\20GrWrapCacheable\\2c\\20GrIOType\\29\n11667:GrGLGpu::onWrapBackendRenderTarget\\28GrBackendRenderTarget\\20const&\\29\n11668:GrGLGpu::onUpdateCompressedBackendTexture\\28GrBackendTexture\\20const&\\2c\\20sk_sp<skgpu::RefCntedCallback>\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n11669:GrGLGpu::onTransferPixelsTo\\28GrTexture*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n11670:GrGLGpu::onTransferPixelsFrom\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\29\n11671:GrGLGpu::onTransferFromBufferToBuffer\\28sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20sk_sp<GrGpuBuffer>\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\29\n11672:GrGLGpu::onSubmitToGpu\\28GrSyncCpu\\29\n11673:GrGLGpu::onResolveRenderTarget\\28GrRenderTarget*\\2c\\20SkIRect\\20const&\\29\n11674:GrGLGpu::onResetTextureBindings\\28\\29\n11675:GrGLGpu::onResetContext\\28unsigned\\20int\\29\n11676:GrGLGpu::onRegenerateMipMapLevels\\28GrTexture*\\29\n11677:GrGLGpu::onReadPixels\\28GrSurface*\\2c\\20SkIRect\\2c\\20GrColorType\\2c\\20GrColorType\\2c\\20void*\\2c\\20unsigned\\20long\\29\n11678:GrGLGpu::onGetOpsRenderPass\\28GrRenderTarget*\\2c\\20bool\\2c\\20GrAttachment*\\2c\\20GrSurfaceOrigin\\2c\\20SkIRect\\20const&\\2c\\20GrOpsRenderPass::LoadAndStoreInfo\\20const&\\2c\\20GrOpsRenderPass::StencilLoadAndStoreInfo\\20const&\\2c\\20skia_private::TArray<GrSurfaceProxy*\\2c\\20true>\\20const&\\2c\\20GrXferBarrierFlags\\29\n11679:GrGLGpu::onDumpJSON\\28SkJSONWriter*\\29\\20const\n11680:GrGLGpu::onCreateTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20int\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Protected\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n11681:GrGLGpu::onCreateCompressedTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Budgeted\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20void\\20const*\\2c\\20unsigned\\20long\\29\n11682:GrGLGpu::onCreateCompressedBackendTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\29\n11683:GrGLGpu::onCreateBuffer\\28unsigned\\20long\\2c\\20GrGpuBufferType\\2c\\20GrAccessPattern\\29\n11684:GrGLGpu::onCreateBackendTexture\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20skgpu::Renderable\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20std::__2::basic_string_view<char\\2c\\20std::__2::char_traits<char>>\\29\n11685:GrGLGpu::onCopySurface\\28GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20GrSurface*\\2c\\20SkIRect\\20const&\\2c\\20SkFilterMode\\29\n11686:GrGLGpu::onClearBackendTexture\\28GrBackendTexture\\20const&\\2c\\20sk_sp<skgpu::RefCntedCallback>\\2c\\20std::__2::array<float\\2c\\204ul>\\29\n11687:GrGLGpu::makeStencilAttachment\\28GrBackendFormat\\20const&\\2c\\20SkISize\\2c\\20int\\29\n11688:GrGLGpu::makeSemaphore\\28bool\\29\n11689:GrGLGpu::makeMSAAAttachment\\28SkISize\\2c\\20GrBackendFormat\\20const&\\2c\\20int\\2c\\20skgpu::Protected\\2c\\20GrMemoryless\\29\n11690:GrGLGpu::getPreferredStencilFormat\\28GrBackendFormat\\20const&\\29\n11691:GrGLGpu::finishOutstandingGpuWork\\28\\29\n11692:GrGLGpu::disconnect\\28GrGpu::DisconnectType\\29\n11693:GrGLGpu::deleteBackendTexture\\28GrBackendTexture\\20const&\\29\n11694:GrGLGpu::compile\\28GrProgramDesc\\20const&\\2c\\20GrProgramInfo\\20const&\\29\n11695:GrGLGpu::checkFinishProcs\\28\\29\n11696:GrGLGpu::addFinishedProc\\28void\\20\\28*\\29\\28void*\\29\\2c\\20void*\\29\n11697:GrGLGpu::ProgramCache::~ProgramCache\\28\\29.1\n11698:GrGLFunction<void\\20\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\2c\\20float\\29\n11699:GrGLFunction<void\\20\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20int\\2c\\20unsigned\\20int\\2c\\20unsigned\\20int\\29\n11700:GrGLFunction<void\\20\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11701:GrGLFunction<void\\20\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11702:GrGLFunction<void\\20\\28int\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28int\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20int\\2c\\20float\\2c\\20float\\29\n11703:GrGLFunction<void\\20\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28float\\2c\\20float\\2c\\20float\\2c\\20float\\29\\29::'lambda'\\28void\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20float\\2c\\20float\\2c\\20float\\2c\\20float\\29\n11704:GrGLFunction<void\\20\\28float\\29>::GrGLFunction\\28void\\20\\28*\\29\\28float\\29\\29::'lambda'\\28void\\20const*\\2c\\20float\\29::__invoke\\28void\\20const*\\2c\\20float\\29\n11705:GrGLFunction<void\\20\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29>::GrGLFunction\\28void\\20\\28*\\29\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\\29::'lambda'\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29::__invoke\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\n11706:GrGLFunction<void\\20\\28\\29>::GrGLFunction\\28void\\20\\28*\\29\\28\\29\\29::'lambda'\\28void\\20const*\\29::__invoke\\28void\\20const*\\29\n11707:GrGLFunction<unsigned\\20int\\20\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29>::GrGLFunction\\28unsigned\\20int\\20\\28*\\29\\28__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\\29::'lambda'\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29::__invoke\\28void\\20const*\\2c\\20__GLsync*\\2c\\20unsigned\\20int\\2c\\20unsigned\\20long\\20long\\29\n11708:GrGLFunction<unsigned\\20int\\20\\28\\29>::GrGLFunction\\28unsigned\\20int\\20\\28*\\29\\28\\29\\29::'lambda'\\28void\\20const*\\29::__invoke\\28void\\20const*\\29\n11709:GrGLContext::~GrGLContext\\28\\29\n11710:GrGLCaps::~GrGLCaps\\28\\29.1\n11711:GrGLCaps::surfaceSupportsReadPixels\\28GrSurface\\20const*\\29\\20const\n11712:GrGLCaps::supportedWritePixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11713:GrGLCaps::onSurfaceSupportsWritePixels\\28GrSurface\\20const*\\29\\20const\n11714:GrGLCaps::onSupportsDynamicMSAA\\28GrRenderTargetProxy\\20const*\\29\\20const\n11715:GrGLCaps::onSupportedReadPixelsColorType\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11716:GrGLCaps::onIsWindowRectanglesSupportedForRT\\28GrBackendRenderTarget\\20const&\\29\\20const\n11717:GrGLCaps::onGetReadSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11718:GrGLCaps::onGetDstSampleFlagsForProxy\\28GrRenderTargetProxy\\20const*\\29\\20const\n11719:GrGLCaps::onGetDefaultBackendFormat\\28GrColorType\\29\\20const\n11720:GrGLCaps::onDumpJSON\\28SkJSONWriter*\\29\\20const\n11721:GrGLCaps::onCanCopySurface\\28GrSurfaceProxy\\20const*\\2c\\20SkIRect\\20const&\\2c\\20GrSurfaceProxy\\20const*\\2c\\20SkIRect\\20const&\\29\\20const\n11722:GrGLCaps::onAreColorTypeAndFormatCompatible\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\29\\20const\n11723:GrGLCaps::onApplyOptionsOverrides\\28GrContextOptions\\20const&\\29\n11724:GrGLCaps::maxRenderTargetSampleCount\\28GrBackendFormat\\20const&\\29\\20const\n11725:GrGLCaps::makeDesc\\28GrRenderTarget*\\2c\\20GrProgramInfo\\20const&\\2c\\20GrCaps::ProgramDescOverrideFlags\\29\\20const\n11726:GrGLCaps::isFormatTexturable\\28GrBackendFormat\\20const&\\2c\\20GrTextureType\\29\\20const\n11727:GrGLCaps::isFormatSRGB\\28GrBackendFormat\\20const&\\29\\20const\n11728:GrGLCaps::isFormatRenderable\\28GrBackendFormat\\20const&\\2c\\20int\\29\\20const\n11729:GrGLCaps::isFormatCopyable\\28GrBackendFormat\\20const&\\29\\20const\n11730:GrGLCaps::isFormatAsColorTypeRenderable\\28GrColorType\\2c\\20GrBackendFormat\\20const&\\2c\\20int\\29\\20const\n11731:GrGLCaps::getWriteSwizzle\\28GrBackendFormat\\20const&\\2c\\20GrColorType\\29\\20const\n11732:GrGLCaps::getRenderTargetSampleCount\\28int\\2c\\20GrBackendFormat\\20const&\\29\\20const\n11733:GrGLCaps::getDstCopyRestrictions\\28GrRenderTargetProxy\\20const*\\2c\\20GrColorType\\29\\20const\n11734:GrGLCaps::getBackendFormatFromCompressionType\\28SkTextureCompressionType\\29\\20const\n11735:GrGLCaps::computeFormatKey\\28GrBackendFormat\\20const&\\29\\20const\n11736:GrGLBuffer::setMemoryBacking\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\29\\20const\n11737:GrGLBuffer::onUpdateData\\28void\\20const*\\2c\\20unsigned\\20long\\2c\\20unsigned\\20long\\2c\\20bool\\29\n11738:GrGLBuffer::onUnmap\\28GrGpuBuffer::MapType\\29\n11739:GrGLBuffer::onSetLabel\\28\\29\n11740:GrGLBuffer::onRelease\\28\\29\n11741:GrGLBuffer::onMap\\28GrGpuBuffer::MapType\\29\n11742:GrGLBuffer::onClearToZero\\28\\29\n11743:GrGLBuffer::onAbandon\\28\\29\n11744:GrGLBackendTextureData::~GrGLBackendTextureData\\28\\29.1\n11745:GrGLBackendTextureData::~GrGLBackendTextureData\\28\\29\n11746:GrGLBackendTextureData::isSameTexture\\28GrBackendTextureData\\20const*\\29\\20const\n11747:GrGLBackendTextureData::getBackendFormat\\28\\29\\20const\n11748:GrGLBackendTextureData::equal\\28GrBackendTextureData\\20const*\\29\\20const\n11749:GrGLBackendTextureData::copyTo\\28SkAnySubclass<GrBackendTextureData\\2c\\20160ul>&\\29\\20const\n11750:GrGLBackendRenderTargetData::isProtected\\28\\29\\20const\n11751:GrGLBackendRenderTargetData::getBackendFormat\\28\\29\\20const\n11752:GrGLBackendRenderTargetData::equal\\28GrBackendRenderTargetData\\20const*\\29\\20const\n11753:GrGLBackendRenderTargetData::copyTo\\28SkAnySubclass<GrBackendRenderTargetData\\2c\\20160ul>&\\29\\20const\n11754:GrGLBackendFormatData::toString\\28\\29\\20const\n11755:GrGLBackendFormatData::stencilBits\\28\\29\\20const\n11756:GrGLBackendFormatData::equal\\28GrBackendFormatData\\20const*\\29\\20const\n11757:GrGLBackendFormatData::desc\\28\\29\\20const\n11758:GrGLBackendFormatData::copyTo\\28SkAnySubclass<GrBackendFormatData\\2c\\2064ul>&\\29\\20const\n11759:GrGLBackendFormatData::compressionType\\28\\29\\20const\n11760:GrGLBackendFormatData::channelMask\\28\\29\\20const\n11761:GrGLBackendFormatData::bytesPerBlock\\28\\29\\20const\n11762:GrGLAttachment::~GrGLAttachment\\28\\29\n11763:GrGLAttachment::setMemoryBacking\\28SkTraceMemoryDump*\\2c\\20SkString\\20const&\\29\\20const\n11764:GrGLAttachment::onSetLabel\\28\\29\n11765:GrGLAttachment::onRelease\\28\\29\n11766:GrGLAttachment::onAbandon\\28\\29\n11767:GrGLAttachment::backendFormat\\28\\29\\20const\n11768:GrFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11769:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11770:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n11771:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11772:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11773:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::name\\28\\29\\20const\n11774:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11775:GrFragmentProcessor::SwizzleOutput\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20skgpu::Swizzle\\20const&\\29::SwizzleFragmentProcessor::clone\\28\\29\\20const\n11776:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11777:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::onMakeProgramImpl\\28\\29\\20const\n11778:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::name\\28\\29\\20const\n11779:GrFragmentProcessor::SurfaceColor\\28\\29::SurfaceColorProcessor::clone\\28\\29\\20const\n11780:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11781:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n11782:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::name\\28\\29\\20const\n11783:GrFragmentProcessor::HighPrecision\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::HighPrecisionFragmentProcessor::clone\\28\\29\\20const\n11784:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11785:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::onMakeProgramImpl\\28\\29\\20const\n11786:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::name\\28\\29\\20const\n11787:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11788:GrFragmentProcessor::DeviceSpace\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::DeviceSpace::clone\\28\\29\\20const\n11789:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11790:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::onMakeProgramImpl\\28\\29\\20const\n11791:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::name\\28\\29\\20const\n11792:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11793:GrFragmentProcessor::Compose\\28std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\2c\\20std::__2::unique_ptr<GrFragmentProcessor\\2c\\20std::__2::default_delete<GrFragmentProcessor>>\\29::ComposeProcessor::clone\\28\\29\\20const\n11794:GrFixedClip::~GrFixedClip\\28\\29.1\n11795:GrFixedClip::~GrFixedClip\\28\\29\n11796:GrFixedClip::getConservativeBounds\\28\\29\\20const\n11797:GrExternalTextureGenerator::onGenerateTexture\\28GrRecordingContext*\\2c\\20SkImageInfo\\20const&\\2c\\20skgpu::Mipmapped\\2c\\20GrImageTexGenPolicy\\29\n11798:GrDynamicAtlas::~GrDynamicAtlas\\28\\29.1\n11799:GrDrawOp::usesStencil\\28\\29\\20const\n11800:GrDrawOp::usesMSAA\\28\\29\\20const\n11801:GrDrawOp::fixedFunctionFlags\\28\\29\\20const\n11802:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\\28\\29.1\n11803:GrDistanceFieldPathGeoProc::onTextureSampler\\28int\\29\\20const\n11804:GrDistanceFieldPathGeoProc::name\\28\\29\\20const\n11805:GrDistanceFieldPathGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11806:GrDistanceFieldPathGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11807:GrDistanceFieldPathGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11808:GrDistanceFieldPathGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11809:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\\28\\29.1\n11810:GrDistanceFieldLCDTextGeoProc::name\\28\\29\\20const\n11811:GrDistanceFieldLCDTextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11812:GrDistanceFieldLCDTextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11813:GrDistanceFieldLCDTextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11814:GrDistanceFieldLCDTextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11815:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\\28\\29.1\n11816:GrDistanceFieldA8TextGeoProc::name\\28\\29\\20const\n11817:GrDistanceFieldA8TextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11818:GrDistanceFieldA8TextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11819:GrDistanceFieldA8TextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11820:GrDistanceFieldA8TextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11821:GrDisableColorXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11822:GrDisableColorXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11823:GrDirectContext::~GrDirectContext\\28\\29.1\n11824:GrDirectContext::init\\28\\29\n11825:GrDirectContext::abandonContext\\28\\29\n11826:GrDeferredProxyUploader::~GrDeferredProxyUploader\\28\\29.1\n11827:GrCpuVertexAllocator::~GrCpuVertexAllocator\\28\\29.1\n11828:GrCpuVertexAllocator::unlock\\28int\\29\n11829:GrCpuVertexAllocator::lock\\28unsigned\\20long\\2c\\20int\\29\n11830:GrCpuBuffer::unref\\28\\29\\20const\n11831:GrCpuBuffer::ref\\28\\29\\20const\n11832:GrCoverageSetOpXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11833:GrCoverageSetOpXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11834:GrCopyRenderTask::~GrCopyRenderTask\\28\\29.1\n11835:GrCopyRenderTask::onMakeSkippable\\28\\29\n11836:GrCopyRenderTask::onMakeClosed\\28GrRecordingContext*\\2c\\20SkIRect*\\29\n11837:GrCopyRenderTask::onExecute\\28GrOpFlushState*\\29\n11838:GrCopyRenderTask::gatherProxyIntervals\\28GrResourceAllocator*\\29\\20const\n11839:GrConvexPolyEffect::~GrConvexPolyEffect\\28\\29\n11840:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11841:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11842:GrConvexPolyEffect::onMakeProgramImpl\\28\\29\\20const\n11843:GrConvexPolyEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11844:GrConvexPolyEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11845:GrConvexPolyEffect::name\\28\\29\\20const\n11846:GrConvexPolyEffect::clone\\28\\29\\20const\n11847:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\\28\\29.1\n11848:GrContextThreadSafeProxy::isValidCharacterizationForVulkan\\28sk_sp<GrCaps\\20const>\\2c\\20bool\\2c\\20skgpu::Mipmapped\\2c\\20skgpu::Protected\\2c\\20bool\\2c\\20bool\\29\n11849:GrConicEffect::name\\28\\29\\20const\n11850:GrConicEffect::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11851:GrConicEffect::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11852:GrConicEffect::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11853:GrConicEffect::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11854:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\\28\\29.1\n11855:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11856:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11857:GrColorSpaceXformEffect::onMakeProgramImpl\\28\\29\\20const\n11858:GrColorSpaceXformEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11859:GrColorSpaceXformEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11860:GrColorSpaceXformEffect::name\\28\\29\\20const\n11861:GrColorSpaceXformEffect::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11862:GrColorSpaceXformEffect::clone\\28\\29\\20const\n11863:GrCaps::getDstCopyRestrictions\\28GrRenderTargetProxy\\20const*\\2c\\20GrColorType\\29\\20const\n11864:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\\28\\29.1\n11865:GrBitmapTextGeoProc::onTextureSampler\\28int\\29\\20const\n11866:GrBitmapTextGeoProc::name\\28\\29\\20const\n11867:GrBitmapTextGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11868:GrBitmapTextGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11869:GrBitmapTextGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11870:GrBitmapTextGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11871:GrBicubicEffect::onMakeProgramImpl\\28\\29\\20const\n11872:GrBicubicEffect::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11873:GrBicubicEffect::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11874:GrBicubicEffect::name\\28\\29\\20const\n11875:GrBicubicEffect::clone\\28\\29\\20const\n11876:GrBicubicEffect::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11877:GrBicubicEffect::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11878:GrAttachment::onGpuMemorySize\\28\\29\\20const\n11879:GrAttachment::getResourceType\\28\\29\\20const\n11880:GrAttachment::computeScratchKey\\28skgpu::ScratchKey*\\29\\20const\n11881:GrAtlasManager::~GrAtlasManager\\28\\29.1\n11882:GrAtlasManager::postFlush\\28skgpu::AtlasToken\\29\n11883:GrAATriangulator::tessellate\\28GrTriangulator::VertexList\\20const&\\2c\\20GrTriangulator::Comparator\\20const&\\29\n11884:FontMgrRunIterator::~FontMgrRunIterator\\28\\29.1\n11885:FontMgrRunIterator::consume\\28\\29\n11886:EllipticalRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11887:EllipticalRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11888:EllipticalRRectOp::name\\28\\29\\20const\n11889:EllipticalRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11890:EllipseOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11891:EllipseOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11892:EllipseOp::name\\28\\29\\20const\n11893:EllipseOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11894:EllipseGeometryProcessor::name\\28\\29\\20const\n11895:EllipseGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11896:EllipseGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11897:EllipseGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11898:Dual_Project\n11899:DisableColorXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11900:DisableColorXP::name\\28\\29\\20const\n11901:DisableColorXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11902:DisableColorXP::makeProgramImpl\\28\\29\\20const\n11903:Direct_Move_Y\n11904:Direct_Move_X\n11905:Direct_Move_Orig_Y\n11906:Direct_Move_Orig_X\n11907:Direct_Move_Orig\n11908:Direct_Move\n11909:DefaultGeoProc::name\\28\\29\\20const\n11910:DefaultGeoProc::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11911:DefaultGeoProc::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11912:DefaultGeoProc::Impl::setData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrShaderCaps\\20const&\\2c\\20GrGeometryProcessor\\20const&\\29\n11913:DefaultGeoProc::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11914:DIEllipseOp::~DIEllipseOp\\28\\29.1\n11915:DIEllipseOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11916:DIEllipseOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11917:DIEllipseOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11918:DIEllipseOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11919:DIEllipseOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11920:DIEllipseOp::name\\28\\29\\20const\n11921:DIEllipseOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11922:DIEllipseGeometryProcessor::name\\28\\29\\20const\n11923:DIEllipseGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11924:DIEllipseGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11925:DIEllipseGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11926:CustomXPFactory::makeXferProcessor\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11927:CustomXPFactory::analysisProperties\\28GrProcessorAnalysisColor\\20const&\\2c\\20GrProcessorAnalysisCoverage\\20const&\\2c\\20GrCaps\\20const&\\2c\\20GrClampType\\29\\20const\n11928:CustomXP::xferBarrierType\\28GrCaps\\20const&\\29\\20const\n11929:CustomXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11930:CustomXP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11931:CustomXP::name\\28\\29\\20const\n11932:CustomXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11933:CustomXP::makeProgramImpl\\28\\29\\20const\n11934:Current_Ppem_Stretched\n11935:Current_Ppem\n11936:Cr_z_zcalloc\n11937:CoverageSetOpXP::onGetBlendInfo\\28skgpu::BlendInfo*\\29\\20const\n11938:CoverageSetOpXP::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11939:CoverageSetOpXP::name\\28\\29\\20const\n11940:CoverageSetOpXP::makeProgramImpl\\28\\29\\20const::Impl::emitOutputsForBlendState\\28GrXferProcessor::ProgramImpl::EmitArgs\\20const&\\29\n11941:CoverageSetOpXP::makeProgramImpl\\28\\29\\20const\n11942:ColorTableEffect::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11943:ColorTableEffect::onMakeProgramImpl\\28\\29\\20const\n11944:ColorTableEffect::name\\28\\29\\20const\n11945:ColorTableEffect::clone\\28\\29\\20const\n11946:CircularRRectOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11947:CircularRRectOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11948:CircularRRectOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11949:CircularRRectOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11950:CircularRRectOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11951:CircularRRectOp::name\\28\\29\\20const\n11952:CircularRRectOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11953:CircleOp::~CircleOp\\28\\29.1\n11954:CircleOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11955:CircleOp::programInfo\\28\\29\n11956:CircleOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11957:CircleOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11958:CircleOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11959:CircleOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11960:CircleOp::name\\28\\29\\20const\n11961:CircleOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11962:CircleGeometryProcessor::name\\28\\29\\20const\n11963:CircleGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11964:CircleGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11965:CircleGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11966:ButtCapper\\28SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPath*\\29\n11967:ButtCapDashedCircleOp::visitProxies\\28std::__2::function<void\\20\\28GrSurfaceProxy*\\2c\\20skgpu::Mipmapped\\29>\\20const&\\29\\20const\n11968:ButtCapDashedCircleOp::programInfo\\28\\29\n11969:ButtCapDashedCircleOp::onPrepareDraws\\28GrMeshDrawTarget*\\29\n11970:ButtCapDashedCircleOp::onExecute\\28GrOpFlushState*\\2c\\20SkRect\\20const&\\29\n11971:ButtCapDashedCircleOp::onCreateProgramInfo\\28GrCaps\\20const*\\2c\\20SkArenaAlloc*\\2c\\20GrSurfaceProxyView\\20const&\\2c\\20bool\\2c\\20GrAppliedClip&&\\2c\\20GrDstProxyView\\20const&\\2c\\20GrXferBarrierFlags\\2c\\20GrLoadOp\\29\n11972:ButtCapDashedCircleOp::onCombineIfPossible\\28GrOp*\\2c\\20SkArenaAlloc*\\2c\\20GrCaps\\20const&\\29\n11973:ButtCapDashedCircleOp::name\\28\\29\\20const\n11974:ButtCapDashedCircleOp::finalize\\28GrCaps\\20const&\\2c\\20GrAppliedClip\\20const*\\2c\\20GrClampType\\29\n11975:ButtCapDashedCircleGeometryProcessor::name\\28\\29\\20const\n11976:ButtCapDashedCircleGeometryProcessor::makeProgramImpl\\28GrShaderCaps\\20const&\\29\\20const\n11977:ButtCapDashedCircleGeometryProcessor::addToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11978:ButtCapDashedCircleGeometryProcessor::Impl::onEmitCode\\28GrGeometryProcessor::ProgramImpl::EmitArgs&\\2c\\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\\29\n11979:BluntJoiner\\28SkPath*\\2c\\20SkPath*\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20SkPoint\\20const&\\2c\\20float\\2c\\20float\\2c\\20bool\\2c\\20bool\\29\n11980:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::onSetData\\28GrGLSLProgramDataManager\\20const&\\2c\\20GrFragmentProcessor\\20const&\\29\n11981:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const::Impl::emitCode\\28GrFragmentProcessor::ProgramImpl::EmitArgs&\\29\n11982:BlendFragmentProcessor::onMakeProgramImpl\\28\\29\\20const\n11983:BlendFragmentProcessor::onIsEqual\\28GrFragmentProcessor\\20const&\\29\\20const\n11984:BlendFragmentProcessor::onAddToKey\\28GrShaderCaps\\20const&\\2c\\20skgpu::KeyBuilder*\\29\\20const\n11985:BlendFragmentProcessor::name\\28\\29\\20const\n11986:BlendFragmentProcessor::constantOutputForConstantInput\\28SkRGBA4f<\\28SkAlphaType\\292>\\20const&\\29\\20const\n11987:BlendFragmentProcessor::clone\\28\\29\\20const\n11988:$_3::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\29\n11989:$_2::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\29\n11990:$_1::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\2c\\20unsigned\\20char\\29\n11991:$_0::__invoke\\28unsigned\\20char*\\2c\\20unsigned\\20char\\2c\\20int\\29\n"
  },
  {
    "path": "legacy/dist/canvaskit/skwasm.worker.js",
    "content": "\"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:f=>(0,eval)(fs.readFileSync(f,\"utf8\")+\"//# sourceURL=\"+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;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]=(...args)=>{postMessage({cmd:\"callHandler\",handler:handler,args:args})}}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,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0,/*canBlock=*/1);Module[\"__emscripten_thread_mailbox_await\"](e.data.pthread_ptr);Module[\"establishStackSpace\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].threadInitTLS();if(!initializedJS){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===\"checkMailbox\"){if(initializedJS){Module[\"checkMailbox\"]()}}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;\n"
  },
  {
    "path": "legacy/dist/flutter.js",
    "content": "(()=>{var I=()=>navigator.vendor===\"Google Inc.\"||navigator.agent===\"Edg/\",T=()=>typeof ImageDecoder>\"u\"?!1:I(),E=()=>typeof Intl.v8BreakIterator<\"u\"&&typeof Intl.Segmenter<\"u\",S=()=>{let o=[0,97,115,109,1,0,0,0,1,5,1,95,1,120,0];return WebAssembly.validate(new Uint8Array(o))},p={hasImageCodecs:T(),hasChromiumBreakIterators:E(),supportsWasmGC:S(),crossOriginIsolated:window.crossOriginIsolated};var w=U(L());function L(){let o=document.querySelector(\"base\");return o&&o.getAttribute(\"href\")||\"\"}function U(o){return o===\"\"||o.endsWith(\"/\")?o:`${o}/`}var f=class{constructor(){this._scriptLoaded=!1}setTrustedTypesPolicy(e){this._ttPolicy=e}async loadEntrypoint(e){let{entrypointUrl:n=`${w}main.dart.js`,onEntrypointLoaded:r,nonce:t}=e||{};return this._loadJSEntrypoint(n,r,t)}async load(e,n,r,t,i){if(i??=s=>{s.initializeEngine(r).then(a=>a.runApp())},e.compileTarget===\"dart2wasm\")return this._loadWasmEntrypoint(e,n,i);{let s=e.mainJsPath??\"main.dart.js\",a=`${w}${s}`;return this._loadJSEntrypoint(a,i,t)}}didCreateEngineInitializer(e){typeof this._didCreateEngineInitializerResolve==\"function\"&&(this._didCreateEngineInitializerResolve(e),this._didCreateEngineInitializerResolve=null,delete _flutter.loader.didCreateEngineInitializer),typeof this._onEntrypointLoaded==\"function\"&&this._onEntrypointLoaded(e)}_loadJSEntrypoint(e,n,r){let t=typeof n==\"function\";if(!this._scriptLoaded){this._scriptLoaded=!0;let i=this._createScriptTag(e,r);if(t)console.debug(\"Injecting <script> tag. Using callback.\"),this._onEntrypointLoaded=n,document.head.append(i);else return new Promise((s,a)=>{console.debug(\"Injecting <script> tag. Using Promises. Use the callback approach instead!\"),this._didCreateEngineInitializerResolve=s,i.addEventListener(\"error\",a),document.head.append(i)})}}async _loadWasmEntrypoint(e,n,r){if(!this._scriptLoaded){this._scriptLoaded=!0,this._onEntrypointLoaded=r;let{mainWasmPath:t,jsSupportRuntimePath:i}=e,s=`${w}${t}`,a=`${w}${i}`;this._ttPolicy!=null&&(a=this._ttPolicy.createScriptURL(a));let d=WebAssembly.compileStreaming(fetch(s)),c=await import(a),u;e.renderer===\"skwasm\"?u=(async()=>{let m=await n.skwasm;return window._flutter_skwasmInstance=m,{skwasm:m.wasmExports,skwasmWrapper:m,ffi:{memory:m.wasmMemory}}})():u={};let l=await c.instantiate(d,u);await c.invoke(l)}}_createScriptTag(e,n){let r=document.createElement(\"script\");r.type=\"application/javascript\",n&&(r.nonce=n);let t=e;return this._ttPolicy!=null&&(t=this._ttPolicy.createScriptURL(e)),r.src=t,r}};async function b(o,e,n){if(e<0)return o;let r,t=new Promise((i,s)=>{r=setTimeout(()=>{s(new Error(`${n} took more than ${e}ms to resolve. Moving on.`,{cause:b}))},e)});return Promise.race([o,t]).finally(()=>{clearTimeout(r)})}var h=class{setTrustedTypesPolicy(e){this._ttPolicy=e}loadServiceWorker(e){if(!e)return console.debug(\"Null serviceWorker configuration. Skipping.\"),Promise.resolve();if(!(\"serviceWorker\"in navigator)){let a=\"Service Worker API unavailable.\";return window.isSecureContext||(a+=`\nThe current context is NOT secure.`,a+=`\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts`),Promise.reject(new Error(a))}let{serviceWorkerVersion:n,serviceWorkerUrl:r=`${w}flutter_service_worker.js?v=${n}`,timeoutMillis:t=4e3}=e,i=r;this._ttPolicy!=null&&(i=this._ttPolicy.createScriptURL(i));let s=navigator.serviceWorker.register(i).then(a=>this._getNewServiceWorker(a,n)).then(this._waitForServiceWorkerActivation);return b(s,t,\"prepareServiceWorker\")}async _getNewServiceWorker(e,n){if(!e.active&&(e.installing||e.waiting))return console.debug(\"Installing/Activating first service worker.\"),e.installing||e.waiting;if(e.active.scriptURL.endsWith(n))return console.debug(\"Loading from existing service worker.\"),e.active;{let r=await e.update();return console.debug(\"Updating service worker.\"),r.installing||r.waiting||r.active}}async _waitForServiceWorkerActivation(e){if(!e||e.state===\"activated\")if(e){console.debug(\"Service worker already active.\");return}else throw new Error(\"Cannot activate a null service worker!\");return new Promise((n,r)=>{e.addEventListener(\"statechange\",()=>{e.state===\"activated\"&&(console.debug(\"Activated new service worker.\"),n())})})}};var v=class{constructor(e,n=\"flutter-js\"){let r=e||[/\\.js$/,/\\.mjs$/];window.trustedTypes&&(this.policy=trustedTypes.createPolicy(n,{createScriptURL:function(t){if(t.startsWith(\"blob:\"))return t;let i=new URL(t,window.location),s=i.pathname.split(\"/\").pop();if(r.some(d=>d.test(s)))return i.toString();console.error(\"URL rejected by TrustedTypes policy\",n,\":\",t,\"(download prevented)\")}}))}};var y=o=>{let e=WebAssembly.compileStreaming(fetch(o));return(n,r)=>((async()=>{let t=await e,i=await WebAssembly.instantiate(t,n);r(i,t)})(),{})};var C=(o,e,n,r)=>window.flutterCanvasKit?Promise.resolve(window.flutterCanvasKit):(window.flutterCanvasKitLoaded=new Promise((t,i)=>{let s=n.hasChromiumBreakIterators&&n.hasImageCodecs;if(!s&&e.canvasKitVariant==\"chromium\")throw\"Chromium CanvasKit variant specifically requested, but unsupported in this browser\";let a=s&&e.canvasKitVariant!==\"full\",d=e.canvasKitBaseUrl??`https://www.gstatic.com/flutter-canvaskit/${r}/`;a&&(d=`${d}chromium/`);let c=`${d}canvaskit.js`;o.flutterTT.policy&&(c=o.flutterTT.policy.createScriptURL(c));let u=y(`${d}canvaskit.wasm`),l=document.createElement(\"script\");l.src=c,e.nonce&&(l.nonce=e.nonce),l.addEventListener(\"load\",async()=>{try{let m=await CanvasKitInit({instantiateWasm:u});window.flutterCanvasKit=m,t(m)}catch(m){i(m)}}),l.addEventListener(\"error\",i),document.head.appendChild(l)}),window.flutterCanvasKitLoaded);var _=(o,e,n,r)=>new Promise((t,i)=>{let s=e.canvasKitBaseUrl??`https://www.gstatic.com/flutter-canvaskit/${r}/`,a=`${s}skwasm.js`;o.flutterTT.policy&&(a=o.flutterTT.policy.createScriptURL(a));let d=y(`${s}skwasm.wasm`),c=document.createElement(\"script\");c.src=a,e.nonce&&(c.nonce=e.nonce),c.addEventListener(\"load\",async()=>{try{let u=await skwasm({instantiateWasm:d,locateFile:(l,m)=>{let k=m+l;return k.endsWith(\".worker.js\")?URL.createObjectURL(new Blob([`importScripts('${k}');`],{type:\"application/javascript\"})):k}});t(u)}catch(u){i(u)}}),c.addEventListener(\"error\",i),document.head.appendChild(c)});var g=class{async loadEntrypoint(e){let{serviceWorker:n,...r}=e||{},t=new v,i=new h;i.setTrustedTypesPolicy(t.policy),await i.loadServiceWorker(n).catch(a=>{console.warn(\"Exception while loading service worker:\",a)});let s=new f;return s.setTrustedTypesPolicy(t.policy),this.didCreateEngineInitializer=s.didCreateEngineInitializer.bind(s),s.loadEntrypoint(r)}async load({serviceWorkerSettings:e,onEntrypointLoaded:n,nonce:r,config:t}={}){t??={};let i=_flutter.buildConfig;if(!i)throw\"FlutterLoader.load requires _flutter.buildConfig to be set\";let s=l=>{switch(l){case\"skwasm\":return p.crossOriginIsolated&&p.hasChromiumBreakIterators&&p.hasImageCodecs&&p.supportsWasmGC;default:return!0}},a=l=>l.compileTarget===\"dart2wasm\"&&!p.supportsWasmGC||t.renderer&&t.renderer!=l.renderer?!1:s(l.renderer),d=i.builds.find(a);if(!d)throw\"FlutterLoader could not find a build compatible with configuration and environment.\";let c={};c.flutterTT=new v,e&&(c.serviceWorkerLoader=new h,c.serviceWorkerLoader.setTrustedTypesPolicy(c.flutterTT.policy),await c.serviceWorkerLoader.loadServiceWorker(e).catch(l=>{console.warn(\"Exception while loading service worker:\",l)})),d.renderer===\"canvaskit\"?c.canvasKit=C(c,t,p,i.engineRevision):d.renderer===\"skwasm\"&&(c.skwasm=_(c,t,p,i.engineRevision));let u=new f;return u.setTrustedTypesPolicy(c.flutterTT.policy),this.didCreateEngineInitializer=u.didCreateEngineInitializer.bind(u),u.load(d,c,t,r,n)}};window._flutter||(window._flutter={});window._flutter.loader||(window._flutter.loader=new g);})();\n//# sourceMappingURL=flutter.js.map\n"
  },
  {
    "path": "legacy/dist/flutter_bootstrap.js",
    "content": "(()=>{var I=()=>navigator.vendor===\"Google Inc.\"||navigator.agent===\"Edg/\",T=()=>typeof ImageDecoder>\"u\"?!1:I(),E=()=>typeof Intl.v8BreakIterator<\"u\"&&typeof Intl.Segmenter<\"u\",S=()=>{let o=[0,97,115,109,1,0,0,0,1,5,1,95,1,120,0];return WebAssembly.validate(new Uint8Array(o))},p={hasImageCodecs:T(),hasChromiumBreakIterators:E(),supportsWasmGC:S(),crossOriginIsolated:window.crossOriginIsolated};var w=U(L());function L(){let o=document.querySelector(\"base\");return o&&o.getAttribute(\"href\")||\"\"}function U(o){return o===\"\"||o.endsWith(\"/\")?o:`${o}/`}var f=class{constructor(){this._scriptLoaded=!1}setTrustedTypesPolicy(e){this._ttPolicy=e}async loadEntrypoint(e){let{entrypointUrl:n=`${w}main.dart.js`,onEntrypointLoaded:r,nonce:t}=e||{};return this._loadJSEntrypoint(n,r,t)}async load(e,n,r,t,i){if(i??=s=>{s.initializeEngine(r).then(a=>a.runApp())},e.compileTarget===\"dart2wasm\")return this._loadWasmEntrypoint(e,n,i);{let s=e.mainJsPath??\"main.dart.js\",a=`${w}${s}`;return this._loadJSEntrypoint(a,i,t)}}didCreateEngineInitializer(e){typeof this._didCreateEngineInitializerResolve==\"function\"&&(this._didCreateEngineInitializerResolve(e),this._didCreateEngineInitializerResolve=null,delete _flutter.loader.didCreateEngineInitializer),typeof this._onEntrypointLoaded==\"function\"&&this._onEntrypointLoaded(e)}_loadJSEntrypoint(e,n,r){let t=typeof n==\"function\";if(!this._scriptLoaded){this._scriptLoaded=!0;let i=this._createScriptTag(e,r);if(t)console.debug(\"Injecting <script> tag. Using callback.\"),this._onEntrypointLoaded=n,document.head.append(i);else return new Promise((s,a)=>{console.debug(\"Injecting <script> tag. Using Promises. Use the callback approach instead!\"),this._didCreateEngineInitializerResolve=s,i.addEventListener(\"error\",a),document.head.append(i)})}}async _loadWasmEntrypoint(e,n,r){if(!this._scriptLoaded){this._scriptLoaded=!0,this._onEntrypointLoaded=r;let{mainWasmPath:t,jsSupportRuntimePath:i}=e,s=`${w}${t}`,a=`${w}${i}`;this._ttPolicy!=null&&(a=this._ttPolicy.createScriptURL(a));let d=WebAssembly.compileStreaming(fetch(s)),c=await import(a),u;e.renderer===\"skwasm\"?u=(async()=>{let m=await n.skwasm;return window._flutter_skwasmInstance=m,{skwasm:m.wasmExports,skwasmWrapper:m,ffi:{memory:m.wasmMemory}}})():u={};let l=await c.instantiate(d,u);await c.invoke(l)}}_createScriptTag(e,n){let r=document.createElement(\"script\");r.type=\"application/javascript\",n&&(r.nonce=n);let t=e;return this._ttPolicy!=null&&(t=this._ttPolicy.createScriptURL(e)),r.src=t,r}};async function b(o,e,n){if(e<0)return o;let r,t=new Promise((i,s)=>{r=setTimeout(()=>{s(new Error(`${n} took more than ${e}ms to resolve. Moving on.`,{cause:b}))},e)});return Promise.race([o,t]).finally(()=>{clearTimeout(r)})}var h=class{setTrustedTypesPolicy(e){this._ttPolicy=e}loadServiceWorker(e){if(!e)return console.debug(\"Null serviceWorker configuration. Skipping.\"),Promise.resolve();if(!(\"serviceWorker\"in navigator)){let a=\"Service Worker API unavailable.\";return window.isSecureContext||(a+=`\nThe current context is NOT secure.`,a+=`\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts`),Promise.reject(new Error(a))}let{serviceWorkerVersion:n,serviceWorkerUrl:r=`${w}flutter_service_worker.js?v=${n}`,timeoutMillis:t=4e3}=e,i=r;this._ttPolicy!=null&&(i=this._ttPolicy.createScriptURL(i));let s=navigator.serviceWorker.register(i).then(a=>this._getNewServiceWorker(a,n)).then(this._waitForServiceWorkerActivation);return b(s,t,\"prepareServiceWorker\")}async _getNewServiceWorker(e,n){if(!e.active&&(e.installing||e.waiting))return console.debug(\"Installing/Activating first service worker.\"),e.installing||e.waiting;if(e.active.scriptURL.endsWith(n))return console.debug(\"Loading from existing service worker.\"),e.active;{let r=await e.update();return console.debug(\"Updating service worker.\"),r.installing||r.waiting||r.active}}async _waitForServiceWorkerActivation(e){if(!e||e.state===\"activated\")if(e){console.debug(\"Service worker already active.\");return}else throw new Error(\"Cannot activate a null service worker!\");return new Promise((n,r)=>{e.addEventListener(\"statechange\",()=>{e.state===\"activated\"&&(console.debug(\"Activated new service worker.\"),n())})})}};var v=class{constructor(e,n=\"flutter-js\"){let r=e||[/\\.js$/,/\\.mjs$/];window.trustedTypes&&(this.policy=trustedTypes.createPolicy(n,{createScriptURL:function(t){if(t.startsWith(\"blob:\"))return t;let i=new URL(t,window.location),s=i.pathname.split(\"/\").pop();if(r.some(d=>d.test(s)))return i.toString();console.error(\"URL rejected by TrustedTypes policy\",n,\":\",t,\"(download prevented)\")}}))}};var y=o=>{let e=WebAssembly.compileStreaming(fetch(o));return(n,r)=>((async()=>{let t=await e,i=await WebAssembly.instantiate(t,n);r(i,t)})(),{})};var C=(o,e,n,r)=>window.flutterCanvasKit?Promise.resolve(window.flutterCanvasKit):(window.flutterCanvasKitLoaded=new Promise((t,i)=>{let s=n.hasChromiumBreakIterators&&n.hasImageCodecs;if(!s&&e.canvasKitVariant==\"chromium\")throw\"Chromium CanvasKit variant specifically requested, but unsupported in this browser\";let a=s&&e.canvasKitVariant!==\"full\",d=e.canvasKitBaseUrl??`https://www.gstatic.com/flutter-canvaskit/${r}/`;a&&(d=`${d}chromium/`);let c=`${d}canvaskit.js`;o.flutterTT.policy&&(c=o.flutterTT.policy.createScriptURL(c));let u=y(`${d}canvaskit.wasm`),l=document.createElement(\"script\");l.src=c,e.nonce&&(l.nonce=e.nonce),l.addEventListener(\"load\",async()=>{try{let m=await CanvasKitInit({instantiateWasm:u});window.flutterCanvasKit=m,t(m)}catch(m){i(m)}}),l.addEventListener(\"error\",i),document.head.appendChild(l)}),window.flutterCanvasKitLoaded);var _=(o,e,n,r)=>new Promise((t,i)=>{let s=e.canvasKitBaseUrl??`https://www.gstatic.com/flutter-canvaskit/${r}/`,a=`${s}skwasm.js`;o.flutterTT.policy&&(a=o.flutterTT.policy.createScriptURL(a));let d=y(`${s}skwasm.wasm`),c=document.createElement(\"script\");c.src=a,e.nonce&&(c.nonce=e.nonce),c.addEventListener(\"load\",async()=>{try{let u=await skwasm({instantiateWasm:d,locateFile:(l,m)=>{let k=m+l;return k.endsWith(\".worker.js\")?URL.createObjectURL(new Blob([`importScripts('${k}');`],{type:\"application/javascript\"})):k}});t(u)}catch(u){i(u)}}),c.addEventListener(\"error\",i),document.head.appendChild(c)});var g=class{async loadEntrypoint(e){let{serviceWorker:n,...r}=e||{},t=new v,i=new h;i.setTrustedTypesPolicy(t.policy),await i.loadServiceWorker(n).catch(a=>{console.warn(\"Exception while loading service worker:\",a)});let s=new f;return s.setTrustedTypesPolicy(t.policy),this.didCreateEngineInitializer=s.didCreateEngineInitializer.bind(s),s.loadEntrypoint(r)}async load({serviceWorkerSettings:e,onEntrypointLoaded:n,nonce:r,config:t}={}){t??={};let i=_flutter.buildConfig;if(!i)throw\"FlutterLoader.load requires _flutter.buildConfig to be set\";let s=l=>{switch(l){case\"skwasm\":return p.crossOriginIsolated&&p.hasChromiumBreakIterators&&p.hasImageCodecs&&p.supportsWasmGC;default:return!0}},a=l=>l.compileTarget===\"dart2wasm\"&&!p.supportsWasmGC||t.renderer&&t.renderer!=l.renderer?!1:s(l.renderer),d=i.builds.find(a);if(!d)throw\"FlutterLoader could not find a build compatible with configuration and environment.\";let c={};c.flutterTT=new v,e&&(c.serviceWorkerLoader=new h,c.serviceWorkerLoader.setTrustedTypesPolicy(c.flutterTT.policy),await c.serviceWorkerLoader.loadServiceWorker(e).catch(l=>{console.warn(\"Exception while loading service worker:\",l)})),d.renderer===\"canvaskit\"?c.canvasKit=C(c,t,p,i.engineRevision):d.renderer===\"skwasm\"&&(c.skwasm=_(c,t,p,i.engineRevision));let u=new f;return u.setTrustedTypesPolicy(c.flutterTT.policy),this.didCreateEngineInitializer=u.didCreateEngineInitializer.bind(u),u.load(d,c,t,r,n)}};window._flutter||(window._flutter={});window._flutter.loader||(window._flutter.loader=new g);})();\n//# sourceMappingURL=flutter.js.map\n\nif (!window._flutter) {\n  window._flutter = {};\n}\n_flutter.buildConfig = {\"engineRevision\":\"f6344b75dcf861d8bf1f1322780b8811f982e31a\",\"builds\":[{\"compileTarget\":\"dart2js\",\"renderer\":\"auto\",\"mainJsPath\":\"main.dart.js\"}]};\n\n\n_flutter.loader.load({\n  serviceWorkerSettings: {\n    serviceWorkerVersion: \"2079215133\"\n  }\n});\n"
  },
  {
    "path": "legacy/dist/flutter_service_worker.js",
    "content": "'use strict';\nconst MANIFEST = 'flutter-app-manifest';\nconst TEMP = 'flutter-temp-cache';\nconst CACHE_NAME = 'flutter-app-cache';\n\nconst RESOURCES = {\"flutter_bootstrap.js\": \"1dad2b46325bcd99fea57b1429907326\",\n\"version.json\": \"7f37f1a09e52b6aa487fa162f7e7a3c1\",\n\"index.html\": \"3792e360bb00e2b1b7db1abd7cbd0e58\",\n\"/\": \"3792e360bb00e2b1b7db1abd7cbd0e58\",\n\"images/icons/icon-192x192.png\": \"3c607db94be2bb6b4c1547f1f19b9b5d\",\n\"images/icons/icon-384x384.png\": \"c45c078868d9b78102e2bb701f8b65c7\",\n\"images/icons/icon-72x72.png\": \"68987d96cf79176e2a5d5475c1003aed\",\n\"images/icons/icon-96x96.png\": \"f3f9af93af48f8c2c6cc77d9837a381f\",\n\"images/icons/icon-152x152.png\": \"c5de150b27f9d0d4e406933494e39042\",\n\"images/icons/icon-512x512.png\": \"d13580e1b1860cc3f6a6a0dc85fd072e\",\n\"images/icons/icon-144x144.png\": \"7cc1a8d85079cdc13f5fb53d239fc2cd\",\n\"images/icons/icon-128x128.png\": \"847b3ff56e213172e30c9e7e1ea3954c\",\n\"images/image-not-found.jpg\": \"97db68e26cd1b10807d5924a9c4fa0c0\",\n\"main.dart.js\": \"ae0114e71abb77667608fdc910b3bed8\",\n\"flutter.js\": \"383e55f7f3cce5be08fcf1f3881f585c\",\n\"favicon.png\": \"4a008d89c8309432af979368315ac7d0\",\n\"icons/Icon-192.png\": \"c5458020b42dc5d70dfd5bba90343209\",\n\"icons/Icon-512.png\": \"452eb464316f7cc3581f0e88859a5119\",\n\"manifest.json\": \"6b25b6e7115887e605cf09bf0e7bccf9\",\n\"assets/AssetManifest.json\": \"681ed2723a9092e6ad03b214c3c2d557\",\n\"assets/NOTICES\": \"c53a135dcad9418a1e5d2cd2405493e5\",\n\"assets/FontManifest.json\": \"dc3d03800ccca4601324923c0b1d6d57\",\n\"assets/AssetManifest.bin.json\": \"e0438505ed8320155b0d072949b3efa3\",\n\"assets/packages/cupertino_icons/assets/CupertinoIcons.ttf\": \"e986ebe42ef785b27164c36a9abc7818\",\n\"assets/packages/flutter_image_compress_web/assets/pica.min.js\": \"6208ed6419908c4b04382adc8a3053a2\",\n\"assets/shaders/ink_sparkle.frag\": \"ecc85a2e95f5e9f53123dcaf8cb9b6ce\",\n\"assets/AssetManifest.bin\": \"aec3a0548750abdc5e78d6ca02562f73\",\n\"assets/fonts/MaterialIcons-Regular.otf\": \"58c285d64c74d10b0c07d23dade94951\",\n\"assets/assets/glowbom.png\": \"24640e50435e96231ec08f23c196299c\",\n\"assets/assets/talk.glowbom\": \"93548c7fe5eb7659d9f7d187df7efaa0\",\n\"tv.js\": \"d3d4d5ca80cc3edec2bc4be6ff73b77e\",\n\"canvaskit/skwasm.js\": \"5d4f9263ec93efeb022bb14a3881d240\",\n\"canvaskit/skwasm.js.symbols\": \"c3c05bd50bdf59da8626bbe446ce65a3\",\n\"canvaskit/canvaskit.js.symbols\": \"74a84c23f5ada42fe063514c587968c6\",\n\"canvaskit/skwasm.wasm\": \"4051bfc27ba29bf420d17aa0c3a98bce\",\n\"canvaskit/chromium/canvaskit.js.symbols\": \"ee7e331f7f5bbf5ec937737542112372\",\n\"canvaskit/chromium/canvaskit.js\": \"901bb9e28fac643b7da75ecfd3339f3f\",\n\"canvaskit/chromium/canvaskit.wasm\": \"399e2344480862e2dfa26f12fa5891d7\",\n\"canvaskit/canvaskit.js\": \"738255d00768497e86aa4ca510cce1e1\",\n\"canvaskit/canvaskit.wasm\": \"9251bb81ae8464c4df3b072f84aa969b\",\n\"canvaskit/skwasm.worker.js\": \"bfb704a6c714a75da9ef320991e88b03\"};\n// The application shell files that are downloaded before a service worker can\n// start.\nconst CORE = [\"main.dart.js\",\n\"index.html\",\n\"flutter_bootstrap.js\",\n\"assets/AssetManifest.bin.json\",\n\"assets/FontManifest.json\"];\n\n// During install, the TEMP cache is populated with the application shell files.\nself.addEventListener(\"install\", (event) => {\n  self.skipWaiting();\n  return event.waitUntil(\n    caches.open(TEMP).then((cache) => {\n      return cache.addAll(\n        CORE.map((value) => new Request(value, {'cache': 'reload'})));\n    })\n  );\n});\n// During activate, the cache is populated with the temp files downloaded in\n// install. If this service worker is upgrading from one with a saved\n// MANIFEST, then use this to retain unchanged resource files.\nself.addEventListener(\"activate\", function(event) {\n  return event.waitUntil(async function() {\n    try {\n      var contentCache = await caches.open(CACHE_NAME);\n      var tempCache = await caches.open(TEMP);\n      var manifestCache = await caches.open(MANIFEST);\n      var manifest = await manifestCache.match('manifest');\n      // When there is no prior manifest, clear the entire cache.\n      if (!manifest) {\n        await caches.delete(CACHE_NAME);\n        contentCache = await caches.open(CACHE_NAME);\n        for (var request of await tempCache.keys()) {\n          var response = await tempCache.match(request);\n          await contentCache.put(request, response);\n        }\n        await caches.delete(TEMP);\n        // Save the manifest to make future upgrades efficient.\n        await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES)));\n        // Claim client to enable caching on first launch\n        self.clients.claim();\n        return;\n      }\n      var oldManifest = await manifest.json();\n      var origin = self.location.origin;\n      for (var request of await contentCache.keys()) {\n        var key = request.url.substring(origin.length + 1);\n        if (key == \"\") {\n          key = \"/\";\n        }\n        // If a resource from the old manifest is not in the new cache, or if\n        // the MD5 sum has changed, delete it. Otherwise the resource is left\n        // in the cache and can be reused by the new service worker.\n        if (!RESOURCES[key] || RESOURCES[key] != oldManifest[key]) {\n          await contentCache.delete(request);\n        }\n      }\n      // Populate the cache with the app shell TEMP files, potentially overwriting\n      // cache files preserved above.\n      for (var request of await tempCache.keys()) {\n        var response = await tempCache.match(request);\n        await contentCache.put(request, response);\n      }\n      await caches.delete(TEMP);\n      // Save the manifest to make future upgrades efficient.\n      await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES)));\n      // Claim client to enable caching on first launch\n      self.clients.claim();\n      return;\n    } catch (err) {\n      // On an unhandled exception the state of the cache cannot be guaranteed.\n      console.error('Failed to upgrade service worker: ' + err);\n      await caches.delete(CACHE_NAME);\n      await caches.delete(TEMP);\n      await caches.delete(MANIFEST);\n    }\n  }());\n});\n// The fetch handler redirects requests for RESOURCE files to the service\n// worker cache.\nself.addEventListener(\"fetch\", (event) => {\n  if (event.request.method !== 'GET') {\n    return;\n  }\n  var origin = self.location.origin;\n  var key = event.request.url.substring(origin.length + 1);\n  // Redirect URLs to the index.html\n  if (key.indexOf('?v=') != -1) {\n    key = key.split('?v=')[0];\n  }\n  if (event.request.url == origin || event.request.url.startsWith(origin + '/#') || key == '') {\n    key = '/';\n  }\n  // If the URL is not the RESOURCE list then return to signal that the\n  // browser should take over.\n  if (!RESOURCES[key]) {\n    return;\n  }\n  // If the URL is the index.html, perform an online-first request.\n  if (key == '/') {\n    return onlineFirst(event);\n  }\n  event.respondWith(caches.open(CACHE_NAME)\n    .then((cache) =>  {\n      return cache.match(event.request).then((response) => {\n        // Either respond with the cached resource, or perform a fetch and\n        // lazily populate the cache only if the resource was successfully fetched.\n        return response || fetch(event.request).then((response) => {\n          if (response && Boolean(response.ok)) {\n            cache.put(event.request, response.clone());\n          }\n          return response;\n        });\n      })\n    })\n  );\n});\nself.addEventListener('message', (event) => {\n  // SkipWaiting can be used to immediately activate a waiting service worker.\n  // This will also require a page refresh triggered by the main worker.\n  if (event.data === 'skipWaiting') {\n    self.skipWaiting();\n    return;\n  }\n  if (event.data === 'downloadOffline') {\n    downloadOffline();\n    return;\n  }\n});\n// Download offline will check the RESOURCES for all files not in the cache\n// and populate them.\nasync function downloadOffline() {\n  var resources = [];\n  var contentCache = await caches.open(CACHE_NAME);\n  var currentContent = {};\n  for (var request of await contentCache.keys()) {\n    var key = request.url.substring(origin.length + 1);\n    if (key == \"\") {\n      key = \"/\";\n    }\n    currentContent[key] = true;\n  }\n  for (var resourceKey of Object.keys(RESOURCES)) {\n    if (!currentContent[resourceKey]) {\n      resources.push(resourceKey);\n    }\n  }\n  return contentCache.addAll(resources);\n}\n// Attempt to download the resource online before falling back to\n// the offline cache.\nfunction onlineFirst(event) {\n  return event.respondWith(\n    fetch(event.request).then((response) => {\n      return caches.open(CACHE_NAME).then((cache) => {\n        cache.put(event.request, response.clone());\n        return response;\n      });\n    }).catch((error) => {\n      return caches.open(CACHE_NAME).then((cache) => {\n        return cache.match(event.request).then((response) => {\n          if (response != null) {\n            return response;\n          }\n          throw error;\n        });\n      });\n    })\n  );\n}\n"
  },
  {
    "path": "legacy/dist/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <meta content=\"IE=Edge\" http-equiv=\"X-UA-Compatible\">\n  <meta name=\"description\" content=\"Glowby\">\n\n  <!-- iOS meta tags & icons -->\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n  <meta name=\"apple-mobile-web-app-title\" content=\"Glowby\">\n  <link rel=\"apple-touch-icon\" href=\"icons/Icon-192.png\">\n\n  <!-- Favicon -->\n  <link rel=\"shortcut icon\" type=\"image/png\" href=\"favicon.png\"/>\n\n  <title>Glowby</title>\n  <link rel=\"manifest\" href=\"manifest.json\">\n</head>\n<body>\n  <script src=\"tv.js\"></script>\n  <!-- This script installs service_worker.js to provide PWA functionality to\n       application. For more information, see:\n       https://developers.google.com/web/fundamentals/primers/service-workers -->\n  <script>\n    if ('serviceWorker' in navigator) {\n      window.addEventListener('load', function () {\n        navigator.serviceWorker.register('flutter_service_worker.js?v=2079215133');\n      });\n    }\n  </script>\n  <script src=\"main.dart.js\" type=\"application/javascript\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "legacy/dist/manifest.json",
    "content": "{\n    \"name\": \"Quiz App\",\n    \"short_name\": \"Quiz\",\n    \"start_url\": \".\",\n    \"display\": \"standalone\",\n    \"background_color\": \"#0175C2\",\n    \"theme_color\": \"#0175C2\",\n    \"description\": \"Answer questions correctly.\",\n    \"orientation\": \"portrait-primary\",\n    \"prefer_related_applications\": false,\n    \"icons\": [\n        {\n          \"src\": \"images/icons/icon-72x72.png\",\n          \"sizes\": \"72x72\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-96x96.png\",\n          \"sizes\": \"96x96\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-128x128.png\",\n          \"sizes\": \"128x128\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-144x144.png\",\n          \"sizes\": \"144x144\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-152x152.png\",\n          \"sizes\": \"152x152\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-192x192.png\",\n          \"sizes\": \"192x192\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-384x384.png\",\n          \"sizes\": \"384x384\",\n          \"type\": \"image/png\"\n        },\n        {\n          \"src\": \"images/icons/icon-512x512.png\",\n          \"sizes\": \"512x512\",\n          \"type\": \"image/png\"\n        }\n      ]\n}\n"
  },
  {
    "path": "legacy/dist/tv.js",
    "content": "const SpeechRecognition =\n  window.SpeechRecognition || window.webkitSpeechRecognition;\n\nif (SpeechRecognition != null) {\n  const r = new SpeechRecognition();\n  r.lang = \"en-US\";\n  r.interimResults = false;\n\n  r.addEventListener(\"result\", (e) => {\n    let last = e.results.length - 1;\n    let text = e.results[last][0].transcript;\n\n    //console.log(\"last: \" + last);\n    //console.log(\"text: \" + text);\n\n    //console.log(\"Confidence: \" + e.results[0][0].confidence);\n\n    vr(text);\n  });\n\n  function rv(lang) {\n    if (typeof lang !== \"undefined\" && lang !== null) {\n      r.lang = lang;\n      //console.log(\"switched to \" + lang);\n    }\n\n    r.start();\n    //console.log(\"recordVoice call\");\n  }\n} else {\n  //console.error(\"SpeechRecognition API not supported in this browser.\");\n}\n"
  },
  {
    "path": "legacy/dist/version.json",
    "content": "{\"app_name\":\"glowby\",\"version\":\"2.0.0\",\"package_name\":\"glowby\"}"
  },
  {
    "path": "legacy/docs/README.md",
    "content": "# Glowby Basic - Create Voice AI Assistant App in Minutes\n\nGlowby Basic is a powerful voice-based AI assistant that can help users with various tasks. Easily customizable, trainable, and deployable anywhere, Glowby Basic is designed to adapt to your specific needs. Built using Flutter, Glowby Basic provides a seamless web app experience with an intuitive voice interface.\n\n[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/import/git?s=https://github.com/glowbom/glowby-basic)\n\n## Live Demo 🤖\n\nExperience Glowby Basic in action with our live demo hosted on GitHub Pages [here](https://glowbom.github.io/glowby-basic/).\n\n![GitHub Repo stars](https://img.shields.io/github/stars/glowbom/glowby?style=social)\n[![Twitter Follow](https://img.shields.io/twitter/follow/GlowbomCorp?style=social)](https://twitter.com/GlowbomCorp)\n[![Discord Follow](https://dcbadge.vercel.app/api/server/jpWW6vB4Jk?style=flat)](https://discord.gg/jpWW6vB4Jk)\n[![MIT License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/glowbom/glowby/blob/main/LICENSE)\n\n## See It in Action\n\n### Experimental Autonomous Mode 🧠\n\n![Glowby Basic Experimental Autonomous Mode](https://user-images.githubusercontent.com/2455891/233245896-59d5f7a4-667c-4f74-95c0-b348a3712e9e.gif)\nGlowby plans a trip to Portugal with Autonomous Mode. To see this demo with sound, check out this [Twitter post](https://twitter.com/jacobilin/status/1648870682972004352).\n\n### Regular Mode 🤖\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232182586-30984d36-4641-41da-9e1e-c23c27716e3d.gif)\n\n## Overview\n\nThis project offers an easy way for creating customizable AI assistants like [Glowby](https://www.youtube.com/watch?v=iFECpMXmKOg), a witty AI agent that assists users in building apps on [Glowbom.com](https://www.glowbom.com). By open-sourcing the Flutter-based chat component, we aim to foster a community-driven ecosystem to build diverse AI agents for a variety of use cases.\n\n## Features\n\n- **New!** Experimental Autonomous Mode (watch a [quick demo](https://twitter.com/jacobilin/status/1648870682972004352))\n- **New!** GPT-4 Turbo with Vision (watch a [quick demo](https://twitter.com/jacobilin/status/1739879716323274772))\n- **New!** Image Generation powered by **DALL·E** (watch a [quick demo](https://twitter.com/jacobilin/status/1649910120988696576))\n- **New!** Multilingual Translations (watch a [quick demo](https://twitter.com/jacobilin/status/1651084311431622658))\n- **New!** Interactive Adventure (watch a [quick demo](https://twitter.com/jacobilin/status/1651449595447369729))\n- **New!** Pulze support\n- **New!** 🤗 [Hosted Inference API](https://huggingface.co/docs/api-inference/index) for [Text2Text Generation Models](https://huggingface.co/models?pipeline_tag=text2text-generation&sort=downloads)\n- Powerful, customizable voice-based AI assistant\n- Pre-set questions and answers using the [Glowbom builder](https://www.glowbom.com)\n- Voice input and output for a smooth and intuitive user experience\n- Customizable prompts allowing you to tailor the assistant to your needs\n- Easily switch between different prompts for a variety of scenarios and tasks\n- Support for multiple languages: American English, American Spanish, Argentinian Spanish, Arabic (Saudi Arabia), Australian English, Brazilian Portuguese, British English, Bulgarian, Canadian French, Chinese (Simplified), Chinese (Traditional), Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew (Israel), Hungarian, Indonesian, Italian, Japanese, Korean, Mexican Spanish, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, Swedish, Thai, Turkish, Ukrainian, and Vietnamese. Want to add more languages? Feel free to let us know on [Twitter](https://twitter.com/glowbomcorp).\n\nMore details about Glowby Basic's features in our Twitter thread [here](https://twitter.com/jacobilin/status/1649443429347397632).\n\n### Multilingual Support in Action\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232395321-cea05b32-070d-494a-ac85-05c5f493f2ba.gif)\n\nTo experience the Autonomous Mode demo with sound, check out this [Twitter post](https://twitter.com/jacobilin/status/1648870682972004352).\n\n### Switch Between Different Prompts\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232727678-ced2ee44-a5df-45da-8846-d90e82c8a007.gif)\n\n### Image Generation powered by DALL·E\n\n![Glowby Basic Image Generation](https://user-images.githubusercontent.com/2455891/233778560-47d8e011-03a8-41ad-a1fc-33827a033475.gif)\n\n### 🤗 Hosted Inference API\n\n![Glowby Basic 🤗 Hosted Inference API](https://github.com/glowbom/glowby/assets/2455891/9d76f02c-6139-44e8-9b16-6fbf429ae3e5)\n\n**Glowby Basic** supports the 🤗 **Hosted Inference API** for [text-to-text generation models](https://huggingface.co/models?pipeline_tag=text2text-generation&sort=downloads). [Here's how it works...](https://twitter.com/jacobilin/status/1661537585985126402)\n\n## Upcoming Features\n\nWe're constantly working to improve our project and have several exciting features in development. Here's a sneak peek at what's coming soon:\n\n### Functionality\n\n- Local Storage\n- Backend Service for API Calls\n- AI Extensions\n- Anthropic Claude\n- Assistants API\n- DALL·E 3\n- OpenAI's text-to-speech\n\n### Monetization\n\n- Adding a paywall\n\nStay tuned for more updates and enhancements as we continue to grow and develop the project!\n\n## Getting Started\n\n### Prerequisites\n\n- Flutter SDK (version 3.7.10 or higher)\n- Dart (version 2.19.5 or higher)\n- A compatible browser or device for running the web app\n- [OpenAI API key](https://platform.openai.com/account/api-keys)\n\nGlowby Basic supports **GPT-4**, **GPT-4 Turbo** and **GPT-3.5** models.\n\nGlowby Basic is powered by the **ChatGPT API** and built on the same groundbreaking technology as **ChatGPT**, the industry-leading natural-language AI system from OpenAI. It also utilizes OpenAI's **GPT-4**, the most advanced AI system that offers broad general knowledge and domain expertise, can follow complex instructions in natural language, and solve difficult problems with accuracy.\n\nGlowby Basic supports image generation powered by **DALL·E**. OpenAI’s **DALL·E 2** system generates unique images and art from text descriptions, combining concepts and styles in creative and inspiring ways.\n\n### Installation\n\n1. Clone the repository:\n\n```\ngit clone https://github.com/glowbom/glowby.git\n```\n\n2. Navigate to the project directory:\n\n```\ncd app\n```\n\n3. Install dependencies:\n\n```\nflutter pub get\n```\n\n4. Run the project in your preferred environment:\n\n```\nflutter run -d chrome --web-renderer html\n```\n\n## Deployment\n\nGlowby Basic comes with a pre-built `dist` folder, which you can deploy directly to your preferred hosting platform. Alternatively, you can build the project yourself and deploy the output. Glowby Basic is compatible with a variety of hosting services, including Netlify, Vercel, Firebase, AWS, and more. Simply follow the deployment instructions provided by your chosen hosting service. Compiled code is available in a separate GitHub project [here](https://github.com/glowbom/glowby-basic).\n\n[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/import/git?s=https://github.com/glowbom/glowby-basic)\n\n## Customization\n\nTo customize the AI assistant's behavior and tasks, modify the default prompt in AI Settings or in the code.\n\n#### Complex Task Prompt\n\n```\nYou are Glowby, an AI assistant designed to break down complex tasks into a manageable 5-step plan. For each step, you offer the user 3 options to choose from. Once the user selects an option, you proceed to the next step based on their choice. After the user has chosen an option for the fifth step, you provide them with a customized, actionable plan based on their previous responses. You only reveal the current step and options to ensure an engaging, interactive experience.\n```\n\n#### Habit Formation\n\n```\nAct as a dual PhD in sports psychology and neuroscience. Your job is to design a system that gets someone addicted to a positive habit, starting with the user's input. Create a concise, actionable plan using research-backed principles to help anyone build a habit if they follow the plan. Incorporate research such as BF Skinner\\'s study of addiction, BJ Fogg's Behavioral Model, and similar research on addiction and compulsion. Be concise yet informative. Give a concise day-by-day plan for the first week. Your response should be fewer than 10 sentences.\n```\n\n#### Brainstorming Prompt\n\n```\nGenerate ideas with Glowby! As a super helpful, nice, and humorous AI assistant, Glowby is ready to provide you with a concise plan and assist in executing it. With Glowby by your side, you'll never feel stuck again. Let's get brainstorming!\n```\n\n#### Simple Assistant Prompt\n\n```\nYou are Glowby, super helpful, nice, and humorous AI assistant ready to help with anything. I like to joke around.\n```\n\n#### Stand-up Comedy Prompt\n\n```\nYou are Glowby, a hilarious AI stand-up comedian, skilled in creating funny conversations that become popular on social media platforms like Reels. Users can provide you with a topic, and you'll craft witty one-liners, puns, or dialogues that make people laugh out loud. Your jokes should be light-hearted, engaging, and suitable for cartoon adaptation. Let's get the laughs rolling!\n```\n\n#### Creative Writing Prompt\n\n```\nYou are Glowby, a talented AI writer who helps users craft engaging and imaginative stories. Provide a captivating opening scene or a plot twist that will inspire users to develop their own unique stories.\n```\n\n#### Problem Solving Prompt\n\n```\nYou are Glowby, a resourceful AI assistant skilled in finding solutions to various problems. Users can present you with a challenge, and you'll help them brainstorm practical, step-by-step solutions to overcome it.'\n```\n\n#### Learning and Education Prompt\n\n```\nYou are Glowby, an AI tutor who assists users with their learning needs. Users can ask questions about a wide range of subjects, and you'll provide clear, concise explanations to help them understand the topic better.\n```\n\n#### Career and Job Advice Prompt\n\n```\nYou are Glowby, an AI career coach who offers guidance on job-related matters. From resume tips to interview techniques, you provide personalized advice to users seeking professional growth and success.\n```\n\n#### Daily Motivation Prompt\n\n```\nYou are Glowby, an AI life coach who delivers daily doses of inspiration and motivation. Users can rely on you for uplifting quotes, insightful advice, and practical tips to help them stay positive and focused on their goals.\n```\n\nWant to add your prompt? Let us know on [Twitter](https://twitter.com/glowbomcorp).\n\n### Questions Pre-set\n\nOne of the powerful features of Glowby Basic is the ability to pre-set questions and answers for your AI assistant. Using [Glowbom.com](https://www.glowbom.com), you can create a knowledge base of questions and answers that your AI assistant can use to provide instant responses.\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/232735288-abb5f9d8-3d51-4170-a6dd-a967e7d8ae30.gif)\n\nIf the answer to a question is not found locally, the app will make a server request to retrieve the relevant information, ensuring that users receive accurate and helpful responses.\n\n### AI-Agent Settings\n\nUsing [Glowbom.com](https://www.glowbom.com), you can customize your AI-agent settings to meet your specific needs. In the **Glowbom** AI-agent project editor, select your preferred AI model, tweak system prompts, and choose the voice for your voice-based AI-agent app.\n\n![AI Agent Settings](https://github.com/glowbom/glowby/assets/2455891/e82bf935-d7d3-4073-b072-a89c1c96b130)\n\nAfter setting up your preferences on [Glowbom.com](https://www.glowbom.com), you can easily import the settings into Glowby Basic. Simply import the Glowbom data file using the **Import** button located at the top right corner of your virtual assistant. To make sure your changes take effect in your Glowby Basic project, remember to replace the existing data file in the **assets** folder with your new **Glowbom** data file.\n\n![Glowby Basic Import](https://github.com/glowbom/glowby/assets/2455891/462c9915-1d63-4a10-9fa5-31965d4df33a)\n\n### Autonomous Mode (Experimental)\n\n![Glowby Basic Demo](https://user-images.githubusercontent.com/2455891/233034444-9457c62c-3fc3-47f3-bd08-198093ea9c76.gif)\n\nTo experience the Autonomous Mode demo with sound, check out this [Twitter post](https://twitter.com/jacobilin/status/1648870682972004352).\n\n### Interactive Adventure\n\n![Interactive Adventure](https://user-images.githubusercontent.com/2455891/234763801-0b636f31-74e1-4f57-8978-a52938981f14.gif)\n\nIt lets you embark on captivating, choice-driven narratives, where your decisions shape the story.\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=glowbom/glowby&type=Date)](https://star-history.com/#glowbom/glowby&Date)\n\n### ⭐️ Star Us ⭐️\n\nIf this project helps you create voice AI assistant apps faster, please consider starring it – every star makes us very happy!\n\n## Contributing\n\nWe're excited to have you join our community and contribute to Glowby Basic! Whether you're interested in fixing bugs, adding new features, or improving documentation, your contributions are welcome. Feel free to open issues and submit pull requests on GitHub. Please remember to maintain a respectful and professional tone in all communications.\n\nWe value the participation of each member of the community and want all contributors to have an enjoyable and fulfilling experience. Accordingly, all contributors are expected to show respect and courtesy to others in all our interactions.\n\n## License\n\nGlowby Basic is released under the [MIT License](https://opensource.org/licenses/MIT).\n\n## Contact\n\nIf you have any questions or need assistance, feel free to reach out to us on [Twitter](https://twitter.com/glowbomcorp).\n\n## Glowby for ChatGPT\n\nGlowby GPT is available [here](https://glowbom.com/glowby/gpt).\n"
  },
  {
    "path": "project/AGENTS.md",
    "content": "# Workspace Instructions\n\n## Bundled Project Template\n\nWhen working in `project/`, use `project/prototype/index.html` as the reference design.\n\n### Primary Goal\n\nAll destination projects in `project/` must look and function exactly like the prototype. This includes:\n- Identical visual appearance: colors, fonts, spacing, and layout\n- Same functionality and user interactions\n- All prototype images included and displayed correctly\n- App icon matching `project/icon.png`\n\n### App Metadata\n\n- Display Name: `Glowby`\n- Bundle ID: `app.glowbom.glowby`\n- Version: `1.0`\n- Build Number: `1`\n\nUpdate these values in each platform output:\n\n#### iOS\n- Display Name: Xcode target -> General -> Display Name, or `CFBundleDisplayName` in `Info.plist`\n- Bundle ID: Xcode target -> Signing & Capabilities -> Bundle Identifier\n- Version: Xcode target -> General -> Version, or `CFBundleShortVersionString` in `Info.plist`\n- Build: Xcode target -> General -> Build, or `CFBundleVersion` in `Info.plist`\n\n#### Android\n- Display Name: `project/android/app/src/main/res/values/strings.xml` -> `app_name`\n- Bundle ID: `project/android/app/build.gradle` -> `applicationId`\n- Version: `project/android/app/build.gradle` -> `versionName`\n- Build: `project/android/app/build.gradle` -> `versionCode`\n\n#### Games\n- Display Name: update in the engine project settings\n- Bundle ID: update in the engine export settings\n- Version: update in the engine project/export settings\n\n### Default Tasks\n\n#### 0. Production Readiness\n- Review the prototype and ensure all UI elements are properly implemented\n- Verify colors, typography, and spacing match the prototype\n- Check that user interactions work as expected\n- Full screen layout: the app or game should fill the screen with no unnecessary empty white space\n- Sprite transparency for games: sprites must use transparent backgrounds\n\n#### 1. Copy Images from Prototype\n- Copy all media assets from `project/prototype/assets/` to platform-specific asset directories\n- Reference `project/prototype/assets.json` for asset metadata and original prompts\n- Ensure image and video formats are compatible with each platform\n\n#### 2. Copy and Resize App Icon\n- Source icon: `project/icon.png`\n- Resize and place icons in the correct locations for each platform\n\n#### Apple (SwiftUI)\n- Single SwiftUI project under `project/apple/` targets iOS, iPadOS, macOS, visionOS, watchOS, and tvOS\n- Update the SwiftUI extension file such as `project/apple/Custom/AiExtensions.swift`\n- Copy images into the asset catalog under `project/apple/Custom/Assets.xcassets/`\n- Update `Contents.json` in the AppIcon asset with the correct filenames\n\n#### Android (Jetpack Compose)\n- Update the Android extension file such as `AiExtensions.kt`\n- Copy images into Android drawable resources\n- Name icon files `ic_launcher.png` and `ic_launcher_round.png`\n\n#### Web (Next.js)\n- Place the app icon in `project/web/src/app/icon.png`\n- Also copy the icon to `project/web/public/icon.png` for static references\n- Keep `project/web/src/app/favicon.ico` consistent if it exists\n- Ensure web metadata and title reflect the app identity\n\n#### 3. Verify No Compile Errors\n- Build each platform project and fix any compilation errors\n- For Apple: open the destination project in Xcode and build\n- For Android: open the destination in Android Studio and sync/build\n- For games: open the project and run the main scene\n\n### Target Destinations\n\niOS (SwiftUI), Android (Jetpack Compose), Web (Next.js)\n\n### Reference Files\n\n- Prototype HTML: `project/prototype/index.html`\n- Assets: `project/prototype/assets/`\n- Asset metadata: `project/prototype/assets.json`\n- App Icon: `project/icon.png`\n- Project Manifest: `project/glowbom.json`\n\n### Handling Files Downloaded from Glowbom.com\n\nUsers can build a prototype on the Glowbom desktop app and then download files to feed into this project. They may attach some or all of the following when running a build:\n\n#### File Types the User May Attach\n\n| File pattern | What it is |\n|---|---|\n| `*.zip` | Glowbom default project template (this boilerplate) as an archive |\n| `AiExtensions.swift` | iOS/SwiftUI AI extension — generated UI code for `apple/Custom/AiExtensions.swift` |\n| `AiExtensions.kt` | Android/Kotlin AI extension — generated UI code for `android/app/src/main/java/com/glowbom/custom/AiExtensions.kt` |\n| `AiExtensions.tsx` | Web/Next.js AI extension — generated UI code for `web/src/app/components/AiExtensions.tsx` |\n| Larger `.html` file (contains `data:image/...;base64,`) | HTML prototype with images embedded as base64 |\n| Smaller `.html` file (no base64 images) | HTML prototype with image prompts in `alt`/`title` attributes but no image data |\n| `*.html` with `preview` in name | Preview variant of the prototype (typically the one with base64 images) |\n\nNot all file types will be present every time. The user may attach just one file or several. Handle whatever is provided.\n\n#### What To Do When Attachments Are Present\n\n1. **Check what this project already has.** The Glowbom project structure (`glowbom.json`, `prototype/`, `apple/`, `android/`, `web/`) may already be in place. If so, work with what exists. If the project folder is empty or missing the structure and a `.zip` template is attached, unarchive it first.\n\n2. **Place AI extension files** into their correct locations:\n   - `AiExtensions.swift` → `apple/Custom/AiExtensions.swift`\n   - `AiExtensions.kt` → `android/app/src/main/java/com/glowbom/custom/AiExtensions.kt`\n   - `AiExtensions.tsx` → `web/src/app/components/AiExtensions.tsx`\n   - Set `enabled = true` and update `title` if not already set\n   - Only update platforms for which an extension file was attached\n\n3. **Extract images from the HTML prototype.** If an attached HTML file contains base64-encoded images (`data:image/(png|jpeg|jpg|gif|webp);base64,...`):\n   - Decode each base64 image and save it to `prototype/assets/image-NNN.png` (numbered sequentially: `image-001.png`, `image-002.png`, etc.)\n   - Replace the data URIs in the HTML with relative paths (`assets/image-NNN.png`)\n   - Save the cleaned HTML as `prototype/index.html`\n\n4. **Extract image prompts.** If a second smaller HTML file is attached (without base64 images), or if the HTML has `alt` or `title` attributes describing images:\n   - Collect the image descriptions and create or update `prototype/assets.json`:\n     ```json\n     {\n       \"assets\": [\n         { \"filename\": \"image-001.png\", \"prompt\": \"description from the HTML\", \"sourceService\": \"Glowby Images\" }\n       ],\n       \"exportedAt\": \"<current ISO timestamp>\",\n       \"version\": \"1.0\"\n     }\n     ```\n   - If only one HTML file is attached and it has no base64 images, it is still the prototype — save it as `prototype/index.html`\n\n5. **Copy extracted assets to platform directories** following the rules in \"Copy Images from Prototype\" above, then proceed with the default tasks (production readiness, icon setup, build verification).\n\n#### Tips\n\n- The user may provide no instructions at all — the attachments themselves are the instructions\n- If the HTML references images but none are embedded, check whether they already exist in `prototype/assets/`\n- Merge attachments into the existing project rather than overwriting existing work\n- Be resourceful: figure out what the user intends from the combination of files they attached\n\n### Notes\n\n- If the user gives different instructions, follow those instead of the defaults above\n- Keep the prototype as the source of truth for visual design\n- Test on actual devices when possible\n- For games, ensure sprite assets keep transparent backgrounds\n"
  },
  {
    "path": "project/android/.gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/caches\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n/.idea/navEditor.xml\n/.idea/assetWizardSettings.xml\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n.cxx\nlocal.properties\n"
  },
  {
    "path": "project/android/.idea/.gitignore",
    "content": "# Default ignored files\n/shelf/\n/workspace.xml\n"
  },
  {
    "path": "project/android/.idea/.name",
    "content": "Custom"
  },
  {
    "path": "project/android/.idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <bytecodeTargetLevel target=\"17\" />\n  </component>\n</project>"
  },
  {
    "path": "project/android/.idea/deploymentTargetDropDown.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"deploymentTargetDropDown\">\n    <value>\n      <entry key=\"app\">\n        <State />\n      </entry>\n    </value>\n  </component>\n</project>"
  },
  {
    "path": "project/android/.idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleMigrationSettings\" migrationVersion=\"1\" />\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"gradleJvm\" value=\"#GRADLE_LOCAL_JAVA_HOME\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveExternalAnnotations\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": "project/android/.idea/inspectionProfiles/Project_Default.xml",
    "content": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project Default\" />\n    <inspection_tool class=\"PreviewAnnotationInFunctionWithParameters\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewApiLevelMustBeValid\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewDimensionRespectsLimit\" enabled=\"true\" level=\"WARNING\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewFontScaleMustBeGreaterThanZero\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewMultipleParameterProviders\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewMustBeTopLevelFunction\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewNeedsComposableAnnotation\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewNotSupportedInUnitTestFiles\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n    <inspection_tool class=\"PreviewPickerAnnotation\" enabled=\"true\" level=\"ERROR\" enabled_by_default=\"true\">\n      <option name=\"composableFile\" value=\"true\" />\n      <option name=\"previewFile\" value=\"true\" />\n    </inspection_tool>\n  </profile>\n</component>"
  },
  {
    "path": "project/android/.idea/kotlinc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"KotlinJpsPluginSettings\">\n    <option name=\"version\" value=\"1.8.10\" />\n  </component>\n</project>"
  },
  {
    "path": "project/android/.idea/migrations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectMigrations\">\n    <option name=\"MigrateToGradleLocalJavaHome\">\n      <set>\n        <option value=\"$PROJECT_DIR$\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": "project/android/.idea/misc.xml",
    "content": "<project version=\"4\">\n  <component name=\"ExternalStorageConfigurationManager\" enabled=\"true\" />\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_17\" default=\"true\" project-jdk-name=\"jbr-17\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": "project/android/.idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$/..\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "project/android/README.md",
    "content": "# Glowbom AI Extensions Guide for ChatGPT\n\nThis guide is intended for ChatGPT with Code Interpreter to understand the context of a given project and to provide assistance in generating code for AI extensions.\n\nThis repository contains a basic structure for a Custom application along with a special `AiExtensions.kt` file. This file is designated for OpenAI model to add or modify code, providing optional features or enhancements to the existing Kotlin Jetpack Compose project.\n\n## Understanding the Code\n\n- `MainActivity.kt`: This is the main file for the Custom application. It represents a simple one screen app.\n- `AiExtensions.kt`: This is where you can add custom AI extension code. The `GlowbyScreen` class is an example of what can be added here.\n\n## Interactive Features\n\nFor tasks that involve calculations or data manipulation, the generated code should include interactive features that allow users to input data and see the results reflected in the UI. The results should be presented in a clear and user-friendly manner.\n\nFor example, if the task is to implement a function that performs calculations based on user input, the generated code should include:\n\n1. Input fields for the user to provide the necessary data.\n2. A way for the user to trigger the calculation. This could be a button that the user can press to run the function once the necessary data has been inputted.\n3. A way to display the results of the calculation in the UI.\n\nThe AI extension should handle any necessary error checking and data validation to ensure that the user-provided data is suitable for the calculation. If the data is not suitable, the AI extension should provide clear feedback to the user about what needs to be corrected.\n\n## Additional Guidelines\n\n1. **Problem Statement Understanding**: Understand the problem statement thoroughly before proceeding with the solution. Ask for clarifications if the problem statement isn't clear.\n2. **Solution Language**: Confirm the language of the solution. The solution for the current project is expected to be in Kotlin.\n3. **LeetCode Submissions**: If the problem is from a competitive programming platform like LeetCode, provide the solution suitable for that platform, considering the given method signature and expected return type.\n4. **Code Testing**: Test the generated code for any syntax or logical errors before delivering the solution. Also, consider different edge cases to ensure the solution is robust.\n5. **Performance Considerations**: Provide solutions that are not just correct but also efficient.\n\n## Specific Notes for Kotlin Jetpack Compose\n\n1. **UI Components**: When adding or modifying UI components, use Material Design 3 components. This is the design system currently in use in the project.\n2. **Function Invocation**: If you add a new composable function inside `AiExtensions.kt`, make sure it's invoked correctly inside `MainActivity.kt`. Ensure that the function is accessible and that the call follows the correct syntax.\n3. **Typography**: When setting typography, refer to the available typography in `MaterialTheme.typography` for the project. Not all typography styles may be available.\n\n## Generating Code for AI Extensions\n\nThe process of creating an AI extension involves generating Kotlin code that extends or enhances the existing Custom application. \n\nHere are the steps to follow:\n\n1. Glowbom users will attach the `ai.zip` file along with a description of what they want to create (e.g., \"a screen with a list of 3 default habits in a calendar format - workout, meditate, drink water\").\n2. Based on this description, generate Kotlin code within the `AiExtensions` object in the `AiExtensions.kt` file that fits the users' needs and is compatible with the existing codebase.\n3. Test the generated code for any syntax or logical errors before delivering the solution. Also, consider different edge cases to ensure the solution is robust.\n4. Once the code has been tested and confirmed to be working as expected, return the entire updated `AiExtensions.kt` file content. This is the final output of the task.\n5. Return the Entire File: After generating and testing the code, always return the entire updated `AiExtensions.kt` file content. Do not return only a part of the code or a class name. The entire content of the file is necessary for the user to easily integrate the new code with their existing codebase.\n\nRemember, any code added should be clearly marked with comments for users to understand what has been added or changed.\n\nHappy coding!\n\nNote: After generating and testing the code, always return the entire updated `AiExtensions.kt` file content. This is the final output of the task.\n\nHere's the code:\n\nAiExtensions.kt:\n\npackage com.glowbom.custom\n\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.wrapContentSize\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\n\nclass AiExtensions {\ncompanion object {\n// Flag to enable or disable the GlowbyScreen\nvar enabled = false\n\n        // Title for the GlowbyScreen\n        var title = \"App\"\n\n        /**\n         * Composable function that displays the GlowbyScreen when enabled is set to true.\n         * The GlowbyScreen consists of an image \"glowby\" which is displayed in the center of the screen.\n         *\n         * @param modifier Modifier to be applied to the Box layout\n         */\n        @Composable\n        fun GlowbyScreen(\n            modifier: Modifier = Modifier\n        ) {\n            if (enabled) {\n                Box(\n                    modifier = modifier\n                        .fillMaxSize()\n                ) {\n                    Image(\n                        painter = painterResource(id = R.drawable.glowbom),\n                        contentDescription = \"Glowby Screen\",\n                        contentScale = ContentScale.FillBounds,\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .height(300.dp)\n                            .wrapContentSize(Alignment.Center)\n                    )\n                }\n            }\n        }\n    }\n}\n\nMainActivity.kt:\n\npackage com.glowbom.custom\n\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.request.target.CustomTarget\nimport com.glowbom.custom.ui.theme.CustomTheme\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass CustomState(val context: Context) {\nval appScreen = mutableStateOf(\"Loading\")\nlateinit var content: Map<String, Any>\n\n    val title: String\n        get() = content[\"title\"] as String? ?: \"Custom App\"\n    var mainColor = mutableStateOf(Color.Blue)\n    val questions: List<Map<String, Any>>\n        get() {\n            val questionsAny = content[\"questions\"]\n            return if (questionsAny is List<*>) {\n                questionsAny.filterIsInstance<Map<String, Any>>()\n            } else {\n                emptyList()\n            }\n        }\n    init {\n        CoroutineScope(Dispatchers.IO).launch {\n            content = loadContentFromAssets()\n            withContext(Dispatchers.Main) {\n                mainColor.value = getColorFromString(content[\"main_color\"] as String? ?: \"Blue\")\n                appScreen.value = \"Questions\"\n            }\n        }\n    }\n\n    private suspend fun loadContentFromAssets(): Map<String, Any> {\n        val data = context.assets.open(\"custom.glowbom\").bufferedReader().use { it.readText() }\n        return Gson().fromJson(data, object : TypeToken<Map<String, Any>>() {}.type)\n    }\n}\n\nfun getColorFromString(colorString: String): Color {\nreturn when (colorString.lowercase()) {\n\"black\" -> Color.Black\n\"blue\" -> Color.Blue\n\"green\" -> Color.Green\n\"grey\" -> Color.Gray\n\"red\" -> Color.Red\nelse -> Color.Blue\n}\n}\n\n@Composable\nfun LoadingScreen() {\nBox(\ncontentAlignment = Alignment.Center,\nmodifier = Modifier.fillMaxSize()\n) {\nText(text = \"Loading...\")\n}\n}\n\n@Composable\nfun GlowbomScreen() {\nBox(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {\nImage(\npainter = painterResource(id = R.drawable.glowbom),\ncontentDescription = \"Glowbom Logo\"\n)\n}\n}\n\n@Composable\nfun ElementsScreen(elements: List<Map<String, Any>>) {\nBox(Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {\nColumn(\nmodifier = Modifier.fillMaxWidth(),\nhorizontalAlignment = Alignment.CenterHorizontally\n) {\nelements.forEach { element ->\nwhen (val description = element[\"description\"] as String?) {\n\"Image\" -> ImageElement(element)\n\"Text\" -> TextElement(element)\n\"Button\" -> ButtonElement(element)\n\"Input\" -> InputElement(element)\nelse -> Text(text = \"Unsupported element type: $description\")\n}\n}\n}\n}\n}\n\n@Composable\nfun ImageElement(element: Map<String, Any>) {\n// Get the image URL from the element\nval imageUrl = (element[\"buttonsTexts\"] as? List<*>)?.first() as? String ?: \"\"\n\n    val imageBitmap = rememberImage(imageUrl)\n\n    Box(Modifier.padding(16.dp)) {\n        imageBitmap?.let {\n            Image(\n                bitmap = it,\n                contentDescription = null, // descriptive text for the visually impaired\n                contentScale = ContentScale.Crop,\n                modifier = Modifier\n                    .height(200.dp)\n                    .width(320.dp)\n            )\n        }\n    }\n}\n\n@Composable\nfun rememberImage(url: String): ImageBitmap? {\nvar image by remember { mutableStateOf<ImageBitmap?>(null) }\nval context = LocalContext.current\n\n    Glide.with(context)\n        .asBitmap()\n        .load(url)\n        .into(object : CustomTarget<Bitmap>() {\n            override fun onResourceReady(\n                resource: Bitmap,\n                transition: com.bumptech.glide.request.transition.Transition<in Bitmap>?\n            ) {\n                image = resource.asImageBitmap()\n            }\n\n            override fun onLoadCleared(placeholder: Drawable?) {\n                // Handle the case when the image loading is cancelled or failed.\n            }\n        })\n\n    return image\n}\n\n\n@Composable\nfun TextElement(element: Map<String, Any>) {\nval text = when (val buttonsTexts = element[\"buttonsTexts\"]) {\nis String -> buttonsTexts\nis List<*> -> buttonsTexts.joinToString(\"\\n\") // Combine all texts with newline\nelse -> \"\"\n}\n\n    Text(\n        text = text,\n        color = Color.Black,\n        modifier = Modifier\n            .padding(16.dp)\n            .width(320.dp)\n    )\n}\n\n\n@Composable\nfun ButtonElement(element: Map<String, Any>) {\n// Get the button title and URL from the element\nval buttonsTexts = element[\"buttonsTexts\"] as? List<*>\nval buttonTitle = buttonsTexts?.getOrNull(0) as? String ?: \"\"\nval urlString = buttonsTexts?.getOrNull(1) as? String\nval context = LocalContext.current\n\n    Button(\n        onClick = { urlString?.let { openUrl(it, context) } },\n        modifier = Modifier\n            .padding(16.dp)\n            .width(320.dp)\n    ) {\n        Text(text = buttonTitle)\n    }\n}\n\nfun openUrl(url: String, context: Context) {\nval intent = Intent(Intent.ACTION_VIEW)\nintent.data = Uri.parse(url)\ncontext.startActivity(intent)\n}\n\n\n@Composable\nfun InputElement(element: Map<String, Any>) {\n// TODO: Implement InputElement with the proper data from the element\n}\n\n\n\n@Composable\nfun CustomScreen(customState: CustomState) {\nwhen {\ncustomState.appScreen.value == \"Loading\" -> LoadingScreen()\ncustomState.appScreen.value == \"Glowbom\" -> GlowbomScreen()\nAiExtensions.enabled -> AiExtensions.GlowbyScreen()\ncustomState.appScreen.value == \"Questions\" -> ElementsScreen(customState.questions)\nelse -> Text(text = \"Loaded, but appScreen is '${customState.appScreen.value}'\")\n}\n}\n\n\nclass MainActivity : ComponentActivity() {\nprivate val customState by lazy { CustomState(this) }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContent {\n            CustomTheme {\n                Surface(\n                    modifier = Modifier.fillMaxSize(),\n                    color = MaterialTheme.colorScheme.background\n                ) {\n                    CustomScreen(customState)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "project/android/app/.gitignore",
    "content": "/build"
  },
  {
    "path": "project/android/app/build.gradle.kts",
    "content": "plugins {\n    id(\"com.android.application\")\n    id(\"org.jetbrains.kotlin.android\")\n    id(\"com.google.devtools.ksp\")\n}\n\nandroid {\n    namespace = \"com.glowbom.custom\"\n    compileSdk = 34\n\n    defaultConfig {\n        applicationId = \"com.glowbom.custom\"\n        minSdk = 21\n        targetSdk = 33\n        versionCode = 1\n        versionName = \"1.0\"\n\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        vectorDrawables {\n            useSupportLibrary = true\n        }\n    }\n\n    buildTypes {\n        release {\n            isMinifyEnabled = false\n            proguardFiles(\n                getDefaultProguardFile(\"proguard-android-optimize.txt\"),\n                \"proguard-rules.pro\"\n            )\n        }\n    }\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_1_8\n        targetCompatibility = JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = \"1.8\"\n    }\n    buildFeatures {\n        compose = true\n    }\n    composeOptions {\n        kotlinCompilerExtensionVersion = \"1.4.3\"\n    }\n    packaging {\n        resources {\n            excludes += \"/META-INF/{AL2.0,LGPL2.1}\"\n        }\n    }\n}\n\ndependencies {\n    implementation(\"com.github.bumptech.glide:glide:4.15.1\")\n    ksp(\"com.github.bumptech.glide:compiler:4.12.0\")\n\n    implementation(\"io.ktor:ktor-client-core:2.3.9\")\n    implementation(\"io.ktor:ktor-client-cio:2.3.9\")\n    implementation(\"io.coil-kt:coil:2.6.0\")\n    implementation(\"io.coil-kt:coil-compose:2.6.0\")\n\n    implementation(\"com.google.code.gson:gson:2.8.9\")\n    implementation(\"androidx.core:core-ktx:1.9.0\")\n    implementation(\"androidx.lifecycle:lifecycle-runtime-ktx:2.6.1\")\n    implementation(\"androidx.activity:activity-compose:1.7.0\")\n    implementation(platform(\"androidx.compose:compose-bom:2023.03.00\"))\n    implementation(\"androidx.compose.ui:ui\")\n    implementation(\"androidx.compose.ui:ui-graphics\")\n    implementation(\"androidx.compose.ui:ui-tooling-preview\")\n    implementation(\"androidx.compose.material3:material3\")\n    testImplementation(\"junit:junit:4.13.2\")\n    androidTestImplementation(\"androidx.test.ext:junit:1.1.5\")\n    androidTestImplementation(\"androidx.test.espresso:espresso-core:3.5.1\")\n    androidTestImplementation(platform(\"androidx.compose:compose-bom:2023.03.00\"))\n    androidTestImplementation(\"androidx.compose.ui:ui-test-junit4\")\n    debugImplementation(\"androidx.compose.ui:ui-tooling\")\n    debugImplementation(\"androidx.compose.ui:ui-test-manifest\")\n}"
  },
  {
    "path": "project/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "project/android/app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <!-- This is where you put the uses-permission tag -->\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml/data_extraction_rules\"\n        android:fullBackupContent=\"@xml/backup_rules\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/Theme.Custom\"\n        tools:targetApi=\"31\">\n        <activity\n            android:name=\".MainActivity\"\n            android:exported=\"true\"\n            android:label=\"@string/app_name\"\n            android:theme=\"@style/Theme.Custom\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "project/android/app/src/main/assets/custom.glowbom",
    "content": "{\"title\":\"Inspiration\",\"main_color\":\"Blue\",\"show_percentage_result\":true,\"voice\":false,\"show_number_result\":true,\"start_over\":\"\",\"conclusion\":\"This is a custom app.\",\"questions\":[{\"title\":\"\",\"description\":\"Image\",\"buttonsTexts\":[\"https://picsum.photos/200\",\"200\",\"200\"],\"buttonAnswers\":[0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"Text\",\"buttonsTexts\":[\"Glowbom is the first no-code platform that let's you create apps using just your voice.\"],\"buttonAnswers\":[0],\"answersCount\":0,\"goIndexes\":[0],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"Button\",\"buttonsTexts\":[\"Glowbom\",\"http://glowbom.com\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[0,0,0,0],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]}],\"dnsgs\":true}\n"
  },
  {
    "path": "project/android/app/src/main/java/com/glowbom/custom/AiExtensions.kt",
    "content": "package com.glowbom.custom\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.widthIn\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.rounded.Face\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.text.SpanStyle\nimport androidx.compose.ui.text.buildAnnotatedString\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\n\nclass AiExtensions {\n    companion object {\n        var enabled = true\n        var title = \"App\"\n\n        @Composable\n        fun GlowbyScreen(\n            modifier: Modifier = Modifier\n        ) {\n            if (enabled) {\n                val page = Color(0xFFF5F5F5)\n                val ink = Color(0xFF111111)\n                val accent = Color(0xFF29DE92)\n\n                Box(\n                    modifier = modifier\n                        .fillMaxSize()\n                        .background(page),\n                    contentAlignment = Alignment.Center\n                ) {\n                    BoxWithConstraints(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .widthIn(max = 360.dp),\n                        contentAlignment = Alignment.Center\n                    ) {\n                        Column(\n                            modifier = Modifier.fillMaxWidth(),\n                            horizontalAlignment = Alignment.CenterHorizontally,\n                            verticalArrangement = Arrangement.Center\n                        ) {\n                            Box(\n                                modifier = Modifier\n                                    .size(96.dp)\n                                    .background(Color.White, CircleShape),\n                                contentAlignment = Alignment.Center\n                            ) {\n                                Box(\n                                    modifier = Modifier\n                                        .size(64.dp)\n                                        .background(accent.copy(alpha = 0.18f), CircleShape),\n                                    contentAlignment = Alignment.Center\n                                ) {\n                                    Icon(\n                                        imageVector = Icons.Rounded.Face,\n                                        contentDescription = \"Character icon\",\n                                        tint = accent,\n                                        modifier = Modifier.size(34.dp)\n                                    )\n                                }\n                            }\n\n                            Text(\n                                text = \"Build anything.\",\n                                color = ink,\n                                fontSize = 40.sp,\n                                fontWeight = FontWeight.ExtraBold,\n                                textAlign = TextAlign.Center,\n                                lineHeight = 44.sp,\n                                modifier = Modifier\n                                    .fillMaxWidth()\n                                    .widthIn(max = 320.dp)\n                            )\n\n                            Text(\n                                text = buildAnnotatedString {\n                                    append(\"Made with \")\n                                    pushStyle(SpanStyle(color = accent, fontWeight = FontWeight.SemiBold))\n                                    append(\"Glowbom\")\n                                    pop()\n                                },\n                                color = ink.copy(alpha = 0.55f),\n                                fontSize = 14.sp,\n                                fontWeight = FontWeight.Medium,\n                                textAlign = TextAlign.Center,\n                                modifier = Modifier.fillMaxWidth()\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "project/android/app/src/main/java/com/glowbom/custom/MainActivity.kt",
    "content": "package com.glowbom.custom\n\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.request.target.CustomTarget\nimport com.glowbom.custom.ui.theme.CustomTheme\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass CustomState(val context: Context) {\n    val appScreen = mutableStateOf(\"Loading\")\n    lateinit var content: Map<String, Any>\n\n    val title: String\n        get() = content[\"title\"] as String? ?: \"Custom App\"\n    var mainColor = mutableStateOf(Color.Blue)\n    val questions: List<Map<String, Any>>\n        get() {\n            val questionsAny = content[\"questions\"]\n            return if (questionsAny is List<*>) {\n                questionsAny.filterIsInstance<Map<String, Any>>()\n            } else {\n                emptyList()\n            }\n        }\n    init {\n        CoroutineScope(Dispatchers.IO).launch {\n            content = loadContentFromAssets()\n            withContext(Dispatchers.Main) {\n                mainColor.value = getColorFromString(content[\"main_color\"] as String? ?: \"Blue\")\n                appScreen.value = \"Questions\"\n            }\n        }\n    }\n\n    private suspend fun loadContentFromAssets(): Map<String, Any> {\n        val data = context.assets.open(\"custom.glowbom\").bufferedReader().use { it.readText() }\n        return Gson().fromJson(data, object : TypeToken<Map<String, Any>>() {}.type)\n    }\n}\n\nfun getColorFromString(colorString: String): Color {\n    return when (colorString.lowercase()) {\n        \"black\" -> Color.Black\n        \"blue\" -> Color.Blue\n        \"green\" -> Color.Green\n        \"grey\" -> Color.Gray\n        \"red\" -> Color.Red\n        else -> Color.Blue\n    }\n}\n\n@Composable\nfun LoadingScreen() {\n    Box(\n        contentAlignment = Alignment.Center,\n        modifier = Modifier.fillMaxSize()\n    ) {\n        Text(text = \"Loading...\")\n    }\n}\n\n@Composable\nfun GlowbomScreen() {\n    Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {\n        Image(\n            painter = painterResource(id = R.drawable.glowbom),\n            contentDescription = \"Glowbom Logo\"\n        )\n    }\n}\n\n@Composable\nfun ElementsScreen(elements: List<Map<String, Any>>) {\n    Box(Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {\n        Column(\n            modifier = Modifier.fillMaxWidth(),\n            horizontalAlignment = Alignment.CenterHorizontally\n        ) {\n            elements.forEach { element ->\n                when (val description = element[\"description\"] as String?) {\n                    \"Image\" -> ImageElement(element)\n                    \"Text\" -> TextElement(element)\n                    \"Button\" -> ButtonElement(element)\n                    \"Input\" -> InputElement(element)\n                    else -> Text(text = \"Unsupported element type: $description\")\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun ImageElement(element: Map<String, Any>) {\n    // Get the image URL from the element\n    val imageUrl = (element[\"buttonsTexts\"] as? List<*>)?.first() as? String ?: \"\"\n\n    val imageBitmap = rememberImage(imageUrl)\n\n    Box(Modifier.padding(16.dp)) {\n        imageBitmap?.let {\n            Image(\n                bitmap = it,\n                contentDescription = null, // descriptive text for the visually impaired\n                contentScale = ContentScale.Crop,\n                modifier = Modifier\n                    .height(200.dp)\n                    .width(320.dp)\n            )\n        }\n    }\n}\n\n@Composable\nfun rememberImage(url: String): ImageBitmap? {\n    var image by remember { mutableStateOf<ImageBitmap?>(null) }\n    val context = LocalContext.current\n\n    Glide.with(context)\n        .asBitmap()\n        .load(url)\n        .into(object : CustomTarget<Bitmap>() {\n            override fun onResourceReady(\n                resource: Bitmap,\n                transition: com.bumptech.glide.request.transition.Transition<in Bitmap>?\n            ) {\n                image = resource.asImageBitmap()\n            }\n\n            override fun onLoadCleared(placeholder: Drawable?) {\n                // Handle the case when the image loading is cancelled or failed.\n            }\n        })\n\n    return image\n}\n\n\n@Composable\nfun TextElement(element: Map<String, Any>) {\n    val text = when (val buttonsTexts = element[\"buttonsTexts\"]) {\n        is String -> buttonsTexts\n        is List<*> -> buttonsTexts.joinToString(\"\\n\") // Combine all texts with newline\n        else -> \"\"\n    }\n\n    Text(\n        text = text,\n        color = Color.Black,\n        modifier = Modifier\n            .padding(16.dp)\n            .width(320.dp)\n    )\n}\n\n\n@Composable\nfun ButtonElement(element: Map<String, Any>) {\n    // Get the button title and URL from the element\n    val buttonsTexts = element[\"buttonsTexts\"] as? List<*>\n    val buttonTitle = buttonsTexts?.getOrNull(0) as? String ?: \"\"\n    val urlString = buttonsTexts?.getOrNull(1) as? String\n    val context = LocalContext.current\n\n    Button(\n        onClick = { urlString?.let { openUrl(it, context) } },\n        modifier = Modifier\n            .padding(16.dp)\n            .width(320.dp)\n    ) {\n        Text(text = buttonTitle)\n    }\n}\n\nfun openUrl(url: String, context: Context) {\n    val intent = Intent(Intent.ACTION_VIEW)\n    intent.data = Uri.parse(url)\n    context.startActivity(intent)\n}\n\n\n@Composable\nfun InputElement(element: Map<String, Any>) {\n    // TODO: Implement InputElement with the proper data from the element\n}\n\n\n\n@Composable\nfun CustomScreen(customState: CustomState) {\n    when {\n        customState.appScreen.value == \"Loading\" -> LoadingScreen()\n        customState.appScreen.value == \"Glowbom\" -> GlowbomScreen()\n        AiExtensions.enabled -> AiExtensions.GlowbyScreen()\n        customState.appScreen.value == \"Questions\" -> ElementsScreen(customState.questions)\n        else -> Text(text = \"Loaded, but appScreen is '${customState.appScreen.value}'\")\n    }\n}\n\n\nclass MainActivity : ComponentActivity() {\n    private val customState by lazy { CustomState(this) }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContent {\n            CustomTheme {\n                Surface(\n                    modifier = Modifier.fillMaxSize(),\n                    color = MaterialTheme.colorScheme.background\n                ) {\n                    CustomScreen(customState)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "project/android/app/src/main/java/com/glowbom/custom/ui/theme/Color.kt",
    "content": "package com.glowbom.custom.ui.theme\n\nimport androidx.compose.ui.graphics.Color\n\nval Purple80 = Color(0xFFD0BCFF)\nval PurpleGrey80 = Color(0xFFCCC2DC)\nval Pink80 = Color(0xFFEFB8C8)\n\nval Purple40 = Color(0xFF6650a4)\nval PurpleGrey40 = Color(0xFF625b71)\nval Pink40 = Color(0xFF7D5260)"
  },
  {
    "path": "project/android/app/src/main/java/com/glowbom/custom/ui/theme/Theme.kt",
    "content": "package com.glowbom.custom.ui.theme\n\nimport android.app.Activity\nimport android.os.Build\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.dynamicDarkColorScheme\nimport androidx.compose.material3.dynamicLightColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.SideEffect\nimport androidx.compose.ui.graphics.toArgb\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalView\nimport androidx.core.view.WindowCompat\n\nprivate val DarkColorScheme = darkColorScheme(\n    primary = Purple80,\n    secondary = PurpleGrey80,\n    tertiary = Pink80\n)\n\nprivate val LightColorScheme = lightColorScheme(\n    primary = Purple40,\n    secondary = PurpleGrey40,\n    tertiary = Pink40\n\n    /* Other default colors to override\n    background = Color(0xFFFFFBFE),\n    surface = Color(0xFFFFFBFE),\n    onPrimary = Color.White,\n    onSecondary = Color.White,\n    onTertiary = Color.White,\n    onBackground = Color(0xFF1C1B1F),\n    onSurface = Color(0xFF1C1B1F),\n    */\n)\n\n@Composable\nfun CustomTheme(\n    darkTheme: Boolean = isSystemInDarkTheme(),\n    // Dynamic color is available on Android 12+\n    dynamicColor: Boolean = true,\n    content: @Composable () -> Unit\n) {\n    val colorScheme = when {\n        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {\n            val context = LocalContext.current\n            if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)\n        }\n\n        darkTheme -> DarkColorScheme\n        else -> LightColorScheme\n    }\n    val view = LocalView.current\n    if (!view.isInEditMode) {\n        SideEffect {\n            val window = (view.context as Activity).window\n            window.statusBarColor = colorScheme.primary.toArgb()\n            WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme\n        }\n    }\n\n    MaterialTheme(\n        colorScheme = colorScheme,\n        typography = Typography,\n        content = content\n    )\n}"
  },
  {
    "path": "project/android/app/src/main/java/com/glowbom/custom/ui/theme/Type.kt",
    "content": "package com.glowbom.custom.ui.theme\n\nimport androidx.compose.material3.Typography\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.sp\n\n// Set of Material typography styles to start with\nval Typography = Typography(\n    bodyLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 16.sp,\n        lineHeight = 24.sp,\n        letterSpacing = 0.5.sp\n    )\n    /* Other default text styles to override\n    titleLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 22.sp,\n        lineHeight = 28.sp,\n        letterSpacing = 0.sp\n    ),\n    labelSmall = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Medium,\n        fontSize = 11.sp,\n        lineHeight = 16.sp,\n        letterSpacing = 0.5.sp\n    )\n    */\n)"
  },
  {
    "path": "project/android/app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path\n        android:fillColor=\"#3DDC84\"\n        android:pathData=\"M0,0h108v108h-108z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n</vector>\n"
  },
  {
    "path": "project/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path android:pathData=\"M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"85.84757\"\n                android:endY=\"92.4963\"\n                android:startX=\"42.9492\"\n                android:startY=\"49.59793\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\" />\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\" />\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z\"\n        android:strokeWidth=\"1\"\n        android:strokeColor=\"#00000000\" />\n</vector>"
  },
  {
    "path": "project/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n    <monochrome android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "project/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n    <monochrome android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "project/android/app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"purple_200\">#FFBB86FC</color>\n    <color name=\"purple_500\">#FF6200EE</color>\n    <color name=\"purple_700\">#FF3700B3</color>\n    <color name=\"teal_200\">#FF03DAC5</color>\n    <color name=\"teal_700\">#FF018786</color>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n</resources>"
  },
  {
    "path": "project/android/app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">Custom</string>\n</resources>"
  },
  {
    "path": "project/android/app/src/main/res/values/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"Theme.Custom\" parent=\"android:Theme.Material.Light.NoActionBar\" />\n</resources>"
  },
  {
    "path": "project/android/app/src/main/res/xml/backup_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See https://developer.android.com/guide/topics/data/autobackup\n   for details.\n   Note: This file is ignored for devices older that API 31\n   See https://developer.android.com/about/versions/12/backup-restore\n-->\n<full-backup-content>\n    <!--\n   <include domain=\"sharedpref\" path=\".\"/>\n   <exclude domain=\"sharedpref\" path=\"device.xml\"/>\n-->\n</full-backup-content>"
  },
  {
    "path": "project/android/app/src/main/res/xml/data_extraction_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n   See https://developer.android.com/about/versions/12/backup-restore#xml-changes\n   for details.\n-->\n<data-extraction-rules>\n    <cloud-backup>\n        <!-- TODO: Use <include> and <exclude> to control what is backed up.\n        <include .../>\n        <exclude .../>\n        -->\n    </cloud-backup>\n    <!--\n    <device-transfer>\n        <include .../>\n        <exclude .../>\n    </device-transfer>\n    -->\n</data-extraction-rules>"
  },
  {
    "path": "project/android/build.gradle.kts",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nplugins {\n    id(\"com.android.application\") version \"8.2.1\" apply false\n    id(\"org.jetbrains.kotlin.android\") version \"1.8.10\" apply false\n}\n\nbuildscript {\n    repositories {\n        maven { url = uri(\"https://jitpack.io\") }\n    }\n    dependencies {\n        classpath(\"com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:1.5.30-1.0.0\") // Replace with the current version\n    }\n}\n"
  },
  {
    "path": "project/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Sun Jul 30 15:12:44 PDT 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.2-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "project/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Kotlin code style for this project: \"official\" or \"obsolete\":\nkotlin.code.style=official\n# Enables namespacing of each library's R class so that its R class includes only the\n# resources declared in the library itself and none from the library's dependencies,\n# thereby reducing the size of the R class for that library\nandroid.nonTransitiveRClass=true"
  },
  {
    "path": "project/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "project/android/gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n\r\n@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto execute\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto execute\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "project/android/settings.gradle.kts",
    "content": "pluginManagement {\n    repositories {\n        google()\n        mavenCentral()\n        gradlePluginPortal()\n    }\n}\ndependencyResolutionManagement {\n    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\nrootProject.name = \"Custom\"\ninclude(\":app\")\n "
  },
  {
    "path": "project/apple/Custom/AiExtensions.swift",
    "content": "import SwiftUI\n\nstruct GlowbyScreen: View {\n    static let enabled = true\n    static let title = \"App\"\n\n    @State private var animateIcon = false\n\n    var body: some View {\n        ZStack {\n            Color(red: 245 / 255, green: 245 / 255, blue: 245 / 255)\n                .ignoresSafeArea()\n\n            VStack {\n                Spacer()\n                HStack {\n                    Spacer()\n\n                    VStack(spacing: 0) {\n                        Button {\n                            withAnimation(.easeInOut(duration: 0.18)) {\n                                animateIcon = true\n                            }\n                            DispatchQueue.main.asyncAfter(deadline: .now() + 0.28) {\n                                withAnimation(.easeInOut(duration: 0.18)) {\n                                    animateIcon = false\n                                }\n                            }\n                        } label: {\n                            ZStack {\n                                Circle()\n                                    .fill(Color(red: 41 / 255, green: 222 / 255, blue: 146 / 255).opacity(animateIcon ? 0.12 : 0.18))\n                                    .frame(width: animateIcon ? 108 : 96, height: animateIcon ? 108 : 96)\n\n                                Circle()\n                                    .fill(Color.white)\n                                    .frame(width: 96, height: 96)\n                                    .shadow(color: .black.opacity(0.08), radius: 30, x: 0, y: 12)\n                                    .overlay(\n                                        Circle()\n                                            .stroke(Color.black.opacity(0.05), lineWidth: 1)\n                                    )\n\n                                Image(systemName: \"face.smiling\")\n                                    .font(.system(size: 36, weight: .regular))\n                                    .foregroundStyle(Color(red: 41 / 255, green: 222 / 255, blue: 146 / 255))\n                                    .scaleEffect(animateIcon ? 1.1 : 1.0)\n                                    .rotationEffect(.degrees(animateIcon ? 3 : 0))\n                            }\n                        }\n                        .buttonStyle(.plain)\n                        .padding(.bottom, 32)\n\n                        VStack(spacing: 16) {\n                            VStack(spacing: 6) {\n                                Text(\"Build\")\n                                    .font(.system(size: 44, weight: .heavy))\n                                    .foregroundStyle(Color(red: 17 / 255, green: 17 / 255, blue: 17 / 255))\n\n                                VStack(spacing: 8) {\n                                    Text(\"anything.\")\n                                        .font(.system(size: 44, weight: .heavy))\n                                        .foregroundStyle(Color(red: 17 / 255, green: 17 / 255, blue: 17 / 255))\n\n                                    Capsule()\n                                        .fill(Color(red: 41 / 255, green: 222 / 255, blue: 146 / 255))\n                                        .frame(width: 72, height: 6)\n                                }\n                            }\n                            .multilineTextAlignment(.center)\n\n                            Text(\"Made with \")\n                                .font(.system(size: 14, weight: .medium))\n                            + Text(\"Glowbom\")\n                                .font(.system(size: 14, weight: .medium))\n                        }\n                    }\n                    .frame(maxWidth: 360)\n\n                    Spacer()\n                }\n                Spacer()\n            }\n        }\n    }\n}"
  },
  {
    "path": "project/apple/Custom/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "project/apple/Custom/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"platform\" : \"ios\",\n      \"size\" : \"1024x1024\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "project/apple/Custom/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "project/apple/Custom/ContentView.swift",
    "content": "//\n//  ContentView.swift\n//  Custom\n//\n//  Created by Jacob Ilin on 7/29/23.\n//\n\nimport SwiftUI\n\nstruct Question: Identifiable {\n    let id = UUID()\n    let title: String\n    let description: String\n    let buttonsTexts: [String]\n    let buttonAnswers: [Int]\n    let answersCount: Int\n    let goIndexes: [Int]\n    let answerPicture: String\n    let answerPictureDelay: Int\n    let goConditions: [Any]\n    let heroValues: [Any]\n    let picturesSpriteNames: [String]\n\n    init(dictionary: [String: Any]) {\n        self.title = dictionary[\"title\"] as? String ?? \"\"\n        self.description = dictionary[\"description\"] as? String ?? \"\"\n        if let buttonsTextsAny = dictionary[\"buttonsTexts\"] as? [Any] {\n            self.buttonsTexts = buttonsTextsAny.map { String(describing: $0) }\n        } else {\n            self.buttonsTexts = []\n        }\n        self.buttonAnswers = dictionary[\"button_answers\"] as? [Int] ?? []\n        self.answersCount = dictionary[\"answers_count\"] as? Int ?? 0\n        self.goIndexes = dictionary[\"go_indexes\"] as? [Int] ?? []\n        self.answerPicture = dictionary[\"answer_picture\"] as? String ?? \"\"\n        self.answerPictureDelay = dictionary[\"answer_picture_delay\"] as? Int ?? 0\n        self.goConditions = dictionary[\"go_conditions\"] as? [Any] ?? []\n        self.heroValues = dictionary[\"hero_values\"] as? [Any] ?? []\n        self.picturesSpriteNames = dictionary[\"pictures_sprite_names\"] as? [String] ?? []\n    }\n}\n\nstruct Custom: View {\n    @State private var appScreen: String = \"Loading\"\n    @State private var content: [String: Any]?\n    @State private var title: String = \"App\"\n    @State private var mainColor: Color = .blue\n    @State private var questions: [Question] = []\n    @State private var isLoading: Bool = true\n    \n    init(content: [String: Any]?) {\n        self._content = State(initialValue: content)\n        self._title = State(initialValue: \"App\")\n        self._mainColor = State(initialValue: .blue)\n    }\n    \n    func loadContentFromAssets() {\n        guard let url = Bundle.main.url(forResource: \"custom\", withExtension: \"glowbom\") else {\n            print(\"Could not find custom.glowbom\")\n            return\n        }\n        \n        guard let data = try? Data(contentsOf: url) else {\n            print(\"Could not load data from custom.glowbom\")\n            return\n        }\n        \n        do {\n            let json = try JSONSerialization.jsonObject(with: data, options: [])\n            if let jsonDict = json as? [String: Any] {\n                DispatchQueue.main.async {\n                    self.content = jsonDict\n                    self.initializeCustomState()\n                }\n            } else {\n                print(\"Invalid JSON format\")\n            }\n        } catch {\n            print(\"JSON decoding error: \\(error)\")\n        }\n    }\n    \n    func initializeCustomState() {\n        if let content = content {\n            title = content[\"title\"] as? String ?? \"App\"\n            mainColor = Color(content[\"main_color\"] as? String ?? \"blue\")\n            questions = (content[\"questions\"] as? [[String: Any]])?.map { Question(dictionary: $0) } ?? []\n            self.isLoading = false\n            self.appScreen = \"Questions\"\n        } else {\n            loadContentFromAssets()\n        }\n    }\n\n    var body: some View {\n        GeometryReader { geometry in\n            let topPadding = GlowbyScreen.enabled ? 0 : geometry.size.height * 0.1\n            VStack {\n                if isLoading {\n                    Text(\"Loading...\")\n                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)\n                } else if appScreen == \"Glowbom\" {\n                    Image(\"glowbom\")\n                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)\n                } else if GlowbyScreen.enabled {\n                    GlowbyScreen()\n                } else if appScreen == \"Questions\" {\n                    ScrollView {\n                        VStack {\n                            ForEach(questions) { question in\n                                switch question.description {\n                                case \"Image\":\n                                    let urls = question.buttonsTexts.compactMap { URL(string: $0) }\n\n                                    if let imageUrl = urls.first {\n                                        AsyncImage(url: imageUrl) { phase in\n                                            switch phase {\n                                            case .success(let image):\n                                                image\n                                                    .resizable()\n                                                    .aspectRatio(contentMode: .fit)\n                                                    .frame(maxWidth: 320, maxHeight: 200)\n                                                    .padding()\n                                            case .failure:\n                                                Text(\"Failed to load image from URL: \\(imageUrl)\")\n                                            case .empty:\n                                                ProgressView()\n                                            @unknown default:\n                                                ProgressView()\n                                            }\n                                        }\n                                    } else {\n                                        Text(\"No valid URL found in buttonsTexts\")\n                                    }\n\n                                case \"Text\":\n                                    Text(question.buttonsTexts.first ?? \"\")\n                                        .padding()\n                                        .frame(maxWidth: 320)\n\n                                case \"Button\":\n                                    if let buttonTitle = question.buttonsTexts.first, let urlString = question.buttonsTexts.dropFirst().first, let url = URL(string: urlString) {\n                                        Link(destination: url) {\n                                            Text(buttonTitle)\n                                        }\n                                        .padding()\n                                        .frame(maxWidth: 320)\n                                    } else {\n                                        Button(action: {}) {\n                                            Text(question.buttonsTexts.first ?? \"\")\n                                        }\n                                        .padding()\n                                        .frame(maxWidth: 320)\n                                    }\n                                default:\n                                    Text(\"Unsupported question type\")\n                                }\n                            }\n                        }\n                        .frame(maxWidth: .infinity)\n                        .frame(minHeight: geometry.size.height)\n                        .frame(maxWidth: .infinity, alignment: .center)\n                    }\n                } else {\n                    Text(\"Loaded, but appScreen is '\\(appScreen)'\")\n                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)\n                }\n            }\n            .frame(maxWidth: .infinity, maxHeight: .infinity)\n            .padding(.top, topPadding)\n            .onAppear {\n                if content == nil {\n                    loadContentFromAssets()\n                }\n            }\n        }\n    }\n}\n\nstruct ContentView: View {\n    var body: some View {\n        Custom(content: nil)\n    }\n}\n"
  },
  {
    "path": "project/apple/Custom/Custom.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>com.apple.security.app-sandbox</key>\n    <true/>\n    <key>com.apple.security.files.user-selected.read-only</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "project/apple/Custom/CustomApp.swift",
    "content": "//\n//  CustomApp.swift\n//  Custom\n//\n//  Created by Jacob Ilin on 7/29/23.\n//\n\nimport SwiftUI\n\n@main\nstruct CustomApp: App {\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n}\n"
  },
  {
    "path": "project/apple/Custom/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "project/apple/Custom/custom.glowbom",
    "content": "{\"title\":\"Inspiration\",\"main_color\":\"Blue\",\"show_percentage_result\":true,\"voice\":false,\"show_number_result\":true,\"start_over\":\"\",\"conclusion\":\"This is a custom app.\",\"questions\":[{\"title\":\"\",\"description\":\"Image\",\"buttonsTexts\":[\"https://picsum.photos/200\",\"200\",\"200\"],\"buttonAnswers\":[0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"Text\",\"buttonsTexts\":[\"Glowbom is the first no-code platform that let's you create apps using just your voice.\"],\"buttonAnswers\":[0],\"answersCount\":0,\"goIndexes\":[0],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"Button\",\"buttonsTexts\":[\"Glowbom\",\"http://glowbom.com\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[0,0,0,0],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]}],\"dnsgs\":true}\n"
  },
  {
    "path": "project/apple/Custom.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 56;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t896608092A75CC500012D052 /* CustomApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896608082A75CC500012D052 /* CustomApp.swift */; };\n\t\t8966080B2A75CC500012D052 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8966080A2A75CC500012D052 /* ContentView.swift */; };\n\t\t8966080D2A75CC520012D052 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8966080C2A75CC520012D052 /* Assets.xcassets */; };\n\t\t896608112A75CC520012D052 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 896608102A75CC520012D052 /* Preview Assets.xcassets */; };\n\t\t8966081A2A75D1C40012D052 /* AiExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896608192A75D1C40012D052 /* AiExtensions.swift */; };\n\t\t8966081D2A75D5B60012D052 /* glowbom.png in Resources */ = {isa = PBXBuildFile; fileRef = 8966081B2A75D5B60012D052 /* glowbom.png */; };\n\t\t8966081E2A75D5B60012D052 /* custom.glowbom in Resources */ = {isa = PBXBuildFile; fileRef = 8966081C2A75D5B60012D052 /* custom.glowbom */; };\n\t\t896608202A75F7EE0012D052 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 8966081F2A75F7EE0012D052 /* README.md */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t896608052A75CC500012D052 /* Custom.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Custom.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t896608082A75CC500012D052 /* CustomApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomApp.swift; sourceTree = \"<group>\"; };\n\t\t8966080A2A75CC500012D052 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = \"<group>\"; };\n\t\t8966080C2A75CC520012D052 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t8966080E2A75CC520012D052 /* Custom.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Custom.entitlements; sourceTree = \"<group>\"; };\n\t\t896608102A75CC520012D052 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\t896608192A75D1C40012D052 /* AiExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AiExtensions.swift; sourceTree = \"<group>\"; };\n\t\t8966081B2A75D5B60012D052 /* glowbom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = glowbom.png; sourceTree = \"<group>\"; };\n\t\t8966081C2A75D5B60012D052 /* custom.glowbom */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = custom.glowbom; sourceTree = \"<group>\"; };\n\t\t8966081F2A75F7EE0012D052 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t896608022A75CC500012D052 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t896607FC2A75CC500012D052 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8966081F2A75F7EE0012D052 /* README.md */,\n\t\t\t\t896608072A75CC500012D052 /* Custom */,\n\t\t\t\t896608062A75CC500012D052 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t896608062A75CC500012D052 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t896608052A75CC500012D052 /* Custom.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t896608072A75CC500012D052 /* Custom */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t896608192A75D1C40012D052 /* AiExtensions.swift */,\n\t\t\t\t8966081C2A75D5B60012D052 /* custom.glowbom */,\n\t\t\t\t8966081B2A75D5B60012D052 /* glowbom.png */,\n\t\t\t\t896608082A75CC500012D052 /* CustomApp.swift */,\n\t\t\t\t8966080A2A75CC500012D052 /* ContentView.swift */,\n\t\t\t\t8966080C2A75CC520012D052 /* Assets.xcassets */,\n\t\t\t\t8966080E2A75CC520012D052 /* Custom.entitlements */,\n\t\t\t\t8966080F2A75CC520012D052 /* Preview Content */,\n\t\t\t);\n\t\t\tpath = Custom;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8966080F2A75CC520012D052 /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t896608102A75CC520012D052 /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t896608042A75CC500012D052 /* Custom */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 896608142A75CC520012D052 /* Build configuration list for PBXNativeTarget \"Custom\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t896608012A75CC500012D052 /* Sources */,\n\t\t\t\t896608022A75CC500012D052 /* Frameworks */,\n\t\t\t\t896608032A75CC500012D052 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Custom;\n\t\t\tproductName = Custom;\n\t\t\tproductReference = 896608052A75CC500012D052 /* Custom.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t896607FD2A75CC500012D052 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1430;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t896608042A75CC500012D052 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.3;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 896608002A75CC500012D052 /* Build configuration list for PBXProject \"Custom\" */;\n\t\t\tcompatibilityVersion = \"Xcode 14.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 896607FC2A75CC500012D052;\n\t\t\tproductRefGroup = 896608062A75CC500012D052 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t896608042A75CC500012D052 /* Custom */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t896608032A75CC500012D052 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8966081D2A75D5B60012D052 /* glowbom.png in Resources */,\n\t\t\t\t896608112A75CC520012D052 /* Preview Assets.xcassets in Resources */,\n\t\t\t\t896608202A75F7EE0012D052 /* README.md in Resources */,\n\t\t\t\t8966081E2A75D5B60012D052 /* custom.glowbom in Resources */,\n\t\t\t\t8966080D2A75CC520012D052 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t896608012A75CC500012D052 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8966081A2A75D1C40012D052 /* AiExtensions.swift in Sources */,\n\t\t\t\t8966080B2A75CC500012D052 /* ContentView.swift in Sources */,\n\t\t\t\t896608092A75CC500012D052 /* CustomApp.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t896608122A75CC520012D052 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t896608132A75CC520012D052 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t896608152A75CC520012D052 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Custom/Custom.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"Custom/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = 6RKHK382W9;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]\" = UIStatusBarStyleDefault;\n\t\t\t\t\"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]\" = UIStatusBarStyleDefault;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\";\n\t\t\t\t\"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]\" = \"@executable_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.3;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.glowbom.Custom;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator macosx xros xrsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,7\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t896608162A75CC520012D052 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Custom/Custom.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"Custom/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = 6RKHK382W9;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]\" = YES;\n\t\t\t\t\"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]\" = UIStatusBarStyleDefault;\n\t\t\t\t\"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]\" = UIStatusBarStyleDefault;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\";\n\t\t\t\t\"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]\" = \"@executable_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.3;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.glowbom.Custom;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator macosx xros xrsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,7\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t896608002A75CC500012D052 /* Build configuration list for PBXProject \"Custom\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t896608122A75CC520012D052 /* Debug */,\n\t\t\t\t896608132A75CC520012D052 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t896608142A75CC520012D052 /* Build configuration list for PBXNativeTarget \"Custom\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t896608152A75CC520012D052 /* Debug */,\n\t\t\t\t896608162A75CC520012D052 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 896607FD2A75CC500012D052 /* Project object */;\n}\n"
  },
  {
    "path": "project/apple/Custom.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "project/apple/Custom.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "project/apple/Custom.xcodeproj/xcuserdata/jacobilin.xcuserdatad/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>SchemeUserState</key>\n\t<dict>\n\t\t<key>Custom.xcscheme_^#shared#^_</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "project/apple/README.md",
    "content": "# Glowbom AI Extensions Guide for ChatGPT\n\nThis guide is intended for ChatGPT with Code Interpreter to understand the context of a given project and to provide assistance in generating code for AI extensions.\n\nThis repository contains a basic structure for a Custom application along with a special `AiExtensions.swift` file. This file is designated for OpenAI model to add or modify code, providing optional features or enhancements to the existing SwiftUI project.\n\n## Understanding the Code\n\n- `ContentView.swift`: This is the main file for the Custom application. It represents a simple one screen app.\n- `AiExtensions.swift`: This is where you can add custom AI extension code. The `GlowbyScreen` class is an example of what can be added here.\n\n\n## Interactive Features\n\nFor tasks that involve calculations or data manipulation, the generated code should include interactive features that allow users to input data and see the results reflected in the UI. The results should be presented in a clear and user-friendly manner.\n\nFor example, if the task is to implement a function that performs calculations based on user input, the generated code should include:\n\n1. Input fields for the user to provide the necessary data.\n2. A way for the user to trigger the calculation. This could be a button that the user can press to run the function once the necessary data has been inputted.\n3. A way to display the results of the calculation in the UI.\n\nThe AI extension should handle any necessary error checking and data validation to ensure that the user-provided data is suitable for the calculation. If the data is not suitable, the AI extension should provide clear feedback to the user about what needs to be corrected.\n\n## Additional Guidelines\n\n1. **Problem Statement Understanding**: Understand the problem statement thoroughly before proceeding with the solution. Ask for clarifications if the problem statement isn't clear.\n2. **Solution Language**: Confirm the language of the solution. The solution for the current project is expected to be in Swift.\n3. **LeetCode Submissions**: If the problem is from a competitive programming platform like LeetCode, provide the solution suitable for that platform, considering the given method signature and expected return type.\n4. **Code Testing**: Test the generated code for any syntax or logical errors before delivering the solution. Also, consider different edge cases to ensure the solution is robust.\n5. **Performance Considerations**: Provide solutions that are not just correct but also efficient.\n\n## Generating Code for AI Extensions\n\nThe process of creating an AI extension involves generating SwiftUI code that extends or enhances the existing Custom application. \n\nHere are the steps to follow:\n\n1. Glowbom users will attach the `code_interpreter.zip` file along with a description of what they want to create (e.g., \"a screen with a list of 3 default habits in a calendar format - workout, meditate, drink water\").\n2. Based on this description, generate SwiftUI code within the `GlowbyScreen` struct in the `AiExtensions.swift` file that fits the users' needs and is compatible with the existing codebase. Any new struct generated by ChatGPT, including `GlowbyScreen`, should conform to the `View` protocol, and the `build()` function should be replaced with a `body` property, which is a requirement for all SwiftUI views. All generated code should be included within the `AiExtensions.swift` file.\n3. Test the generated code for any syntax or logical errors before delivering the solution. Also, consider different edge cases to ensure the solution is robust.\n4. Once the code has been tested and confirmed to be working as expected, return the entire updated `AiExtensions.swift` file content. This is the final output of the task.\n5. Return the Entire File: After generating and testing the code, always return the entire updated `AiExtensions.swift` file content. Do not return only a part of the code or a class name. The entire content of the file is necessary for the user to easily integrate the new code with their existing codebase.\n\nRemember, any code added should be clearly marked with comments for users to understand what has been added or changed.\n\nHappy coding!\n\nNote: After generating and testing the code, always return the entire updated `AiExtensions.swift` file content. This is the final output of the task.\n\n"
  },
  {
    "path": "project/glowbom.json",
    "content": "{\n  \"name\" : \"Glowbom Project\",\n  \"version\" : \"1.0\",\n  \"bundleID\" : \"app.glowbom.glowby\",\n  \"updatedAt\" : \"2026-03-11T14:32:21Z\",\n  \"createdAt\" : \"2026-03-11T14:32:21Z\",\n  \"displayName\" : \"Glowby\",\n  \"buildNumber\" : \"1\",\n  \"targets\" : {\n    \"web\" : {\n      \"hasPreset\" : true,\n      \"outputDir\" : \"web\",\n      \"status\" : \"ready\",\n      \"stack\" : \"nextjs\"\n    },\n    \"android\" : {\n      \"status\" : \"ready\",\n      \"hasPreset\" : true,\n      \"stack\" : \"kotlin\",\n      \"outputDir\" : \"android\"\n    },\n    \"ios\" : {\n      \"outputDir\" : \"apple\",\n      \"hasPreset\" : true,\n      \"status\" : \"ready\",\n      \"stack\" : \"swiftui\"\n    }\n  }\n}"
  },
  {
    "path": "project/prototype/assets.json",
    "content": "{\n  \"assets\" : [\n    {\n      \"filename\" : \"image-001.png\",\n      \"prompt\" : \"Minimal friendly character icon, simple modern mascot face, soft green accent, clean geometric style, light background, app icon aesthetic\",\n      \"sourceService\" : \"Glowby Images (Nano Banana 2)\"\n    }\n  ],\n  \"exportedAt\" : \"2026-03-11T14:32:21Z\",\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "project/prototype/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Build Anything</title>\n  <script src=\"https://cdn.tailwindcss.com\"></script>\n  <script>\n    tailwind.config = {\n      theme: {\n        extend: {\n          colors: {\n            page: '#F5F5F5',\n            ink: '#111111',\n            accent: '#29DE92'\n          },\n          fontFamily: {\n            sans: ['Inter', 'ui-sans-serif', 'system-ui', 'sans-serif']\n          },\n          boxShadow: {\n            soft: '0 20px 60px rgba(0, 0, 0, 0.08)'\n          }\n        }\n      }\n    };\n  </script>\n  <style>\n    html,\n    body {\n      height: 100%;\n      background: #F5F5F5;\n    }\n\n    body {\n      color: #111111;\n      font-family: Inter, ui-sans-serif, system-ui, sans-serif;\n    }\n\n    .float-gentle {\n      animation: floatGentle 4s ease-in-out infinite;\n    }\n\n    .pulse-glow {\n      animation: pulseGlow 2.8s ease-in-out infinite;\n    }\n\n    @keyframes floatGentle {\n      0%,\n      100% {\n        transform: translateY(0);\n      }\n      50% {\n        transform: translateY(-6px);\n      }\n    }\n\n    @keyframes pulseGlow {\n      0%,\n      100% {\n        box-shadow: 0 0 0 0 rgba(41, 222, 146, 0.18);\n      }\n      50% {\n        box-shadow: 0 0 0 14px rgba(41, 222, 146, 0);\n      }\n    }\n\n    .grain-overlay::before {\n      content: \"\";\n      position: absolute;\n      inset: 0;\n      pointer-events: none;\n      opacity: 0.035;\n      background-image:\n        linear-gradient(rgba(0, 0, 0, 0.08) 1px, transparent 1px),\n        linear-gradient(90deg, rgba(0, 0, 0, 0.08) 1px, transparent 1px);\n      background-size: 24px 24px;\n      mask-image: radial-gradient(circle at center, black, transparent 85%);\n    }\n  </style>\n</head>\n<body class=\"min-h-screen bg-page text-ink antialiased selection:bg-accent/30\">\n  <main class=\"relative grain-overlay flex min-h-screen items-center justify-center px-6\">\n    <section class=\"w-full max-w-3xl text-center\">\n      <div class=\"mx-auto flex flex-col items-center\">\n        <button\n          id=\"iconButton\"\n          type=\"button\"\n          aria-label=\"Animate character\"\n          class=\"group mb-8 rounded-full focus:outline-none focus:ring-4 focus:ring-accent/20\"\n        >\n          <div class=\"pulse-glow rounded-full\">\n            <div class=\"float-gentle flex h-24 w-24 items-center justify-center rounded-full border border-black/5 bg-white shadow-soft sm:h-28 sm:w-28\">\n              <img\n                id=\"imgCharacter\"\n                src=\"about:blank\"\n                alt=\"Minimal friendly character icon\"\n                class=\"h-14 w-14 rounded-2xl object-cover sm:h-16 sm:w-16\"\n              />\n            </div>\n          </div>\n        </button>\n\n        <h1 class=\"max-w-2xl text-5xl font-extrabold tracking-tight text-ink sm:text-6xl md:text-7xl\">\n          Build\n          <span class=\"relative inline-block\">\n            <span>anything.</span>\n            <span class=\"absolute -bottom-2 left-1/2 h-1.5 w-16 -translate-x-1/2 rounded-full bg-accent sm:w-20\"></span>\n          </span>\n        </h1>\n\n        <p class=\"mt-16 text-sm font-medium tracking-wide text-black/55 sm:text-base\">\n          Made with\n          <span class=\"text-accent\">Glowbom</span>\n        </p>\n      </div>\n    </section>\n  </main>\n\n  <script>\n    const imgCharacter = 'assets/image-001.png';\n\n    const characterEl = document.getElementById('imgCharacter');\n    const iconButton = document.getElementById('iconButton');\n\n    characterEl.src = imgCharacter;\n\n    iconButton.addEventListener('click', function () {\n      characterEl.classList.remove('scale-110', 'rotate-3');\n      void characterEl.offsetWidth;\n      characterEl.classList.add('scale-110', 'rotate-3');\n\n      setTimeout(function () {\n        characterEl.classList.remove('scale-110', 'rotate-3');\n      }, 280);\n    });\n\n    document.addEventListener('keydown', function (event) {\n      if (event.key === 'Enter' || event.key === ' ') {\n        if (document.activeElement === iconButton) {\n          event.preventDefault();\n          iconButton.click();\n        }\n      }\n    });\n  </script>\n</body>\n</html>"
  },
  {
    "path": "project/web/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "project/web/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "project/web/components.json",
    "content": "{\n  \"$schema\": \"https://ui.shadcn.com/schema.json\",\n  \"style\": \"default\",\n  \"rsc\": true,\n  \"tsx\": true,\n  \"tailwind\": {\n    \"config\": \"tailwind.config.ts\",\n    \"css\": \"src/app/globals.css\",\n    \"baseColor\": \"slate\",\n    \"cssVariables\": true,\n    \"prefix\": \"\"\n  },\n  \"aliases\": {\n    \"components\": \"@/components\",\n    \"utils\": \"@/lib/utils\"\n  }\n}"
  },
  {
    "path": "project/web/eslint.config.mjs",
    "content": "import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { FlatCompat } from \"@eslint/eslintrc\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst compat = new FlatCompat({\n  baseDirectory: __dirname,\n});\n\nconst eslintConfig = [\n  ...compat.extends(\"next/core-web-vitals\", \"next/typescript\"),\n];\n\nexport default eslintConfig;\n"
  },
  {
    "path": "project/web/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  images: {\n    remotePatterns: [\n      {\n        protocol: \"https\",\n        hostname: \"images.unsplash.com\",\n      },\n      {\n        protocol: \"https\",\n        hostname: \"source.unsplash.com\",\n      },\n      {\n        protocol: \"https\",\n        hostname: \"picsum.photos\",\n      },\n      {\n        protocol: \"https\",\n        hostname: \"placehold.co\",\n      },\n    ],\n  },\n};\n\nexport default nextConfig;\n"
  },
  {
    "path": "project/web/package.json",
    "content": "{\n  \"name\": \"glowbom-nextjs-template\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev --turbopack\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"eslint . --max-warnings=0\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"check\": \"npm run lint && npm run typecheck && npm run build\"\n  },\n  \"dependencies\": {\n    \"@hookform/resolvers\": \"^5.0.1\",\n    \"@radix-ui/react-dialog\": \"^1.0.5\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.0.6\",\n    \"@radix-ui/react-label\": \"^2.0.2\",\n    \"@radix-ui/react-progress\": \"^1.0.3\",\n    \"@radix-ui/react-slot\": \"^1.0.2\",\n    \"@radix-ui/react-tabs\": \"^1.0.4\",\n    \"@radix-ui/react-toast\": \"^1.1.5\",\n    \"@radix-ui/react-toggle\": \"^1.0.3\",\n    \"@radix-ui/react-tooltip\": \"^1.0.7\",\n    \"class-variance-authority\": \"^0.7.0\",\n    \"clsx\": \"^2.1.0\",\n    \"lucide-react\": \"^0.468.0\",\n    \"next\": \"^16.1.6\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\",\n    \"react-hook-form\": \"^7.54.2\",\n    \"tailwind-merge\": \"^2.2.1\",\n    \"tailwindcss-animate\": \"^1.0.7\",\n    \"zod\": \"^3.24.1\"\n  },\n  \"devDependencies\": {\n    \"@eslint/eslintrc\": \"^3.2.0\",\n    \"@types/node\": \"^22.9.0\",\n    \"@types/react\": \"^19.0.0\",\n    \"@types/react-dom\": \"^19.0.0\",\n    \"autoprefixer\": \"^10.4.20\",\n    \"eslint\": \"^9.14.0\",\n    \"eslint-config-next\": \"^16.1.6\",\n    \"postcss\": \"^8.4.49\",\n    \"tailwindcss\": \"^3.4.17\",\n    \"typescript\": \"^5.7.2\"\n  }\n}\n"
  },
  {
    "path": "project/web/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "project/web/public/custom.glowbom",
    "content": "{\"title\":\"Inspiration\",\"main_color\":\"Blue\",\"show_percentage_result\":true,\"voice\":false,\"show_number_result\":true,\"start_over\":\"\",\"conclusion\":\"This is a custom app.\",\"questions\":[{\"title\":\"\",\"description\":\"Image\",\"buttonsTexts\":[\"https://picsum.photos/200\",\"200\",\"200\"],\"buttonAnswers\":[0,0,0],\"answersCount\":0,\"goIndexes\":[2,2,2],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"Text\",\"buttonsTexts\":[\"Glowbom is the first no-code platform that let's you create apps using just your voice.\"],\"buttonAnswers\":[0],\"answersCount\":0,\"goIndexes\":[0],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]},{\"title\":\"\",\"description\":\"Button\",\"buttonsTexts\":[\"Glowbom\",\"http://glowbom.com\"],\"buttonAnswers\":[0,0,0,0],\"answersCount\":0,\"goIndexes\":[0,0,0,0],\"answerPicture\":\"\",\"answerPictureDelay\":0,\"goConditions\":[],\"heroValues\":[],\"picturesSpriteNames\":[\"\",\"\",\"\",\"\",\"\",\"\"]}],\"dnsgs\":true}\n"
  },
  {
    "path": "project/web/src/app/components/AiExtensions.tsx",
    "content": "/// AiExtensions.tsx\n\"use client\";\nimport React from \"react\";\nimport Image from \"next/image\";\nimport Custom from \"@/app/components/Custom\";\n\n// These constants are placeholders for AI-generated content.\n// To enable the screen, set 'enabled' to true.\n// If 'enabled' is false, the screen won't be visible in the app.\n// Modify 'title' as per the requirements of your app.\nexport const enabled = true;\nexport const title = \"Build anything.\";\n\nconst GlowbyScreen: React.FC = () => {\n  // If not enabled, show the default template UI.\n  if (!enabled) return <Custom />;\n\n  const characterImage =\n    \"glowbyimage:Minimal friendly character icon, simple modern mascot face, soft green accent, clean geometric style, light background, app icon aesthetic\";\n\n  // Replace the contents of this component with AI-generated content.\n  // Ensure that the generated content is centered on the screen\n  // and within a maximum width of 360px.\n  // always use Image from \"next/image\" for images\n  // the UI should be build using shadcn/ui\n  // the following components are available: button, card, dialog, dropdown-menu, input, label, pagination, progress, tabs, toggle, tooltip\n  // each component should be imported individually from shadcn/ui only in the following formats: \n  // import { Button } from \"@/components/ui/button\";\n  // import { Card } from \"@/components/ui/card\"; \n  // import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from \"@/components/ui/dialog\"\n  // import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from \"@/components/ui/dropdown-menu\"\n  // import { Input } from \"@/components/ui/input\"\n  // import { Label } from \"@/components/ui/label\"\n  // import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from \"@/components/ui/pagination\"\n  // import { Progress } from \"@/components/ui/progress\"\n  // import { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n  // import { Toggle } from \"@/components/ui/toggle\"\n  // import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from \"@/components/ui/tooltip\"\n  return (\n    <div className=\"min-h-screen bg-[#F5F5F5] text-[#111111] selection:bg-[#29DE92]/30\">\n      <main className=\"flex min-h-screen items-center justify-center px-6\">\n        <section className=\"w-full max-w-[360px] text-center\">\n          <div className=\"flex flex-col items-center\">\n            <div className=\"mb-8 rounded-full p-3\">\n              <div className=\"flex h-24 w-24 items-center justify-center rounded-full bg-white shadow-[0_20px_60px_rgba(0,0,0,0.08)] ring-1 ring-black/5 sm:h-28 sm:w-28\">\n                <Image\n                  src={characterImage}\n                  alt=\"Minimal friendly character icon\"\n                  width={64}\n                  height={64}\n                  className=\"h-14 w-14 rounded-2xl object-cover sm:h-16 sm:w-16\"\n                  unoptimized\n                />\n              </div>\n            </div>\n\n            <h1 className=\"text-5xl font-extrabold tracking-tight sm:text-6xl\">\n              Build{\" \"}\n              <span className=\"relative inline-block\">\n                <span>anything.</span>\n                <span className=\"absolute -bottom-2 left-1/2 h-1.5 w-16 -translate-x-1/2 rounded-full bg-[#29DE92]\" />\n              </span>\n            </h1>\n\n            <p className=\"mt-16 text-sm font-medium tracking-wide text-black/55\">\n              Made with <span className=\"text-[#29DE92]\">Glowbom</span>\n            </p>\n          </div>\n        </section>\n      </main>\n    </div>\n  );\n};\n\nexport default GlowbyScreen;"
  },
  {
    "path": "project/web/src/app/components/Custom.tsx",
    "content": "\"use client\";\nimport React, { useState, useEffect } from \"react\";\nimport { Question, CustomContent } from \"@/models/types\";\nimport { Button } from \"@/components/ui/button\";\nimport Image from \"next/image\";\n\nconst Custom: React.FC = () => {\n  const [appScreen, setAppScreen] = useState(\"Loading\");\n  const [content, setContent] = useState<CustomContent | null>(null);\n\n  useEffect(() => {\n    const loadContentFromAssets = async () => {\n      try {\n        const response = await fetch(\"/custom.glowbom\");\n        const data: CustomContent = await response.json();\n        setContent(data);\n        setAppScreen(\"Questions\"); // Set the screen state based on your conditions\n      } catch (error) {\n        console.error(\"Failed to load content:\", error);\n        setAppScreen(\"Error\");\n      }\n    };\n\n    loadContentFromAssets();\n  }, []);\n\n  const renderQuestion = (question: Question) => {\n    return (\n      <div className=\"image-card\">\n        {question.description === \"Image\" && (\n          <Image\n            src={question.buttonsTexts[0]}\n            alt={question.title}\n            width={1200}\n            height={800}\n            unoptimized\n            sizes=\"(max-width: 768px) 100vw, 42rem\"\n            className=\"h-auto w-full rounded-xl object-cover\"\n          />\n        )}\n\n        {question.description === \"Text\" && (\n          <p className=\"text-width\">{question.buttonsTexts[0]}</p>\n        )}\n\n        {question.description === \"Button\" && (\n          <div className=\"flex justify-center\">\n            <Button\n              onClick={() => {\n                if (question.buttonsTexts.length > 1) {\n                  window.open(\n                    question.buttonsTexts[1],\n                    \"_blank\",\n                    \"noopener,noreferrer\"\n                  );\n                }\n              }}\n              className=\"btn-width text-center\"\n            >\n              {question.buttonsTexts[0]}\n            </Button>\n          </div>\n        )}\n      </div>\n    );\n  };\n\n  if (appScreen === \"Loading\") {\n    return <div>Loading...</div>;\n  }\n\n  if (appScreen === \"Error\" || !content) {\n    return <div>Error loading content.</div>;\n  }\n\n  return (\n    <div className=\"container mt-20\">\n      {appScreen === \"Loading\" && <div>Loading...</div>}\n      {appScreen === \"Error\" && <div>Error loading content.</div>}\n      {appScreen === \"Questions\" && content?.questions.map(renderQuestion)}\n    </div>\n  );\n};\n\nexport default Custom;\n"
  },
  {
    "path": "project/web/src/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n  :root {\n    --background: 0 0% 100%;\n    --foreground: 222.2 84% 4.9%;\n\n    --card: 0 0% 100%;\n    --card-foreground: 222.2 84% 4.9%;\n\n    --popover: 0 0% 100%;\n    --popover-foreground: 222.2 84% 4.9%;\n\n    --primary: 222.2 47.4% 11.2%;\n    --primary-foreground: 210 40% 98%;\n\n    --secondary: 210 40% 96.1%;\n    --secondary-foreground: 222.2 47.4% 11.2%;\n\n    --muted: 210 40% 96.1%;\n    --muted-foreground: 215.4 16.3% 46.9%;\n\n    --accent: 210 40% 96.1%;\n    --accent-foreground: 222.2 47.4% 11.2%;\n\n    --destructive: 0 84.2% 60.2%;\n    --destructive-foreground: 210 40% 98%;\n\n    --border: 214.3 31.8% 91.4%;\n    --input: 214.3 31.8% 91.4%;\n    --ring: 222.2 84% 4.9%;\n\n    --radius: 0.5rem;\n  }\n\n  .dark {\n    --background: 222.2 84% 4.9%;\n    --foreground: 210 40% 98%;\n\n    --card: 222.2 84% 4.9%;\n    --card-foreground: 210 40% 98%;\n\n    --popover: 222.2 84% 4.9%;\n    --popover-foreground: 210 40% 98%;\n\n    --primary: 210 40% 98%;\n    --primary-foreground: 222.2 47.4% 11.2%;\n\n    --secondary: 217.2 32.6% 17.5%;\n    --secondary-foreground: 210 40% 98%;\n\n    --muted: 217.2 32.6% 17.5%;\n    --muted-foreground: 215 20.2% 65.1%;\n\n    --accent: 217.2 32.6% 17.5%;\n    --accent-foreground: 210 40% 98%;\n\n    --destructive: 0 62.8% 30.6%;\n    --destructive-foreground: 210 40% 98%;\n\n    --border: 217.2 32.6% 17.5%;\n    --input: 217.2 32.6% 17.5%;\n    --ring: 212.7 26.8% 83.9%;\n  }\n}\n\n@layer base {\n  * {\n    @apply border-border;\n  }\n  body {\n    @apply bg-background text-foreground;\n  }\n}\n\n@layer components {\n  /* global.css */\n  .image-card {\n    @apply max-w-md mx-auto mb-4; /* Sets a maximum width for the card and centers it */\n  }\n\n  .text-width {\n    @apply w-full max-w-md mx-auto; /* Sets a maximum width for the text to match the card */\n  }\n\n  .btn-width {\n    @apply w-full max-w-xs mx-auto; /* Sets a maximum width for the button */\n  }\n}\n"
  },
  {
    "path": "project/web/src/app/layout.tsx",
    "content": "import type { Metadata } from \"next\";\nimport { Inter } from \"next/font/google\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata: Metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({\n  children,\n}: Readonly<{\n  children: React.ReactNode;\n}>) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>{children}</body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "project/web/src/app/page.tsx",
    "content": "import React from \"react\";\nimport GlowbyScreen from \"@/app/components/AiExtensions\";\n\nexport default function Home() {\n  return <GlowbyScreen />;\n}\n"
  },
  {
    "path": "project/web/src/components/ui/button.tsx",
    "content": "import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n        outline:\n          \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-10 px-4 py-2\",\n        sm: \"h-9 rounded-md px-3\",\n        lg: \"h-11 rounded-md px-8\",\n        icon: \"h-10 w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : \"button\"\n    return (\n      <Comp\n        className={cn(buttonVariants({ variant, size, className }))}\n        ref={ref}\n        {...props}\n      />\n    )\n  }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n"
  },
  {
    "path": "project/web/src/components/ui/card.tsx",
    "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\n      \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n      className\n    )}\n    {...props}\n  />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n    {...props}\n  />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <h3\n    ref={ref}\n    className={cn(\n      \"text-2xl font-semibold leading-none tracking-tight\",\n      className\n    )}\n    {...props}\n  />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n  <p\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"flex items-center p-6 pt-0\", className)}\n    {...props}\n  />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n"
  },
  {
    "path": "project/web/src/components/ui/dialog.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(\n      \"fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n      className\n    )}\n    {...props}\n  />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <DialogPortal>\n    <DialogOverlay />\n    <DialogPrimitive.Content\n      ref={ref}\n      className={cn(\n        \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n        <X className=\"h-4 w-4\" />\n        <span className=\"sr-only\">Close</span>\n      </DialogPrimitive.Close>\n    </DialogPrimitive.Content>\n  </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      \"flex flex-col space-y-1.5 text-center sm:text-left\",\n      className\n    )}\n    {...props}\n  />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n      className\n    )}\n    {...props}\n  />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn(\n      \"text-lg font-semibold leading-none tracking-tight\",\n      className\n    )}\n    {...props}\n  />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n  Dialog,\n  DialogPortal,\n  DialogOverlay,\n  DialogClose,\n  DialogTrigger,\n  DialogContent,\n  DialogHeader,\n  DialogFooter,\n  DialogTitle,\n  DialogDescription,\n}\n"
  },
  {
    "path": "project/web/src/components/ui/dropdown-menu.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n    inset?: boolean\n  }\n>(({ className, inset, children, ...props }, ref) => (\n  <DropdownMenuPrimitive.SubTrigger\n    ref={ref}\n    className={cn(\n      \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n      inset && \"pl-8\",\n      className\n    )}\n    {...props}\n  >\n    {children}\n    <ChevronRight className=\"ml-auto h-4 w-4\" />\n  </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n  DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n  <DropdownMenuPrimitive.SubContent\n    ref={ref}\n    className={cn(\n      \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n      className\n    )}\n    {...props}\n  />\n))\nDropdownMenuSubContent.displayName =\n  DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n  <DropdownMenuPrimitive.Portal>\n    <DropdownMenuPrimitive.Content\n      ref={ref}\n      sideOffset={sideOffset}\n      className={cn(\n        \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n        className\n      )}\n      {...props}\n    />\n  </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n    inset?: boolean\n  }\n>(({ className, inset, ...props }, ref) => (\n  <DropdownMenuPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      inset && \"pl-8\",\n      className\n    )}\n    {...props}\n  />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n  <DropdownMenuPrimitive.CheckboxItem\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      className\n    )}\n    checked={checked}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <DropdownMenuPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </DropdownMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n  DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n  <DropdownMenuPrimitive.RadioItem\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      className\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <DropdownMenuPrimitive.ItemIndicator>\n        <Circle className=\"h-2 w-2 fill-current\" />\n      </DropdownMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n    inset?: boolean\n  }\n>(({ className, inset, ...props }, ref) => (\n  <DropdownMenuPrimitive.Label\n    ref={ref}\n    className={cn(\n      \"px-2 py-1.5 text-sm font-semibold\",\n      inset && \"pl-8\",\n      className\n    )}\n    {...props}\n  />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <DropdownMenuPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n    {...props}\n  />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n  return (\n    <span\n      className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n      {...props}\n    />\n  )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n  DropdownMenu,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuCheckboxItem,\n  DropdownMenuRadioItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuGroup,\n  DropdownMenuPortal,\n  DropdownMenuSub,\n  DropdownMenuSubContent,\n  DropdownMenuSubTrigger,\n  DropdownMenuRadioGroup,\n}\n"
  },
  {
    "path": "project/web/src/components/ui/form.tsx",
    "content": "import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n  Controller,\n  ControllerProps,\n  FieldPath,\n  FieldValues,\n  FormProvider,\n  useFormContext,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n  name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue\n)\n\nconst FormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider value={{ name: props.name }}>\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  )\n}\n\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext)\n  const itemContext = React.useContext(FormItemContext)\n  const { getFieldState, formState } = useFormContext()\n\n  const fieldState = getFieldState(fieldContext.name, formState)\n\n  if (!fieldContext) {\n    throw new Error(\"useFormField should be used within <FormField>\")\n  }\n\n  const { id } = itemContext\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  }\n}\n\ntype FormItemContextValue = {\n  id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n  const id = React.useId()\n\n  return (\n    <FormItemContext.Provider value={{ id }}>\n      <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n    </FormItemContext.Provider>\n  )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n  const { error, formItemId } = useFormField()\n\n  return (\n    <Label\n      ref={ref}\n      className={cn(error && \"text-destructive\", className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n  React.ElementRef<typeof Slot>,\n  React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n  const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n  return (\n    <Slot\n      ref={ref}\n      id={formItemId}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      aria-invalid={!!error}\n      {...props}\n    />\n  )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n  const { formDescriptionId } = useFormField()\n\n  return (\n    <p\n      ref={ref}\n      id={formDescriptionId}\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n  const { error, formMessageId } = useFormField()\n  const body = error ? String(error?.message) : children\n\n  if (!body) {\n    return null\n  }\n\n  return (\n    <p\n      ref={ref}\n      id={formMessageId}\n      className={cn(\"text-sm font-medium text-destructive\", className)}\n      {...props}\n    >\n      {body}\n    </p>\n  )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n  useFormField,\n  Form,\n  FormItem,\n  FormLabel,\n  FormControl,\n  FormDescription,\n  FormMessage,\n  FormField,\n}\n"
  },
  {
    "path": "project/web/src/components/ui/input.tsx",
    "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputProps\n  extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, type, ...props }, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n          className\n        )}\n        ref={ref}\n        {...props}\n      />\n    )\n  }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n"
  },
  {
    "path": "project/web/src/components/ui/label.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n  \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n    VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n  <LabelPrimitive.Root\n    ref={ref}\n    className={cn(labelVariants(), className)}\n    {...props}\n  />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n"
  },
  {
    "path": "project/web/src/components/ui/pagination.tsx",
    "content": "import * as React from \"react\"\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { ButtonProps, buttonVariants } from \"@/components/ui/button\"\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n  <nav\n    role=\"navigation\"\n    aria-label=\"pagination\"\n    className={cn(\"mx-auto flex w-full justify-center\", className)}\n    {...props}\n  />\n)\nPagination.displayName = \"Pagination\"\n\nconst PaginationContent = React.forwardRef<\n  HTMLUListElement,\n  React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n  <ul\n    ref={ref}\n    className={cn(\"flex flex-row items-center gap-1\", className)}\n    {...props}\n  />\n))\nPaginationContent.displayName = \"PaginationContent\"\n\nconst PaginationItem = React.forwardRef<\n  HTMLLIElement,\n  React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n  <li ref={ref} className={cn(\"\", className)} {...props} />\n))\nPaginationItem.displayName = \"PaginationItem\"\n\ntype PaginationLinkProps = {\n  isActive?: boolean\n} & Pick<ButtonProps, \"size\"> &\n  React.ComponentProps<\"a\">\n\nconst PaginationLink = ({\n  className,\n  isActive,\n  size = \"icon\",\n  ...props\n}: PaginationLinkProps) => (\n  <a\n    aria-current={isActive ? \"page\" : undefined}\n    className={cn(\n      buttonVariants({\n        variant: isActive ? \"outline\" : \"ghost\",\n        size,\n      }),\n      className\n    )}\n    {...props}\n  />\n)\nPaginationLink.displayName = \"PaginationLink\"\n\nconst PaginationPrevious = ({\n  className,\n  ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n  <PaginationLink\n    aria-label=\"Go to previous page\"\n    size=\"default\"\n    className={cn(\"gap-1 pl-2.5\", className)}\n    {...props}\n  >\n    <ChevronLeft className=\"h-4 w-4\" />\n    <span>Previous</span>\n  </PaginationLink>\n)\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = ({\n  className,\n  ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n  <PaginationLink\n    aria-label=\"Go to next page\"\n    size=\"default\"\n    className={cn(\"gap-1 pr-2.5\", className)}\n    {...props}\n  >\n    <span>Next</span>\n    <ChevronRight className=\"h-4 w-4\" />\n  </PaginationLink>\n)\nPaginationNext.displayName = \"PaginationNext\"\n\nconst PaginationEllipsis = ({\n  className,\n  ...props\n}: React.ComponentProps<\"span\">) => (\n  <span\n    aria-hidden\n    className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n    {...props}\n  >\n    <MoreHorizontal className=\"h-4 w-4\" />\n    <span className=\"sr-only\">More pages</span>\n  </span>\n)\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\nexport {\n  Pagination,\n  PaginationContent,\n  PaginationEllipsis,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n}\n"
  },
  {
    "path": "project/web/src/components/ui/progress.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Progress = React.forwardRef<\n  React.ElementRef<typeof ProgressPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n  <ProgressPrimitive.Root\n    ref={ref}\n    className={cn(\n      \"relative h-4 w-full overflow-hidden rounded-full bg-secondary\",\n      className\n    )}\n    {...props}\n  >\n    <ProgressPrimitive.Indicator\n      className=\"h-full w-full flex-1 bg-primary transition-all\"\n      style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n    />\n  </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n"
  },
  {
    "path": "project/web/src/components/ui/tabs.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.List>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.List\n    ref={ref}\n    className={cn(\n      \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n      className\n    )}\n    {...props}\n  />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n      className\n    )}\n    {...props}\n  />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Content\n    ref={ref}\n    className={cn(\n      \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n      className\n    )}\n    {...props}\n  />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n"
  },
  {
    "path": "project/web/src/components/ui/toast.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ToastPrimitives from \"@radix-ui/react-toast\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ToastProvider = ToastPrimitives.Provider\n\nconst ToastViewport = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Viewport>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Viewport\n    ref={ref}\n    className={cn(\n      \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n      className\n    )}\n    {...props}\n  />\n))\nToastViewport.displayName = ToastPrimitives.Viewport.displayName\n\nconst toastVariants = cva(\n  \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n  {\n    variants: {\n      variant: {\n        default: \"border bg-background text-foreground\",\n        destructive:\n          \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nconst Toast = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n    VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n  return (\n    <ToastPrimitives.Root\n      ref={ref}\n      className={cn(toastVariants({ variant }), className)}\n      {...props}\n    />\n  )\n})\nToast.displayName = ToastPrimitives.Root.displayName\n\nconst ToastAction = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Action>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Action\n    ref={ref}\n    className={cn(\n      \"inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive\",\n      className\n    )}\n    {...props}\n  />\n))\nToastAction.displayName = ToastPrimitives.Action.displayName\n\nconst ToastClose = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Close>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Close\n    ref={ref}\n    className={cn(\n      \"absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n      className\n    )}\n    toast-close=\"\"\n    {...props}\n  >\n    <X className=\"h-4 w-4\" />\n  </ToastPrimitives.Close>\n))\nToastClose.displayName = ToastPrimitives.Close.displayName\n\nconst ToastTitle = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Title>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Title\n    ref={ref}\n    className={cn(\"text-sm font-semibold\", className)}\n    {...props}\n  />\n))\nToastTitle.displayName = ToastPrimitives.Title.displayName\n\nconst ToastDescription = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Description>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Description\n    ref={ref}\n    className={cn(\"text-sm opacity-90\", className)}\n    {...props}\n  />\n))\nToastDescription.displayName = ToastPrimitives.Description.displayName\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>\n\nexport {\n  type ToastProps,\n  type ToastActionElement,\n  ToastProvider,\n  ToastViewport,\n  Toast,\n  ToastTitle,\n  ToastDescription,\n  ToastClose,\n  ToastAction,\n}\n"
  },
  {
    "path": "project/web/src/components/ui/toaster.tsx",
    "content": "\"use client\"\n\nimport {\n  Toast,\n  ToastClose,\n  ToastDescription,\n  ToastProvider,\n  ToastTitle,\n  ToastViewport,\n} from \"@/components/ui/toast\"\nimport { useToast } from \"@/components/ui/use-toast\"\n\nexport function Toaster() {\n  const { toasts } = useToast()\n\n  return (\n    <ToastProvider>\n      {toasts.map(function ({ id, title, description, action, ...props }) {\n        return (\n          <Toast key={id} {...props}>\n            <div className=\"grid gap-1\">\n              {title && <ToastTitle>{title}</ToastTitle>}\n              {description && (\n                <ToastDescription>{description}</ToastDescription>\n              )}\n            </div>\n            {action}\n            <ToastClose />\n          </Toast>\n        )\n      })}\n      <ToastViewport />\n    </ToastProvider>\n  )\n}\n"
  },
  {
    "path": "project/web/src/components/ui/toggle.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst toggleVariants = cva(\n  \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        outline:\n          \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n      },\n      size: {\n        default: \"h-10 px-3\",\n        sm: \"h-9 px-2.5\",\n        lg: \"h-11 px-5\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nconst Toggle = React.forwardRef<\n  React.ElementRef<typeof TogglePrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &\n    VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n  <TogglePrimitive.Root\n    ref={ref}\n    className={cn(toggleVariants({ variant, size, className }))}\n    {...props}\n  />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n"
  },
  {
    "path": "project/web/src/components/ui/tooltip.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n  <TooltipPrimitive.Content\n    ref={ref}\n    sideOffset={sideOffset}\n    className={cn(\n      \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n      className\n    )}\n    {...props}\n  />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n"
  },
  {
    "path": "project/web/src/components/ui/use-toast.ts",
    "content": "\"use client\"\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\"\n\nimport type {\n  ToastActionElement,\n  ToastProps,\n} from \"@/components/ui/toast\"\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000000\n\ntype ToasterToast = ToastProps & {\n  id: string\n  title?: React.ReactNode\n  description?: React.ReactNode\n  action?: ToastActionElement\n}\n\nconst actionTypes = {\n  ADD_TOAST: \"ADD_TOAST\",\n  UPDATE_TOAST: \"UPDATE_TOAST\",\n  DISMISS_TOAST: \"DISMISS_TOAST\",\n  REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const\n\nlet count = 0\n\nfunction genId() {\n  count = (count + 1) % Number.MAX_SAFE_INTEGER\n  return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n  | {\n      type: ActionType[\"ADD_TOAST\"]\n      toast: ToasterToast\n    }\n  | {\n      type: ActionType[\"UPDATE_TOAST\"]\n      toast: Partial<ToasterToast>\n    }\n  | {\n      type: ActionType[\"DISMISS_TOAST\"]\n      toastId?: ToasterToast[\"id\"]\n    }\n  | {\n      type: ActionType[\"REMOVE_TOAST\"]\n      toastId?: ToasterToast[\"id\"]\n    }\n\ninterface State {\n  toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nconst addToRemoveQueue = (toastId: string) => {\n  if (toastTimeouts.has(toastId)) {\n    return\n  }\n\n  const timeout = setTimeout(() => {\n    toastTimeouts.delete(toastId)\n    dispatch({\n      type: \"REMOVE_TOAST\",\n      toastId: toastId,\n    })\n  }, TOAST_REMOVE_DELAY)\n\n  toastTimeouts.set(toastId, timeout)\n}\n\nexport const reducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"ADD_TOAST\":\n      return {\n        ...state,\n        toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n      }\n\n    case \"UPDATE_TOAST\":\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === action.toast.id ? { ...t, ...action.toast } : t\n        ),\n      }\n\n    case \"DISMISS_TOAST\": {\n      const { toastId } = action\n\n      // ! Side effects ! - This could be extracted into a dismissToast() action,\n      // but I'll keep it here for simplicity\n      if (toastId) {\n        addToRemoveQueue(toastId)\n      } else {\n        state.toasts.forEach((toast) => {\n          addToRemoveQueue(toast.id)\n        })\n      }\n\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === toastId || toastId === undefined\n            ? {\n                ...t,\n                open: false,\n              }\n            : t\n        ),\n      }\n    }\n    case \"REMOVE_TOAST\":\n      if (action.toastId === undefined) {\n        return {\n          ...state,\n          toasts: [],\n        }\n      }\n      return {\n        ...state,\n        toasts: state.toasts.filter((t) => t.id !== action.toastId),\n      }\n  }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n  memoryState = reducer(memoryState, action)\n  listeners.forEach((listener) => {\n    listener(memoryState)\n  })\n}\n\ntype Toast = Omit<ToasterToast, \"id\">\n\nfunction toast({ ...props }: Toast) {\n  const id = genId()\n\n  const update = (props: ToasterToast) =>\n    dispatch({\n      type: \"UPDATE_TOAST\",\n      toast: { ...props, id },\n    })\n  const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id })\n\n  dispatch({\n    type: \"ADD_TOAST\",\n    toast: {\n      ...props,\n      id,\n      open: true,\n      onOpenChange: (open) => {\n        if (!open) dismiss()\n      },\n    },\n  })\n\n  return {\n    id: id,\n    dismiss,\n    update,\n  }\n}\n\nfunction useToast() {\n  const [state, setState] = React.useState<State>(memoryState)\n\n  React.useEffect(() => {\n    listeners.push(setState)\n    return () => {\n      const index = listeners.indexOf(setState)\n      if (index > -1) {\n        listeners.splice(index, 1)\n      }\n    }\n  }, [state])\n\n  return {\n    ...state,\n    toast,\n    dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n  }\n}\n\nexport { useToast, toast }\n"
  },
  {
    "path": "project/web/src/lib/utils.ts",
    "content": "import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n"
  },
  {
    "path": "project/web/src/models/types.ts",
    "content": "// types.ts\nexport interface Question {\n  id: string;\n  title: string;\n  description: string;\n  buttonsTexts: string[];\n  buttonAnswers: number[];\n  answersCount: number;\n  goIndexes: number[];\n  answerPicture: string;\n  answerPictureDelay: number;\n  goConditions: any[];\n  heroValues: any[];\n  picturesSpriteNames: string[];\n}\n\nexport interface CustomContent {\n  questions: Question[];\n}\n"
  },
  {
    "path": "project/web/tailwind.config.ts",
    "content": "import type { Config } from \"tailwindcss\"\n\nconst config = {\n  darkMode: [\"class\"],\n  content: [\n    './pages/**/*.{ts,tsx}',\n    './components/**/*.{ts,tsx}',\n    './app/**/*.{ts,tsx}',\n    './src/**/*.{ts,tsx}',\n\t],\n  prefix: \"\",\n  theme: {\n    container: {\n      center: true,\n      padding: \"2rem\",\n      screens: {\n        \"2xl\": \"1400px\",\n      },\n    },\n    extend: {\n      colors: {\n        border: \"hsl(var(--border))\",\n        input: \"hsl(var(--input))\",\n        ring: \"hsl(var(--ring))\",\n        background: \"hsl(var(--background))\",\n        foreground: \"hsl(var(--foreground))\",\n        primary: {\n          DEFAULT: \"hsl(var(--primary))\",\n          foreground: \"hsl(var(--primary-foreground))\",\n        },\n        secondary: {\n          DEFAULT: \"hsl(var(--secondary))\",\n          foreground: \"hsl(var(--secondary-foreground))\",\n        },\n        destructive: {\n          DEFAULT: \"hsl(var(--destructive))\",\n          foreground: \"hsl(var(--destructive-foreground))\",\n        },\n        muted: {\n          DEFAULT: \"hsl(var(--muted))\",\n          foreground: \"hsl(var(--muted-foreground))\",\n        },\n        accent: {\n          DEFAULT: \"hsl(var(--accent))\",\n          foreground: \"hsl(var(--accent-foreground))\",\n        },\n        popover: {\n          DEFAULT: \"hsl(var(--popover))\",\n          foreground: \"hsl(var(--popover-foreground))\",\n        },\n        card: {\n          DEFAULT: \"hsl(var(--card))\",\n          foreground: \"hsl(var(--card-foreground))\",\n        },\n      },\n      borderRadius: {\n        lg: \"var(--radius)\",\n        md: \"calc(var(--radius) - 2px)\",\n        sm: \"calc(var(--radius) - 4px)\",\n      },\n      keyframes: {\n        \"accordion-down\": {\n          from: { height: \"0\" },\n          to: { height: \"var(--radix-accordion-content-height)\" },\n        },\n        \"accordion-up\": {\n          from: { height: \"var(--radix-accordion-content-height)\" },\n          to: { height: \"0\" },\n        },\n      },\n      animation: {\n        \"accordion-down\": \"accordion-down 0.2s ease-out\",\n        \"accordion-up\": \"accordion-up 0.2s ease-out\",\n      },\n    },\n  },\n  plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config\n\nexport default config"
  },
  {
    "path": "project/web/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": false,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"incremental\": true,\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "scripts/install.sh",
    "content": "#!/bin/sh\nset -eu\n\nREPO=\"${GLOWBY_REPO:-glowbom/glowby}\"\nINSTALL_DIR=\"${GLOWBY_INSTALL_DIR:-/usr/local/bin}\"\nBASE_URL=\"https://github.com/${REPO}/releases/latest/download\"\n\ndetect_os() {\n  case \"$(uname -s)\" in\n    Darwin*) echo \"darwin\" ;;\n    Linux*)  echo \"linux\" ;;\n    MINGW*|MSYS*|CYGWIN*) echo \"windows\" ;;\n    *) echo \"unsupported\"; return 1 ;;\n  esac\n}\n\ndetect_arch() {\n  case \"$(uname -m)\" in\n    x86_64|amd64)   echo \"amd64\" ;;\n    aarch64|arm64)   echo \"arm64\" ;;\n    *) echo \"unsupported\"; return 1 ;;\n  esac\n}\n\nmain() {\n  OS=\"$(detect_os)\"\n  ARCH=\"$(detect_arch)\"\n  ARCHIVE_EXT=\"tar.gz\"\n  BIN_NAME=\"glowby\"\n\n  if [ \"$OS\" = \"unsupported\" ] || [ \"$ARCH\" = \"unsupported\" ]; then\n    echo \"error: unsupported platform $(uname -s)/$(uname -m)\" >&2\n    exit 1\n  fi\n\n  if [ \"$OS\" = \"windows\" ]; then\n    ARCHIVE_EXT=\"zip\"\n    BIN_NAME=\"glowby.exe\"\n  fi\n\n  ARCHIVE=\"glowby-${OS}-${ARCH}.${ARCHIVE_EXT}\"\n  URL=\"${BASE_URL}/${ARCHIVE}\"\n\n  echo \"Downloading glowby for ${OS}/${ARCH}...\"\n  TMPDIR=\"$(mktemp -d)\"\n  trap 'rm -rf \"$TMPDIR\"' EXIT\n\n  if ! curl -fsSL \"$URL\" -o \"${TMPDIR}/${ARCHIVE}\"; then\n    echo \"error: failed to download ${URL}\" >&2\n    echo \"  Check that a release exists at https://github.com/${REPO}/releases\" >&2\n    exit 1\n  fi\n\n  if [ \"$OS\" = \"windows\" ]; then\n    unzip -q \"${TMPDIR}/${ARCHIVE}\" -d \"$TMPDIR\"\n  else\n    tar xzf \"${TMPDIR}/${ARCHIVE}\" -C \"$TMPDIR\"\n  fi\n\n  if [ ! -f \"${TMPDIR}/${BIN_NAME}\" ]; then\n    echo \"error: ${BIN_NAME} binary not found in archive\" >&2\n    exit 1\n  fi\n\n  echo \"Installing to ${INSTALL_DIR}/${BIN_NAME}...\"\n  install -d \"$INSTALL_DIR\"\n  install -m 755 \"${TMPDIR}/${BIN_NAME}\" \"${INSTALL_DIR}/${BIN_NAME}\"\n\n  echo \"glowby installed successfully to ${INSTALL_DIR}/${BIN_NAME}\"\n  echo \"Run 'glowby doctor' to verify your setup.\"\n}\n\nmain\n"
  },
  {
    "path": "web/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2026 Glowbom\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "web/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" sizes=\"any\" href=\"%BASE_URL%favicon.svg\" />\n    <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"%BASE_URL%favicon.png\" />\n    <title>Glowby</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "web/package.json",
    "content": "{\n  \"name\": \"glowby-oss-web\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc --noEmit && vite build\",\n    \"preview\": \"vite preview\",\n    \"typecheck\": \"tsc --noEmit\"\n  },\n  \"dependencies\": {\n    \"markdown-it\": \"^14.1.0\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/markdown-it\": \"^14.1.2\",\n    \"@types/react\": \"^19.0.0\",\n    \"@types/react-dom\": \"^19.0.0\",\n    \"@vitejs/plugin-react\": \"^5.0.0\",\n    \"typescript\": \"^5.8.0\",\n    \"vite\": \"^6.2.0\"\n  }\n}\n"
  },
  {
    "path": "web/src/App.tsx",
    "content": "import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n  MODEL_PROVIDERS,\n  decodeModelOptionValue,\n  encodeModelOptionValue,\n  modelCatalogGroups,\n  providerDefinition,\n  resolveRefineModel,\n} from './lib/model-catalog';\nimport { lineLooksLikeMarkdown, parseConsoleHeading, parseConsoleMarkdown } from './lib/console-render';\nimport { ApiError, openCodeApi, toErrorMessage } from './lib/api';\nimport { useRefineRun } from './hooks/useRefineRun';\nimport type {\n  AuthProviderID,\n  OpenCodeAvailableProvider,\n  OpenAIAuthMode,\n  OpenAIModelsResponseModel,\n  OpenCodeIDE,\n  OpenCodeAuthStatus,\n  OpenCodeHistoryStatus,\n  OpenCodeInstructionPickedFile,\n  OpenCodeHealthResponse,\n  OpenCodeProjectHistoryAttachment,\n  OpenCodeProjectHistoryEntry,\n  OpenCodeProjectIDEAction,\n  OpenCodeProjectIDEStatusResponse,\n  OpenCodeProject,\n  OpenCodeProjectEnvelope,\n  OpenCodeQuestionItem,\n  ProviderID,\n  ProviderKeyState,\n} from './types/opencode';\n\ntype CredentialMode = 'auth' | 'api-key' | 'opencode-config';\nconst OPENCODE_RECOMMENDED_MODEL_VALUE = '__opencode_recommended__';\nconst MAX_INSTRUCTION_ATTACHMENT_BYTES = 40 * 1024 * 1024;\nconst PROJECT_HISTORY_STORAGE_KEY = 'glowby_oss_project_history';\nconst DEFAULT_BUILD_INSTRUCTIONS = 'Make this project production ready. Follow AGENTS.md when present.';\nconst OPENCODE_MODEL_PREFERENCE_ORDER = [\n  { providerId: 'openai', modelIds: ['gpt-5.4'] },\n  { providerId: 'opencode', modelIds: ['big-pickle'] },\n  { providerId: 'openai', modelIds: ['gpt-5.3-codex', 'gpt-5.2', 'gpt-5.1-codex-max', 'gpt-5.1-codex-mini'] },\n  { providerId: 'opencode', modelIds: ['kimi-k2.5-free', 'glm-5-free', 'minimax-m2.5-free'] },\n] as const;\n\nconst RUN_STATUS_LABEL: Record<string, string> = {\n  idle: 'Ready',\n  running: 'Building',\n  completed: 'Done',\n  failed: 'Needs attention',\n  cancelled: 'Stopped',\n};\n\nconst DEFAULT_PROVIDER_KEYS: ProviderKeyState = {\n  openaiKey: '',\n  anthropicKey: '',\n  geminiKey: '',\n  fireworksKey: '',\n  openrouterKey: '',\n  opencodeZenKey: '',\n  xaiKey: '',\n  elevenLabsKey: '',\n};\n\nconst PROVIDER_KEYS_STORAGE_KEY = 'glowby_oss_provider_keys';\n\nfunction loadProviderKeys(): ProviderKeyState {\n  try {\n    const raw = localStorage.getItem(PROVIDER_KEYS_STORAGE_KEY);\n    if (raw) {\n      const parsed = JSON.parse(raw);\n      return { ...DEFAULT_PROVIDER_KEYS, ...parsed };\n    }\n  } catch {\n    // ignore corrupt data\n  }\n  return { ...DEFAULT_PROVIDER_KEYS };\n}\n\nfunction saveProviderKeys(keys: ProviderKeyState): void {\n  try {\n    localStorage.setItem(PROVIDER_KEYS_STORAGE_KEY, JSON.stringify(keys));\n  } catch {\n    // ignore storage errors\n  }\n}\n\nconst IMAGE_SOURCE_STORAGE_KEY = 'glowby_oss_image_source';\n\nfunction loadImageSource(): string {\n  try {\n    return localStorage.getItem(IMAGE_SOURCE_STORAGE_KEY) || '';\n  } catch {\n    return '';\n  }\n}\n\nfunction saveImageSource(value: string): void {\n  try {\n    localStorage.setItem(IMAGE_SOURCE_STORAGE_KEY, value);\n  } catch {\n    // ignore storage errors\n  }\n}\n\nconst CREDENTIAL_MODE_STORAGE_KEY = 'glowby_oss_credential_mode';\nconst VALID_CREDENTIAL_MODES: CredentialMode[] = ['auth', 'api-key', 'opencode-config'];\n\nfunction loadCredentialMode(): CredentialMode {\n  try {\n    const raw = localStorage.getItem(CREDENTIAL_MODE_STORAGE_KEY);\n    if (raw && VALID_CREDENTIAL_MODES.includes(raw as CredentialMode)) {\n      return raw as CredentialMode;\n    }\n  } catch {\n    // ignore\n  }\n  return 'opencode-config';\n}\n\nfunction saveCredentialMode(mode: CredentialMode): void {\n  try {\n    localStorage.setItem(CREDENTIAL_MODE_STORAGE_KEY, mode);\n  } catch {\n    // ignore\n  }\n}\n\nconst TARGET_SELECTION_STORAGE_KEY = 'glowby_oss_selected_targets';\n\nconst BUILD_TARGETS = [\n  { id: 'prototype', label: 'Prototype', dir: 'prototype' },\n  { id: 'apple', label: 'Apple', dir: 'apple' },\n  { id: 'android', label: 'Android', dir: 'android' },\n  { id: 'web', label: 'Web', dir: 'web' },\n] as const;\n\nconst ALL_TARGET_IDS: string[] = BUILD_TARGETS.map((t) => t.id);\n\nfunction loadSelectedTargets(): string[] {\n  try {\n    const raw = localStorage.getItem(TARGET_SELECTION_STORAGE_KEY);\n    if (raw) {\n      const parsed = JSON.parse(raw);\n      if (Array.isArray(parsed)) {\n        const valid = parsed.filter((id: string) => ALL_TARGET_IDS.includes(id));\n        return valid.length > 0 ? valid : [...ALL_TARGET_IDS];\n      }\n    }\n  } catch {\n    // ignore\n  }\n  return [...ALL_TARGET_IDS];\n}\n\nfunction saveSelectedTargets(ids: string[]): void {\n  try {\n    localStorage.setItem(TARGET_SELECTION_STORAGE_KEY, JSON.stringify(ids));\n  } catch {\n    // ignore\n  }\n}\n\nfunction validateImageSource(source: string, keys: ProviderKeyState): string {\n  if (!source) return '';\n  if (source.includes('gpt-image') && !keys.openaiKey.trim()) return '';\n  if (source.includes('Nano Banana') && !keys.geminiKey.trim()) return '';\n  if (source.includes('Grok') && !keys.xaiKey.trim()) return '';\n  return source;\n}\n\nfunction suggestBundleID(name: string): string {\n  const slug = name\n    .toLowerCase()\n    .replace(/[^a-z0-9]/g, '.')\n    .replace(/\\.{2,}/g, '.')\n    .replace(/^\\.+|\\.+$/g, '')\n    .split('.')\n    .filter(Boolean)\n    .map((part) => (/^\\d/.test(part) ? `app${part}` : part))\n    .join('.');\n  return `app.glowbom.${slug || 'myapp'}`;\n}\n\ninterface ProjectHistoryEntry {\n  path: string;\n  name: string;\n  version: string;\n  lastOpenedAt: string;\n}\n\ninterface PreferredOpenCodeModel {\n  value: string;\n  providerLabel: string;\n  modelLabel: string;\n  fullLabel: string;\n}\n\ninterface HistoryViewEntry extends Omit<OpenCodeProjectHistoryEntry, 'attachments'> {\n  attachments: OpenCodeProjectHistoryAttachment[];\n  optimistic?: boolean;\n}\n\nfunction IDEQuickActionIcon({ ide }: { ide: OpenCodeIDE }) {\n  switch (ide) {\n    case 'finder':\n      return (\n        <svg aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 16 16\">\n          <path\n            d=\"M1.75 4.25a1 1 0 0 1 1-1h3.1l1.2 1.5h6.2a1 1 0 0 1 1 1v5.5a1.5 1.5 0 0 1-1.5 1.5h-10.5a1.5 1.5 0 0 1-1.5-1.5v-7Z\"\n            stroke=\"currentColor\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth=\"1.3\"\n          />\n          <path d=\"M2 6h12\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.3\" />\n        </svg>\n      );\n    case 'xcode':\n      return (\n        <svg aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 16 16\">\n          <path\n            d=\"M9.66 2.03c-.48.06-1.04.39-1.43.83-.34.38-.63.94-.56 1.5.53.04 1.08-.27 1.45-.71.39-.46.63-1.01.54-1.62Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M12.94 10.88c-.22.51-.49.98-.83 1.43-.48.64-.88 1.36-1.64 1.37-.66.02-.87-.39-1.76-.39-.88 0-1.13.37-1.74.4-.73.03-1.29-.71-1.78-1.35-1.38-1.8-1.53-4.95-.34-6.73.58-.88 1.53-1.44 2.45-1.44.77 0 1.49.44 1.94.44.44 0 1.27-.54 2.14-.46.36.02 1.38.15 2.04 1.13-.05.04-1.22.73-1.21 2.19.02 1.74 1.53 2.32 1.55 2.33-.01.05-.24.75-.82 1.48Z\"\n            fill=\"currentColor\"\n          />\n        </svg>\n      );\n    case 'android-studio':\n      return (\n        <svg aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 16 16\">\n          <path d=\"m5.14 3.28-.92-1.33m6.64 1.33.92-1.33\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.15\" />\n          <path\n            d=\"M4.2 5.88A3.82 3.82 0 0 1 8 3.64a3.82 3.82 0 0 1 3.8 2.24H4.2Z\"\n            fill=\"currentColor\"\n          />\n          <circle cx=\"6.56\" cy=\"4.9\" fill=\"#f7fcfa\" r=\".42\" />\n          <circle cx=\"9.44\" cy=\"4.9\" fill=\"#f7fcfa\" r=\".42\" />\n          <rect fill=\"currentColor\" height=\"5.14\" rx=\"1.35\" width=\"7.08\" x=\"4.46\" y=\"6.28\" />\n          <rect fill=\"currentColor\" height=\"2.82\" rx=\".55\" width=\".96\" x=\"3.28\" y=\"6.78\" />\n          <rect fill=\"currentColor\" height=\"2.82\" rx=\".55\" width=\".96\" x=\"11.76\" y=\"6.78\" />\n          <rect fill=\"currentColor\" height=\"2.62\" rx=\".55\" width=\".96\" x=\"5.68\" y=\"10.72\" />\n          <rect fill=\"currentColor\" height=\"2.62\" rx=\".55\" width=\".96\" x=\"9.36\" y=\"10.72\" />\n        </svg>\n      );\n    case 'vscode':\n      return (\n        <svg aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 16 16\">\n          <path\n            d=\"m10.8 2.2 3 1.4v8.8l-3 1.4-5.9-5.1 5.9-6.5Z\"\n            stroke=\"currentColor\"\n            strokeLinejoin=\"round\"\n            strokeWidth=\"1.2\"\n          />\n          <path d=\"M5 5.6 2.3 3.5 1.1 4.7 3.8 8l-2.7 3.3 1.2 1.2L5 10.4\" stroke=\"currentColor\" strokeLinejoin=\"round\" strokeWidth=\"1.2\" />\n        </svg>\n      );\n    default:\n      return null;\n  }\n}\n\nfunction isMultiSelect(prompt: string, inputType?: string): boolean {\n  const promptLower = prompt.toLowerCase();\n  const typeLower = (inputType || '').toLowerCase();\n\n  if (typeLower.includes('multi') || typeLower.includes('checkbox')) {\n    return true;\n  }\n\n  return (\n    promptLower.includes('select all') ||\n    promptLower.includes('choose all') ||\n    promptLower.includes('select one or more') ||\n    promptLower.includes('choose one or more') ||\n    promptLower.includes('multiple')\n  );\n}\n\nfunction toggleSelection(current: string[], value: string, multiSelect: boolean): string[] {\n  if (!multiSelect) {\n    return [value];\n  }\n\n  if (current.includes(value)) {\n    return current.filter((item) => item !== value);\n  }\n\n  return [...current, value];\n}\n\nfunction targetSummary(project: OpenCodeProject | null): Array<{ id: string; stack: string; outputDir: string }> {\n  if (!project) {\n    return [];\n  }\n\n  return Object.entries(project.targets).map(([id, target]) => ({\n    id,\n    stack: target.stack || 'unknown',\n    outputDir: target.outputDir || id,\n  }));\n}\n\nfunction formatCredentialType(value?: string): string {\n  switch ((value || '').toLowerCase()) {\n    case 'oauth':\n      return 'ChatGPT OAuth credential';\n    case 'api':\n      return 'OpenAI API credential';\n    case 'none':\n      return 'None';\n    default:\n      return 'Unknown';\n  }\n}\n\nfunction formatAuthMode(value?: string): string {\n  switch ((value || '').toLowerCase()) {\n    case 'api-key':\n      return 'API Key';\n    case 'codex-jwt':\n      return 'ChatGPT Login';\n    case 'opencode-config':\n      return 'OpenCode Config';\n    default:\n      return 'Unknown';\n  }\n}\n\nfunction formatAttachmentSize(sizeBytes: number): string {\n  if (!Number.isFinite(sizeBytes) || sizeBytes <= 0) {\n    return '0 B';\n  }\n  if (sizeBytes < 1024) {\n    return `${sizeBytes} B`;\n  }\n\n  const kib = sizeBytes / 1024;\n  if (kib < 1024) {\n    return `${Math.round(kib)} KB`;\n  }\n\n  const mib = kib / 1024;\n  if (mib < 1024) {\n    return `${mib.toFixed(1)} MB`;\n  }\n\n  return `${(mib / 1024).toFixed(1)} GB`;\n}\n\nfunction compactPathLabel(path: string): string {\n  const trimmed = path.trim();\n  if (!trimmed) {\n    return 'No project';\n  }\n\n  const parts = trimmed.split(/[\\\\/]/).filter((part) => part.length > 0);\n  return parts[parts.length - 1] || trimmed;\n}\n\nfunction compactHistoryText(value: string, maxLength = 180, fallback = 'No saved instructions.') {\n  const collapsed = value.trim().replace(/\\s+/g, ' ');\n  if (!collapsed) {\n    return fallback;\n  }\n  if (collapsed.length <= maxLength) {\n    return collapsed;\n  }\n  return `${collapsed.slice(0, maxLength).trimEnd()}...`;\n}\n\nfunction formatHistoryTimestamp(value: string): string {\n  const parsed = new Date(value);\n  if (Number.isNaN(parsed.getTime())) {\n    return value || 'Unknown time';\n  }\n\n  return new Intl.DateTimeFormat(undefined, {\n    month: 'short',\n    day: 'numeric',\n    hour: 'numeric',\n    minute: '2-digit',\n  }).format(parsed);\n}\n\nfunction inferHistoryAttachmentMediaType(mimeType?: string, fileName?: string): string {\n  const normalizedMimeType = (mimeType || '').trim().toLowerCase();\n  if (normalizedMimeType.startsWith('image/')) {\n    return 'screenshot';\n  }\n  if (normalizedMimeType.startsWith('video/')) {\n    return 'video';\n  }\n  if (normalizedMimeType.startsWith('audio/')) {\n    return 'audio';\n  }\n  if (normalizedMimeType.startsWith('text/')) {\n    return 'document';\n  }\n\n  const extension = (fileName || '').split('.').pop()?.toLowerCase() || '';\n  if (['md', 'txt', 'json', 'yaml', 'yml', 'xml', 'csv', 'pdf'].includes(extension)) {\n    return 'document';\n  }\n\n  return 'other';\n}\n\nfunction normalizeHistoryEntries(entries: OpenCodeProjectHistoryEntry[]): HistoryViewEntry[] {\n  return entries.map((entry) => ({\n    ...entry,\n    attachments: (entry.attachments || []).map((attachment) => ({\n      ...attachment,\n      filename: attachment.filename || attachment.name,\n      mediaType: attachment.mediaType || inferHistoryAttachmentMediaType(attachment.mimeType, attachment.filename || attachment.name),\n      relativePath: attachment.relativePath || attachment.path,\n    })),\n  }));\n}\n\nfunction historyAttachmentCountLabel(count: number): string {\n  return `${count} file${count === 1 ? '' : 's'}`;\n}\n\nfunction normalizeProjectHistory(raw: unknown): ProjectHistoryEntry[] {\n  if (!Array.isArray(raw)) {\n    return [];\n  }\n\n  const seen = new Set<string>();\n  const entries: ProjectHistoryEntry[] = [];\n\n  for (const item of raw) {\n    if (!item || typeof item !== 'object') {\n      continue;\n    }\n\n    const path = typeof item.path === 'string' ? item.path.trim() : '';\n    if (!path || seen.has(path)) {\n      continue;\n    }\n\n    seen.add(path);\n    entries.push({\n      path,\n      name:\n        typeof item.name === 'string' && item.name.trim().length > 0\n          ? item.name.trim()\n          : compactPathLabel(path),\n      version: typeof item.version === 'string' ? item.version.trim() : '',\n      lastOpenedAt: typeof item.lastOpenedAt === 'string' ? item.lastOpenedAt : '',\n    });\n  }\n\n  return entries\n    .sort((left, right) => right.lastOpenedAt.localeCompare(left.lastOpenedAt))\n    .slice(0, 10);\n}\n\nfunction upsertProjectHistory(previous: ProjectHistoryEntry[], entry: ProjectHistoryEntry): ProjectHistoryEntry[] {\n  return normalizeProjectHistory([entry, ...previous.filter((item) => item.path !== entry.path)]);\n}\n\nfunction normalizeOpenCodeLookupValue(value: string): string {\n  return value.trim().toLowerCase();\n}\n\nfunction formatOpenCodeModelSelection(\n  provider: OpenCodeAvailableProvider,\n  model: OpenCodeAvailableProvider['models'][number],\n): PreferredOpenCodeModel {\n  const providerLabel = provider.displayName || provider.id;\n  const modelLabel = model.displayName || model.id;\n\n  return {\n    value: `${provider.id}/${model.id}`,\n    providerLabel,\n    modelLabel,\n    fullLabel: `${providerLabel}: ${modelLabel}`,\n  };\n}\n\nfunction preferredOpenCodeModel(providers: OpenCodeAvailableProvider[]): PreferredOpenCodeModel | null {\n  for (const preference of OPENCODE_MODEL_PREFERENCE_ORDER) {\n    const provider = providers.find(\n      (item) => normalizeOpenCodeLookupValue(item.id) === normalizeOpenCodeLookupValue(preference.providerId),\n    );\n    if (!provider) {\n      continue;\n    }\n\n    for (const candidateModelId of preference.modelIds) {\n      const model = provider.models.find(\n        (item) => normalizeOpenCodeLookupValue(item.id) === normalizeOpenCodeLookupValue(candidateModelId),\n      );\n      if (model) {\n        return formatOpenCodeModelSelection(provider, model);\n      }\n    }\n  }\n\n  for (const provider of providers) {\n    const firstModel = provider.models[0];\n    if (firstModel) {\n      return formatOpenCodeModelSelection(provider, firstModel);\n    }\n  }\n\n  return null;\n}\n\nfunction inferProviderFromCustomModel(customModel: string): ProviderID | null {\n  const trimmed = customModel.trim();\n  const slashIndex = trimmed.indexOf('/');\n  if (slashIndex <= 0) {\n    return null;\n  }\n\n  const providerId = trimmed.slice(0, slashIndex) as ProviderID;\n  if (!providerDefinition(providerId)) {\n    return null;\n  }\n\n  return providerId;\n}\n\nfunction defaultModelOptionValue(dynamicOpenAIModels: OpenAIModelsResponseModel[] = []): string {\n  const firstGroup = modelCatalogGroups(dynamicOpenAIModels)[0];\n  if (!firstGroup || firstGroup.models.length === 0) {\n    return '';\n  }\n\n  const firstModel = firstGroup.models[0];\n  if (!firstModel) {\n    return '';\n  }\n  return encodeModelOptionValue(firstGroup.provider.id, firstModel.id);\n}\n\nfunction ideActionFor(actions: OpenCodeProjectIDEAction[], ide: OpenCodeIDE): OpenCodeProjectIDEAction | undefined {\n  return actions.find((item) => item.ide === ide);\n}\n\nfunction isUnsupportedNativePickerError(error: unknown): boolean {\n  if (error instanceof ApiError && error.status === 501) {\n    return true;\n  }\n\n  return toErrorMessage(error, '').toLowerCase().includes('only available on');\n}\n\nexport default function App() {\n  const topbarLogoSrc = `${import.meta.env.BASE_URL}logo-svg.svg`;\n  const [health, setHealth] = useState<OpenCodeHealthResponse | null>(null);\n  const [authStatus, setAuthStatus] = useState<OpenCodeAuthStatus | null>(null);\n  const [healthError, setHealthError] = useState<string | null>(null);\n  const [authError, setAuthError] = useState<string | null>(null);\n  const [isCheckingSetup, setIsCheckingSetup] = useState(false);\n\n  const [projectPath, setProjectPath] = useState('');\n  const [projectEnvelope, setProjectEnvelope] = useState<OpenCodeProjectEnvelope | null>(null);\n  const [projectError, setProjectError] = useState<string | null>(null);\n  const [isLoadingProject, setIsLoadingProject] = useState(false);\n  const [isPickingFolder, setIsPickingFolder] = useState(false);\n  const [folderPickerInfo, setFolderPickerInfo] = useState<string | null>(null);\n  const [folderPickerWarning, setFolderPickerWarning] = useState<string | null>(null);\n  const [instructionAttachments, setInstructionAttachments] = useState<OpenCodeInstructionPickedFile[]>([]);\n  const [isPickingInstructionFiles, setIsPickingInstructionFiles] = useState(false);\n  const [instructionPickerInfo, setInstructionPickerInfo] = useState<string | null>(null);\n  const [instructionPickerWarning, setInstructionPickerWarning] = useState<string | null>(null);\n  const [projectHistory, setProjectHistory] = useState<ProjectHistoryEntry[]>([]);\n  const [historyEntries, setHistoryEntries] = useState<HistoryViewEntry[]>([]);\n  const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n  const [historyError, setHistoryError] = useState<string | null>(null);\n  const [historyInfo, setHistoryInfo] = useState<string | null>(null);\n  const [optimisticHistoryEntry, setOptimisticHistoryEntry] = useState<HistoryViewEntry | null>(null);\n  const [ideStatus, setIdeStatus] = useState<OpenCodeProjectIDEStatusResponse | null>(null);\n  const [isLoadingIdeStatus, setIsLoadingIdeStatus] = useState(false);\n  const [ideStatusError, setIdeStatusError] = useState<string | null>(null);\n  const [ideOpenInfo, setIdeOpenInfo] = useState<string | null>(null);\n  const [ideOpenError, setIdeOpenError] = useState<string | null>(null);\n  const [openingIDE, setOpeningIDE] = useState<OpenCodeIDE | null>(null);\n  const [isRenamingProject, setIsRenamingProject] = useState(false);\n  const [renameValue, setRenameValue] = useState('');\n  const [renameError, setRenameError] = useState<string | null>(null);\n\n  const [settingsBundleID, setSettingsBundleID] = useState('');\n  const [settingsDisplayName, setSettingsDisplayName] = useState('');\n  const [settingsBuildNumber, setSettingsBuildNumber] = useState('');\n  const [settingsVersion, setSettingsVersion] = useState('');\n  const [isSavingSettings, setIsSavingSettings] = useState(false);\n  const [settingsInfo, setSettingsInfo] = useState<string | null>(null);\n  const [settingsError, setSettingsError] = useState<string | null>(null);\n  const [iconPrompt, setIconPrompt] = useState('');\n  const [isGeneratingIcon, setIsGeneratingIcon] = useState(false);\n  const [iconPreview, setIconPreview] = useState<string | null>(null);\n  const [iconInfo, setIconInfo] = useState<string | null>(null);\n  const [iconError, setIconError] = useState<string | null>(null);\n  const [iconReferenceImage, setIconReferenceImage] = useState<string | null>(null);\n\n  const [providerKeys, setProviderKeys] = useState<ProviderKeyState>(loadProviderKeys);\n  const [imageSource, setImageSourceRaw] = useState(() => validateImageSource(loadImageSource(), loadProviderKeys()));\n  const setImageSource = (value: string | ((prev: string) => string)) => {\n    setImageSourceRaw((prev) => {\n      const next = typeof value === 'function' ? value(prev) : value;\n      saveImageSource(next);\n      return next;\n    });\n  };\n  const [credentialMode, setCredentialModeRaw] = useState<CredentialMode>(loadCredentialMode);\n  const setCredentialMode = (mode: CredentialMode) => {\n    setCredentialModeRaw(mode);\n    saveCredentialMode(mode);\n  };\n  const [authProvider, setAuthProvider] = useState<AuthProviderID>('chatgpt');\n  const [isUpdatingAuthConnection, setIsUpdatingAuthConnection] = useState(false);\n  const [authConnectionInfo, setAuthConnectionInfo] = useState<string | null>(null);\n  const [authConnectionError, setAuthConnectionError] = useState<string | null>(null);\n\n  const [dynamicOpenAIModels, setDynamicOpenAIModels] = useState<OpenAIModelsResponseModel[]>([]);\n  const [isLoadingOpenAIModels, setIsLoadingOpenAIModels] = useState(false);\n  const [openAIModelsInfo, setOpenAIModelsInfo] = useState<string | null>(null);\n  const [openAIModelsWarning, setOpenAIModelsWarning] = useState<string | null>(null);\n  const [openCodeConfigProviders, setOpenCodeConfigProviders] = useState<OpenCodeAvailableProvider[]>([]);\n  const [selectedOpenCodeModel, setSelectedOpenCodeModel] = useState(OPENCODE_RECOMMENDED_MODEL_VALUE);\n  const [isLoadingOpenCodeModels, setIsLoadingOpenCodeModels] = useState(false);\n  const [openCodeModelsInfo, setOpenCodeModelsInfo] = useState<string | null>(null);\n  const [openCodeModelsWarning, setOpenCodeModelsWarning] = useState<string | null>(null);\n\n  const [selectedModelOption, setSelectedModelOption] = useState(() => defaultModelOptionValue());\n  const [customModel, setCustomModel] = useState('');\n  const [instructions, setInstructions] = useState(DEFAULT_BUILD_INSTRUCTIONS);\n  const [formError, setFormError] = useState<string | null>(null);\n\n  const [simpleAnswerText, setSimpleAnswerText] = useState('');\n  const [simpleCustomAnswer, setSimpleCustomAnswer] = useState('');\n  const [simpleSelectedOptions, setSimpleSelectedOptions] = useState<string[]>([]);\n\n  const [nestedTextById, setNestedTextById] = useState<Record<string, string>>({});\n  const [nestedCustomById, setNestedCustomById] = useState<Record<string, string>>({});\n  const [nestedSelectionsById, setNestedSelectionsById] = useState<Record<string, string[]>>({});\n\n  const consoleRef = useRef<HTMLDivElement | null>(null);\n  const [autoScrollEnabled, setAutoScrollEnabled] = useState(true);\n  const [isProjectPickerOpen, setIsProjectPickerOpen] = useState(false);\n  const [isContextOpen, setIsContextOpen] = useState(false);\n  const [isSettingsOpen, setIsSettingsOpen] = useState(false);\n\n  const refine = useRefineRun();\n  const previousRefineStatusRef = useRef(refine.status);\n\n  const activeProject = projectEnvelope?.project ?? null;\n  const targetRows = useMemo(() => targetSummary(activeProject), [activeProject]);\n  const [selectedTargets, setSelectedTargets] = useState<string[]>(loadSelectedTargets);\n  const modelGroups = useMemo(() => modelCatalogGroups(dynamicOpenAIModels), [dynamicOpenAIModels]);\n  const isAuthMode = credentialMode === 'auth';\n  const isApiKeyMode = credentialMode === 'api-key';\n  const isOpenCodeConfigMode = credentialMode === 'opencode-config';\n  const effectiveOpenAIAuthMode: OpenAIAuthMode = isAuthMode\n    ? 'codex-jwt'\n    : isOpenCodeConfigMode\n      ? 'opencode-config'\n      : 'api-key';\n  const isChatGPTConnected =\n    authStatus?.openaiCredentialType === 'oauth' || authStatus?.cachedGlowbomAuthMode === 'codex-jwt';\n  const authProviderConnected = authProvider === 'chatgpt' && isChatGPTConnected;\n\n  const visibleModelGroups = useMemo(() => {\n    if (isAuthMode) {\n      return modelGroups.filter((group) => group.provider.id === 'openai');\n    }\n    if (isApiKeyMode) {\n      return modelGroups;\n    }\n    return [];\n  }, [isApiKeyMode, isAuthMode, modelGroups]);\n\n  const allOptionValues = useMemo(\n    () =>\n      visibleModelGroups.flatMap((group) =>\n        group.models.map((model) => encodeModelOptionValue(group.provider.id, model.id)),\n      ),\n    [visibleModelGroups],\n  );\n\n  const decodedSelection = useMemo(() => decodeModelOptionValue(selectedModelOption), [selectedModelOption]);\n\n  const resolvedSelection = useMemo(() => {\n    if (!decodedSelection) {\n      return null;\n    }\n    return resolveRefineModel(decodedSelection.providerId, decodedSelection.modelId);\n  }, [decodedSelection]);\n\n  const selectedProvider = resolvedSelection?.providerId || null;\n  const selectedProviderDefinition = selectedProvider ? providerDefinition(selectedProvider) : undefined;\n  const selectedProviderKeyField = selectedProviderDefinition?.keyField;\n\n  const runLogs = useMemo(() => {\n    if (!refine.partialLine) {\n      return refine.logs;\n    }\n    return [...refine.logs, refine.partialLine];\n  }, [refine.logs, refine.partialLine]);\n\n  const setupStatusText = health?.healthy ? 'Backend connected' : health ? 'Backend unavailable' : 'Checking backend';\n  const shouldFetchOpenAIModels = isAuthMode && selectedProvider === 'openai';\n  const ideActions = useMemo(() => ideStatus?.actions ?? [], [ideStatus?.actions]);\n  const finderAction = useMemo(() => ideActionFor(ideActions, 'finder'), [ideActions]);\n  const xcodeAction = useMemo(() => ideActionFor(ideActions, 'xcode'), [ideActions]);\n  const androidStudioAction = useMemo(() => ideActionFor(ideActions, 'android-studio'), [ideActions]);\n  const vscodeAction = useMemo(() => ideActionFor(ideActions, 'vscode'), [ideActions]);\n  const selectedProjectPath = projectPath.trim();\n  const attachmentCount = instructionAttachments.length;\n  const recommendedOpenCodeModel = useMemo(\n    () => preferredOpenCodeModel(openCodeConfigProviders),\n    [openCodeConfigProviders],\n  );\n  const resolvedOpenCodeModelValue = useMemo(() => {\n    if (selectedOpenCodeModel === OPENCODE_RECOMMENDED_MODEL_VALUE) {\n      return recommendedOpenCodeModel?.value || '';\n    }\n\n    return selectedOpenCodeModel;\n  }, [recommendedOpenCodeModel, selectedOpenCodeModel]);\n  const selectedOpenCodeModelLabel = useMemo(() => {\n    if (selectedOpenCodeModel === OPENCODE_RECOMMENDED_MODEL_VALUE) {\n      return recommendedOpenCodeModel?.fullLabel || 'Recommended model';\n    }\n\n    for (const provider of openCodeConfigProviders) {\n      const matchingModel = provider.models.find((model) => `${provider.id}/${model.id}` === selectedOpenCodeModel);\n      if (matchingModel) {\n        return `${provider.displayName || provider.id}: ${matchingModel.displayName || matchingModel.id}`;\n      }\n    }\n\n    return selectedOpenCodeModel;\n  }, [openCodeConfigProviders, recommendedOpenCodeModel, selectedOpenCodeModel]);\n  const recommendedOpenCodeModelOptionLabel = recommendedOpenCodeModel\n    ? `Recommended · ${recommendedOpenCodeModel.modelLabel}`\n    : 'Recommended';\n  const systemNeedsAttention = Boolean(\n    healthError || authError || health?.healthy === false || authStatus?.serverRunning === false,\n  );\n  const systemStatusSummary = useMemo(() => {\n    if (healthError) {\n      return 'Health check failed';\n    }\n    if (!health && !authStatus && !authError) {\n      return 'Checking setup';\n    }\n    if (health?.healthy === false) {\n      return 'Backend needs attention';\n    }\n    if (authError) {\n      return 'Auth check failed';\n    }\n    if (authStatus?.serverRunning === false) {\n      return 'Agent server stopped';\n    }\n    return 'Local backend ready';\n  }, [authError, authStatus, health, healthError]);\n  const agentStatusSummary = useMemo(() => {\n    if (isOpenCodeConfigMode) {\n      return selectedOpenCodeModelLabel;\n    }\n\n    if (customModel.trim()) {\n      return customModel.trim();\n    }\n\n    if (resolvedSelection) {\n      return resolvedSelection.label;\n    }\n\n    if (isAuthMode) {\n      return isChatGPTConnected ? 'ChatGPT connected' : 'Connect ChatGPT';\n    }\n\n    return 'Choose a model';\n  }, [\n    customModel,\n    isAuthMode,\n    isChatGPTConnected,\n    isOpenCodeConfigMode,\n    selectedOpenCodeModelLabel,\n    resolvedSelection,\n  ]);\n  const projectButtonLabel = activeProject?.name || (selectedProjectPath ? compactPathLabel(selectedProjectPath) : 'Project');\n  const contextButtonLabel = attachmentCount > 0 ? `Context ${attachmentCount}` : 'Context';\n\n  const refreshProjectHistory = useCallback(\n    async (\n      pathOverride?: string,\n      options: {\n        silent?: boolean;\n        clearOptimisticOnSuccess?: boolean;\n      } = {},\n    ) => {\n      const trimmedPath = (pathOverride ?? projectPath).trim();\n      if (!trimmedPath) {\n        setHistoryEntries([]);\n        if (!options.silent) {\n          setHistoryError(null);\n          setIsLoadingHistory(false);\n        }\n        return false;\n      }\n\n      if (!options.silent) {\n        setIsLoadingHistory(true);\n        setHistoryError(null);\n      }\n\n      try {\n        const response = await openCodeApi.getProjectHistory(trimmedPath);\n        if (!response.success) {\n          throw new Error(response.error || 'Failed to load build history.');\n        }\n\n        setHistoryEntries(normalizeHistoryEntries(response.entries || []));\n        setHistoryError(null);\n        if (options.clearOptimisticOnSuccess) {\n          setOptimisticHistoryEntry(null);\n        }\n        return true;\n      } catch (error) {\n        if (!options.silent) {\n          setHistoryError(toErrorMessage(error, 'Failed to load build history.'));\n        }\n        return false;\n      } finally {\n        if (!options.silent) {\n          setIsLoadingHistory(false);\n        }\n      }\n    },\n    [projectPath],\n  );\n\n  useEffect(() => {\n    if (allOptionValues.length === 0) {\n      if (selectedModelOption !== '') {\n        setSelectedModelOption('');\n      }\n      return;\n    }\n\n    if (!selectedModelOption || !allOptionValues.includes(selectedModelOption)) {\n      setSelectedModelOption(allOptionValues[0] || '');\n    }\n  }, [allOptionValues, selectedModelOption]);\n\n  const refreshSetup = async () => {\n    setIsCheckingSetup(true);\n    setHealthError(null);\n    setAuthError(null);\n\n    try {\n      const healthResult = await openCodeApi.getHealth();\n      setHealth(healthResult);\n    } catch (error) {\n      setHealth(null);\n      setHealthError(toErrorMessage(error, 'Failed to check backend health.'));\n    }\n\n    try {\n      const authResult = await openCodeApi.getAuthStatus();\n      setAuthStatus(authResult);\n    } catch (error) {\n      setAuthStatus(null);\n      setAuthError(toErrorMessage(error, 'Failed to fetch auth status.'));\n    }\n\n    setIsCheckingSetup(false);\n  };\n\n  const refreshIDEStatus = async (path: string) => {\n    const trimmedPath = path.trim();\n    if (!trimmedPath) {\n      setIdeStatus(null);\n      setIdeStatusError(null);\n      return;\n    }\n\n    setIsLoadingIdeStatus(true);\n    setIdeStatusError(null);\n\n    try {\n      const response = await openCodeApi.getProjectIDEStatus(trimmedPath);\n      if (!response.success) {\n        throw new Error(response.error || 'Failed to inspect project structure.');\n      }\n      setIdeStatus(response);\n    } catch (error) {\n      setIdeStatus(null);\n      setIdeStatusError(toErrorMessage(error, 'Failed to inspect IDE project folders.'));\n    } finally {\n      setIsLoadingIdeStatus(false);\n    }\n  };\n\n  useEffect(() => {\n    try {\n      const raw = window.localStorage.getItem(PROJECT_HISTORY_STORAGE_KEY);\n      if (!raw) {\n        return;\n      }\n      const history = normalizeProjectHistory(JSON.parse(raw));\n      const lastProject = history[0];\n      setProjectHistory(history);\n      if (lastProject?.path) {\n        setProjectPath((previous) => previous.trim() || lastProject.path);\n        void loadProject(lastProject.path);\n      }\n    } catch {\n      setProjectHistory([]);\n    }\n  }, []);\n\n  useEffect(() => {\n    void refreshSetup();\n  }, []);\n\n  useEffect(() => {\n    const container = consoleRef.current;\n    if (!container || !autoScrollEnabled) {\n      return;\n    }\n\n    container.scrollTop = container.scrollHeight;\n  }, [autoScrollEnabled, runLogs, refine.pendingQuestion, refine.pendingPermission]);\n\n  useEffect(() => {\n    setSimpleAnswerText('');\n    setSimpleCustomAnswer('');\n    setSimpleSelectedOptions([]);\n    setNestedTextById({});\n    setNestedCustomById({});\n    setNestedSelectionsById({});\n  }, [refine.pendingQuestion?.id]);\n\n  useEffect(() => {\n    let cancelled = false;\n\n    if (!shouldFetchOpenAIModels) {\n      setDynamicOpenAIModels([]);\n      setOpenAIModelsInfo(null);\n      setOpenAIModelsWarning(null);\n      setIsLoadingOpenAIModels(false);\n      return;\n    }\n\n    if (!isChatGPTConnected) {\n      setDynamicOpenAIModels([]);\n      setOpenAIModelsInfo(null);\n      setOpenAIModelsWarning('Connect ChatGPT to load live OpenAI models.');\n      setIsLoadingOpenAIModels(false);\n      return;\n    }\n\n    setIsLoadingOpenAIModels(true);\n    setOpenAIModelsInfo(null);\n    setOpenAIModelsWarning(null);\n\n    void openCodeApi\n      .fetchOpenAIModels({\n        projectPath: projectPath.trim() || undefined,\n        openaiAuthMode: effectiveOpenAIAuthMode,\n      })\n      .then((response) => {\n        if (cancelled) {\n          return;\n        }\n\n        setDynamicOpenAIModels(response.models || []);\n        setOpenAIModelsInfo(`Loaded ${response.models.length} OpenAI models from your local backend.`);\n\n        if (response.debug?.usedFallbackAllowlist) {\n          setOpenAIModelsWarning('Dynamic model catalog returned fallback defaults. You can still continue.');\n        } else {\n          setOpenAIModelsWarning(null);\n        }\n      })\n      .catch((error) => {\n        if (cancelled) {\n          return;\n        }\n\n        setDynamicOpenAIModels([]);\n        setOpenAIModelsInfo(null);\n        setOpenAIModelsWarning(\n          `Could not load dynamic OpenAI models. Showing fallback defaults. ${toErrorMessage(error, '')}`.trim(),\n        );\n      })\n      .finally(() => {\n        if (!cancelled) {\n          setIsLoadingOpenAIModels(false);\n        }\n      });\n\n    return () => {\n      cancelled = true;\n    };\n  }, [\n    effectiveOpenAIAuthMode,\n    projectPath,\n    isChatGPTConnected,\n    shouldFetchOpenAIModels,\n  ]);\n\n  useEffect(() => {\n    let cancelled = false;\n\n    if (!isOpenCodeConfigMode) {\n      setOpenCodeConfigProviders([]);\n      setOpenCodeModelsInfo(null);\n      setOpenCodeModelsWarning(null);\n      setIsLoadingOpenCodeModels(false);\n      setSelectedOpenCodeModel(OPENCODE_RECOMMENDED_MODEL_VALUE);\n      return;\n    }\n\n    setIsLoadingOpenCodeModels(true);\n    setOpenCodeModelsInfo(null);\n    setOpenCodeModelsWarning(null);\n\n    void openCodeApi\n      .fetchOpenCodeAvailableModels({\n        projectPath: projectPath.trim() || undefined,\n        openaiAuthMode: effectiveOpenAIAuthMode,\n        openaiKey: providerKeys.openaiKey.trim() || undefined,\n        anthropicKey: providerKeys.anthropicKey.trim() || undefined,\n        geminiKey: providerKeys.geminiKey.trim() || undefined,\n        fireworksKey: providerKeys.fireworksKey.trim() || undefined,\n        openrouterKey: providerKeys.openrouterKey.trim() || undefined,\n        opencodeZenKey: providerKeys.opencodeZenKey.trim() || undefined,\n        xaiKey: providerKeys.xaiKey.trim() || undefined,\n      })\n      .then((response) => {\n        if (cancelled) {\n          return;\n        }\n\n        const providers = response.providers || [];\n        setOpenCodeConfigProviders(providers);\n        const modelCount = providers.reduce((sum, provider) => sum + provider.models.length, 0);\n        setOpenCodeModelsInfo(\n          `Loaded ${providers.length} provider${providers.length === 1 ? '' : 's'} and ${modelCount} model${modelCount === 1 ? '' : 's'} from OpenCode config.`,\n        );\n        if (modelCount === 0) {\n          setOpenCodeModelsWarning('OpenCode returned no models. Refresh Settings or choose another AI access mode.');\n        } else {\n          setOpenCodeModelsWarning(null);\n        }\n      })\n      .catch((error) => {\n        if (cancelled) {\n          return;\n        }\n\n        setOpenCodeConfigProviders([]);\n        setOpenCodeModelsInfo(null);\n        setOpenCodeModelsWarning(\n          `Could not load OpenCode provider catalog. Refresh Settings or choose another AI access mode. ${toErrorMessage(error, '')}`.trim(),\n        );\n      })\n      .finally(() => {\n        if (!cancelled) {\n          setIsLoadingOpenCodeModels(false);\n        }\n      });\n\n    return () => {\n      cancelled = true;\n    };\n  }, [\n    effectiveOpenAIAuthMode,\n    isOpenCodeConfigMode,\n    projectPath,\n    providerKeys.anthropicKey,\n    providerKeys.fireworksKey,\n    providerKeys.geminiKey,\n    providerKeys.openaiKey,\n    providerKeys.opencodeZenKey,\n    providerKeys.openrouterKey,\n    providerKeys.xaiKey,\n  ]);\n\n  useEffect(() => {\n    if (!isOpenCodeConfigMode) {\n      return;\n    }\n\n    if (selectedOpenCodeModel === OPENCODE_RECOMMENDED_MODEL_VALUE) {\n      return;\n    }\n\n    const exists = openCodeConfigProviders.some((provider) =>\n      provider.models.some((model) => `${provider.id}/${model.id}` === selectedOpenCodeModel),\n    );\n\n    if (!exists) {\n      setSelectedOpenCodeModel(OPENCODE_RECOMMENDED_MODEL_VALUE);\n    }\n  }, [isOpenCodeConfigMode, openCodeConfigProviders, selectedOpenCodeModel]);\n\n  useEffect(() => {\n    if (!activeProject) return;\n    const name = activeProject.name || '';\n    setSettingsBundleID(activeProject.bundleID || suggestBundleID(name));\n    setSettingsDisplayName(activeProject.displayName || name);\n    setSettingsBuildNumber(activeProject.buildNumber || '1');\n    setSettingsVersion(activeProject.version || '1.0');\n    setSettingsInfo(null);\n    setSettingsError(null);\n    setIconInfo(null);\n    setIconError(null);\n    setIconReferenceImage(null);\n\n    // Load existing icon\n    const trimmedPath = projectPath.trim();\n    if (trimmedPath) {\n      openCodeApi.getProjectIcon(trimmedPath).then((result) => {\n        setIconPreview(result.exists && result.image ? result.image : null);\n      }).catch(() => {\n        setIconPreview(null);\n      });\n    } else {\n      setIconPreview(null);\n    }\n  }, [activeProject, projectPath]);\n\n  const toggleTarget = useCallback((targetId: string) => {\n    setSelectedTargets((prev) => {\n      if (prev.includes(targetId) && prev.length === 1) return prev;\n      const next = prev.includes(targetId)\n        ? prev.filter((id) => id !== targetId)\n        : [...prev, targetId];\n      saveSelectedTargets(next);\n      return next;\n    });\n  }, []);\n\n  useEffect(() => {\n    if (!isProjectPickerOpen || refine.isRunning || !activeProject || !selectedProjectPath) {\n      return;\n    }\n\n    void refreshProjectHistory(selectedProjectPath);\n  }, [activeProject, isProjectPickerOpen, refreshProjectHistory, refine.isRunning, selectedProjectPath]);\n\n  useEffect(() => {\n    const previousStatus = previousRefineStatusRef.current;\n    previousRefineStatusRef.current = refine.status;\n\n    if (previousStatus !== 'running' || refine.status === 'running') {\n      return;\n    }\n\n    setOptimisticHistoryEntry((previous) => {\n      if (!previous) {\n        return previous;\n      }\n\n      return {\n        ...previous,\n        status: refine.status as OpenCodeHistoryStatus,\n        outputSummary: refine.summary || previous.outputSummary,\n      };\n    });\n    if (!selectedProjectPath) {\n      return;\n    }\n\n    void refreshProjectHistory(selectedProjectPath, { clearOptimisticOnSuccess: true });\n  }, [refine.status, refine.summary, refreshProjectHistory, selectedProjectPath]);\n\n  const updateProviderKey = (field: keyof ProviderKeyState, value: string) => {\n    setProviderKeys((previous) => {\n      const next = { ...previous, [field]: value };\n      saveProviderKeys(next);\n      return next;\n    });\n\n    // Clear image source if the key it depends on was removed.\n    if (!value.trim()) {\n      setImageSource((previous) => {\n        if (field === 'openaiKey' && previous.includes('gpt-image')) return '';\n        if (field === 'geminiKey' && previous.includes('Nano Banana')) return '';\n        if (field === 'xaiKey' && previous.includes('Grok')) return '';\n        return previous;\n      });\n    }\n  };\n\n  const toggleProjectPicker = () => {\n    setIsProjectPickerOpen((previous) => {\n      const next = !previous;\n      if (next) {\n        setIsContextOpen(false);\n        setIsSettingsOpen(false);\n      }\n      return next;\n    });\n  };\n\n  const toggleContextPanel = () => {\n    setIsContextOpen((previous) => {\n      const next = !previous;\n      if (next) {\n        setIsProjectPickerOpen(false);\n        setIsSettingsOpen(false);\n      }\n      return next;\n    });\n  };\n\n  const toggleSettingsPanel = () => {\n    setIsSettingsOpen((previous) => {\n      const next = !previous;\n      if (next) {\n        setIsProjectPickerOpen(false);\n        setIsContextOpen(false);\n      }\n      return next;\n    });\n  };\n\n  const clearProjectSelection = () => {\n    setProjectPath('');\n    setProjectEnvelope(null);\n    setProjectError(null);\n    setFolderPickerInfo(null);\n    setFolderPickerWarning(null);\n    setIdeStatus(null);\n    setIdeStatusError(null);\n    setIdeOpenInfo(null);\n    setIdeOpenError(null);\n    setHistoryEntries([]);\n    setHistoryError(null);\n    setHistoryInfo(null);\n    setOptimisticHistoryEntry(null);\n    setIsProjectPickerOpen(false);\n  };\n\n  const onConsoleScroll = () => {\n    const element = consoleRef.current;\n    if (!element) {\n      return;\n    }\n\n    const distanceFromBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n    setAutoScrollEnabled(distanceFromBottom < 24);\n  };\n\n  const openFolderPicker = async () => {\n    setFolderPickerInfo(null);\n    setFolderPickerWarning(null);\n    setIsPickingFolder(true);\n\n    try {\n      const response = await openCodeApi.pickProjectFolder();\n\n      if (response.success && response.path) {\n        setProjectPath(response.path);\n        setIsPickingFolder(false);\n        const projectLoaded = await loadProject(response.path);\n        if (projectLoaded) {\n          setFolderPickerInfo('Project folder loaded locally.');\n        }\n        return;\n      }\n\n      if (response.success && response.canceled) {\n        setFolderPickerInfo('Folder selection canceled.');\n        return;\n      }\n\n      const apiMessage = (response.error || '').trim();\n      if (apiMessage) {\n        if (apiMessage.toLowerCase().includes('only available on')) {\n          setFolderPickerWarning('This built-in folder picker is not available on this platform. Paste the project path manually.');\n        } else {\n          setFolderPickerWarning(`${apiMessage} Paste the project path manually if needed.`);\n        }\n        return;\n      }\n    } catch (error) {\n      if (isUnsupportedNativePickerError(error)) {\n        setFolderPickerWarning('This built-in folder picker is not available on this platform. Paste the project path manually.');\n        return;\n      }\n\n      const message = toErrorMessage(error, 'unknown error').toLowerCase();\n      if (message.includes('404') || message.includes('not found')) {\n        setFolderPickerWarning(\n          'Native folder picker API is unavailable. Restart the backend from latest code, then try again.',\n        );\n      } else {\n        setFolderPickerWarning(\n          `Native folder picker unavailable: ${toErrorMessage(error, 'unknown error')}. Paste the project path manually.`,\n        );\n      }\n      return;\n    } finally {\n      setIsPickingFolder(false);\n    }\n  };\n\n  const pickInstructionFiles = async () => {\n    setInstructionPickerInfo(null);\n    setInstructionPickerWarning(null);\n    setIsPickingInstructionFiles(true);\n\n    try {\n      const response = await openCodeApi.pickInstructionFiles();\n      if (response.success && response.canceled) {\n        setInstructionPickerInfo('Attachment selection canceled.');\n        return;\n      }\n\n      if (!response.success) {\n        throw new Error(response.error || 'Failed to open local file picker.');\n      }\n\n      const pickedFiles = (response.files || []).filter((file) => file.path.trim().length > 0);\n      if (pickedFiles.length === 0) {\n        setInstructionPickerWarning('No files were selected.');\n        return;\n      }\n\n      const oversizeFiles = pickedFiles.filter((file) => file.sizeBytes > MAX_INSTRUCTION_ATTACHMENT_BYTES);\n      if (oversizeFiles.length > 0) {\n        const first = oversizeFiles[0];\n        if (first) {\n          setInstructionPickerWarning(\n            `\"${first.name}\" exceeds the 40MB limit (${formatAttachmentSize(first.sizeBytes)}). Remove it and try again.`,\n          );\n        }\n      }\n\n      setInstructionAttachments((previous) => {\n        const merged = [...previous];\n        for (const file of pickedFiles) {\n          const exists = merged.some((entry) => entry.path === file.path);\n          if (!exists) {\n            merged.push(file);\n          }\n        }\n        return merged;\n      });\n\n      const addedCount = pickedFiles.length;\n      setInstructionPickerInfo(`Attached ${addedCount} local file${addedCount === 1 ? '' : 's'} for this build.`);\n    } catch (error) {\n      if (isUnsupportedNativePickerError(error)) {\n        setInstructionPickerWarning('This built-in file picker is not available on this platform.');\n        return;\n      }\n\n      const message = toErrorMessage(error, 'unknown error').toLowerCase();\n      if (message.includes('404') || message.includes('not found')) {\n        setInstructionPickerWarning(\n          'Instruction file picker API is unavailable. Restart the backend from latest code, then try again.',\n        );\n      } else {\n        setInstructionPickerWarning(\n          `Could not open local file picker: ${toErrorMessage(error, 'unknown error')}.`,\n        );\n      }\n    } finally {\n      setIsPickingInstructionFiles(false);\n    }\n  };\n\n  const loadProject = async (pathOverride?: string) => {\n    const trimmedPath = (pathOverride ?? projectPath).trim();\n    if (!trimmedPath) {\n      setProjectError('Enter a local Glowbom project path first.');\n      return false;\n    }\n\n    setProjectError(null);\n    setFolderPickerInfo(null);\n    setProjectEnvelope(null);\n    setIdeStatus(null);\n    setIdeStatusError(null);\n    setIdeOpenInfo(null);\n    setIdeOpenError(null);\n    setHistoryEntries([]);\n    setHistoryError(null);\n    setHistoryInfo(null);\n    setOptimisticHistoryEntry(null);\n    setIsLoadingProject(true);\n\n    try {\n      const envelope = await openCodeApi.getProject(trimmedPath);\n      if (!envelope.success || !envelope.project) {\n        throw new Error(envelope.error || 'The provided path is not a valid Glowbom project.');\n      }\n      setProjectPath(trimmedPath);\n      setProjectEnvelope(envelope);\n      setProjectError(null);\n      setProjectHistory((previous) => {\n        const next = upsertProjectHistory(previous, {\n          path: trimmedPath,\n          name: envelope.project?.name?.trim() || compactPathLabel(trimmedPath),\n          version: envelope.project?.version?.trim() || '',\n          lastOpenedAt: new Date().toISOString(),\n        });\n        try {\n          window.localStorage.setItem(PROJECT_HISTORY_STORAGE_KEY, JSON.stringify(next));\n        } catch {}\n        return next;\n      });\n      setIsProjectPickerOpen(false);\n      void refreshProjectHistory(trimmedPath, { silent: true });\n      await refreshIDEStatus(trimmedPath);\n      return true;\n    } catch (error) {\n      setProjectError(toErrorMessage(error, 'Failed to load project.'));\n      return false;\n    } finally {\n      setIsLoadingProject(false);\n    }\n  };\n\n  const handleRenameProject = async (newName: string) => {\n    const trimmed = newName.trim();\n    if (!trimmed) {\n      setRenameError('Name cannot be empty.');\n      return;\n    }\n    const trimmedPath = projectPath.trim();\n    if (!trimmedPath) return;\n\n    setRenameError(null);\n    try {\n      const result = await openCodeApi.renameProject(trimmedPath, trimmed);\n      if (result.success && result.project) {\n        setProjectEnvelope((prev) =>\n          prev ? { ...prev, project: result.project } : prev\n        );\n        // Update project history entry name\n        setProjectHistory((prev) =>\n          prev.map((entry) =>\n            entry.path === trimmedPath ? { ...entry, name: trimmed } : entry\n          )\n        );\n        // Auto-suggest display name and bundle ID when project name changes\n        setSettingsDisplayName((prev) => prev ? prev : trimmed);\n        setSettingsBundleID((prev) => prev ? prev : suggestBundleID(trimmed));\n      } else {\n        setRenameError(result.error || 'Failed to rename project.');\n      }\n    } catch (error) {\n      setRenameError(toErrorMessage(error, 'Failed to rename project.'));\n    } finally {\n      setIsRenamingProject(false);\n    }\n  };\n\n  const handleSaveProjectSettings = async () => {\n    const trimmedPath = projectPath.trim();\n    if (!trimmedPath) return;\n\n    setIsSavingSettings(true);\n    setSettingsInfo(null);\n    setSettingsError(null);\n\n    try {\n      const result = await openCodeApi.updateProjectSettings({\n        path: trimmedPath,\n        bundleID: settingsBundleID,\n        displayName: settingsDisplayName,\n        buildNumber: settingsBuildNumber,\n        version: settingsVersion,\n      });\n      if (result.success && result.project) {\n        setProjectEnvelope((prev) =>\n          prev ? { ...prev, project: result.project } : prev\n        );\n        setSettingsInfo('Settings saved.');\n      } else {\n        setSettingsError(result.error || 'Failed to save settings.');\n      }\n    } catch (error) {\n      setSettingsError(toErrorMessage(error, 'Failed to save settings.'));\n    } finally {\n      setIsSavingSettings(false);\n    }\n  };\n\n  const handleGenerateIcon = async () => {\n    const trimmedPath = projectPath.trim();\n    const trimmedPrompt = iconPrompt.trim();\n    if (!trimmedPath || !trimmedPrompt) {\n      setIconError('Enter an icon prompt.');\n      return;\n    }\n\n    setIsGeneratingIcon(true);\n    setIconInfo(null);\n    setIconError(null);\n    setIconPreview(null);\n\n    try {\n      const result = await openCodeApi.generateIcon({\n        path: trimmedPath,\n        prompt: trimmedPrompt,\n        imageSource: imageSource || undefined,\n        openaiKey: providerKeys.openaiKey.trim() || undefined,\n        geminiKey: providerKeys.geminiKey.trim() || undefined,\n        xaiKey: providerKeys.xaiKey.trim() || undefined,\n        referenceImage: iconReferenceImage || undefined,\n      });\n      if (result.success) {\n        setIconPreview(result.image || null);\n        setIconInfo(`Icon generated${result.sourceService ? ` via ${result.sourceService}` : ''}.`);\n      } else {\n        setIconError(result.error || 'Failed to generate icon.');\n      }\n    } catch (error) {\n      setIconError(toErrorMessage(error, 'Failed to generate icon.'));\n    } finally {\n      setIsGeneratingIcon(false);\n    }\n  };\n\n  const openProjectInIDE = async (ide: OpenCodeIDE) => {\n    const trimmedPath = projectPath.trim();\n    if (!trimmedPath) {\n      setIdeOpenError('Load a project first, then choose an IDE.');\n      return;\n    }\n\n    setOpeningIDE(ide);\n    setIdeOpenInfo(null);\n    setIdeOpenError(null);\n\n    try {\n      const response = await openCodeApi.openProject({\n        path: trimmedPath,\n        ide,\n      });\n      if (!response.success) {\n        throw new Error(response.error || 'Failed to open project.');\n      }\n\n      const action = ideActionFor(ideActions, ide);\n      setIdeOpenInfo(`${action?.label || 'Open action'} triggered locally.`);\n    } catch (error) {\n      setIdeOpenError(toErrorMessage(error, 'Failed to open project locally.'));\n    } finally {\n      setOpeningIDE(null);\n    }\n  };\n\n  const connectAuthProvider = async () => {\n    setAuthConnectionInfo(null);\n    setAuthConnectionError(null);\n\n    if (authProvider !== 'chatgpt') {\n      setAuthConnectionError('Selected auth provider is not supported yet.');\n      return;\n    }\n\n    setIsUpdatingAuthConnection(true);\n    let popupWindow: Window | null = null;\n    try {\n      popupWindow = window.open('', 'glowby-chatgpt-oauth', 'popup,width=560,height=760');\n      if (!popupWindow) {\n        throw new Error('Popup blocked. Allow popups for this site and try Connect again.');\n      }\n\n      const startResponse = await openCodeApi.startOpenAIOAuth({\n        projectPath: projectPath.trim() || undefined,\n      });\n      if (!startResponse.success || !startResponse.authorizationURL) {\n        throw new Error(startResponse.error || 'Failed to start ChatGPT login flow.');\n      }\n\n      popupWindow.location.href = startResponse.authorizationURL;\n      setAuthConnectionInfo('ChatGPT login opened in a popup. Complete login to finish connection.');\n\n      const timeoutAt = Date.now() + 5 * 60 * 1000;\n      while (Date.now() < timeoutAt) {\n        const oauthStatus = await openCodeApi.getOpenAIOAuthStatus(startResponse.state);\n        if (oauthStatus.phase === 'succeeded') {\n          setAuthStatus(oauthStatus.status);\n          setAuthConnectionInfo('ChatGPT account connected. You can build with your connected account now.');\n          try {\n            popupWindow.close();\n          } catch {}\n          return;\n        }\n        if (oauthStatus.phase === 'failed') {\n          throw new Error(oauthStatus.error || 'ChatGPT login failed.');\n        }\n\n        await new Promise<void>((resolve) => {\n          window.setTimeout(resolve, 1000);\n        });\n      }\n\n      throw new Error('Timed out waiting for ChatGPT login completion. Try Connect again.');\n    } catch (error) {\n      setAuthConnectionError(toErrorMessage(error, 'Failed to connect ChatGPT account.'));\n      if (popupWindow && !popupWindow.closed) {\n        try {\n          popupWindow.close();\n        } catch {}\n      }\n    } finally {\n      setIsUpdatingAuthConnection(false);\n    }\n  };\n\n  const disconnectAuthProvider = async () => {\n    setAuthConnectionInfo(null);\n    setAuthConnectionError(null);\n\n    setIsUpdatingAuthConnection(true);\n    try {\n      const response = await openCodeApi.disconnectOpenAIAuth({\n        projectPath: projectPath.trim() || undefined,\n      });\n      if (!response.success) {\n        throw new Error(response.error || 'Failed to disconnect auth provider.');\n      }\n\n      setAuthStatus(response.status);\n      setAuthConnectionInfo('ChatGPT account disconnected for this local OpenCode runtime.');\n    } catch (error) {\n      setAuthConnectionError(toErrorMessage(error, 'Failed to disconnect ChatGPT account.'));\n    } finally {\n      setIsUpdatingAuthConnection(false);\n    }\n  };\n\n  const restoreHistoryEntry = (entry: HistoryViewEntry) => {\n    setInstructions(entry.instructions);\n    setInstructionAttachments(entry.attachments);\n    setInstructionPickerInfo(null);\n    setInstructionPickerWarning(null);\n    setFormError(null);\n    setHistoryInfo(\n      `Restored ${formatHistoryTimestamp(entry.timestamp)} with ${historyAttachmentCountLabel(entry.attachments.length)}.`,\n    );\n    if ((entry.missingAttachmentCount || 0) > 0) {\n      setHistoryError(\n        `${entry.missingAttachmentCount} archived file${entry.missingAttachmentCount === 1 ? ' is' : 's are'} missing, so only the available context was restored.`,\n      );\n    } else {\n      setHistoryError(null);\n    }\n    setIsProjectPickerOpen(false);\n  };\n\n  const startRefine = async () => {\n    setFormError(null);\n\n    let hasLoadedProject = Boolean(activeProject);\n\n    if (!hasLoadedProject) {\n      if (!selectedProjectPath) {\n        setFormError('Choose a local project folder first.');\n        return;\n      }\n\n      const projectLoaded = await loadProject();\n      if (!projectLoaded) {\n        return;\n      }\n      hasLoadedProject = true;\n    }\n\n    if (!hasLoadedProject) {\n      setFormError('Choose a valid Glowbom project folder before building.');\n      return;\n    }\n\n    const finalInstructions = instructions.trim() || DEFAULT_BUILD_INSTRUCTIONS;\n\n    let targetGuidance = '';\n    const isAllSelected = selectedTargets.length === ALL_TARGET_IDS.length;\n\n    if (!isAllSelected && selectedTargets.length > 0) {\n      const selected = BUILD_TARGETS.filter((t) => selectedTargets.includes(t.id));\n      const deselected = BUILD_TARGETS.filter((t) => !selectedTargets.includes(t.id));\n      const selectedLabels = selected.map((t) => `${t.label} (${t.dir}/)`).join(', ');\n      const deselectedDirs = deselected.map((t) => `${t.dir}/`).join(', ');\n\n      if (selected.length === 1) {\n        targetGuidance = `\\n\\nIMPORTANT: Please only work on ${selectedLabels}. Do not modify any other directories (${deselectedDirs}).`;\n      } else {\n        targetGuidance = `\\n\\nIMPORTANT: Please only work on ${selectedLabels}. Do not modify other directories (${deselectedDirs}).`;\n      }\n    }\n\n    const finalInstructionsWithTargets = finalInstructions + targetGuidance;\n\n    if (healthError || health?.healthy === false) {\n      setFormError('Glowby cannot reach the local backend right now. Open Settings, refresh the checks, and try again.');\n      setIsSettingsOpen(true);\n      return;\n    }\n\n    const oversizedAttachment = instructionAttachments.find(\n      (attachment) => attachment.sizeBytes > MAX_INSTRUCTION_ATTACHMENT_BYTES,\n    );\n    if (oversizedAttachment) {\n      setFormError(\n        `Attachment \"${oversizedAttachment.name}\" exceeds 40MB (${formatAttachmentSize(oversizedAttachment.sizeBytes)}). Remove it to continue.`,\n      );\n      return;\n    }\n\n    const instructionAttachmentPaths = instructionAttachments\n      .map((attachment) => attachment.path.trim())\n      .filter((value, index, values) => value.length > 0 && values.indexOf(value) === index);\n\n    let modelValue = '';\n    if (isOpenCodeConfigMode) {\n      modelValue = resolvedOpenCodeModelValue;\n      if (!modelValue) {\n        setFormError('No OpenCode model is available right now. Open Settings and refresh the model list.');\n        setIsSettingsOpen(true);\n        return;\n      }\n    } else {\n      const customModelTrimmed = customModel.trim();\n      const customModelProvider = inferProviderFromCustomModel(customModelTrimmed);\n      const providerForValidation = customModelProvider || selectedProvider;\n\n      if (!providerForValidation && !customModelTrimmed) {\n        setFormError('Select an AI model before building.');\n        setIsSettingsOpen(true);\n        return;\n      }\n\n      if (isAuthMode) {\n        if (customModelProvider && customModelProvider !== 'openai') {\n          setFormError('Auth provider mode currently supports OpenAI models only.');\n          setIsSettingsOpen(true);\n          return;\n        }\n        if (!isChatGPTConnected) {\n          setFormError('Connect ChatGPT first to build with your connected account.');\n          setIsSettingsOpen(true);\n          return;\n        }\n      }\n\n      if (isApiKeyMode && providerForValidation) {\n        const providerDef = providerDefinition(providerForValidation);\n        if (providerDef?.requiresKey && providerDef.keyField) {\n          const requiredValue = providerKeys[providerDef.keyField].trim();\n          if (!requiredValue) {\n            if (providerDef.id === 'openai') {\n              setFormError('OpenAI model selected. Add your OpenAI API key before building.');\n            } else {\n              setFormError(`${providerDef.label} model selected. Add ${providerDef.keyLabel || 'the provider API key'}.`);\n            }\n            setIsSettingsOpen(true);\n            return;\n          }\n        }\n      }\n\n      modelValue = customModelTrimmed || resolvedSelection?.value || '';\n      if (!modelValue) {\n        setFormError('Model is required.');\n        setIsSettingsOpen(true);\n        return;\n      }\n    }\n\n    setHistoryInfo(null);\n    setHistoryError(null);\n    setIsProjectPickerOpen(false);\n    setIsContextOpen(false);\n    setIsSettingsOpen(false);\n    setOptimisticHistoryEntry({\n      id: `optimistic-${Date.now()}`,\n      timestamp: new Date().toISOString(),\n      instructions: finalInstructions,\n      taskType: 'refine',\n      status: 'running',\n      outputSummary: '',\n      folderName: '',\n      missingAttachmentCount: 0,\n      attachments: instructionAttachments.map((attachment) => ({\n        path: attachment.path,\n        name: attachment.name,\n        filename: attachment.name,\n        sizeBytes: attachment.sizeBytes,\n        mimeType: attachment.mimeType,\n        mediaType: inferHistoryAttachmentMediaType(attachment.mimeType, attachment.name),\n        relativePath: attachment.path,\n      })),\n      optimistic: true,\n    });\n\n    void refine.startRefine({\n      projectPath: selectedProjectPath,\n      instructions: finalInstructionsWithTargets,\n      persistCurrentInstructionsToHistory: true,\n      instructionAttachmentPaths,\n      model: modelValue || undefined,\n      openaiAuthMode: effectiveOpenAIAuthMode,\n      providerKeys,\n      imageSource: imageSource || undefined,\n    });\n  };\n\n  const submitQuestion = async () => {\n    const question = refine.pendingQuestion;\n    if (!question) {\n      return;\n    }\n\n    if (question.questions.length === 0) {\n      const custom = simpleCustomAnswer.trim();\n      const freeText = simpleAnswerText.trim();\n      const selected = simpleSelectedOptions;\n\n      const response = custom ? [custom] : selected.length > 0 ? selected : freeText ? [freeText] : [];\n      const answer = response.join(', ');\n\n      await refine.submitQuestion({\n        answer,\n        answers: response.length > 0 ? [response] : undefined,\n      });\n      return;\n    }\n\n    const answers: string[][] = [];\n    const answerByQuestionID: Record<string, string[]> = {};\n    const summaryParts: string[] = [];\n\n    for (const item of question.questions) {\n      const custom = (nestedCustomById[item.id] || '').trim();\n      const selected = nestedSelectionsById[item.id] || [];\n      const freeText = (nestedTextById[item.id] || '').trim();\n\n      const response = custom ? [custom] : selected.length > 0 ? selected : freeText ? [freeText] : [];\n      answers.push(response);\n\n      if (response.length > 0) {\n        answerByQuestionID[item.id] = response;\n      }\n\n      summaryParts.push(`Q: ${item.prompt}\\nA: ${response.join(', ')}`);\n    }\n\n    await refine.submitQuestion({\n      answer: summaryParts.join('\\n\\n').trim(),\n      answers,\n      answerByQuestionID: Object.keys(answerByQuestionID).length > 0 ? answerByQuestionID : undefined,\n    });\n  };\n\n  const renderQuestionItem = (item: OpenCodeQuestionItem) => {\n    const multi = isMultiSelect(item.prompt, item.inputType);\n    const selected = nestedSelectionsById[item.id] || [];\n\n    return (\n      <div className=\"question-item\" key={item.id}>\n        <p className=\"question-item-title\">{item.prompt}</p>\n\n        {item.options.length > 0 ? (\n          <div className=\"option-list\">\n            {item.options.map((option) => {\n              const isSelected = selected.includes(option.label);\n\n              return (\n                <button\n                  className={`option-button ${isSelected ? 'selected' : ''}`}\n                  key={option.id || option.label}\n                  onClick={() => {\n                    setNestedSelectionsById((previous) => ({\n                      ...previous,\n                      [item.id]: toggleSelection(previous[item.id] || [], option.label, multi),\n                    }));\n                  }}\n                  type=\"button\"\n                >\n                  <span className=\"option-button-label\">{option.label}</span>\n                  {option.description ? <span className=\"option-button-description\">{option.description}</span> : null}\n                </button>\n              );\n            })}\n          </div>\n        ) : null}\n\n        <textarea\n          className=\"input\"\n          onChange={(event) => {\n            setNestedTextById((previous) => ({\n              ...previous,\n              [item.id]: event.target.value,\n            }));\n          }}\n          placeholder=\"Answer (optional)\"\n          rows={2}\n          value={nestedTextById[item.id] || ''}\n        />\n\n        <input\n          className=\"input\"\n          onChange={(event) => {\n            setNestedCustomById((previous) => ({\n              ...previous,\n              [item.id]: event.target.value,\n            }));\n          }}\n          placeholder=\"Custom response override (optional)\"\n          type=\"text\"\n          value={nestedCustomById[item.id] || ''}\n        />\n      </div>\n    );\n  };\n\n  const renderConsoleLine = (line: string, index: number, isPartial: boolean) => {\n    const normalized = line || ' ';\n    const heading = parseConsoleHeading(normalized);\n    const sharedClassName = `console-line${isPartial ? ' partial' : ''}`;\n\n    if (heading) {\n      return (\n        <p className={`${sharedClassName} console-heading heading-${heading.level}`} key={`${index}-${line}`}>\n          {heading.text}\n        </p>\n      );\n    }\n\n    if (lineLooksLikeMarkdown(normalized)) {\n      const markdownHTML = parseConsoleMarkdown(normalized);\n      if (markdownHTML) {\n        return (\n          <p\n            className={`${sharedClassName} console-markdown`}\n            dangerouslySetInnerHTML={{ __html: markdownHTML || '&nbsp;' }}\n            key={`${index}-${line}`}\n          />\n        );\n      }\n    }\n\n    return (\n      <pre className={sharedClassName} key={`${index}-${line}`}>\n        {normalized}\n      </pre>\n    );\n  };\n\n  const renderHistoryEntryCard = (entry: HistoryViewEntry) => {\n    const attachments = entry.attachments || [];\n    const missingAttachmentCount = entry.missingAttachmentCount || 0;\n    const rawStatus = (entry.status || 'failed').toLowerCase();\n    const statusKey = rawStatus in RUN_STATUS_LABEL ? rawStatus : 'idle';\n    const statusLabel = RUN_STATUS_LABEL[statusKey] || 'Saved';\n\n    const itemContent = (\n      <>\n        <div className=\"run-history-item-head\">\n          <div className=\"run-history-item-title\">\n            {entry.optimistic ? (\n              <span aria-hidden=\"true\" className=\"history-spinner\" />\n            ) : (\n              <span>{formatHistoryTimestamp(entry.timestamp)}</span>\n            )}\n          </div>\n          <span className={`run-status status-${statusKey}`}>{statusLabel}</span>\n        </div>\n\n        <p className=\"run-history-item-instructions\">\n          {compactHistoryText(\n            entry.instructions,\n            180,\n            entry.attachments.length > 0 ? 'Saved files only.' : 'No saved instructions.',\n          )}\n        </p>\n\n        {entry.outputSummary ? (\n          <p className=\"run-history-item-summary\">{compactHistoryText(entry.outputSummary, 220, '')}</p>\n        ) : null}\n\n        <div className=\"run-history-item-meta\">\n          <span>{historyAttachmentCountLabel(attachments.length)}</span>\n          {missingAttachmentCount > 0 ? (\n            <span>\n              {missingAttachmentCount} missing file{missingAttachmentCount === 1 ? '' : 's'}\n            </span>\n          ) : null}\n          {!entry.optimistic && entry.folderName ? <span>{entry.folderName}</span> : null}\n        </div>\n\n        {attachments.length > 0 ? (\n          <div className=\"run-history-item-attachments\">\n            {attachments.slice(0, 3).map((attachment) => (\n              <span className=\"history-attachment-chip\" key={`${entry.id}-${attachment.path}`}>\n                {attachment.name}\n              </span>\n            ))}\n            {attachments.length > 3 ? (\n              <span className=\"history-attachment-chip\">+{attachments.length - 3} more</span>\n            ) : null}\n          </div>\n        ) : null}\n      </>\n    );\n\n    if (entry.optimistic) {\n      return (\n        <div className=\"run-history-item optimistic\" key={entry.id}>\n          {itemContent}\n        </div>\n      );\n    }\n\n    return (\n      <button\n        className=\"run-history-item\"\n        key={entry.id || `${entry.folderName}-${entry.timestamp}`}\n        onClick={() => restoreHistoryEntry(entry)}\n        type=\"button\"\n      >\n        {itemContent}\n      </button>\n    );\n  };\n\n  const renderProjectLaunchButton = (\n    ide: OpenCodeIDE,\n    label: string,\n    action: OpenCodeProjectIDEAction | undefined,\n  ) => {\n    const isOpening = openingIDE === ide;\n    const isDisabled = !action?.available || openingIDE !== null;\n    const title = action?.available ? `Open in ${label}` : `${label} unavailable`;\n\n    return (\n      <button\n        aria-label={isOpening ? `Opening in ${label}` : title}\n        className={`project-launch-button ${isOpening ? 'opening' : ''}`}\n        disabled={isDisabled}\n        key={ide}\n        onClick={() => {\n          void openProjectInIDE(ide);\n        }}\n        title={title}\n        type=\"button\"\n      >\n        {isOpening ? <span aria-hidden=\"true\" className=\"history-spinner toolbar-spinner\" /> : <IDEQuickActionIcon ide={ide} />}\n        <span className=\"sr-only\">{label}</span>\n      </button>\n    );\n  };\n\n  return (\n    <div className=\"app-shell\">\n      <header className=\"topbar\">\n        <div className=\"topbar-inner\">\n          <a className=\"topbar-logo\" href=\"https://glowbom.com\" rel=\"noreferrer\" target=\"_blank\">\n            <img alt=\"Glowbom\" src={topbarLogoSrc} />\n          </a>\n          <nav className=\"topbar-links\">\n            <a href=\"https://glowbom.com/glowby/\" rel=\"noreferrer\" target=\"_blank\">\n              Glowby\n            </a>\n            <a href=\"https://glowbom.com/desktop/\" rel=\"noreferrer\" target=\"_blank\">\n              Desktop\n            </a>\n            <a href=\"https://glowbom.com/terms.html\" rel=\"noreferrer\" target=\"_blank\">\n              Terms\n            </a>\n            <a href=\"https://glowbom.com/pricing/\" rel=\"noreferrer\" target=\"_blank\">\n              Pricing\n            </a>\n            <a href=\"https://glowbom.com/docs/\" rel=\"noreferrer\" target=\"_blank\">\n              Docs\n            </a>\n            <a href=\"https://glowbom.com/#case_studies\" rel=\"noreferrer\" target=\"_blank\">\n              Apps\n            </a>\n          </nav>\n          <a className=\"button topbar-cta\" href=\"https://glowbom.com/draw\" rel=\"noreferrer\" target=\"_blank\">\n            Get Started for Free\n          </a>\n        </div>\n      </header>\n\n      <main className=\"page\">\n        <header className=\"brand-header brand-header-minimal\">\n          <div className=\"brand-copy\">\n            <h1>Glowby OSS</h1>\n            <p>Build Anything Locally</p>\n          </div>\n        </header>\n\n        <section className=\"card composer-card\">\n          <div className=\"composer-toolbar\">\n            <div className=\"composer-toolbar-primary\">\n              <button\n                className={`composer-chip-button ${activeProject ? 'has-value' : ''} ${isProjectPickerOpen ? 'active' : ''}`}\n                disabled={refine.isRunning || isLoadingProject}\n                onClick={toggleProjectPicker}\n                type=\"button\"\n              >\n                <span className=\"composer-chip-label\">Project</span>\n                <span className=\"composer-chip-value\">{projectButtonLabel}</span>\n              </button>\n\n              {activeProject ? (\n                <div className=\"project-launch-strip\" role=\"group\" aria-label=\"Open project in apps\">\n                  {renderProjectLaunchButton('finder', 'Finder', finderAction)}\n                  {renderProjectLaunchButton('xcode', 'Xcode', xcodeAction)}\n                  {renderProjectLaunchButton('android-studio', 'Android Studio', androidStudioAction)}\n                  {renderProjectLaunchButton('vscode', 'VS Code', vscodeAction)}\n                </div>\n              ) : null}\n            </div>\n\n            <div className=\"row composer-toolbar-actions\">\n              <button\n                className={`composer-chip-button ${attachmentCount > 0 ? 'has-value' : ''} ${isContextOpen ? 'active' : ''}`}\n                disabled={refine.isRunning}\n                onClick={toggleContextPanel}\n                type=\"button\"\n              >\n                <span className=\"composer-chip-value\">{contextButtonLabel}</span>\n              </button>\n              <button\n                className={`composer-chip-button ${systemNeedsAttention ? 'attention' : ''} ${isSettingsOpen ? 'active' : ''}`}\n                disabled={refine.isRunning}\n                onClick={toggleSettingsPanel}\n                type=\"button\"\n              >\n                <span className=\"composer-chip-value\">Settings</span>\n              </button>\n            </div>\n          </div>\n\n          {isProjectPickerOpen ? (\n            <div className=\"composer-popover\">\n              <div className=\"composer-popover-header\">\n                <strong>Project</strong>\n                {activeProject || selectedProjectPath ? (\n                  <button className=\"button secondary tiny\" onClick={clearProjectSelection} type=\"button\">\n                    Clear\n                  </button>\n                ) : null}\n              </div>\n\n              <div className=\"row compact\">\n                <input\n                  className=\"input\"\n                  id=\"projectPath\"\n                  onChange={(event) => {\n                    setProjectPath(event.target.value);\n                    setFormError(null);\n                    setProjectEnvelope(null);\n                    setProjectError(null);\n                    setIdeStatus(null);\n                    setIdeStatusError(null);\n                    setIdeOpenInfo(null);\n                    setIdeOpenError(null);\n                  }}\n                  onKeyDown={(event) => {\n                    if (event.key === 'Enter' && !isLoadingProject && !refine.isRunning) {\n                      event.preventDefault();\n                      void loadProject(event.currentTarget.value);\n                    }\n                  }}\n                  placeholder=\"/absolute/path/to/project\"\n                  value={projectPath}\n                />\n                <button\n                  className=\"button secondary\"\n                  disabled={refine.isRunning || isPickingFolder || isLoadingProject}\n                  onClick={() => void openFolderPicker()}\n                  type=\"button\"\n                >\n                  {isPickingFolder ? 'Choosing...' : isLoadingProject ? 'Loading...' : 'Choose'}\n                </button>\n              </div>\n\n              {folderPickerInfo ? <p className=\"meta ok\">{folderPickerInfo}</p> : null}\n              {folderPickerWarning ? <p className=\"meta warn\">{folderPickerWarning}</p> : null}\n              {projectError ? <p className=\"error-inline\">{projectError}</p> : null}\n\n              {activeProject ? (\n                <div className=\"project-summary compact-project-summary\">\n                  <div className=\"project-summary-header\">\n                    <div className=\"project-heading\">\n                      {isRenamingProject ? (\n                        <div className=\"project-rename-row\">\n                          <input\n                            className=\"project-rename-input\"\n                            type=\"text\"\n                            value={renameValue}\n                            onChange={(e) => setRenameValue(e.target.value)}\n                            onKeyDown={(e) => {\n                              if (e.key === 'Enter') void handleRenameProject(renameValue);\n                              if (e.key === 'Escape') { setIsRenamingProject(false); setRenameError(null); }\n                            }}\n                            autoFocus\n                          />\n                          <button\n                            className=\"button secondary tiny\"\n                            onClick={() => void handleRenameProject(renameValue)}\n                            type=\"button\"\n                          >\n                            Save\n                          </button>\n                          <button\n                            className=\"button secondary tiny\"\n                            onClick={() => { setIsRenamingProject(false); setRenameError(null); }}\n                            type=\"button\"\n                          >\n                            Cancel\n                          </button>\n                        </div>\n                      ) : (\n                        <div className=\"project-name-row\">\n                          <strong>{activeProject.name}</strong>\n                          <button\n                            className=\"button secondary tiny\"\n                            onClick={() => { setRenameValue(activeProject.name); setIsRenamingProject(true); setRenameError(null); }}\n                            type=\"button\"\n                            title=\"Rename project\"\n                          >\n                            Rename\n                          </button>\n                        </div>\n                      )}\n                      {renameError ? <p className=\"error-inline\">{renameError}</p> : null}\n                      <span className=\"meta\">\n                        v{activeProject.version} · {targetRows.length} target{targetRows.length === 1 ? '' : 's'}\n                      </span>\n                    </div>\n                  </div>\n                  <p className=\"meta project-path-meta\">{selectedProjectPath}</p>\n                  <div className=\"chip-list\">\n                    {BUILD_TARGETS.map((target) => (\n                      <label className={`chip chip-selectable ${selectedTargets.includes(target.id) ? '' : 'chip-deselected'}`} key={target.id}>\n                        <input\n                          type=\"checkbox\"\n                          checked={selectedTargets.includes(target.id)}\n                          onChange={() => toggleTarget(target.id)}\n                          disabled={refine.isRunning}\n                        />\n                        {target.label}\n                      </label>\n                    ))}\n                  </div>\n\n                  <details className=\"project-tools-disclosure\">\n                    <summary>Tools</summary>\n                    <div className=\"project-ide-tools\">\n                      <div className=\"card-title-row\">\n                        <strong>Open</strong>\n                        <button\n                          className=\"button secondary tiny\"\n                          disabled={isLoadingIdeStatus}\n                          onClick={() => void refreshIDEStatus(projectPath)}\n                          type=\"button\"\n                        >\n                          {isLoadingIdeStatus ? 'Scanning...' : 'Refresh'}\n                        </button>\n                      </div>\n\n                      <div className=\"row\">\n                        <button\n                          className=\"button secondary\"\n                          disabled={!finderAction?.available || openingIDE !== null}\n                          onClick={() => {\n                            void openProjectInIDE('finder');\n                          }}\n                          type=\"button\"\n                        >\n                          {openingIDE === 'finder' ? 'Opening...' : 'Folder'}\n                        </button>\n                        <button\n                          className=\"button secondary\"\n                          disabled={!xcodeAction?.available || openingIDE !== null}\n                          onClick={() => {\n                            void openProjectInIDE('xcode');\n                          }}\n                          type=\"button\"\n                        >\n                          {openingIDE === 'xcode' ? 'Opening...' : 'Xcode'}\n                        </button>\n                        <button\n                          className=\"button secondary\"\n                          disabled={!androidStudioAction?.available || openingIDE !== null}\n                          onClick={() => {\n                            void openProjectInIDE('android-studio');\n                          }}\n                          type=\"button\"\n                        >\n                          {openingIDE === 'android-studio' ? 'Opening...' : 'Android Studio'}\n                        </button>\n                        <button\n                          className=\"button secondary\"\n                          disabled={!vscodeAction?.available || openingIDE !== null}\n                          onClick={() => {\n                            void openProjectInIDE('vscode');\n                          }}\n                          type=\"button\"\n                        >\n                          {openingIDE === 'vscode' ? 'Opening...' : 'VS Code'}\n                        </button>\n                      </div>\n\n                      {ideStatusError ? <p className=\"error-inline\">{ideStatusError}</p> : null}\n                      {ideOpenInfo ? <p className=\"meta ok\">{ideOpenInfo}</p> : null}\n                      {ideOpenError ? <p className=\"error-inline\">{ideOpenError}</p> : null}\n                    </div>\n                  </details>\n\n                  <details className=\"project-tools-disclosure\">\n                    <summary>Project Settings</summary>\n                    <div className=\"project-settings-grid\">\n                      <label className=\"field-label-inline\">\n                        <span>Display Name</span>\n                        <input\n                          className=\"input\"\n                          disabled={refine.isRunning || isSavingSettings}\n                          onChange={(e) => setSettingsDisplayName(e.target.value)}\n                          placeholder=\"My App\"\n                          value={settingsDisplayName}\n                        />\n                      </label>\n                      <label className=\"field-label-inline\">\n                        <span>Bundle ID</span>\n                        <input\n                          className=\"input\"\n                          disabled={refine.isRunning || isSavingSettings}\n                          onChange={(e) => setSettingsBundleID(e.target.value)}\n                          placeholder=\"app.glowbom.myapp\"\n                          value={settingsBundleID}\n                        />\n                      </label>\n                      <label className=\"field-label-inline\">\n                        <span>Version</span>\n                        <input\n                          className=\"input\"\n                          disabled={refine.isRunning || isSavingSettings}\n                          onChange={(e) => setSettingsVersion(e.target.value)}\n                          placeholder=\"1.0\"\n                          value={settingsVersion}\n                        />\n                      </label>\n                      <label className=\"field-label-inline\">\n                        <span>Build Number</span>\n                        <input\n                          className=\"input\"\n                          disabled={refine.isRunning || isSavingSettings}\n                          onChange={(e) => setSettingsBuildNumber(e.target.value)}\n                          placeholder=\"1\"\n                          value={settingsBuildNumber}\n                        />\n                      </label>\n                      <div className=\"row\">\n                        <button\n                          className=\"button\"\n                          disabled={refine.isRunning || isSavingSettings}\n                          onClick={() => void handleSaveProjectSettings()}\n                          type=\"button\"\n                        >\n                          {isSavingSettings ? 'Saving...' : 'Save Settings'}\n                        </button>\n                      </div>\n                      {settingsInfo ? <p className=\"meta ok\">{settingsInfo}</p> : null}\n                      {settingsError ? <p className=\"error-inline\">{settingsError}</p> : null}\n\n                      <div className=\"icon-section\">\n                        <strong>App Icon</strong>\n                        <div className=\"icon-row\">\n                          {iconPreview ? (\n                            <img className=\"icon-preview\" src={iconPreview} alt=\"App icon\" />\n                          ) : (\n                            <div className=\"icon-preview icon-placeholder\">No icon</div>\n                          )}\n                          {iconReferenceImage ? (\n                            <div className=\"icon-ref-wrapper\">\n                              <img className=\"icon-ref-preview\" src={iconReferenceImage} alt=\"Reference\" />\n                              <button\n                                className=\"icon-ref-clear\"\n                                onClick={() => setIconReferenceImage(null)}\n                                type=\"button\"\n                                title=\"Remove reference image\"\n                              >\n                                &times;\n                              </button>\n                              <span className=\"meta\">Reference</span>\n                            </div>\n                          ) : null}\n                        </div>\n                        {isGeneratingIcon ? (\n                          <div className=\"icon-progress\">\n                            <div className=\"icon-progress-bar\" />\n                            <span className=\"meta\">Generating icon...</span>\n                          </div>\n                        ) : null}\n                        <input\n                          className=\"input\"\n                          disabled={refine.isRunning || isGeneratingIcon}\n                          onChange={(e) => setIconPrompt(e.target.value)}\n                          onKeyDown={(e) => {\n                            if (e.key === 'Enter') void handleGenerateIcon();\n                          }}\n                          placeholder=\"Describe your app icon...\"\n                          value={iconPrompt}\n                        />\n                        <div className=\"row\">\n                          <button\n                            className=\"button\"\n                            disabled={refine.isRunning || isGeneratingIcon || !iconPrompt.trim()}\n                            onClick={() => void handleGenerateIcon()}\n                            type=\"button\"\n                          >\n                            {isGeneratingIcon ? 'Generating...' : 'Generate Icon'}\n                          </button>\n                          <label className=\"button secondary\" style={{ cursor: refine.isRunning || isGeneratingIcon ? 'not-allowed' : 'pointer' }}>\n                            {iconReferenceImage ? 'Change Ref' : 'Add Reference'}\n                            <input\n                              type=\"file\"\n                              accept=\"image/*\"\n                              style={{ display: 'none' }}\n                              disabled={refine.isRunning || isGeneratingIcon}\n                              onChange={(e) => {\n                                const file = e.target.files?.[0];\n                                if (!file) return;\n                                const reader = new FileReader();\n                                reader.onload = () => {\n                                  setIconReferenceImage(reader.result as string);\n                                };\n                                reader.readAsDataURL(file);\n                                e.target.value = '';\n                              }}\n                            />\n                          </label>\n                        </div>\n                        {iconInfo ? <p className=\"meta ok\">{iconInfo}</p> : null}\n                        {iconError ? <p className=\"error-inline\">{iconError}</p> : null}\n                      </div>\n                    </div>\n                  </details>\n\n                  <div className=\"project-history-section\">\n                    <div className=\"card-title-row\">\n                      <strong>History</strong>\n                      <button\n                        className=\"button secondary tiny\"\n                        disabled={isLoadingHistory || !selectedProjectPath || !activeProject}\n                        onClick={() => {\n                          void refreshProjectHistory(selectedProjectPath);\n                        }}\n                        type=\"button\"\n                      >\n                        {isLoadingHistory ? 'Refreshing...' : 'Refresh'}\n                      </button>\n                    </div>\n\n                    {historyError ? <p className=\"error-inline\">{historyError}</p> : null}\n\n                    {historyEntries.length === 0 ? (\n                      <div className=\"empty-inline-state compact-empty-state\">\n                        <strong>{isLoadingHistory ? 'Loading history...' : 'No history yet'}</strong>\n                        <p className=\"meta\">Build once and Glowby will archive the prompt and attached files here.</p>\n                      </div>\n                    ) : (\n                      <div className=\"run-history-list project-history-list\">\n                        {historyEntries.map((entry) => renderHistoryEntryCard(entry))}\n                      </div>\n                    )}\n                  </div>\n                </div>\n              ) : null}\n\n              {projectHistory.length > 0 ? (\n                <div className=\"history-list\">\n                  {projectHistory.map((entry) => {\n                    const isCurrent = entry.path === selectedProjectPath;\n                    return (\n                      <button\n                        className={`history-item ${isCurrent ? 'current' : ''}`}\n                        key={entry.path}\n                        onClick={() => {\n                          setProjectPath(entry.path);\n                          void loadProject(entry.path);\n                        }}\n                        type=\"button\"\n                      >\n                        <span className=\"history-item-title\">{entry.name}</span>\n                        <span className=\"history-item-meta\">{entry.path}</span>\n                      </button>\n                    );\n                  })}\n                </div>\n              ) : null}\n            </div>\n          ) : null}\n\n          {isContextOpen ? (\n            <div className=\"composer-popover\">\n              <div className=\"composer-popover-header\">\n                <strong>Context</strong>\n                <div className=\"row\">\n                  <button\n                    className=\"button secondary tiny\"\n                    disabled={refine.isRunning || isPickingInstructionFiles}\n                    onClick={() => {\n                      void pickInstructionFiles();\n                    }}\n                    type=\"button\"\n                  >\n                    {isPickingInstructionFiles ? 'Choosing...' : 'Add files'}\n                  </button>\n                  <button\n                    className=\"button secondary tiny\"\n                    disabled={refine.isRunning || instructionAttachments.length === 0}\n                    onClick={() => {\n                      setInstructionAttachments([]);\n                      setInstructionPickerInfo(null);\n                      setInstructionPickerWarning(null);\n                    }}\n                    type=\"button\"\n                  >\n                    Clear\n                  </button>\n                </div>\n              </div>\n\n              {instructionPickerInfo ? <p className=\"meta ok\">{instructionPickerInfo}</p> : null}\n              {instructionPickerWarning ? <p className=\"meta warn\">{instructionPickerWarning}</p> : null}\n\n              {instructionAttachments.length > 0 ? (\n                <ul className=\"attachment-list\">\n                  {instructionAttachments.map((attachment) => {\n                    const oversize = attachment.sizeBytes > MAX_INSTRUCTION_ATTACHMENT_BYTES;\n                    return (\n                      <li className={`attachment-item ${oversize ? 'oversize' : ''}`} key={attachment.path}>\n                        <div className=\"attachment-item-copy\">\n                          <span className=\"attachment-name\">{attachment.name}</span>\n                          <span className=\"attachment-meta\">\n                            {formatAttachmentSize(attachment.sizeBytes)}\n                            {attachment.mimeType ? ` · ${attachment.mimeType}` : ''}\n                          </span>\n                        </div>\n                        <button\n                          className=\"button secondary tiny\"\n                          disabled={refine.isRunning}\n                          onClick={() => {\n                            setInstructionAttachments((previous) => previous.filter((item) => item.path !== attachment.path));\n                          }}\n                          type=\"button\"\n                        >\n                          Remove\n                        </button>\n                      </li>\n                    );\n                  })}\n                </ul>\n              ) : (\n                <p className=\"meta\">No files.</p>\n              )}\n            </div>\n          ) : null}\n\n          {isSettingsOpen ? (\n            <div className=\"composer-popover settings-popover\">\n              <div className=\"composer-popover-header\">\n                <strong>Settings</strong>\n                <button\n                  className=\"button secondary tiny\"\n                  disabled={isCheckingSetup || refine.isRunning}\n                  onClick={() => void refreshSetup()}\n                  type=\"button\"\n                >\n                  {isCheckingSetup ? 'Checking...' : 'Refresh'}\n                </button>\n              </div>\n\n              <div className=\"summary-pill-row\">\n                <span\n                  className={`summary-pill ${\n                    systemNeedsAttention ? 'tone-warning' : health?.healthy ? 'tone-success' : 'tone-neutral'\n                  }`}\n                >\n                  {systemStatusSummary}\n                </span>\n                <span className={`summary-pill ${isAuthMode && !authProviderConnected ? 'tone-warning' : 'tone-neutral'}`}>\n                  {agentStatusSummary}\n                </span>\n              </div>\n\n              <div className=\"field-grid\">\n                <div>\n                  <label className=\"field-label\" htmlFor=\"credentialMode\">\n                    AI access\n                  </label>\n                  <select\n                    className=\"input\"\n                    disabled={refine.isRunning}\n                    id=\"credentialMode\"\n                    onChange={(event) => setCredentialMode(event.target.value as CredentialMode)}\n                    value={credentialMode}\n                  >\n                    <option value=\"auth\">Connected account</option>\n                    <option value=\"api-key\">API keys</option>\n                    <option value=\"opencode-config\">OpenCode setup</option>\n                  </select>\n                </div>\n\n                {isAuthMode ? (\n                  <div>\n                    <label className=\"field-label\" htmlFor=\"authProvider\">\n                      Account\n                    </label>\n                    <select\n                      className=\"input\"\n                      disabled={refine.isRunning || isUpdatingAuthConnection}\n                      id=\"authProvider\"\n                      onChange={(event) => {\n                        setAuthProvider(event.target.value as AuthProviderID);\n                        setAuthConnectionInfo(null);\n                        setAuthConnectionError(null);\n                      }}\n                      value={authProvider}\n                    >\n                      <option value=\"chatgpt\">ChatGPT</option>\n                    </select>\n                  </div>\n                ) : null}\n              </div>\n\n              <div className=\"field-grid\">\n                <div>\n                  <label className=\"field-label\" htmlFor=\"modelPreset\">\n                    Model\n                  </label>\n                  {isOpenCodeConfigMode ? (\n                    <select\n                      className=\"input\"\n                      disabled={refine.isRunning || isLoadingOpenCodeModels}\n                      id=\"modelPreset\"\n                      onChange={(event) => setSelectedOpenCodeModel(event.target.value)}\n                      value={selectedOpenCodeModel}\n                    >\n                      <option value={OPENCODE_RECOMMENDED_MODEL_VALUE}>{recommendedOpenCodeModelOptionLabel}</option>\n                      {openCodeConfigProviders.map((provider) => (\n                        <optgroup key={provider.id} label={provider.displayName || provider.id}>\n                          {provider.models.map((model) => (\n                            <option key={`${provider.id}-${model.id}`} value={`${provider.id}/${model.id}`}>\n                              {model.displayName || model.id}\n                            </option>\n                          ))}\n                        </optgroup>\n                      ))}\n                    </select>\n                  ) : (\n                    <select\n                      className=\"input\"\n                      disabled={refine.isRunning || allOptionValues.length === 0}\n                      id=\"modelPreset\"\n                      onChange={(event) => setSelectedModelOption(event.target.value)}\n                      value={selectedModelOption}\n                    >\n                      {visibleModelGroups.map((group) => (\n                        <optgroup key={group.provider.id} label={group.provider.label}>\n                          {group.models.map((model) => {\n                            const value = encodeModelOptionValue(group.provider.id, model.id);\n                            return (\n                              <option key={`${group.provider.id}-${model.id}`} value={value}>\n                                {model.label}\n                              </option>\n                            );\n                          })}\n                        </optgroup>\n                      ))}\n                    </select>\n                  )}\n                </div>\n\n                {!isOpenCodeConfigMode ? (\n                  <div>\n                    <label className=\"field-label\" htmlFor=\"customModel\">\n                      Custom\n                    </label>\n                    <input\n                      className=\"input\"\n                      disabled={refine.isRunning}\n                      id=\"customModel\"\n                      onChange={(event) => setCustomModel(event.target.value)}\n                      placeholder=\"provider/model\"\n                      value={customModel}\n                    />\n                  </div>\n                ) : null}\n              </div>\n\n              {isApiKeyMode ? (\n                <div className=\"field-grid\">\n                  <div>\n                    <label className=\"field-label\" htmlFor=\"imageSource\">\n                      Glowby Images\n                    </label>\n                    <select\n                      className=\"input\"\n                      disabled={refine.isRunning}\n                      id=\"imageSource\"\n                      onChange={(event) => setImageSource(event.target.value)}\n                      value={imageSource}\n                    >\n                      <option value=\"\">None</option>\n                      {providerKeys.openaiKey.trim() ? (\n                        <option value=\"Glowby Images (gpt-image-1.5)\">GPT Image 1.5</option>\n                      ) : null}\n                      {providerKeys.geminiKey.trim() ? (\n                        <option value=\"Glowby Images (Nano Banana 2)\">Nano Banana 2</option>\n                      ) : null}\n                      {providerKeys.xaiKey.trim() ? (\n                        <option value=\"Glowby Images (Grok Imagine Image Pro)\">Grok Imagine Image Pro</option>\n                      ) : null}\n                    </select>\n                  </div>\n                </div>\n              ) : null}\n\n              {isAuthMode ? (\n                <div className={`auth-connection-card ${authProviderConnected ? 'connected' : 'disconnected'}`}>\n                  <strong>{authProviderConnected ? 'ChatGPT connected' : 'ChatGPT not connected'}</strong>\n                  <span className=\"meta\">Credential: {formatCredentialType(authStatus?.openaiCredentialType)}</span>\n                  <div className=\"row\">\n                    {authProviderConnected ? (\n                      <button\n                        className=\"button secondary\"\n                        disabled={refine.isRunning || isUpdatingAuthConnection}\n                        onClick={() => {\n                          void disconnectAuthProvider();\n                        }}\n                        type=\"button\"\n                      >\n                        {isUpdatingAuthConnection ? 'Disconnecting...' : 'Disconnect'}\n                      </button>\n                    ) : (\n                      <button\n                        className=\"button\"\n                        disabled={refine.isRunning || isUpdatingAuthConnection}\n                        onClick={() => {\n                          void connectAuthProvider();\n                        }}\n                        type=\"button\"\n                      >\n                        {isUpdatingAuthConnection ? 'Connecting...' : 'Connect'}\n                      </button>\n                    )}\n                  </div>\n                  {authConnectionInfo ? <p className=\"meta ok\">{authConnectionInfo}</p> : null}\n                  {authConnectionError ? <p className=\"error-inline\">{authConnectionError}</p> : null}\n                </div>\n              ) : null}\n\n              {isApiKeyMode ? (\n                <div className=\"field-grid\">\n                  <div>\n                    <label className=\"field-label\" htmlFor=\"openaiKey\">\n                      OpenAI key\n                    </label>\n                    <input\n                      className=\"input\"\n                      disabled={refine.isRunning}\n                      id=\"openaiKey\"\n                      onChange={(event) => updateProviderKey('openaiKey', event.target.value)}\n                      placeholder=\"sk-...\"\n                      type=\"password\"\n                      value={providerKeys.openaiKey}\n                    />\n                  </div>\n                </div>\n              ) : null}\n\n              {isApiKeyMode ? (\n                <details className=\"provider-keys\">\n                  <summary>Other keys</summary>\n                  <div className=\"field-grid provider-keys-grid\">\n                    {MODEL_PROVIDERS.filter((provider) => provider.keyField && provider.id !== 'openai').map((provider) => {\n                      const keyField = provider.keyField!;\n                      const isActive = provider.id === selectedProvider;\n\n                      return (\n                        <label className={`provider-key-item ${isActive ? 'active' : ''}`} key={provider.id}>\n                          <span className=\"field-label\">{provider.keyLabel || provider.label}</span>\n                          <input\n                            className=\"input\"\n                            disabled={refine.isRunning}\n                            onChange={(event) => updateProviderKey(keyField, event.target.value)}\n                            placeholder={`${provider.label} key`}\n                            type=\"password\"\n                            value={providerKeys[keyField]}\n                          />\n                        </label>\n                      );\n                    })}\n                    <label className=\"provider-key-item\">\n                      <span className=\"field-label\">ElevenLabs API Key</span>\n                      <input\n                        className=\"input\"\n                        disabled={refine.isRunning}\n                        onChange={(event) => updateProviderKey('elevenLabsKey', event.target.value)}\n                        placeholder=\"ElevenLabs key\"\n                        type=\"password\"\n                        value={providerKeys.elevenLabsKey}\n                      />\n                    </label>\n                  </div>\n                </details>\n              ) : null}\n\n              <div className=\"status-grid\">\n                <div className=\"status-tile\">\n                  <span className=\"status-label\">Backend</span>\n                  <strong className={health?.healthy ? 'ok' : health ? 'warn' : ''}>{setupStatusText}</strong>\n                  {health?.server ? <span className=\"meta\">{health.server}</span> : null}\n                  {health?.hint ? <span className=\"meta\">{health.hint}</span> : null}\n                  {healthError ? <span className=\"error-inline\">{healthError}</span> : null}\n                </div>\n\n                <div className=\"status-tile\">\n                  <span className=\"status-label\">Agent server</span>\n                  <strong className={authStatus?.serverRunning ? 'ok' : authStatus ? 'warn' : ''}>\n                    {authStatus ? (authStatus.serverRunning ? 'Running' : 'Stopped') : 'Checking...'}\n                  </strong>\n                  <span className=\"meta\">Auth: {formatAuthMode(authStatus?.cachedGlowbomAuthMode)}</span>\n                  {authError ? <span className=\"error-inline\">{authError}</span> : null}\n                </div>\n              </div>\n\n              {isLoadingOpenAIModels ? <p className=\"meta\">Loading OpenAI models...</p> : null}\n              {openAIModelsInfo ? <p className=\"meta ok\">{openAIModelsInfo}</p> : null}\n              {openAIModelsWarning ? <p className=\"meta warn\">{openAIModelsWarning}</p> : null}\n              {isLoadingOpenCodeModels ? <p className=\"meta\">Loading OpenCode models...</p> : null}\n              {openCodeModelsInfo ? <p className=\"meta ok\">{openCodeModelsInfo}</p> : null}\n              {openCodeModelsWarning ? <p className=\"meta warn\">{openCodeModelsWarning}</p> : null}\n            </div>\n          ) : null}\n\n          <div className=\"composer-input-wrap\">\n            {refine.isRunning ? (\n              optimisticHistoryEntry ? (\n                renderHistoryEntryCard(optimisticHistoryEntry)\n              ) : (\n                <div className=\"empty-inline-state\">\n                  <strong>Preparing current build...</strong>\n                  <p className=\"meta\">Glowby is working on the current run.</p>\n                </div>\n              )\n            ) : (\n              <textarea\n                className=\"input minimal-input\"\n                disabled={refine.isRunning}\n                id=\"instructions\"\n                onChange={(event) => {\n                  setInstructions(event.target.value);\n                  setFormError(null);\n                }}\n                placeholder=\"What should Glowby build?\"\n                rows={7}\n                value={instructions}\n              />\n            )}\n          </div>\n\n          {formError ? <p className=\"error-inline composer-error\">{formError}</p> : null}\n          {!formError && projectError && !isProjectPickerOpen ? <p className=\"error-inline composer-error\">{projectError}</p> : null}\n          {!isProjectPickerOpen && historyError ? <p className=\"error-inline composer-error\">{historyError}</p> : null}\n          {!isProjectPickerOpen && historyInfo ? <p className=\"meta ok composer-note\">{historyInfo}</p> : null}\n\n          <div className=\"composer-footer minimal-composer-footer\">\n            <div className=\"composer-footer-copy\">\n              {refine.summary ? <p className=\"summary-text\">{refine.summary}</p> : null}\n              {refine.hasSession && !refine.isRunning ? (\n                <label className=\"toggle-label\">\n                  <input\n                    type=\"checkbox\"\n                    checked={refine.continueSession}\n                    onChange={(event) => refine.setContinueSession(event.target.checked)}\n                  />\n                  Continue last session\n                </label>\n              ) : !refine.summary ? (\n                <p className=\"meta minimal-meta\">\n                  {activeProject ? projectButtonLabel : 'Choose a project'}\n                  {` · `}\n                  {agentStatusSummary}\n                </p>\n              ) : null}\n            </div>\n            <div className=\"row composer-actions\">\n              <span className={`run-status status-${refine.status}`}>{RUN_STATUS_LABEL[refine.status]}</span>\n              <button\n                className=\"button\"\n                disabled={refine.isRunning || refine.isSubmittingInput || isLoadingProject}\n                onClick={() => {\n                  void startRefine();\n                }}\n                type=\"button\"\n              >\n                Build\n              </button>\n              <button className=\"button danger\" disabled={!refine.isRunning} onClick={refine.stopRun} type=\"button\">\n                Stop\n              </button>\n            </div>\n          </div>\n        </section>\n\n        <section className=\"card activity-card\">\n          <div className=\"card-title-row\">\n            <div>\n              <h2>Activity</h2>\n              <p className=\"meta\">Logs, follow-up questions, and permission requests show up here while Glowby works.</p>\n            </div>\n            <label className=\"checkbox-row\">\n              <input\n                checked={autoScrollEnabled}\n                onChange={(event) => setAutoScrollEnabled(event.target.checked)}\n                type=\"checkbox\"\n              />\n              Auto-scroll\n            </label>\n          </div>\n\n          {refine.error ? <p className=\"error-inline\">{refine.error}</p> : null}\n\n          <div className=\"console\" onScroll={onConsoleScroll} ref={consoleRef}>\n            {runLogs.length === 0 ? (\n              <p className=\"placeholder\">Ready. Choose a project folder, describe the work, and click Build.</p>\n            ) : (\n              runLogs.map((line, index) =>\n                renderConsoleLine(line, index, index === runLogs.length - 1 && !!refine.partialLine),\n              )\n            )}\n          </div>\n\n          {refine.changedFiles.length > 0 ? (\n            <details className=\"changed-files\">\n              <summary>Changed files ({refine.changedFiles.length})</summary>\n              <ul>\n                {refine.changedFiles.slice(0, 200).map((filePath) => (\n                  <li key={filePath}>{filePath}</li>\n                ))}\n              </ul>\n            </details>\n          ) : null}\n\n          {refine.pendingQuestion ? (\n          <div className=\"input-panel\">\n            <h3>Agent needs input</h3>\n            <p>{refine.pendingQuestion.prompt}</p>\n\n            {refine.pendingQuestion.questions.length > 0 ? (\n              <div className=\"question-list\">{refine.pendingQuestion.questions.map(renderQuestionItem)}</div>\n            ) : (\n              <div className=\"question-item\">\n                {refine.pendingQuestion.options.length > 0 ? (\n                  <div className=\"option-list\">\n                    {refine.pendingQuestion.options.map((option) => {\n                      const multi = isMultiSelect(refine.pendingQuestion?.prompt || '');\n                      const selected = simpleSelectedOptions.includes(option.label);\n\n                      return (\n                        <button\n                          className={`option-button ${selected ? 'selected' : ''}`}\n                          key={option.id || option.label}\n                          onClick={() => {\n                            setSimpleSelectedOptions((previous) =>\n                              toggleSelection(previous, option.label, multi),\n                            );\n                          }}\n                          type=\"button\"\n                        >\n                          <span className=\"option-button-label\">{option.label}</span>\n                          {option.description ? (\n                            <span className=\"option-button-description\">{option.description}</span>\n                          ) : null}\n                        </button>\n                      );\n                    })}\n                  </div>\n                ) : null}\n\n                <textarea\n                  className=\"input\"\n                  onChange={(event) => setSimpleAnswerText(event.target.value)}\n                  placeholder=\"Your answer\"\n                  rows={3}\n                  value={simpleAnswerText}\n                />\n\n                <input\n                  className=\"input\"\n                  onChange={(event) => setSimpleCustomAnswer(event.target.value)}\n                  placeholder=\"Custom response override (optional)\"\n                  type=\"text\"\n                  value={simpleCustomAnswer}\n                />\n              </div>\n            )}\n\n            <div className=\"row\">\n              <button\n                className=\"button\"\n                disabled={refine.isSubmittingInput}\n                onClick={() => {\n                  void submitQuestion();\n                }}\n              >\n                {refine.isSubmittingInput ? 'Sending...' : 'Send'}\n              </button>\n              <button\n                className=\"button secondary\"\n                disabled={refine.isSubmittingInput}\n                onClick={() => {\n                  void refine.submitQuestion({ answer: '' });\n                }}\n              >\n                Dismiss\n              </button>\n            </div>\n          </div>\n        ) : null}\n\n          {refine.pendingPermission ? (\n          <div className=\"input-panel\">\n            <h3>Permission requested</h3>\n            <p>{refine.pendingPermission.title}</p>\n            {refine.pendingPermission.message ? <p className=\"meta-text\">{refine.pendingPermission.message}</p> : null}\n            {refine.pendingPermission.pattern ? (\n              <p className=\"meta-text\">Pattern: {refine.pendingPermission.pattern}</p>\n            ) : null}\n\n            <div className=\"row\">\n              <button\n                className=\"button\"\n                disabled={refine.isSubmittingInput}\n                onClick={() => {\n                  void refine.respondToPermission('once');\n                }}\n              >\n                Allow once\n              </button>\n              <button\n                className=\"button secondary\"\n                disabled={refine.isSubmittingInput}\n                onClick={() => {\n                  void refine.respondToPermission('always');\n                }}\n              >\n                Always allow\n              </button>\n              <button\n                className=\"button danger\"\n                disabled={refine.isSubmittingInput}\n                onClick={() => {\n                  void refine.respondToPermission('reject');\n                }}\n              >\n                Deny\n              </button>\n            </div>\n          </div>\n          ) : null}\n        </section>\n      </main>\n    </div>\n  );\n}\n"
  },
  {
    "path": "web/src/hooks/useRefineRun.ts",
    "content": "import { useCallback, useMemo, useRef, useState } from 'react';\nimport { openCodeApi, toErrorMessage } from '../lib/api';\nimport { streamJsonSse } from '../lib/sse';\nimport type {\n  OpenCodeAgentRequest,\n  OpenCodePermission,\n  OpenCodePermissionRespondRequest,\n  OpenCodeQuestion,\n  OpenCodeQuestionItem,\n  OpenCodeQuestionOption,\n  OpenCodeQuestionRespondRequest,\n  OpenCodeSseEvent,\n  OpenAIAuthMode,\n  ProviderKeyState,\n} from '../types/opencode';\n\nexport type RefineRunStatus = 'idle' | 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport interface StartRefineInput {\n  projectPath: string;\n  instructions?: string;\n  persistCurrentInstructionsToHistory?: boolean;\n  instructionAttachmentPaths?: string[];\n  model?: string;\n  openaiAuthMode: OpenAIAuthMode;\n  openaiRefreshToken?: string;\n  openaiExpiresAt?: number;\n  providerKeys: ProviderKeyState;\n  imageSource?: string;\n}\n\nexport interface SubmitQuestionInput {\n  answer: string;\n  answers?: string[][];\n  answerByQuestionID?: Record<string, string[]>;\n}\n\nfunction toStringValue(value: unknown): string {\n  return typeof value === 'string' ? value : '';\n}\n\nfunction extractSessionIDFromText(text: string): string {\n  const match = text.match(/Session (?:created|resumed):\\s*([A-Za-z0-9_-]+)/i);\n  return match?.[1] || '';\n}\n\nfunction normalizeIncomingOutputText(text: string): string {\n  if (!text) {\n    return '';\n  }\n\n  return text\n    .replaceAll('\\r\\n', '\\n')\n    .replaceAll('\\r', '\\n')\n    .replaceAll('\\u2028', '\\n')\n    .replaceAll('\\u2029', '\\n')\n    .replaceAll('\\\\r\\\\n', '\\n')\n    .replaceAll('\\\\n', '\\n')\n    .replaceAll('\\\\u000A', '\\n')\n    .replaceAll('\\\\u2028', '\\n')\n    .replaceAll('\\\\u2029', '\\n');\n}\n\nfunction firstRegexInt(text: string, regex: RegExp): number | undefined {\n  const match = regex.exec(text);\n  if (!match || !match[1]) {\n    return undefined;\n  }\n  const parsed = Number.parseInt(match[1], 10);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction usageLimitWindowMinutes(text: string): number | undefined {\n  return firstRegexInt(text, /(?:x-codex-primary-window-minutes|window[_-]?minutes)[\"']?\\s*[:=]\\s*[\"']?(\\d{1,10})/i);\n}\n\nfunction usageLimitUsedPercent(text: string): number | undefined {\n  return firstRegexInt(text, /(?:x-codex-primary-used-percent|used[_-]?percent)[\"']?\\s*[:=]\\s*[\"']?(\\d{1,3})/i);\n}\n\nfunction usageLimitResetDate(text: string): Date | undefined {\n  const epoch = firstRegexInt(text, /(?:resets[_-]?at|reset[_-]?at|x-codex-primary-reset-at)[\"']?\\s*[:=]\\s*[\"']?(\\d{9,})/i);\n  if (typeof epoch === 'number' && epoch > 0) {\n    return new Date(epoch * 1000);\n  }\n\n  const seconds = firstRegexInt(\n    text,\n    /(?:resets[_-]?in[_-]?seconds|reset[_-]?after[_-]?seconds|x-codex-primary-reset-after-seconds)[\"']?\\s*[:=]\\s*[\"']?(\\d{1,10})/i,\n  );\n  if (typeof seconds === 'number' && seconds > 0) {\n    return new Date(Date.now() + seconds * 1000);\n  }\n\n  return undefined;\n}\n\nfunction formatQuotaWindow(minutes: number): string {\n  if (minutes <= 0) {\n    return 'quota';\n  }\n  if (minutes % (24 * 60) === 0) {\n    return `${minutes / (24 * 60)}-day`;\n  }\n  if (minutes % 60 === 0) {\n    return `${minutes / 60}-hour`;\n  }\n  return `${minutes}-minute`;\n}\n\nfunction relativeDurationString(untilDate: Date): string | undefined {\n  const seconds = Math.round((untilDate.getTime() - Date.now()) / 1000);\n  if (seconds <= 0) {\n    return undefined;\n  }\n\n  let totalMinutes = Math.floor(seconds / 60);\n  if (totalMinutes <= 0) {\n    return '<1m';\n  }\n\n  const days = Math.floor(totalMinutes / (24 * 60));\n  totalMinutes %= 24 * 60;\n  const hours = Math.floor(totalMinutes / 60);\n  const minutes = totalMinutes % 60;\n\n  const parts: string[] = [];\n  if (days > 0) {\n    parts.push(`${days}d`);\n  }\n  if (hours > 0) {\n    parts.push(`${hours}h`);\n  }\n  if (minutes > 0 && parts.length < 2) {\n    parts.push(`${minutes}m`);\n  }\n\n  return parts.length > 0 ? parts.join(' ') : '<1m';\n}\n\nfunction usageLimitFriendlyMessage(text: string): string | undefined {\n  const lower = text.toLowerCase();\n  const isUsageLimit =\n    lower.includes('usage_limit_reached') ||\n    lower.includes('usage limit has been reached') ||\n    lower.includes('too many requests') ||\n    lower.includes('rate limit') ||\n    lower.includes('x-codex-primary-used-percent\":\"100\"');\n\n  if (!isUsageLimit) {\n    return undefined;\n  }\n\n  let message =\n    'Usage limit reached for the selected model on the current plan. Try another model, or retry after your quota resets.';\n\n  const usedPercent = usageLimitUsedPercent(text);\n  if (typeof usedPercent === 'number') {\n    const windowMinutes = usageLimitWindowMinutes(text);\n    if (typeof windowMinutes === 'number' && windowMinutes > 0) {\n      message += ` Current usage: ${usedPercent}% of your ${formatQuotaWindow(windowMinutes)} quota window.`;\n    } else {\n      message += ` Current usage: ${usedPercent}% of your quota window.`;\n    }\n  }\n\n  const resetDate = usageLimitResetDate(text);\n  if (resetDate) {\n    const formattedReset = new Intl.DateTimeFormat(undefined, {\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      timeZoneName: 'short',\n    }).format(resetDate);\n\n    const remaining = relativeDurationString(resetDate);\n    if (remaining) {\n      message += ` Quota resets at ${formattedReset} (in about ${remaining}).`;\n    } else {\n      message += ` Quota resets at ${formattedReset}.`;\n    }\n  }\n\n  return message;\n}\n\nfunction normalizedAgentOutputLine(line: string): string {\n  const friendly = usageLimitFriendlyMessage(line);\n  if (friendly) {\n    return `❌ ${friendly}`;\n  }\n  return line;\n}\n\nfunction userFacingAgentErrorMessage(raw: string): string {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return 'Unknown error';\n  }\n\n  const friendly = usageLimitFriendlyMessage(trimmed);\n  if (friendly) {\n    return friendly;\n  }\n\n  if (trimmed.length > 280) {\n    return `${trimmed.slice(0, 280)}...`;\n  }\n\n  return trimmed;\n}\n\nfunction isAlphaNumericCharacter(character: string): boolean {\n  return /^[\\p{L}\\p{N}]$/u.test(character);\n}\n\nfunction isWhitespaceCharacter(character: string): boolean {\n  return /^\\s$/u.test(character);\n}\n\nfunction inferredChunkSeparator(currentLine: string, nextPart: string): '' | ' ' | '\\n' {\n  if (!currentLine || !nextPart) {\n    return '';\n  }\n\n  if (currentLine.endsWith('**') && nextPart.startsWith('**')) {\n    return '\\n';\n  }\n\n  const trimmedNext = nextPart.trim();\n  if (trimmedNext.startsWith('#') && currentLine.trim()) {\n    return '\\n';\n  }\n\n  // We do NOT guess whether to insert spaces or swallow empty strings for streaming chunks.\n  // The LLM provides correct whitespace in `message.part.delta`.\n  return '';\n}\n\nfunction parseQuestionOptions(raw: unknown): OpenCodeQuestionOption[] {\n  if (!Array.isArray(raw)) {\n    return [];\n  }\n\n  return raw\n    .map((item, index) => {\n      if (!item || typeof item !== 'object') {\n        return null;\n      }\n\n      const option = item as Record<string, unknown>;\n      const label = toStringValue(option.label);\n      if (!label) {\n        return null;\n      }\n\n      return {\n        id: toStringValue(option.id) || `option-${index}`,\n        label,\n        description: toStringValue(option.description),\n      } satisfies OpenCodeQuestionOption;\n    })\n    .filter((item): item is OpenCodeQuestionOption => item !== null);\n}\n\nfunction normalizeQuestion(raw: unknown, fallbackSessionID: string): OpenCodeQuestion | null {\n  if (!raw || typeof raw !== 'object') {\n    return null;\n  }\n\n  const record = raw as Record<string, unknown>;\n  const nestedQuestionsRaw = Array.isArray(record.questions) ? record.questions : [];\n\n  const nestedQuestions = nestedQuestionsRaw\n    .map((questionItem, index): OpenCodeQuestionItem | null => {\n      if (!questionItem || typeof questionItem !== 'object') {\n        return null;\n      }\n\n      const item = questionItem as Record<string, unknown>;\n      const prompt =\n        toStringValue(item.prompt) ||\n        toStringValue(item.question) ||\n        toStringValue(item.text) ||\n        `Question ${index + 1}`;\n\n      return {\n        id: toStringValue(item.id) || `question-${index}`,\n        prompt,\n        options: parseQuestionOptions(item.choices ?? item.options),\n        inputType: toStringValue(item.type) || undefined,\n      };\n    })\n    .filter((item): item is OpenCodeQuestionItem => item !== null);\n\n  const sessionID =\n    toStringValue(record.sessionID) ||\n    toStringValue(record.sessionId) ||\n    toStringValue(record.session_id) ||\n    fallbackSessionID;\n\n  return {\n    id: toStringValue(record.id),\n    sessionID,\n    prompt: toStringValue(record.prompt) || 'Agent asked a question.',\n    options: parseQuestionOptions(record.choices ?? record.options),\n    questions: nestedQuestions,\n  };\n}\n\nfunction normalizePermission(raw: unknown, fallbackSessionID: string): OpenCodePermission | null {\n  if (!raw || typeof raw !== 'object') {\n    return null;\n  }\n\n  const record = raw as Record<string, unknown>;\n  const sessionID =\n    toStringValue(record.sessionID) ||\n    toStringValue(record.sessionId) ||\n    toStringValue(record.session_id) ||\n    fallbackSessionID;\n\n  return {\n    id: toStringValue(record.id),\n    sessionID,\n    title: toStringValue(record.title) || 'Permission requested',\n    type: toStringValue(record.type),\n    message: toStringValue(record.message),\n    pattern: toStringValue(record.pattern),\n  };\n}\n\nfunction isAbortError(error: unknown): boolean {\n  return error instanceof DOMException && error.name === 'AbortError';\n}\n\nfunction sanitizeChangedFiles(files: unknown): string[] {\n  if (!Array.isArray(files)) {\n    return [];\n  }\n\n  return files.filter((item): item is string => typeof item === 'string' && item.trim().length > 0);\n}\n\nfunction trimmedValue(value: string | undefined): string {\n  return (value || '').trim();\n}\n\nexport function useRefineRun() {\n  const [status, setStatus] = useState<RefineRunStatus>('idle');\n  const [logs, setLogs] = useState<string[]>([]);\n  const [partialLine, setPartialLine] = useState('');\n  const [pendingQuestion, setPendingQuestion] = useState<OpenCodeQuestion | null>(null);\n  const [pendingPermission, setPendingPermission] = useState<OpenCodePermission | null>(null);\n  const [isSubmittingInput, setIsSubmittingInput] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [summary, setSummary] = useState<string | null>(null);\n  const [changedFiles, setChangedFiles] = useState<string[]>([]);\n  const [continueSession, setContinueSession] = useState(true);\n  const [hasSession, setHasSession] = useState(false);\n\n  const currentProjectPathRef = useRef('');\n  const lastSessionIDRef = useRef('');\n  const abortControllerRef = useRef<AbortController | null>(null);\n\n  const appendLines = useCallback((incoming: string[]) => {\n    if (incoming.length === 0) {\n      return;\n    }\n\n    setLogs((previous) => {\n      const next = [...previous];\n      for (const rawLine of incoming) {\n        const line = rawLine.replaceAll('\\r', '');\n        if (!line) {\n          continue;\n        }\n        if (next[next.length - 1] === line) {\n          continue;\n        }\n        next.push(line);\n      }\n      return next.length > 1000 ? next.slice(-1000) : next;\n    });\n  }, []);\n\n  const appendLine = useCallback(\n    (line: string) => {\n      appendLines([line]);\n    },\n    [appendLines],\n  );\n\n  const flushPartialLine = useCallback(() => {\n    setPartialLine((previous) => {\n      if (previous.trim()) {\n        appendLines([previous]);\n      }\n      return '';\n    });\n  }, [appendLines]);\n\n  const updateChangedFiles = useCallback((files: unknown) => {\n    setChangedFiles(sanitizeChangedFiles(files));\n  }, []);\n\n  const handleOutputLine = useCallback((line: string) => {\n    const sessionID = extractSessionIDFromText(line);\n    if (sessionID) {\n      lastSessionIDRef.current = sessionID;\n      setHasSession(true);\n    }\n\n    const lower = line.toLowerCase();\n    if (lower.includes('agent needs input') || lower.startsWith('❓ question:')) {\n      setPendingQuestion((existing) => {\n        if (existing) {\n          return existing;\n        }\n\n        const prompt = line.replace(/^❓\\s*question:\\s*/i, '').trim();\n        return {\n          id: '',\n          sessionID: lastSessionIDRef.current,\n          prompt: prompt || 'Agent asked a question.',\n          options: [],\n          questions: [],\n        };\n      });\n      setPendingPermission(null);\n    }\n  }, []);\n\n  const appendOutputChunk = useCallback(\n    (chunk: string) => {\n      const normalized = normalizeIncomingOutputText(chunk);\n      if (!normalized) {\n        return;\n      }\n\n      setPartialLine((previous) => {\n        let activeLine = previous;\n        const completedLines: string[] = [];\n        const parts = normalized.split('\\n');\n\n        for (let index = 0; index < parts.length; index += 1) {\n          const part = parts[index] ?? '';\n          const isLast = index === parts.length - 1;\n\n          if (part) {\n            const separator = inferredChunkSeparator(activeLine, part);\n            if (separator === '\\n') {\n              if (activeLine) {\n                completedLines.push(activeLine);\n              }\n              activeLine = part;\n            } else if (separator === ' ') {\n              activeLine += ' ' + part;\n            } else {\n              activeLine += part;\n            }\n          }\n\n          if (!isLast) {\n            if (activeLine) {\n              completedLines.push(activeLine);\n            }\n            activeLine = '';\n          }\n        }\n\n        if (completedLines.length > 0) {\n          appendLines(completedLines);\n        }\n\n        return activeLine;\n      });\n    },\n    [appendLines],\n  );\n\n  const appendOutputMessage = useCallback(\n    (output: string) => {\n      flushPartialLine();\n\n      const normalized = normalizeIncomingOutputText(output);\n      const lines = normalized.split('\\n');\n      if (lines.length > 0 && lines[lines.length - 1] === '') {\n        lines.pop();\n      }\n\n      const normalizedLines: string[] = [];\n      for (const rawLine of lines) {\n        const line = normalizedAgentOutputLine(rawLine);\n        handleOutputLine(line);\n        normalizedLines.push(line);\n      }\n\n      if (normalizedLines.length > 0) {\n        appendLines(normalizedLines);\n      }\n\n      const sessionID = extractSessionIDFromText(normalized);\n      if (sessionID) {\n        lastSessionIDRef.current = sessionID;\n        setHasSession(true);\n      }\n    },\n    [appendLines, flushPartialLine, handleOutputLine],\n  );\n\n  const handleSseEvent = useCallback(\n    (event: OpenCodeSseEvent) => {\n      if (event.question) {\n        const question = normalizeQuestion(event.question, lastSessionIDRef.current);\n        if (question) {\n          if (question.sessionID) {\n            lastSessionIDRef.current = question.sessionID;\n          }\n          setPendingQuestion(question);\n          setPendingPermission(null);\n        }\n      }\n\n      if (event.permission) {\n        const permission = normalizePermission(event.permission, lastSessionIDRef.current);\n        if (permission) {\n          if (permission.sessionID) {\n            lastSessionIDRef.current = permission.sessionID;\n          }\n          setPendingPermission(permission);\n          setPendingQuestion(null);\n        }\n      }\n\n      if (typeof event.outputChunk === 'string') {\n        appendOutputChunk(event.outputChunk);\n      }\n\n      if (typeof event.output === 'string') {\n        appendOutputMessage(event.output);\n      }\n\n      if (event.changedFiles) {\n        updateChangedFiles(event.changedFiles);\n      }\n\n      if (typeof event.error === 'string' && event.error.trim() && !event.done) {\n        setError(userFacingAgentErrorMessage(event.error));\n      }\n\n      if (event.done) {\n        flushPartialLine();\n        setPendingPermission(null);\n        setPendingQuestion(null);\n\n        if (event.success === true) {\n          setStatus('completed');\n          setError(null);\n\n          const filesChanged = sanitizeChangedFiles(event.changedFiles);\n          if (filesChanged.length > 0) {\n            updateChangedFiles(filesChanged);\n            setSummary(\n              `Build completed. ${filesChanged.length} file${filesChanged.length === 1 ? '' : 's'} changed.`,\n            );\n          } else {\n            setSummary('Build completed.');\n          }\n          return;\n        }\n\n        const message = userFacingAgentErrorMessage(toStringValue(event.error) || 'Build failed.');\n        setStatus('failed');\n        setError(message);\n        setSummary(message);\n        appendLine(`❌ ${message}`);\n      }\n    },\n    [appendLine, appendOutputChunk, appendOutputMessage, flushPartialLine, updateChangedFiles],\n  );\n\n  const startRefine = useCallback(\n    async (input: StartRefineInput) => {\n      const projectPath = input.projectPath.trim();\n      if (!projectPath) {\n        setStatus('failed');\n        setError('Project path is required.');\n        setSummary('Project path is required.');\n        return;\n      }\n\n      const model = (input.model || '').trim();\n\n      abortControllerRef.current?.abort();\n\n      // Clear session if toggle is off or project changed.\n      if (!continueSession || currentProjectPathRef.current !== projectPath) {\n        lastSessionIDRef.current = '';\n        setHasSession(false);\n      }\n      currentProjectPathRef.current = projectPath;\n\n      setStatus('running');\n      setError(null);\n      setSummary(null);\n      setLogs([]);\n      setPartialLine('');\n      setPendingQuestion(null);\n      setPendingPermission(null);\n      setChangedFiles([]);\n      setIsSubmittingInput(false);\n\n      const payload: OpenCodeAgentRequest = {\n        projectPath,\n        openaiAuthMode: input.openaiAuthMode,\n      };\n      if (lastSessionIDRef.current) {\n        payload.sessionID = lastSessionIDRef.current;\n      }\n      if (input.persistCurrentInstructionsToHistory) {\n        payload.persistCurrentInstructionsToHistory = true;\n      }\n      if (model) {\n        payload.model = model;\n      }\n\n      const trimmedInstructions = input.instructions?.trim() || '';\n      if (trimmedInstructions) {\n        payload.instructions = trimmedInstructions;\n      }\n\n      const instructionAttachmentPaths = (input.instructionAttachmentPaths || [])\n        .map((value) => value.trim())\n        .filter((value, index, values) => value.length > 0 && values.indexOf(value) === index);\n      if (instructionAttachmentPaths.length > 0) {\n        payload.instructionAttachmentPaths = instructionAttachmentPaths;\n      }\n\n      const openaiKey = trimmedValue(input.providerKeys.openaiKey);\n      const anthropicKey = trimmedValue(input.providerKeys.anthropicKey);\n      const geminiKey = trimmedValue(input.providerKeys.geminiKey);\n      const fireworksKey = trimmedValue(input.providerKeys.fireworksKey);\n      const openrouterKey = trimmedValue(input.providerKeys.openrouterKey);\n      const opencodeZenKey = trimmedValue(input.providerKeys.opencodeZenKey);\n      const xaiKey = trimmedValue(input.providerKeys.xaiKey);\n      const elevenLabsKey = trimmedValue(input.providerKeys.elevenLabsKey);\n\n      if (openaiKey) {\n        payload.openaiKey = openaiKey;\n      }\n      if (anthropicKey) {\n        payload.anthropicKey = anthropicKey;\n      }\n      if (geminiKey) {\n        payload.geminiKey = geminiKey;\n      }\n      if (fireworksKey) {\n        payload.fireworksKey = fireworksKey;\n      }\n      if (openrouterKey) {\n        payload.openrouterKey = openrouterKey;\n      }\n      if (opencodeZenKey) {\n        payload.opencodeZenKey = opencodeZenKey;\n      }\n      if (xaiKey) {\n        payload.xaiKey = xaiKey;\n      }\n      if (elevenLabsKey) {\n        payload.elevenLabsKey = elevenLabsKey;\n      }\n\n      const imageSource = input.imageSource?.trim() || '';\n      if (imageSource) {\n        payload.imageSource = imageSource;\n      }\n\n      if (input.openaiAuthMode === 'codex-jwt' && openaiKey) {\n        const refreshToken = input.openaiRefreshToken?.trim() || '';\n        if (refreshToken) {\n          payload.openaiRefreshToken = refreshToken;\n        }\n        if (typeof input.openaiExpiresAt === 'number' && Number.isFinite(input.openaiExpiresAt)) {\n          payload.openaiExpiresAt = input.openaiExpiresAt;\n        }\n      }\n\n      const controller = new AbortController();\n      abortControllerRef.current = controller;\n\n      try {\n        await streamJsonSse<OpenCodeAgentRequest, OpenCodeSseEvent>({\n          url: '/api/opencode/refine',\n          body: payload,\n          signal: controller.signal,\n          onEvent: handleSseEvent,\n        });\n\n        flushPartialLine();\n        setStatus((previous) => (previous === 'running' ? 'completed' : previous));\n        setSummary((previous) => previous || 'Build completed.');\n      } catch (requestError) {\n        flushPartialLine();\n\n        if (isAbortError(requestError)) {\n          setStatus((previous) => (previous === 'running' ? 'cancelled' : previous));\n          setSummary((previous) => previous || 'Build stopped.');\n          appendLine('⏹️ Build stopped.');\n        } else {\n          const message = toErrorMessage(requestError, 'Build failed.');\n          setStatus('failed');\n          setError(message);\n          setSummary(message);\n          appendLine(`❌ ${message}`);\n        }\n      } finally {\n        abortControllerRef.current = null;\n      }\n    },\n    [appendLine, flushPartialLine, handleSseEvent],\n  );\n\n  const stopRun = useCallback(() => {\n    abortControllerRef.current?.abort();\n  }, []);\n\n  const submitQuestion = useCallback(\n    async (input: SubmitQuestionInput) => {\n      if (!pendingQuestion || isSubmittingInput) {\n        return false;\n      }\n\n      const question = pendingQuestion;\n      const payload: OpenCodeQuestionRespondRequest = {\n        sessionID: question.sessionID,\n        questionID: question.id,\n        answer: input.answer,\n        projectPath: currentProjectPathRef.current || undefined,\n      };\n\n      if (input.answers && input.answers.length > 0) {\n        payload.answers = input.answers;\n      }\n\n      if (input.answerByQuestionID && Object.keys(input.answerByQuestionID).length > 0) {\n        payload.answerByQuestionID = input.answerByQuestionID;\n      }\n\n      setIsSubmittingInput(true);\n      try {\n        await openCodeApi.respondToQuestion(payload);\n        setPendingQuestion(null);\n        setPendingPermission(null);\n        setError(null);\n\n        const trimmed = input.answer.trim();\n        appendLine(trimmed ? `A: ${trimmed}` : 'A: (dismissed)');\n        return true;\n      } catch (requestError) {\n        const message = toErrorMessage(requestError, 'Failed to send answer.');\n        setError(message);\n        appendLine(`❌ ${message}`);\n        return false;\n      } finally {\n        setIsSubmittingInput(false);\n      }\n    },\n    [appendLine, isSubmittingInput, pendingQuestion],\n  );\n\n  const respondToPermission = useCallback(\n    async (response: OpenCodePermissionRespondRequest['response']) => {\n      if (!pendingPermission || isSubmittingInput) {\n        return false;\n      }\n\n      const permission = pendingPermission;\n      const payload: OpenCodePermissionRespondRequest = {\n        sessionID: permission.sessionID,\n        permissionID: permission.id,\n        response,\n        projectPath: currentProjectPathRef.current || undefined,\n      };\n\n      setIsSubmittingInput(true);\n      try {\n        await openCodeApi.respondToPermission(payload);\n        setPendingPermission(null);\n        setPendingQuestion(null);\n        setError(null);\n        appendLine(`Permission response sent: ${response}`);\n        return true;\n      } catch (requestError) {\n        const message = toErrorMessage(requestError, 'Failed to send permission response.');\n        setError(message);\n        appendLine(`❌ ${message}`);\n        return false;\n      } finally {\n        setIsSubmittingInput(false);\n      }\n    },\n    [appendLine, isSubmittingInput, pendingPermission],\n  );\n\n  return useMemo(\n    () => ({\n      status,\n      logs,\n      partialLine,\n      pendingQuestion,\n      pendingPermission,\n      isSubmittingInput,\n      error,\n      summary,\n      changedFiles,\n      isRunning: status === 'running',\n      isAwaitingInput: pendingQuestion !== null || pendingPermission !== null,\n      hasSession,\n      continueSession,\n      setContinueSession,\n      startRefine,\n      stopRun,\n      submitQuestion,\n      respondToPermission,\n    }),\n    [\n      changedFiles,\n      continueSession,\n      error,\n      hasSession,\n      isSubmittingInput,\n      logs,\n      partialLine,\n      pendingPermission,\n      pendingQuestion,\n      respondToPermission,\n      startRefine,\n      status,\n      stopRun,\n      submitQuestion,\n      summary,\n    ],\n  );\n}\n"
  },
  {
    "path": "web/src/lib/api.ts",
    "content": "import type {\n  OpenCodeAvailableModelsRequest,\n  OpenCodeAvailableModelsResponse,\n  OpenCodeAuthConnectRequest,\n  OpenCodeAuthConnectionResponse,\n  OpenCodeAuthDisconnectRequest,\n  OpenCodeAuthOAuthStartRequest,\n  OpenCodeAuthOAuthStartResponse,\n  OpenCodeAuthOAuthStatusResponse,\n  OpenAIModelsRequest,\n  OpenAIModelsResponse,\n  OpenCodeAuthStatus,\n  OpenCodeHealthResponse,\n  OpenCodeInstructionFilesPickResponse,\n  OpenCodeProjectHistoryResponse,\n  OpenCodeProjectIDEStatusResponse,\n  OpenCodePermissionRespondRequest,\n  OpenCodeProjectPickResponse,\n  OpenCodeProjectEnvelope,\n  OpenCodeProjectOpenRequest,\n  OpenCodeProjectOpenResponse,\n  OpenCodeQuestionRespondRequest,\n  OpenCodeProjectSettingsRequest,\n  OpenCodeProjectSettingsResponse,\n  OpenCodeGenerateIconRequest,\n  OpenCodeGenerateIconResponse,\n} from '../types/opencode';\nimport { withServerAuthHeaders } from './server-auth';\n\nconst API_PREFIX = '/api';\n\nexport class ApiError extends Error {\n  readonly status: number;\n\n  constructor(message: string, status: number) {\n    super(message);\n    this.name = 'ApiError';\n    this.status = status;\n  }\n}\n\nasync function parseResponseError(response: Response): Promise<string> {\n  const raw = await response.text();\n  if (!raw) {\n    return `Request failed with HTTP ${response.status}`;\n  }\n\n  try {\n    const parsed = JSON.parse(raw) as { error?: string; message?: string };\n    return parsed.error || parsed.message || `Request failed with HTTP ${response.status}`;\n  } catch {\n    return raw;\n  }\n}\n\nasync function requestJson<T>(input: RequestInfo | URL, init?: RequestInit): Promise<T> {\n  const response = await fetch(input, {\n    ...init,\n    headers: withServerAuthHeaders(init?.headers),\n  });\n  if (!response.ok) {\n    throw new ApiError(await parseResponseError(response), response.status);\n  }\n  return (await response.json()) as T;\n}\n\nexport const openCodeApi = {\n  async getHealth(): Promise<OpenCodeHealthResponse> {\n    return requestJson<OpenCodeHealthResponse>(`${API_PREFIX}/opencode/health`);\n  },\n\n  async getAuthStatus(): Promise<OpenCodeAuthStatus> {\n    return requestJson<OpenCodeAuthStatus>(`${API_PREFIX}/opencode/auth/status`);\n  },\n\n  async connectOpenAIAuth(payload: OpenCodeAuthConnectRequest): Promise<OpenCodeAuthConnectionResponse> {\n    return requestJson<OpenCodeAuthConnectionResponse>(`${API_PREFIX}/opencode/auth/openai/connect`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async disconnectOpenAIAuth(payload: OpenCodeAuthDisconnectRequest): Promise<OpenCodeAuthConnectionResponse> {\n    return requestJson<OpenCodeAuthConnectionResponse>(`${API_PREFIX}/opencode/auth/openai/disconnect`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async startOpenAIOAuth(payload: OpenCodeAuthOAuthStartRequest): Promise<OpenCodeAuthOAuthStartResponse> {\n    return requestJson<OpenCodeAuthOAuthStartResponse>(`${API_PREFIX}/opencode/auth/openai/oauth/start`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async getOpenAIOAuthStatus(state: string): Promise<OpenCodeAuthOAuthStatusResponse> {\n    const search = new URLSearchParams({ state });\n    return requestJson<OpenCodeAuthOAuthStatusResponse>(`${API_PREFIX}/opencode/auth/openai/oauth/status?${search.toString()}`);\n  },\n\n  async getProject(projectPath: string): Promise<OpenCodeProjectEnvelope> {\n    const search = new URLSearchParams({ path: projectPath });\n    return requestJson<OpenCodeProjectEnvelope>(`${API_PREFIX}/opencode/project?${search.toString()}`);\n  },\n\n  async getProjectHistory(projectPath: string): Promise<OpenCodeProjectHistoryResponse> {\n    const search = new URLSearchParams({ path: projectPath });\n    return requestJson<OpenCodeProjectHistoryResponse>(`${API_PREFIX}/opencode/project/history?${search.toString()}`);\n  },\n\n  async getProjectIDEStatus(projectPath: string): Promise<OpenCodeProjectIDEStatusResponse> {\n    const search = new URLSearchParams({ path: projectPath });\n    return requestJson<OpenCodeProjectIDEStatusResponse>(`${API_PREFIX}/opencode/project/ide/status?${search.toString()}`);\n  },\n\n  async pickProjectFolder(): Promise<OpenCodeProjectPickResponse> {\n    return requestJson<OpenCodeProjectPickResponse>(`${API_PREFIX}/opencode/project/pick`, {\n      method: 'POST',\n    });\n  },\n\n  async pickInstructionFiles(): Promise<OpenCodeInstructionFilesPickResponse> {\n    return requestJson<OpenCodeInstructionFilesPickResponse>(`${API_PREFIX}/opencode/instructions/files/pick`, {\n      method: 'POST',\n    });\n  },\n\n  async renameProject(path: string, name: string): Promise<{ success: boolean; project?: OpenCodeProjectEnvelope['project']; error?: string }> {\n    return requestJson(`${API_PREFIX}/opencode/project/rename`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ path, name }),\n    });\n  },\n\n  async updateProjectSettings(payload: OpenCodeProjectSettingsRequest): Promise<OpenCodeProjectSettingsResponse> {\n    return requestJson<OpenCodeProjectSettingsResponse>(`${API_PREFIX}/opencode/project/settings`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async generateIcon(payload: OpenCodeGenerateIconRequest): Promise<OpenCodeGenerateIconResponse> {\n    return requestJson<OpenCodeGenerateIconResponse>(`${API_PREFIX}/opencode/project/icon/generate`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async getProjectIcon(path: string): Promise<{ success: boolean; exists: boolean; image?: string }> {\n    return requestJson(`${API_PREFIX}/opencode/project/icon?path=${encodeURIComponent(path)}`);\n  },\n\n  async openProject(payload: OpenCodeProjectOpenRequest): Promise<OpenCodeProjectOpenResponse> {\n    return requestJson<OpenCodeProjectOpenResponse>(`${API_PREFIX}/opencode/project/open`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async fetchOpenAIModels(payload: OpenAIModelsRequest): Promise<OpenAIModelsResponse> {\n    return requestJson<OpenAIModelsResponse>(`${API_PREFIX}/providers/openai/models`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async fetchOpenCodeAvailableModels(payload: OpenCodeAvailableModelsRequest): Promise<OpenCodeAvailableModelsResponse> {\n    return requestJson<OpenCodeAvailableModelsResponse>(`${API_PREFIX}/opencode/models/available`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async respondToQuestion(payload: OpenCodeQuestionRespondRequest): Promise<{ ok: boolean }> {\n    return requestJson<{ ok: boolean }>(`${API_PREFIX}/opencode/question/respond`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n\n  async respondToPermission(payload: OpenCodePermissionRespondRequest): Promise<{ ok: boolean }> {\n    return requestJson<{ ok: boolean }>(`${API_PREFIX}/opencode/permission/respond`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n  },\n};\n\nexport function toErrorMessage(error: unknown, fallback: string): string {\n  if (error instanceof Error && error.message.trim()) {\n    return error.message.trim();\n  }\n  if (typeof error === 'string' && error.trim()) {\n    return error.trim();\n  }\n  return fallback;\n}\n"
  },
  {
    "path": "web/src/lib/console-render.ts",
    "content": "import MarkdownIt from 'markdown-it';\n\nconst inlineMarkdown = new MarkdownIt({\n  html: false,\n  linkify: false,\n  typographer: false,\n});\n\ninlineMarkdown.validateLink = (url: string) => {\n  const lower = url.trim().toLowerCase();\n  return lower.startsWith('http://') || lower.startsWith('https://') || lower.startsWith('mailto:');\n};\n\nconst defaultLinkOpen =\n  inlineMarkdown.renderer.rules.link_open ||\n  ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options));\n\ninlineMarkdown.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n  const token = tokens[idx];\n  if (!token) {\n    return defaultLinkOpen(tokens, idx, options, env, self);\n  }\n  token.attrSet('target', '_blank');\n  token.attrSet('rel', 'noreferrer noopener');\n  return defaultLinkOpen(tokens, idx, options, env, self);\n};\n\nexport function lineLooksLikeMarkdown(line: string): boolean {\n  const trimmed = line.trim();\n  if (!trimmed) {\n    return false;\n  }\n  if (trimmed.startsWith('#') || trimmed.startsWith('- ') || trimmed.startsWith('* ') || trimmed.startsWith('>')) {\n    return true;\n  }\n  return trimmed.includes('**') || trimmed.includes('__') || trimmed.includes('`') || trimmed.includes('[');\n}\n\nexport function parseConsoleHeading(line: string): { level: number; text: string } | null {\n  const trimmed = line.trim();\n  if (!trimmed.startsWith('#')) {\n    return null;\n  }\n\n  let level = 0;\n  for (const character of trimmed) {\n    if (character === '#') {\n      level += 1;\n      continue;\n    }\n    break;\n  }\n\n  if (level <= 0 || level > 6) {\n    return null;\n  }\n\n  const text = trimmed.slice(level).trim();\n  if (!text) {\n    return null;\n  }\n\n  return { level, text };\n}\n\nexport function parseConsoleMarkdown(line: string): string | null {\n  try {\n    return inlineMarkdown.renderInline(line);\n  } catch {\n    return null;\n  }\n}\n"
  },
  {
    "path": "web/src/lib/model-catalog.ts",
    "content": "import type {\n  ModelCatalogEntry,\n  ModelCatalogGroup,\n  ModelCatalogProvider,\n  OpenAIModelsResponseModel,\n  ProviderID,\n  ResolvedRefineModel,\n} from '../types/opencode';\n\nconst OPTION_SEPARATOR = '::';\n\nexport const MODEL_PROVIDERS: ModelCatalogProvider[] = [\n  {\n    id: 'ollama',\n    label: 'Ollama',\n    requiresKey: false,\n  },\n  {\n    id: 'xai',\n    label: 'xAI',\n    requiresKey: true,\n    keyField: 'xaiKey',\n    keyLabel: 'xAI API Key',\n  },\n  {\n    id: 'fireworks',\n    label: 'Fireworks',\n    requiresKey: true,\n    keyField: 'fireworksKey',\n    keyLabel: 'Fireworks API Key',\n  },\n  {\n    id: 'openrouter',\n    label: 'OpenRouter',\n    requiresKey: true,\n    keyField: 'openrouterKey',\n    keyLabel: 'OpenRouter API Key',\n  },\n  {\n    id: 'opencode',\n    label: 'OpenCode Zen',\n    requiresKey: true,\n    keyField: 'opencodeZenKey',\n    keyLabel: 'OpenCode Zen API Key',\n  },\n  {\n    id: 'openai',\n    label: 'OpenAI',\n    requiresKey: true,\n    keyField: 'openaiKey',\n    keyLabel: 'OpenAI / ChatGPT Token',\n  },\n  {\n    id: 'anthropic',\n    label: 'Anthropic',\n    requiresKey: true,\n    keyField: 'anthropicKey',\n    keyLabel: 'Anthropic API Key',\n  },\n  {\n    id: 'google',\n    label: 'Google',\n    requiresKey: true,\n    keyField: 'geminiKey',\n    keyLabel: 'Google Gemini API Key',\n  },\n];\n\nconst STATIC_MODEL_CATALOG: Record<ProviderID, ModelCatalogEntry[]> = {\n  ollama: [\n    {\n      providerId: 'ollama',\n      id: 'gpt-oss:20b',\n      label: 'GPT-OSS',\n      description: 'Local model via Ollama.',\n    },\n    {\n      providerId: 'ollama',\n      id: 'qwen3.5',\n      label: 'Qwen 3.5',\n      description: 'Local multimodal model via Ollama.',\n    },\n  ],\n  xai: [\n    {\n      providerId: 'xai',\n      id: 'grok-4-1-fast-reasoning',\n      label: 'Grok Fast',\n      description: 'xAI fast reasoning model for agentic tasks.',\n    },\n  ],\n  fireworks: [\n    {\n      providerId: 'fireworks',\n      id: 'glm-5',\n      label: 'GLM-5',\n      description: 'Fireworks GLM-5.',\n    },\n    {\n      providerId: 'fireworks',\n      id: 'kimi-k2p5',\n      label: 'Kimi K2.5',\n      description: 'Fireworks Kimi K2.5.',\n    },\n    {\n      providerId: 'fireworks',\n      id: 'minimax-m2p5',\n      label: 'MiniMax M2.5',\n      description: 'Fireworks MiniMax M2.5.',\n    },\n  ],\n  openrouter: [\n    {\n      providerId: 'openrouter',\n      id: 'z-ai/glm-5',\n      label: 'GLM-5',\n      description: 'OpenRouter GLM-5.',\n    },\n    {\n      providerId: 'openrouter',\n      id: 'moonshotai/kimi-k2.5',\n      label: 'Kimi K2.5',\n      description: 'OpenRouter Kimi K2.5.',\n    },\n    {\n      providerId: 'openrouter',\n      id: 'minimax/minimax-m2.5',\n      label: 'MiniMax M2.5',\n      description: 'OpenRouter MiniMax M2.5.',\n    },\n  ],\n  opencode: [\n    {\n      providerId: 'opencode',\n      id: 'kimi-k2.5-free',\n      label: 'Kimi K2.5 FREE',\n      description: 'OpenCode Zen Kimi K2.5 free tier.',\n    },\n    {\n      providerId: 'opencode',\n      id: 'glm-5-free',\n      label: 'GLM 5 FREE',\n      description: 'OpenCode Zen GLM-5 free tier.',\n    },\n    {\n      providerId: 'opencode',\n      id: 'minimax-m2.5-free',\n      label: 'MiniMax M2.5 FREE',\n      description: 'OpenCode Zen MiniMax free tier.',\n    },\n    {\n      providerId: 'opencode',\n      id: 'big-pickle',\n      label: 'Big Pickle FREE',\n      description: 'OpenCode Zen Big Pickle free tier.',\n    },\n  ],\n  openai: [\n    {\n      providerId: 'openai',\n      id: 'gpt-5.4',\n      label: 'GPT-5.4',\n      description: 'OpenAI GPT-5.4.',\n    },\n    {\n      providerId: 'openai',\n      id: 'gpt-5.3-codex',\n      label: 'GPT-5.3 Codex',\n      description: 'OpenAI Codex model.',\n    },\n    {\n      providerId: 'openai',\n      id: 'gpt-5.2',\n      label: 'GPT-5.2',\n      description: 'OpenAI GPT-5.2.',\n    },\n    {\n      providerId: 'openai',\n      id: 'gpt-5.2-codex',\n      label: 'GPT-5.2 Codex',\n      description: 'OpenAI Codex model.',\n    },\n    {\n      providerId: 'openai',\n      id: 'gpt-5.1-codex-mini',\n      label: 'GPT-5.1 Codex mini',\n      description: 'OpenAI Codex mini model.',\n    },\n    {\n      providerId: 'openai',\n      id: 'gpt-5.1-codex-max',\n      label: 'GPT-5.1 Codex Max',\n      description: 'OpenAI Codex max model.',\n    },\n  ],\n  anthropic: [\n    {\n      providerId: 'anthropic',\n      id: 'claude-sonnet-4-6',\n      label: 'Claude Sonnet 4.6',\n      description: 'Anthropic Sonnet 4.6.',\n    },\n    {\n      providerId: 'anthropic',\n      id: 'claude-opus-4-6',\n      label: 'Claude Opus 4.6',\n      description: 'Anthropic Opus 4.6.',\n    },\n  ],\n  google: [\n    {\n      providerId: 'google',\n      id: 'gemini-3.1-pro-preview',\n      label: 'Gemini 3.1 Pro',\n      description: 'Google Gemini 3.1 Pro.',\n    },\n    {\n      providerId: 'google',\n      id: 'gemini-3-flash-preview',\n      label: 'Gemini 3 Flash',\n      description: 'Google Gemini 3 Flash.',\n    },\n  ],\n};\n\nfunction dedupeModels(models: ModelCatalogEntry[]): ModelCatalogEntry[] {\n  const seen = new Set<string>();\n  const output: ModelCatalogEntry[] = [];\n\n  for (const model of models) {\n    const key = `${model.providerId}:${model.id}`;\n    if (seen.has(key)) {\n      continue;\n    }\n    seen.add(key);\n    output.push(model);\n  }\n\n  return output;\n}\n\nexport function staticModelCatalogFor(providerId: ProviderID): ModelCatalogEntry[] {\n  return [...(STATIC_MODEL_CATALOG[providerId] || [])];\n}\n\nexport function modelCatalogGroups(dynamicOpenAIModels: OpenAIModelsResponseModel[] = []): ModelCatalogGroup[] {\n  const dynamicOpenAIEntries: ModelCatalogEntry[] = dynamicOpenAIModels.map((model) => ({\n    providerId: 'openai',\n    id: model.id,\n    label: model.displayName || model.id,\n    description: 'Loaded from ChatGPT/OpenAI model catalog.',\n    isDynamic: true,\n  }));\n\n  return MODEL_PROVIDERS.map((provider): ModelCatalogGroup => {\n    const baseModels = staticModelCatalogFor(provider.id);\n    const mergedModels =\n      provider.id === 'openai' && dynamicOpenAIEntries.length > 0\n        ? dedupeModels([...dynamicOpenAIEntries, ...baseModels])\n        : baseModels;\n\n    return {\n      provider,\n      models: mergedModels,\n    };\n  }).filter((group) => group.models.length > 0);\n}\n\nexport function providerDefinition(providerId: ProviderID): ModelCatalogProvider | undefined {\n  return MODEL_PROVIDERS.find((provider) => provider.id === providerId);\n}\n\nexport function encodeModelOptionValue(providerId: ProviderID, modelId: string): string {\n  return `${providerId}${OPTION_SEPARATOR}${encodeURIComponent(modelId)}`;\n}\n\nexport function decodeModelOptionValue(value: string): { providerId: ProviderID; modelId: string } | null {\n  const separatorIndex = value.indexOf(OPTION_SEPARATOR);\n  if (separatorIndex <= 0) {\n    return null;\n  }\n\n  const providerId = value.slice(0, separatorIndex) as ProviderID;\n  const encodedModel = value.slice(separatorIndex + OPTION_SEPARATOR.length);\n  if (!providerDefinition(providerId)) {\n    return null;\n  }\n\n  try {\n    return {\n      providerId,\n      modelId: decodeURIComponent(encodedModel),\n    };\n  } catch {\n    return {\n      providerId,\n      modelId: encodedModel,\n    };\n  }\n}\n\nexport function resolveRefineModel(providerId: ProviderID, modelId: string): ResolvedRefineModel {\n  const group = modelCatalogGroups().find((item) => item.provider.id === providerId);\n  const entry = group?.models.find((model) => model.id === modelId);\n  const label = entry ? `${group?.provider.label}: ${entry.label}` : `${providerId}/${modelId}`;\n\n  return {\n    providerId,\n    modelId,\n    value: `${providerId}/${modelId}`,\n    label,\n  };\n}\n"
  },
  {
    "path": "web/src/lib/server-auth.ts",
    "content": "const SESSION_STORAGE_KEY = 'glowby.serverToken';\n\nfunction browserTokenFromURL(): string {\n  if (typeof window === 'undefined') {\n    return '';\n  }\n\n  const url = new URL(window.location.href);\n  const token = (url.searchParams.get('glowby_token') || '').trim();\n  if (!token) {\n    return '';\n  }\n\n  try {\n    window.sessionStorage.setItem(SESSION_STORAGE_KEY, token);\n  } catch {\n    // Ignore storage failures and keep using the token for this page load.\n  }\n\n  url.searchParams.delete('glowby_token');\n  window.history.replaceState({}, document.title, url.toString());\n  return token;\n}\n\nfunction resolveServerToken(): string {\n  const envToken = String(\n    import.meta.env.VITE_GLOWBY_SERVER_TOKEN || import.meta.env.VITE_GLOWBOM_SERVER_TOKEN || '',\n  ).trim();\n  if (envToken) {\n    return envToken;\n  }\n\n  const urlToken = browserTokenFromURL();\n  if (urlToken) {\n    return urlToken;\n  }\n\n  if (typeof window === 'undefined') {\n    return '';\n  }\n\n  try {\n    return (window.sessionStorage.getItem(SESSION_STORAGE_KEY) || '').trim();\n  } catch {\n    return '';\n  }\n}\n\nexport function withServerAuthHeaders(headers?: HeadersInit): Headers {\n  const resolved = new Headers(headers);\n  const token = resolveServerToken();\n  if (token && !resolved.has('Authorization')) {\n    resolved.set('Authorization', `Bearer ${token}`);\n  }\n  return resolved;\n}\n"
  },
  {
    "path": "web/src/lib/sse.ts",
    "content": "import { withServerAuthHeaders } from './server-auth';\n\ninterface StreamJsonSseOptions<TRequest, TEvent extends Record<string, unknown>> {\n  url: string;\n  body: TRequest;\n  signal: AbortSignal;\n  onEvent: (event: TEvent) => void;\n}\n\nfunction parseErrorMessage(response: Response, bodyText: string): string {\n  if (!bodyText.trim()) {\n    return `Request failed with HTTP ${response.status}`;\n  }\n\n  try {\n    const parsed = JSON.parse(bodyText) as { error?: string; message?: string };\n    return parsed.error || parsed.message || bodyText;\n  } catch {\n    return bodyText;\n  }\n}\n\nfunction parseDataPayload(frame: string): string {\n  const lines = frame.split(/\\r?\\n/);\n  const dataLines: string[] = [];\n\n  for (const line of lines) {\n    if (line.startsWith('data:')) {\n      dataLines.push(line.slice(5).trimStart());\n    }\n  }\n\n  return dataLines.join('\\n').trim();\n}\n\nexport async function streamJsonSse<TRequest extends object, TEvent extends Record<string, unknown>>(\n  options: StreamJsonSseOptions<TRequest, TEvent>,\n): Promise<void> {\n  const response = await fetch(options.url, {\n    method: 'POST',\n    headers: withServerAuthHeaders({\n      'Content-Type': 'application/json',\n      Accept: 'text/event-stream',\n    }),\n    body: JSON.stringify(options.body),\n    signal: options.signal,\n  });\n\n  if (!response.ok) {\n    throw new Error(parseErrorMessage(response, await response.text()));\n  }\n\n  const contentType = response.headers.get('content-type') || '';\n  if (!contentType.includes('text/event-stream')) {\n    const textBody = await response.text();\n    if (!textBody.trim()) {\n      return;\n    }\n    try {\n      options.onEvent(JSON.parse(textBody) as TEvent);\n      return;\n    } catch {\n      throw new Error(textBody);\n    }\n  }\n\n  const stream = response.body;\n  if (!stream) {\n    throw new Error('No response stream was returned by the server.');\n  }\n\n  const reader = stream.getReader();\n  const decoder = new TextDecoder();\n  let buffer = '';\n\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) {\n      break;\n    }\n\n    buffer += decoder.decode(value, { stream: true });\n\n    let separatorIndex = buffer.indexOf('\\n\\n');\n    while (separatorIndex >= 0) {\n      const frame = buffer.slice(0, separatorIndex);\n      buffer = buffer.slice(separatorIndex + 2);\n\n      const payload = parseDataPayload(frame);\n      if (payload) {\n        try {\n          options.onEvent(JSON.parse(payload) as TEvent);\n        } catch {\n          // Ignore malformed event payloads and continue the stream.\n        }\n      }\n\n      separatorIndex = buffer.indexOf('\\n\\n');\n    }\n  }\n\n  const finalPayload = parseDataPayload(buffer.trim());\n  if (finalPayload) {\n    try {\n      options.onEvent(JSON.parse(finalPayload) as TEvent);\n    } catch {\n      // Ignore malformed terminal payload.\n    }\n  }\n}\n"
  },
  {
    "path": "web/src/main.tsx",
    "content": "import { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport App from './App';\nimport './styles.css';\n\ncreateRoot(document.getElementById('root')!).render(\n  <StrictMode>\n    <App />\n  </StrictMode>,\n);\n"
  },
  {
    "path": "web/src/styles.css",
    "content": ":root {\n  color-scheme: light;\n  --bg: #fafafa;\n  --surface: #ffffff;\n  --surface-soft: #f3f8f6;\n  --text: #2b2b2b;\n  --muted: #5c5c5c;\n  --border: #dfe9e4;\n  --brand-green: #29de92;\n  --brand-cyan: #29ded3;\n  --brand-ink: #1cae74;\n  --danger: #c73a3a;\n  --shadow-card: 0 18px 44px rgba(41, 222, 146, 0.14);\n  --shadow-soft: 0 8px 22px rgba(43, 43, 43, 0.08);\n}\n\n* {\n  box-sizing: border-box;\n}\n\nbody {\n  margin: 0;\n  min-height: 100vh;\n  background: linear-gradient(180deg, #eaf0ef 0%, #f1f4f3 32%, #f8f8f8 100%);\n  color: var(--text);\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,\n    'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n}\n\nh1,\nh2,\nh3,\np {\n  margin: 0;\n}\n\n.page {\n  width: min(1160px, 100%);\n  margin: 0 auto;\n  padding: 28px 16px 42px;\n  display: grid;\n  gap: 16px;\n}\n\n.app-shell {\n  min-height: 100vh;\n}\n\n.topbar {\n  height: 80px;\n  border-bottom: 1px solid #eef4f1;\n  background: #ffffff;\n}\n\n.topbar-inner {\n  max-width: 1420px;\n  height: 100%;\n  margin: 0 auto;\n  padding: 0 22px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 18px;\n}\n\n.topbar-logo {\n  display: inline-flex;\n  align-items: center;\n}\n\n.topbar-logo img {\n  width: 118px;\n  height: 29px;\n  margin-top: 8px;\n}\n\n.topbar-links {\n  display: flex;\n  align-items: center;\n  gap: 22px;\n  margin-left: auto;\n  margin-right: 8px;\n}\n\n.topbar-links a {\n  color: var(--text);\n  text-decoration: none;\n  font-size: 16px;\n  font-weight: 400;\n}\n\n.topbar-links a:hover {\n  color: var(--brand-green);\n  text-decoration: underline;\n}\n\n.topbar-cta {\n  margin-left: 2px;\n}\n\n.brand-header {\n  border: 1px solid #e2f0ea;\n  border-radius: 16px;\n  background: linear-gradient(140deg, rgba(255, 255, 255, 0.98) 0%, rgba(238, 250, 244, 0.98) 100%);\n  box-shadow: var(--shadow-card);\n  padding: 22px 22px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n.brand-eyebrow {\n  display: inline-flex;\n  margin-bottom: 10px;\n  border-radius: 999px;\n  padding: 4px 10px;\n  background: rgba(41, 222, 146, 0.12);\n  color: #177953;\n  font-size: 0.78rem;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n}\n\n.brand-copy h1 {\n  margin-top: 2px;\n  margin-bottom: 8px;\n  font-size: clamp(1.9rem, 1.15rem + 2.1vw, 2.7rem);\n  line-height: 1;\n  letter-spacing: -0.01em;\n}\n\n.brand-copy p {\n  color: var(--muted);\n  max-width: 820px;\n  font-size: 1rem;\n}\n\n.brand-header-minimal {\n  padding: 16px 18px;\n  background: rgba(255, 255, 255, 0.86);\n  box-shadow: var(--shadow-soft);\n}\n\n.brand-header-minimal .brand-copy h1 {\n  margin-bottom: 0;\n  font-size: 1.7rem;\n}\n\n.brand-header-minimal .brand-copy p {\n  margin: 10px 0 0;\n  color: var(--muted);\n  font-size: 1.12rem;\n  line-height: 1.35;\n}\n\n.brand-actions {\n  display: flex;\n  align-items: flex-start;\n  justify-content: flex-end;\n}\n\n.card {\n  border: 1px solid var(--border);\n  border-radius: 16px;\n  background: var(--surface);\n  box-shadow: var(--shadow-soft);\n  padding: 16px;\n  display: grid;\n  gap: 12px;\n}\n\n.card h2 {\n  margin-bottom: 2px;\n  font-size: 1.08rem;\n}\n\n.card-title-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n.composer-card {\n  gap: 12px;\n  padding: 16px;\n}\n\n.composer-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n.composer-toolbar-primary {\n  flex: 1 1 420px;\n  min-width: 0;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 10px;\n}\n\n.composer-toolbar-actions {\n  justify-content: flex-end;\n}\n\n.composer-chip-button {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  max-width: 100%;\n  border: 1px solid #d7ebe0;\n  border-radius: 999px;\n  background: #f7fcfa;\n  color: #29483c;\n  padding: 8px 12px;\n  font: inherit;\n  cursor: pointer;\n  transition: border-color 120ms ease, background 120ms ease, transform 120ms ease;\n}\n\n.composer-chip-button:hover:not(:disabled) {\n  transform: translateY(-1px);\n  border-color: #bddfd0;\n}\n\n.composer-chip-button.active {\n  border-color: #a4ebcb;\n  background: #effcf5;\n}\n\n.composer-chip-button.has-value .composer-chip-value {\n  color: #0d6b46;\n}\n\n.composer-chip-button.attention {\n  border-color: #f0d8c2;\n  background: #fff6ed;\n  color: #8c5723;\n}\n\n.composer-chip-label {\n  color: #708178;\n  font-size: 0.78rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n.composer-chip-value {\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  font-weight: 600;\n}\n\n.project-launch-strip {\n  display: inline-flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 8px;\n}\n\n.project-launch-button {\n  width: 38px;\n  height: 38px;\n  border: 1px solid #d7ebe0;\n  border-radius: 999px;\n  background: #f7fcfa;\n  color: #2b5b48;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0;\n  cursor: pointer;\n  transition: border-color 120ms ease, background 120ms ease, transform 120ms ease, color 120ms ease;\n}\n\n.project-launch-button svg {\n  width: 18px;\n  height: 18px;\n}\n\n.project-launch-button:hover:not(:disabled) {\n  transform: translateY(-1px);\n  border-color: #bddfd0;\n  background: #effcf5;\n  color: #0d6b46;\n}\n\n.project-launch-button:disabled {\n  opacity: 0.42;\n  cursor: not-allowed;\n}\n\n.project-launch-button.opening {\n  border-color: #a4ebcb;\n  background: #effcf5;\n  color: #0d6b46;\n}\n\n.toolbar-spinner {\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n.composer-popover {\n  border: 1px solid var(--border);\n  border-radius: 14px;\n  background: #fbfdfc;\n  padding: 12px;\n  display: grid;\n  gap: 10px;\n}\n\n.composer-popover-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n.settings-popover {\n  background: #f9fcfb;\n}\n\n.summary-pill-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n.summary-pill {\n  display: inline-flex;\n  align-items: center;\n  border-radius: 999px;\n  border: 1px solid #d7ebe0;\n  background: #f7fcfa;\n  padding: 7px 12px;\n  color: #315145;\n  font-size: 0.82rem;\n  font-weight: 600;\n}\n\n.summary-pill.tone-success {\n  border-color: #b9ecd3;\n  background: #effcf5;\n  color: #18754f;\n}\n\n.summary-pill.tone-warning {\n  border-color: #f0d8c2;\n  background: #fff6ed;\n  color: #8c5723;\n}\n\n.summary-pill.tone-neutral {\n  border-color: #dde7e2;\n  background: #f7f9f8;\n  color: #506059;\n}\n\n.composer-section {\n  display: grid;\n  gap: 8px;\n}\n\n.composer-section textarea.input {\n  min-height: 180px;\n}\n\n.composer-input-wrap {\n  position: relative;\n}\n\n.minimal-input {\n  min-height: 220px;\n  border-radius: 18px;\n  padding: 18px;\n  font-size: 1rem;\n  line-height: 1.55;\n}\n\n.row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 10px;\n}\n\n.row.compact .input {\n  flex: 1;\n  min-width: 280px;\n}\n\n.field-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 10px;\n}\n\n.field-label {\n  margin-bottom: 6px;\n  display: block;\n  color: #3e3e3e;\n  font-size: 0.85rem;\n  font-weight: 600;\n}\n\n.input {\n  width: 100%;\n  border: 1px solid var(--border);\n  border-radius: 12px;\n  padding: 11px 12px;\n  font: inherit;\n  color: var(--text);\n  background: #ffffff;\n  transition: border-color 120ms ease, box-shadow 120ms ease;\n}\n\n.input:focus {\n  outline: none;\n  border-color: rgba(41, 222, 146, 0.82);\n  box-shadow: 0 0 0 3px rgba(41, 222, 146, 0.2);\n}\n\ntextarea.input {\n  resize: vertical;\n  min-height: 84px;\n}\n\n.button {\n  border: none;\n  border-radius: 999px;\n  padding: 11px 18px;\n  background-image: radial-gradient(circle farthest-side at 0% 0%, var(--brand-green), var(--brand-cyan));\n  color: #ffffff;\n  font: inherit;\n  font-weight: 600;\n  cursor: pointer;\n  transition: transform 120ms ease, box-shadow 150ms ease, opacity 120ms ease;\n  box-shadow: 0 8px 20px rgba(41, 222, 146, 0.26);\n}\n\n.button:hover:not(:disabled) {\n  transform: translateY(-1px);\n  box-shadow: 0 12px 24px rgba(41, 222, 146, 0.35);\n}\n\n.button:disabled {\n  opacity: 0.56;\n  cursor: not-allowed;\n  box-shadow: none;\n}\n\n.button.secondary {\n  background: #ffffff;\n  color: var(--text);\n  border: 1px solid var(--border);\n  box-shadow: none;\n}\n\n.button.danger {\n  background: var(--danger);\n  box-shadow: none;\n}\n\n.button.tiny {\n  padding: 7px 12px;\n  font-size: 0.78rem;\n}\n\n.toggle-label {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.85rem;\n  color: var(--text-secondary, #999);\n  cursor: pointer;\n  user-select: none;\n}\n\n.status-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 10px;\n}\n\n.status-tile {\n  border: 1px solid var(--border);\n  border-radius: 12px;\n  background: var(--surface-soft);\n  padding: 10px;\n  display: grid;\n  gap: 4px;\n}\n\n.status-label {\n  font-size: 0.75rem;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #6a6a6a;\n}\n\n.meta {\n  color: var(--muted);\n  font-size: 0.84rem;\n}\n\n.summary-text {\n  color: #3f3f3f;\n  font-size: 0.92rem;\n}\n\n.error-inline {\n  color: var(--danger);\n  font-size: 0.9rem;\n}\n\n.ok {\n  color: #228a56;\n}\n\n.warn {\n  color: #9f3a3a;\n}\n\n.project-summary {\n  border: 1px dashed #cde8da;\n  border-radius: 12px;\n  background: #f6fdf9;\n  padding: 10px;\n  display: grid;\n  gap: 8px;\n}\n\n.project-summary-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n}\n\n.project-summary-prominent {\n  border-style: solid;\n  gap: 12px;\n}\n\n.compact-project-summary {\n  gap: 10px;\n}\n\n.project-heading {\n  min-width: 0;\n  display: grid;\n  gap: 2px;\n}\n\n.project-name-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.project-rename-row {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.project-rename-input {\n  font-size: 0.95rem;\n  font-weight: 600;\n  padding: 3px 8px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--bg);\n  color: var(--fg);\n  min-width: 0;\n  flex: 1;\n}\n\n.project-path-meta {\n  word-break: break-word;\n}\n\n.chip-list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 7px;\n}\n\n.chip {\n  border-radius: 999px;\n  border: 1px solid #d7ebe0;\n  background: #ffffff;\n  padding: 4px 9px;\n  color: #4a4a4a;\n  font-size: 0.8rem;\n}\n\n.chip-selectable {\n  cursor: pointer;\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  user-select: none;\n  transition: opacity 0.15s, border-color 0.15s;\n}\n\n.chip-selectable input[type=\"checkbox\"] {\n  margin: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  width: 14px;\n  height: 14px;\n  border: 1.5px solid #aaa;\n  border-radius: 3px;\n  background: #fff;\n  cursor: pointer;\n  position: relative;\n  flex-shrink: 0;\n}\n\n.chip-selectable input[type=\"checkbox\"]:checked {\n  border-color: #4a4a4a;\n  background: #fff;\n}\n\n.chip-selectable input[type=\"checkbox\"]:checked::after {\n  content: '✓';\n  position: absolute;\n  top: -1px;\n  left: 1px;\n  font-size: 11px;\n  color: #4a4a4a;\n  font-weight: bold;\n}\n\n.chip-deselected {\n  opacity: 0.45;\n  border-color: #e0e0e0;\n}\n\n.project-ide-tools {\n  margin-top: 8px;\n  border-top: 1px dashed #cde8da;\n  padding-top: 10px;\n  display: grid;\n  gap: 8px;\n}\n\n.project-settings-grid {\n  margin-top: 8px;\n  display: grid;\n  gap: 8px;\n}\n\n.field-label-inline {\n  display: grid;\n  grid-template-columns: 110px 1fr;\n  align-items: center;\n  gap: 8px;\n  font-size: 0.85rem;\n  color: #4a4a4a;\n}\n\n.icon-section {\n  margin-top: 8px;\n  border-top: 1px dashed #cde8da;\n  padding-top: 10px;\n  display: grid;\n  gap: 8px;\n}\n\n.icon-row {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n}\n\n.icon-preview {\n  width: 80px;\n  height: 80px;\n  border-radius: 16px;\n  border: 1px solid #d7ebe0;\n  object-fit: cover;\n}\n\n.icon-placeholder {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #f5f5f5;\n  color: #999;\n  font-size: 0.75rem;\n}\n\n.icon-ref-wrapper {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 2px;\n}\n\n.icon-ref-preview {\n  width: 56px;\n  height: 56px;\n  border-radius: 8px;\n  border: 1px solid #d7ebe0;\n  object-fit: cover;\n}\n\n.icon-ref-clear {\n  position: absolute;\n  top: -6px;\n  right: -6px;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  border: 1px solid #ccc;\n  background: #fff;\n  color: #666;\n  font-size: 12px;\n  line-height: 1;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0;\n}\n\n.icon-progress {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.icon-progress-bar {\n  height: 4px;\n  border-radius: 2px;\n  background: linear-gradient(90deg, #d7ebe0 0%, #4caf50 50%, #d7ebe0 100%);\n  background-size: 200% 100%;\n  animation: icon-progress-slide 1.5s ease-in-out infinite;\n}\n\n@keyframes icon-progress-slide {\n  0% { background-position: 200% 0; }\n  100% { background-position: -200% 0; }\n}\n\n.project-tools-disclosure {\n  border-top: 1px dashed #cde8da;\n  padding-top: 10px;\n}\n\n.project-history-section {\n  border-top: 1px dashed #cde8da;\n  padding-top: 10px;\n  display: grid;\n  gap: 10px;\n}\n\n.project-tools-disclosure summary {\n  list-style: none;\n  cursor: pointer;\n  font-weight: 700;\n  color: #24533f;\n}\n\n.project-tools-disclosure summary::-webkit-details-marker {\n  display: none;\n}\n\n.project-tools-disclosure summary::after {\n  content: 'Show';\n  margin-left: 10px;\n  color: var(--muted);\n  font-size: 0.8rem;\n  font-weight: 500;\n}\n\n.project-tools-disclosure[open] summary::after {\n  content: 'Hide';\n}\n\n.empty-inline-state {\n  border: 1px dashed #cfe0d7;\n  border-radius: 14px;\n  background: #f7faf8;\n  padding: 14px;\n  display: grid;\n  gap: 4px;\n}\n\n.history-list {\n  display: grid;\n  gap: 6px;\n}\n\n.run-history-list {\n  max-height: 340px;\n  overflow: auto;\n  padding-right: 4px;\n  display: grid;\n  gap: 10px;\n}\n\n.project-history-list {\n  max-height: 260px;\n}\n\n.compact-empty-state {\n  padding: 12px;\n}\n\n.history-item {\n  width: 100%;\n  border: 1px solid #e1ebe5;\n  border-radius: 12px;\n  background: #ffffff;\n  padding: 10px 12px;\n  text-align: left;\n  color: inherit;\n  cursor: pointer;\n  display: grid;\n  gap: 3px;\n}\n\n.history-item.current {\n  border-color: #a4ebcb;\n  background: #f2fdf7;\n}\n\n.history-item-title {\n  font-size: 0.92rem;\n  font-weight: 600;\n}\n\n.history-item-meta {\n  color: var(--muted);\n  font-size: 0.78rem;\n  word-break: break-word;\n}\n\n.run-history-item {\n  width: 100%;\n  border: 1px solid #dfe8e3;\n  border-radius: 14px;\n  background: #ffffff;\n  padding: 12px;\n  text-align: left;\n  color: inherit;\n  font: inherit;\n  cursor: pointer;\n  display: grid;\n  gap: 8px;\n  transition: border-color 120ms ease, background 120ms ease, transform 120ms ease;\n}\n\n.run-history-item:hover {\n  border-color: #bee7d2;\n  background: #fbfffd;\n  transform: translateY(-1px);\n}\n\n.run-history-item.optimistic {\n  border-color: #a8e6cb;\n  background: #f3fff8;\n  cursor: default;\n  transform: none;\n}\n\n.run-history-item-head {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 12px;\n}\n\n.run-history-item-title {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  min-width: 0;\n  font-weight: 700;\n}\n\n.run-history-item-instructions {\n  margin: 0;\n  color: var(--text);\n  font-size: 0.95rem;\n  line-height: 1.45;\n}\n\n.run-history-item-summary {\n  margin: 0;\n  color: #496056;\n  font-size: 0.83rem;\n  line-height: 1.45;\n}\n\n.run-history-item-meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px 12px;\n  color: var(--muted);\n  font-size: 0.78rem;\n}\n\n.run-history-item-attachments {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n\n.history-attachment-chip {\n  display: inline-flex;\n  align-items: center;\n  border: 1px solid #dbe6e0;\n  border-radius: 999px;\n  background: #f7faf8;\n  color: #415248;\n  padding: 4px 8px;\n  font-size: 0.76rem;\n  line-height: 1;\n}\n\n.history-spinner {\n  width: 14px;\n  height: 14px;\n  border-radius: 999px;\n  border: 2px solid rgba(28, 174, 116, 0.2);\n  border-top-color: #1cae74;\n  animation: history-spin 0.8s linear infinite;\n  flex: 0 0 auto;\n}\n\n@keyframes history-spin {\n  from {\n    transform: rotate(0deg);\n  }\n\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.composer-note {\n  margin-top: -4px;\n}\n\n.ide-diagnostics {\n  display: grid;\n  gap: 3px;\n}\n\n.chatgpt-callout {\n  border: 1px solid #9aecc8;\n  border-radius: 14px;\n  background: linear-gradient(135deg, rgba(41, 222, 146, 0.12), rgba(41, 222, 211, 0.11));\n  padding: 12px;\n  display: grid;\n  gap: 6px;\n}\n\n.chatgpt-callout h3 {\n  margin: 0;\n  font-size: 1rem;\n}\n\n.chatgpt-callout p {\n  color: #2f4d41;\n}\n\n.chatgpt-callout ol {\n  margin: 0;\n  padding-left: 20px;\n  color: #2f4d41;\n  display: grid;\n  gap: 3px;\n}\n\n.auth-connection-card {\n  border: 1px solid #9aecc8;\n  border-radius: 12px;\n  background: rgba(255, 255, 255, 0.72);\n  padding: 10px;\n  display: grid;\n  gap: 4px;\n}\n\n.auth-connection-card.disconnected {\n  border-color: #e1c4c4;\n}\n\n.provider-keys {\n  border: 1px solid var(--border);\n  border-radius: 12px;\n  background: #fcfffd;\n  padding: 10px;\n}\n\n.provider-keys summary {\n  cursor: pointer;\n  font-weight: 600;\n}\n\n.provider-keys-grid {\n  margin-top: 10px;\n}\n\n.provider-key-item {\n  border: 1px solid transparent;\n  border-radius: 12px;\n  padding: 8px;\n  background: #ffffff;\n}\n\n.provider-key-item.active {\n  border-color: #a4ebcb;\n  background: #f3fcf7;\n}\n\n.instruction-attachments {\n  border: 1px solid var(--border);\n  border-radius: 12px;\n  background: #fcfffd;\n  padding: 10px;\n  display: grid;\n  gap: 8px;\n}\n\n.context-panel {\n  border: 1px solid var(--border);\n  border-radius: 14px;\n  background: #fcfffd;\n  padding: 12px;\n  display: grid;\n  gap: 10px;\n}\n\n.composer-error {\n  margin-top: -4px;\n}\n\n.composer-footer {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 12px;\n}\n\n.composer-footer-copy {\n  flex: 1;\n  min-width: 240px;\n  display: grid;\n  gap: 8px;\n}\n\n.composer-actions {\n  justify-content: flex-end;\n}\n\n.minimal-composer-footer {\n  align-items: center;\n}\n\n.minimal-meta {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.attachment-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: grid;\n  gap: 8px;\n}\n\n.attachment-item {\n  border: 1px solid var(--border);\n  border-radius: 10px;\n  background: #ffffff;\n  padding: 8px 10px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n.attachment-item.oversize {\n  border-color: #efb1b1;\n  background: #fff8f8;\n}\n\n.attachment-item-copy {\n  min-width: 0;\n  display: grid;\n  gap: 2px;\n}\n\n.attachment-name {\n  font-size: 0.88rem;\n  font-weight: 600;\n  word-break: break-word;\n}\n\n.attachment-meta {\n  color: var(--muted);\n  font-size: 0.78rem;\n  word-break: break-word;\n}\n\n.run-status {\n  border-radius: 999px;\n  padding: 4px 11px;\n  font-size: 0.76rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n.status-idle {\n  background: #edf0f1;\n  color: #586069;\n}\n\n.status-running {\n  background: #e3f9ef;\n  color: #0c8050;\n}\n\n.status-completed {\n  background: #daf7e8;\n  color: #146642;\n}\n\n.status-failed {\n  background: #fde8e8;\n  color: #8d2f2f;\n}\n\n.status-cancelled {\n  background: #fff2dd;\n  color: #8b5f17;\n}\n\n.changed-files {\n  border: 1px solid var(--border);\n  border-radius: 12px;\n  padding: 9px;\n  background: #ffffff;\n}\n\n.changed-files summary {\n  cursor: pointer;\n  font-weight: 600;\n}\n\n.changed-files ul {\n  margin: 10px 0 0;\n  padding-left: 20px;\n  max-height: 220px;\n  overflow: auto;\n}\n\n.checkbox-row {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  color: #565656;\n  font-size: 0.82rem;\n}\n\n.console {\n  border-radius: 12px;\n  border: 1px solid #202020;\n  background: #121212;\n  color: #e7f1ea;\n  min-height: 280px;\n  max-height: 420px;\n  overflow: auto;\n  padding: 10px;\n}\n\n.console-line {\n  margin: 0;\n  font-family: 'SF Mono', Menlo, Consolas, monospace;\n  font-size: 0.78rem;\n  line-height: 1.45;\n  white-space: pre-wrap;\n}\n\n.console-line.partial {\n  opacity: 0.84;\n}\n\n.console-heading {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n  font-weight: 600;\n}\n\n.console-heading.heading-1 {\n  font-size: 0.92rem;\n}\n\n.console-heading.heading-2 {\n  font-size: 0.86rem;\n}\n\n.console-heading.heading-3 {\n  font-size: 0.8rem;\n}\n\n.console-heading.heading-4,\n.console-heading.heading-5,\n.console-heading.heading-6 {\n  font-size: 0.76rem;\n}\n\n.console-markdown {\n  margin: 0;\n  font-size: 0.78rem;\n  line-height: 1.45;\n  font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n  white-space: pre-wrap;\n}\n\n.console-markdown code {\n  background: rgba(255, 255, 255, 0.12);\n  border: 1px solid rgba(255, 255, 255, 0.16);\n  border-radius: 6px;\n  padding: 1px 4px;\n  font-family: 'SF Mono', Menlo, Consolas, monospace;\n  font-size: 0.74rem;\n}\n\n.console-markdown a {\n  color: #7dd8ba;\n  text-decoration: underline;\n}\n\n.placeholder {\n  color: #9ec2ae;\n  font-size: 0.86rem;\n}\n\n.input-panel {\n  border: 1px solid var(--border);\n  border-radius: 12px;\n  background: #f7fcfa;\n  padding: 10px;\n  margin-top: 12px;\n  display: grid;\n  gap: 10px;\n}\n\n.input-panel h3 {\n  font-size: 1rem;\n}\n\n.settings-card {\n  gap: 16px;\n}\n\n.settings-grid {\n  display: grid;\n  grid-template-columns: minmax(0, 1.1fr) minmax(300px, 0.9fr);\n  gap: 12px;\n}\n\n.settings-panel {\n  border: 1px solid var(--border);\n  border-radius: 14px;\n  background: #f9fcfb;\n  padding: 14px;\n  display: grid;\n  gap: 12px;\n}\n\n.settings-panel-header {\n  display: grid;\n  gap: 4px;\n}\n\n.settings-panel h3 {\n  font-size: 1rem;\n}\n\n.meta-text {\n  color: var(--muted);\n  font-size: 0.88rem;\n}\n\n.question-list {\n  display: grid;\n  gap: 12px;\n}\n\n.question-item {\n  border: 1px solid var(--border);\n  border-radius: 10px;\n  background: #ffffff;\n  padding: 10px;\n  display: grid;\n  gap: 8px;\n}\n\n.question-item-title {\n  font-weight: 600;\n}\n\n.option-list {\n  display: grid;\n  gap: 6px;\n}\n\n.option-button {\n  border: 1px solid var(--border);\n  border-radius: 10px;\n  background: #ffffff;\n  color: var(--text);\n  padding: 9px 10px;\n  text-align: left;\n  cursor: pointer;\n  display: grid;\n  gap: 2px;\n}\n\n.option-button.selected {\n  border-color: #93e9c3;\n  background: #f2fdf7;\n}\n\n.option-button-label {\n  font-size: 0.9rem;\n  font-weight: 600;\n}\n\n.option-button-description {\n  font-size: 0.8rem;\n  color: var(--muted);\n}\n\n@media (max-width: 880px) {\n  .topbar {\n    height: 72px;\n  }\n\n  .topbar-inner {\n    padding: 0 12px;\n  }\n\n  .topbar-links {\n    display: none;\n  }\n\n  .topbar-cta {\n    padding: 9px 13px;\n    font-size: 0.82rem;\n  }\n\n  .brand-header {\n    padding: 16px;\n    flex-direction: column;\n    align-items: flex-start;\n  }\n\n  .field-grid,\n  .status-grid,\n  .settings-grid {\n    grid-template-columns: 1fr;\n  }\n\n  .page {\n    padding: 16px 12px 32px;\n  }\n\n  .card {\n    padding: 12px;\n  }\n\n  .brand-actions,\n  .composer-footer,\n  .composer-actions,\n  .composer-toolbar {\n    width: 100%;\n  }\n\n  .composer-actions {\n    justify-content: flex-start;\n  }\n\n  .composer-toolbar-primary {\n    width: 100%;\n  }\n\n  .composer-toolbar-actions {\n    justify-content: flex-start;\n  }\n}\n"
  },
  {
    "path": "web/src/types/opencode.ts",
    "content": "export type OpenAIAuthMode = 'api-key' | 'codex-jwt' | 'opencode-config';\nexport type AuthProviderID = 'chatgpt';\n\nexport type ProviderID =\n  | 'ollama'\n  | 'xai'\n  | 'fireworks'\n  | 'openrouter'\n  | 'opencode'\n  | 'openai'\n  | 'anthropic'\n  | 'google';\n\nexport type ProviderKeyField =\n  | 'openaiKey'\n  | 'anthropicKey'\n  | 'geminiKey'\n  | 'fireworksKey'\n  | 'openrouterKey'\n  | 'opencodeZenKey'\n  | 'xaiKey'\n  | 'elevenLabsKey';\n\nexport interface ProviderKeyState {\n  openaiKey: string;\n  anthropicKey: string;\n  geminiKey: string;\n  fireworksKey: string;\n  openrouterKey: string;\n  opencodeZenKey: string;\n  xaiKey: string;\n  elevenLabsKey: string;\n}\n\nexport interface OpenCodeHealthResponse {\n  healthy: boolean;\n  server?: string;\n  error?: string;\n  hint?: string;\n}\n\nexport interface OpenCodeAuthStatus {\n  serverRunning: boolean;\n  configuredDataHome: string;\n  configuredStateHome: string;\n  authFilePath: string;\n  openaiCredentialType: 'none' | 'oauth' | 'api' | 'unknown';\n  cachedGlowbomAuthMode: 'api-key' | 'codex-jwt' | 'opencode-config' | 'unknown';\n}\n\nexport interface OpenCodeAuthConnectRequest {\n  projectPath?: string;\n  openaiKey?: string;\n  openaiRefreshToken?: string;\n  openaiExpiresAt?: number;\n}\n\nexport interface OpenCodeAuthDisconnectRequest {\n  projectPath?: string;\n}\n\nexport interface OpenCodeAuthConnectionResponse {\n  success: boolean;\n  provider: AuthProviderID;\n  connected: boolean;\n  status: OpenCodeAuthStatus;\n  error?: string;\n}\n\nexport interface OpenCodeAuthOAuthStartRequest {\n  projectPath?: string;\n}\n\nexport interface OpenCodeAuthOAuthStartResponse {\n  success: boolean;\n  provider: AuthProviderID;\n  state: string;\n  authorizationURL: string;\n  redirectURI: string;\n  error?: string;\n}\n\nexport interface OpenCodeAuthOAuthStatusResponse {\n  success: boolean;\n  provider: AuthProviderID;\n  state: string;\n  phase: 'pending' | 'succeeded' | 'failed';\n  connected: boolean;\n  status: OpenCodeAuthStatus;\n  error?: string;\n}\n\nexport interface GlowbomTarget {\n  enabled?: boolean;\n  outputDir?: string;\n  lastBuild?: string;\n  stack?: string;\n  status?: string;\n  error?: string;\n}\n\nexport interface OpenCodeProject {\n  name: string;\n  version: string;\n  description?: string;\n  bundleID?: string;\n  displayName?: string;\n  buildNumber?: string;\n  targets: Record<string, GlowbomTarget>;\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport interface OpenCodeProjectSettingsRequest {\n  path: string;\n  bundleID?: string;\n  displayName?: string;\n  buildNumber?: string;\n  version?: string;\n}\n\nexport interface OpenCodeProjectSettingsResponse {\n  success: boolean;\n  project?: OpenCodeProject;\n  error?: string;\n}\n\nexport interface OpenCodeGenerateIconRequest {\n  path: string;\n  prompt: string;\n  imageSource?: string;\n  openaiKey?: string;\n  geminiKey?: string;\n  xaiKey?: string;\n  referenceImage?: string;\n}\n\nexport interface OpenCodeGenerateIconResponse {\n  success: boolean;\n  iconPath?: string;\n  sourceService?: string;\n  image?: string;\n  error?: string;\n}\n\nexport interface OpenCodeProjectEnvelope {\n  success: boolean;\n  project?: OpenCodeProject;\n  paths?: Record<string, string>;\n  existingTargets?: string[];\n  error?: string;\n}\n\nexport interface OpenCodeProjectPickResponse {\n  success: boolean;\n  path?: string;\n  canceled?: boolean;\n  source?: string;\n  error?: string;\n}\n\nexport interface OpenCodeInstructionPickedFile {\n  path: string;\n  name: string;\n  sizeBytes: number;\n  mimeType?: string;\n}\n\nexport type OpenCodeHistoryStatus = 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport interface OpenCodeProjectHistoryAttachment extends OpenCodeInstructionPickedFile {\n  filename: string;\n  mediaType?: string;\n  relativePath?: string;\n}\n\nexport interface OpenCodeProjectHistoryEntry {\n  id: string;\n  timestamp: string;\n  instructions: string;\n  taskType: string;\n  status?: OpenCodeHistoryStatus | string;\n  outputSummary?: string;\n  folderName: string;\n  missingAttachmentCount?: number;\n  attachments?: OpenCodeProjectHistoryAttachment[];\n}\n\nexport interface OpenCodeProjectHistoryResponse {\n  success: boolean;\n  path?: string;\n  entries?: OpenCodeProjectHistoryEntry[];\n  error?: string;\n}\n\nexport interface OpenCodeInstructionFilesPickResponse {\n  success: boolean;\n  files?: OpenCodeInstructionPickedFile[];\n  canceled?: boolean;\n  source?: string;\n  error?: string;\n}\n\nexport type OpenCodeIDE = 'finder' | 'xcode' | 'android-studio' | 'vscode';\n\nexport interface OpenCodeProjectIDEAction {\n  ide: OpenCodeIDE;\n  label: string;\n  available: boolean;\n  path?: string;\n  reason?: string;\n}\n\nexport interface OpenCodeProjectIDEStatusResponse {\n  success: boolean;\n  path?: string;\n  actions?: OpenCodeProjectIDEAction[];\n  error?: string;\n}\n\nexport interface OpenCodeProjectOpenRequest {\n  path: string;\n  ide: OpenCodeIDE;\n}\n\nexport interface OpenCodeProjectOpenResponse {\n  success: boolean;\n  ide?: OpenCodeIDE;\n  openedPath?: string;\n  error?: string;\n}\n\nexport interface OpenCodeAgentRequest {\n  projectPath: string;\n  sessionID?: string;\n  instructions?: string;\n  persistCurrentInstructionsToHistory?: boolean;\n  instructionAttachmentPaths?: string[];\n  model?: string;\n  openaiKey?: string;\n  openaiAuthMode?: OpenAIAuthMode;\n  openaiRefreshToken?: string;\n  openaiExpiresAt?: number;\n  anthropicKey?: string;\n  geminiKey?: string;\n  fireworksKey?: string;\n  openrouterKey?: string;\n  opencodeZenKey?: string;\n  xaiKey?: string;\n  elevenLabsKey?: string;\n  imageSource?: string;\n}\n\nexport interface OpenCodeQuestionOption {\n  id: string;\n  label: string;\n  description: string;\n}\n\nexport interface OpenCodeQuestionItem {\n  id: string;\n  prompt: string;\n  options: OpenCodeQuestionOption[];\n  inputType?: string;\n}\n\nexport interface OpenCodeQuestion {\n  id: string;\n  sessionID: string;\n  prompt: string;\n  options: OpenCodeQuestionOption[];\n  questions: OpenCodeQuestionItem[];\n}\n\nexport interface OpenCodePermission {\n  id: string;\n  sessionID: string;\n  title: string;\n  type: string;\n  message: string;\n  pattern: string;\n}\n\nexport interface OpenCodeQuestionRespondRequest {\n  sessionID: string;\n  questionID: string;\n  answer: string;\n  projectPath?: string;\n  answers?: string[][];\n  answerByQuestionID?: Record<string, string[]>;\n}\n\nexport interface OpenCodePermissionRespondRequest {\n  sessionID: string;\n  permissionID: string;\n  response: 'once' | 'always' | 'reject';\n  projectPath?: string;\n}\n\nexport interface OpenCodeSseEvent {\n  output?: string;\n  outputChunk?: string;\n  done?: boolean;\n  success?: boolean;\n  error?: string;\n  files?: number;\n  changedFiles?: string[];\n  question?: unknown;\n  permission?: unknown;\n  [key: string]: unknown;\n}\n\nexport interface OpenAIModelsRequest {\n  projectPath?: string;\n  openaiKey?: string;\n  openaiAuthMode: OpenAIAuthMode;\n  openaiRefreshToken?: string;\n  openaiExpiresAt?: number;\n}\n\nexport interface OpenAIModelsResponseModel {\n  id: string;\n  displayName: string;\n}\n\nexport interface OpenAIModelsResponseDebug {\n  authMode: string;\n  providerFound: boolean;\n  providerModelCount: number;\n  providerModelSample?: string[];\n  allowlistModelIDs: string[];\n  matchedModelIDs: string[];\n  usedFallbackAllowlist: boolean;\n}\n\nexport interface OpenAIModelsResponse {\n  provider: string;\n  source: string;\n  models: OpenAIModelsResponseModel[];\n  fetchedAt: string;\n  debug?: OpenAIModelsResponseDebug;\n}\n\nexport interface OpenCodeAvailableModelsRequest {\n  projectPath?: string;\n  openaiKey?: string;\n  openaiAuthMode?: OpenAIAuthMode;\n  openaiRefreshToken?: string;\n  openaiExpiresAt?: number;\n  anthropicKey?: string;\n  geminiKey?: string;\n  fireworksKey?: string;\n  openrouterKey?: string;\n  opencodeZenKey?: string;\n  xaiKey?: string;\n}\n\nexport interface OpenCodeAvailableProviderModel {\n  id: string;\n  displayName: string;\n}\n\nexport interface OpenCodeAvailableProvider {\n  id: string;\n  displayName: string;\n  models: OpenCodeAvailableProviderModel[];\n}\n\nexport interface OpenCodeAvailableModelsResponse {\n  source: string;\n  providers: OpenCodeAvailableProvider[];\n  fetchedAt: string;\n}\n\nexport interface ModelCatalogProvider {\n  id: ProviderID;\n  label: string;\n  requiresKey: boolean;\n  keyField?: ProviderKeyField;\n  keyLabel?: string;\n}\n\nexport interface ModelCatalogEntry {\n  providerId: ProviderID;\n  id: string;\n  label: string;\n  description: string;\n  isDynamic?: boolean;\n}\n\nexport interface ModelCatalogGroup {\n  provider: ModelCatalogProvider;\n  models: ModelCatalogEntry[];\n}\n\nexport interface ResolvedRefineModel {\n  providerId: ProviderID;\n  modelId: string;\n  value: string;\n  label: string;\n}\n"
  },
  {
    "path": "web/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"allowJs\": false,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"jsx\": \"react-jsx\",\n    \"types\": [\"vite/client\"],\n    \"noEmit\": true\n  },\n  \"include\": [\"src\"]\n}\n"
  },
  {
    "path": "web/vite.config.ts",
    "content": "import react from '@vitejs/plugin-react';\nimport { defineConfig, loadEnv } from 'vite';\n\nexport default defineConfig(({ mode }) => {\n  const env = loadEnv(mode, process.cwd(), '');\n  const backendTarget = env.VITE_BACKEND_TARGET || 'http://127.0.0.1:4569';\n  const appBasePath = env.VITE_APP_BASE_PATH || (mode === 'production' ? './' : '/');\n  const host = env.GLOWBOM_BIND_HOST || env.GLOWBY_BIND_HOST || '127.0.0.1';\n\n  return {\n    base: appBasePath,\n    plugins: [react()],\n    server: {\n      port: 4572,\n      strictPort: true,\n      host,\n      proxy: {\n        '/api': {\n          target: backendTarget,\n          changeOrigin: true,\n          rewrite: (path) => path.replace(/^\\/api/, ''),\n        },\n      },\n    },\n  };\n});\n"
  }
]